function rodape($codMatricula, $nomeAluno, $situacao) { $corTexto = '#000000'; $fonte = 'arial'; $dataAtual = date('d/m/Y'); $this->pdf->escreve_relativo('Data: ' . $dataAtual, 36, $this->page_y + 2, 100, 50, $fonte, 7, $corTexto, 'left'); if (!$this->em_branco) { $this->pdf->escreve_relativo('Estou ciente do aproveitamento de ' . $nomeAluno . ', matrícula nº: ' . $codMatricula . '.', 68, $this->page_y + 12, 600, 50, $fonte, 9, $corTexto, 'left'); /* if ($situacao->aprovado) { $situacao = App_Model_MatriculaSituacao::APROVADO; } elseif ($situacao->andamento) { $situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO; } elseif ($situacao->recuperacao) { $situacao = App_Model_MatriculaSituacao::EM_EXAME; } elseif ($situacao->retidoFalta) { $situacao = App_Model_MatriculaSituacao::RETIDO_FALTA; } else { $situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO; }*/ $situacao = strtoupper(App_Model_MatriculaSituacao::getInstance()->getValue($situacao)); $this->pdf->escreve_relativo('Aluno ' . $situacao, 68, $this->page_y + 62, 600, 50, $fonte, 9, $corTexto, 'center'); } $this->pdf->escreve_relativo('Assinatura do Responsável(a)', 677, $this->page_y + 18, 200, 50, $fonte, 7, $corTexto, 'left'); $this->pdf->linha_relativa(660, $this->page_y + 18, 130, 0, 0.4); }
protected function getMatriculas() { if ($this->canGetMatriculas()) { $matriculas = new clsPmieducarMatricula(); $matriculas->setOrderby('ano DESC, ref_ref_cod_serie DESC, cod_matricula DESC, aprovado'); $matriculas = $matriculas->lista(null, null, null, null, null, null, $this->getRequest()->aluno_id, null, null, null, null, null, 1); $attrs = array('cod_matricula' => 'id', 'ref_cod_instituicao' => 'instituicao_id', 'ref_ref_cod_escola' => 'escola_id', 'ref_cod_curso' => 'curso_id', 'ref_ref_cod_serie' => 'serie_id', 'ref_cod_aluno' => 'aluno_id', 'nome' => 'aluno_nome', 'aprovado' => 'situacao', 'ano'); $matriculas = Portabilis_Array_Utils::filterSet($matriculas, $attrs); foreach ($matriculas as $index => $matricula) { $turma = $this->loadTurmaByMatriculaId($matricula['id']); $matriculas[$index]['aluno_nome'] = $this->toUtf8($matricula['aluno_nome'], array('transform' => true)); $matriculas[$index]['turma_id'] = $turma['id']; $matriculas[$index]['turma_nome'] = $turma['nome']; $matriculas[$index]['escola_nome'] = $this->loadEscolaNome($matricula['escola_id']); $matriculas[$index]['curso_nome'] = $this->loadCursoNome($matricula['curso_id']); $matriculas[$index]['serie_nome'] = $this->loadSerieNome($matricula['serie_id']); $matriculas[$index]['ultima_enturmacao'] = $this->loadNomeTurmaOrigem($matricula['id']); $matriculas[$index]['data_entrada'] = $this->loadTransferenciaDataEntrada($matricula['id']); $matriculas[$index]['data_saida'] = $this->loadTransferenciaDataSaida($matricula['id']); $matriculas[$index]['situacao'] = App_Model_MatriculaSituacao::getInstance()->getValue($matricula['situacao']); $matriculas[$index]['user_can_access'] = Portabilis_Utils_User::canAccessEscola($matricula['escola_id']); $matriculas[$index]['transferencia_em_aberto'] = $this->possuiTransferenciaEmAberto($matricula['id']); } return array('matriculas' => $matriculas); } }
function getAlunoNotasFaltasTable($alunos_matriculados) { $fonte = 'arial'; $corTexto = '#000000'; $esquerda_original = 3; $espessura_linha = 0.3; $tam_texto = 9; $direita = 834; $altura = 20; $obj_serie = new clsPmieducarSerie($this->ref_cod_serie); $det_serie = $obj_serie->detalhe(); $espacoDiv = $this->presencaGeral ? 1 : 2; foreach ($alunos_matriculados as $matricula => $aluno) { $boletim = new Avaliacao_Service_Boletim(array('matricula' => $matricula)); $medias = $boletim->getMediasComponentes(); if ($this->presencaGeral) { // Soma as faltas do aluno $faltas = array_sum(CoreExt_Entity::entityFilterAttr($boletim->getFaltasGerais(), 'etapa', 'quantidade')); } else { $faltas = $boletim->getFaltasComponentes(); } $esquerda = $esquerda_original; // Matrícula $this->pdf->quadrado_relativo($esquerda, $this->page_y, $direita, $altura); $this->pdf->escreve_relativo($matricula, $esquerda, $this->page_y + 2, 45, 45, $fonte, $tam_texto, $corTexto, 'center'); $this->pdf->linha_relativa($esquerda += 45, $this->page_y, 0, $altura); // Nome do aluno $espaco_nome = 150; $this->pdf->escreve_relativo($aluno['nome'], $esquerda, $this->page_y + 2, $espaco_nome, 45, $fonte, $tam_texto, $corTexto, 'center'); $this->pdf->linha_relativa($esquerda += $espaco_nome, $this->page_y, 0, $altura); // Situação da matrícula $this->pdf->escreve_relativo(App_Model_MatriculaSituacao::getInstance()->getValue($aluno['aprovado']), $esquerda, $this->page_y + 4, 45, 45, $fonte, $tam_texto, $corTexto, 'center'); $this->pdf->linha_relativa($esquerda += 45, $this->page_y, 0, $altura); $espacoComponentes = ceil(($direita - $esquerda) / (count($this->componentes) + ($this->presencaGeral ? 1 : 0))); // Exibe as médias e faltas do aluno foreach ($this->componentes as $id => $componente) { // Se não tem média, foi dispensado do componente if (!isset($medias[$id])) { $media = 'D'; $faltas = 'D'; } else { $media = $medias[$id][0]; $media = $media->mediaArredondada; if (!$this->presencaGeral) { if (isset($faltas[$id])) { $faltas = array_sum(CoreExt_Entity::entityFilterAttr($faltas[$id], 'id', 'quantidade')); } } } // Média $this->pdf->escreve_relativo($media, $esquerda, $this->page_y + 4, $espacoComponentes / $espacoDiv, 50, $fonte, $tam_texto + 1, $corTexto, 'center'); $this->pdf->linha_relativa($esquerda + $espacoComponentes / $espacoDiv, $this->page_y, 0, $altura); // Exibe as faltas no componente curricular, caso a presença não seja geral if (!$this->presencaGeral) { $this->pdf->escreve_relativo($faltas, $esquerda + $espacoComponentes / $espacoDiv, $this->page_y + 4, $espacoComponentes / $espacoDiv, 100, $fonte, $tam_texto + 1, $corTexto, 'center'); } $esquerda += $espacoComponentes; $this->pdf->linha_relativa($esquerda, $this->page_y, 0, $altura); } // Exibe as faltas no total, caso a presença seja geral if ($this->presencaGeral) { $this->pdf->escreve_relativo($faltas, $esquerda, $this->page_y + 4, $espacoComponentes, 50, $fonte, $tam_texto + 1, $corTexto, 'center'); $esquerda += $espacoComponentes; $this->pdf->linha_relativa($esquerda, $this->page_y, 0, $altura); } $this->page_y += $altura; if ($this->page_y > $this->pdf->altura - $altura * 2) { $this->pdf->ClosePage(); $this->pdf->OpenPage(); $this->addCabecalho(); } } }
/** * @see clsCadastro#Gerar() */ public function Gerar() { // Dados da matrícula $matricula = $this->_service->getOption('matriculaData'); // Nome do aluno $nome = $matricula['nome']; // Nome da escola $escola = new clsPmieducarEscola($matricula['ref_ref_cod_escola']); $escola = $escola->detalhe(); $escola = ucwords(strtolower($escola['nome'])); // Nome do curso $curso = $matricula['curso_nome']; // Nome da série $serie = $matricula['serie_nome']; // Nome da turma $turma = $matricula['turma_nome']; // Situação da matrícula $situacao = App_Model_MatriculaSituacao::getInstance(); $situacao = $situacao->getValue($matricula['aprovado']); // Dados da matrícula $this->addDetalhe(array('Aluno', $nome)); $this->addDetalhe(array('Escola', $escola)); $this->addDetalhe(array('Curso', $curso)); $this->addDetalhe(array('Série/Turma', $serie . ' / ' . $turma)); $this->addDetalhe(array('Situação', $situacao)); // Booleano para saber se o tipo de nota é nenhum. $nenhumaNota = $this->_service->getRegra()->get('tipoNota') == RegraAvaliacao_Model_Nota_TipoValor::NENHUM; // Booleano para saber o tipo de presença em que ocorre apuração $porComponente = $this->_service->getRegra()->get('tipoPresenca') == RegraAvaliacao_Model_TipoPresenca::POR_COMPONENTE; // Dados da regra de avaliação $this->addDetalhe(array('Regra avaliação', $this->_service->getRegra())); $this->addDetalhe(array('Apuração de falta', $this->_service->getRegra()->tipoPresenca)); $this->addDetalhe(array('Parecer descritivo', $this->_service->getRegra()->parecerDescritivo)); $this->addDetalhe(array('Progressão', $this->_service->getRegra()->tipoProgressao)); if ($nenhumaNota) { $media = 'Não usa nota'; } else { $media = $this->_service->getRegra()->media; } $this->addDetalhe(array('Média', $media)); // Cria um array com a quantidade de etapas de 1 a n $etapas = range(1, $this->_service->getOption('etapas'), 1); // Atributos para a tabela $attributes = array('style' => 'background-color: #A1B3BD; padding: 5px; text-align: center'); // Atributos para a tabela de notas/faltas $zebra = array(0 => array('style' => 'background-color: #E4E9ED'), 1 => array('style' => 'background-color: #FFFFFF')); // Helper para criar links e urls $url = CoreExt_View_Helper_UrlHelper::getInstance(); // Usa helper de tabela para criar a tabela de notas/faltas $table = CoreExt_View_Helper_TableHelper::getInstance(); // Enum para situação de matrícula $situacao = App_Model_MatriculaSituacao::getInstance(); // Situação do boletim do aluno $sit = $this->_situacao; // Títulos da tabela $labels = array(); $labels[] = array('data' => 'Disciplinas', 'attributes' => $attributes); foreach ($etapas as $etapa) { $data = array('data' => sprintf('Etapa %d', $etapa)); if ($nenhumaNota) { $data['colspan'] = 1; } else { $data['colspan'] = $porComponente ? 2 : 1; } $data['attributes'] = $attributes; $labels[] = $data; } // Flag para auxiliar na composição da tabela em casos onde o parecer // descritivo é lançado anualmente e por componente $parecerComponenteAnual = FALSE; $colspan = 0; if ($this->_service->getRegra()->get('parecerDescritivo') == RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE) { if (TRUE == $this->_componenteEncerrado($sit->nota->componentesCurriculares)) { $parecerComponenteAnual = TRUE; $colspan++; } } // Colspan para tabela com labels e sublabels $colspan += $porComponente && $sit->recuperacao ? 4 : 3; if ($nenhumaNota) { $colspan--; } if (!$nenhumaNota) { $labels[] = array('data' => $porComponente ? '' : 'Média', 'attributes' => $attributes, 'colspan' => $porComponente ? $colspan : 1); } // Inclui coluna para % de presença geral. if (!$porComponente) { if ($sit->recuperacao) { $labels[] = array('data' => 'Exame', 'attributes' => $attributes); } if ($parecerComponenteAnual) { $labels[] = array('data' => 'Parecer', 'attributes' => $attributes); } $labels[] = array('data' => 'Presença', 'attributes' => $attributes); $labels[] = array('data' => 'Situação', 'attributes' => $attributes); } $table->addHeaderRow($labels); // Cria sub-header caso tenha faltas lançadas por componentes if ($porComponente) { $subLabels = array(); $subLabels[] = array('attributes' => $attributes); for ($i = 0, $loop = count($etapas); $i < $loop; $i++) { if (!$nenhumaNota) { $subLabels[] = array('data' => 'Nota', 'attributes' => $attributes); } $subLabels[] = array('data' => 'Falta', 'attributes' => $attributes); } if (!$nenhumaNota) { $subLabels[] = array('data' => 'Média', 'attributes' => $attributes); } if ($sit->recuperacao) { $subLabels[] = array('data' => 'Exame', 'attributes' => $attributes); } if ($porComponente) { if ($parecerComponenteAnual) { $subLabels[] = array('data' => 'Parecer', 'attributes' => $attributes); } $subLabels[] = array('data' => 'Presença', 'attributes' => $attributes); $subLabels[] = array('data' => 'Situação', 'attributes' => $attributes); } $table->addHeaderRow($subLabels); } // Atributos usados pelos itens de dados $attributes = array('style' => 'padding: 5px; text-align: center'); // Notas $componentes = $this->_service->getComponentes(); $notasComponentes = $this->_service->getNotasComponentes(); $mediasSituacoes = $this->_situacao->nota; $mediasComponentes = $this->_service->getMediasComponentes(); $faltasComponentes = $this->_service->getFaltasComponentes(); // Calcula as porcentagens de presença $faltasStats = $this->_service->getSituacaoFaltas(); // Texto do link if ($nenhumaNota) { $linkText = 'falta'; $linkPath = 'falta'; } else { $linkText = $porComponente ? 'nota/falta' : 'nota'; $linkPath = 'nota'; } // Parâmetros para o link de nota/falta nova $newLink = array('text' => 'Lançar ' . $linkText, 'path' => $linkPath, 'query' => array('matricula' => $matricula['cod_matricula'], 'componenteCurricular' => 0)); $iteration = 0; foreach ($componentes as $id => $componente) { $data = array(); // Nome do componente curricular $data[] = array('data' => $componente, 'attributes' => array('style' => 'padding: 5px; text-align: left')); $notas = $notasComponentes[$id]; $mediaSituacao = $mediasSituacoes->componentesCurriculares[$id]; $medias = $mediasComponentes[$id]; $faltas = $faltasComponentes[$id]; $faltaStats = $faltasStats->componentesCurriculares[$id]; $parecer = NULL; // Caso os pareceres sejam por componente e anuais, recupera a instância if ($parecerComponenteAnual) { $parecer = $this->_service->getPareceresComponentes(); $parecer = $parecer[$id]; } if ($porComponente == TRUE) { $new = $url->l('Lançar nota', 'nota', array('query' => array('matricula' => $matricula['cod_matricula'], 'componenteCurricular' => $id))); } $newLink['query']['componenteCurricular'] = $id; $new = $url->l($newLink['text'], $newLink['path'], array('query' => $newLink['query'])); $update = array('query' => array('matricula' => $matricula['cod_matricula'], 'componenteCurricular' => $id, 'etapa' => 0)); // Lista as notas do componente por etapa for ($i = 0, $loop = count($etapas); $i < $loop; $i++) { $nota = $falta = NULL; if (isset($notas[$i])) { $update['query']['etapa'] = $notas[$i]->etapa; $nota = $url->l($notas[$i]->notaArredondada, 'nota', $update); } if (isset($faltas[$i])) { $update['query']['etapa'] = $faltas[$i]->etapa; $linkPath = $nenhumaNota ? 'falta' : 'nota'; $falta = $url->l($faltas[$i]->quantidade, $linkPath, $update); } /* * Exibição muito dinâmica. Em resumo, os casos são: * * 1. nota & falta componente * 2. nota * 3. falta componente * 4. falta geral */ if ($nenhumaNota) { $colspan = 1; } elseif (!$nenhumaNota && $porComponente && is_null($falta)) { $colspan = 2; } else { $colspan = 1; } // Caso 1. if (!$nenhumaNota) { if ($nota) { // Caso 2: resolvido com colspan. $data[] = array('data' => $nota, 'attributes' => $attributes, 'colspan' => $colspan); if ($porComponente) { $data[] = array('data' => $falta, 'attributes' => $attributes); } } else { $data[] = array('data' => $new, 'attributes' => $attributes, 'colspan' => $colspan); $new = ''; } } elseif ($nenhumaNota && $porComponente) { if ($falta) { $data[] = array('data' => $falta, 'attributes' => $attributes, 'colspan' => $colspan); } else { $data[] = array('data' => $new, 'attributes' => $attributes, 'colspan' => $colspan); $new = ''; } } else { $data[] = array('data' => '', 'attributes' => $attributes); } } // Média no componente curricular if (!$nenhumaNota) { $media = $medias[0]->mediaArredondada . ($medias[0]->etapa == 'Rc' ? ' (Rc)' : ''); $data[] = array('data' => $media, 'attributes' => $attributes); } // Adiciona uma coluna extra caso aluno esteja em exame em alguma componente curricular if ($sit->recuperacao) { if ($mediaSituacao->situacao == App_Model_MatriculaSituacao::EM_EXAME || $mediaSituacao->situacao == App_Model_MatriculaSituacao::APROVADO_APOS_EXAME || $mediaSituacao->situacao == App_Model_MatriculaSituacao::REPROVADO) { $link = $newLink; $link['query']['componenteCurricular'] = $id; $link['query']['etapa'] = 'Rc'; $notaRec = $i; if (isset($notas[$notaRec]) && $notas[$notaRec]->etapa == 'Rc') { $link['text'] = $notas[$notaRec]->notaArredondada; } $recuperacaoLink = $url->l($link['text'], $link['path'], array('query' => $link['query'])); $data[] = array('data' => $recuperacaoLink, 'attributes' => $attributes); } else { $data[] = array('data' => '', 'attributes' => $attributes); } } // Adiciona uma coluna extra caso o parecer seja por componente ao final do ano if ($parecerComponenteAnual) { $link = array('text' => '', 'path' => 'parecer', 'query' => array('matricula' => $this->getRequest()->matricula)); if (0 == count($parecer)) { $text = 'Lançar'; } else { $text = 'Editar'; } $link['query']['componenteCurricular'] = $id; // @todo Constante ou CoreExt_Enum $link['query']['etapa'] = 'An'; $link = $url->l($text, $link['path'], array('query' => $link['query'])); if (isset($mediaSituacao->situacao) && $mediaSituacao->situacao != App_Model_MatriculaSituacao::EM_ANDAMENTO) { $data[] = array('data' => $link, 'attributes' => $attributes); } else { $data[] = array('data' => '', 'attributes' => $attributes); } } // Informações extras como porcentagem de presença e situação do aluno if ($porComponente) { $data[] = array('data' => sprintf('%.2f%%', $faltaStats->porcentagemPresenca), 'attributes' => $attributes); } else { $data[] = array('data' => '', 'attributes' => $attributes); } $data[] = array('data' => $situacao->getValue($mediaSituacao->situacao), 'attributes' => $attributes); $iteration++; $class = $iteration % 2; $table->addBodyRow($data, $zebra[$class]); } $newLink = array('text' => 'Lançar falta', 'path' => 'falta', 'query' => array('matricula' => $matricula['cod_matricula'])); // Situação geral das faltas $data = array(0 => array('data' => 'Faltas', 'attributes' => array('style' => 'padding: 5px; text-align: left'))); $faltas = $this->_service->getFaltasGerais(); $new = $url->l($newLink['text'], $newLink['path'], array('query' => $newLink['query'])); // Listas faltas (para faltas no geral) for ($i = 1, $loop = count($etapas); $i <= $loop; $i++) { if (isset($faltas[$i])) { $link = $newLink; $link['query']['etapa'] = $faltas[$i]->etapa; $link = $porComponente ? '' : $url->l($faltas[$i]->quantidade, $link['path'], array('query' => $link['query'])); $data[] = array('data' => $link, 'attributes' => $attributes); if ($porComponente) { $data[] = array('data' => '', 'attributes' => $attributes); } } else { $new = $porComponente ? '' : $new; $data[] = array('data' => $new, 'attributes' => $attributes); $new = ''; if ($porComponente && !$nenhumaNota) { $data[] = array('data' => '', 'attributes' => $attributes); } } } if (!$nenhumaNota) { $data[] = array(); } if ($sit->recuperacao) { $data[] = array('data' => '', 'attributes' => $attributes); } if ($parecerComponenteAnual) { $data[] = array('data' => '', 'attributes' => $attributes); } // Porcentagem presença $data[] = array('data' => sprintf('%.2f%%', $faltasStats->porcentagemPresenca), 'attributes' => $attributes); $data[] = array('data' => $situacao->getValue($sit->falta->situacao), 'attributes' => $attributes); $table->addFooterRow($data, $zebra[$class ^ 1]); // Adiciona linha com links para lançamento de parecer descritivo geral por etapa if ($this->_service->getRegra()->get('parecerDescritivo') == RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL) { $newLink = array('text' => 'Lançar parecer', 'path' => 'parecer', 'query' => array('matricula' => $matricula['cod_matricula'])); $data = array(0 => array('data' => 'Pareceres', 'attributes' => array('style' => 'padding: 5px; text-align: left'))); $pareceres = $this->_service->getPareceresGerais(); for ($i = 1, $loop = count($etapas); $i <= $loop; $i++) { if (isset($pareceres[$i])) { $link = $newLink; $link['text'] = 'Editar parecer'; $link['query']['etapa'] = $i; $data[] = array('data' => $url->l($link['text'], $link['path'], array('query' => $link['query'])), 'attributes' => $attributes); } else { if ('' == $newLink) { $link = ''; } else { $link = $url->l($newLink['text'], $newLink['path'], array('query' => $newLink['query'])); } $data[] = array('data' => $link, 'attributes' => $attributes); $newLink = ''; } } if ($sit->recuperacao) { $data[] = array('data' => '', 'attributes' => $attributes); } $data[] = array('data' => '', 'attributes' => $attributes); $data[] = array('data' => '', 'attributes' => $attributes); $table->addFooterRow($data); } // Adiciona tabela na página $this->addDetalhe(array('Disciplinas', '<div id="disciplinas">' . $table . '</div>')); // Adiciona link para lançamento de parecer descritivo anual geral if (FALSE == $sit->andamento && $this->_service->getRegra()->get('parecerDescritivo') == RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_GERAL) { if (0 == count($this->_service->getPareceresGerais())) { $label = 'Lançar'; } else { $label = 'Editar'; } $link = array('text' => $label . ' parecer descritivo do aluno', 'path' => 'parecer', 'query' => array('matricula' => $this->getRequest()->matricula)); $this->addDetalhe(array('Parecer descritivo anual', $url->l($link['text'], $link['path'], array('query' => $link['query'])))); } // Caso o tipo de progressão seja manual, a situação das notas/faltas não // esteja mais em "andamento" e a matrícula esteja em andamento, exibe // botões de ação if ($this->_service->getRegra()->get('tipoProgressao') == RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_MANUAL && FALSE == $sit->andamento && $matricula['aprovado'] == App_Model_MatriculaSituacao::EM_ANDAMENTO) { $link = array('text' => 'sim', 'path' => 'boletim', 'query' => array('matricula' => $this->getRequest()->matricula, 'promove' => 1)); $sim = '<span class="confirm yes">' . $url->l($link['text'], $link['path'], array('query' => $link['query'])) . '</span>'; $link['text'] = 'não (retém o aluno)'; $link['query']['promove'] = 0; $nao = '<span class="confirm no">' . $url->l($link['text'], $link['path'], array('query' => $link['query'])) . '</span>'; $links = '<div style="padding: 5px 0 5px 0">' . $sim . $nao . '</div>'; $this->addDetalhe(array('Promover aluno?', $links)); } }
protected function getSituacaoMatricula($ccId = null) { if (is_null($ccId)) { $ccId = $this->getRequest()->componente_curricular_id; } $situacao = 'Situação não recuperada'; try { $situacaoCc = $this->serviceBoletim()->getSituacaoComponentesCurriculares()->componentesCurriculares[$ccId]; $situacao = App_Model_MatriculaSituacao::getInstance()->getValue($situacaoCc->situacao); } catch (Exception $e) { $matriculaId = $this->getRequest()->matricula_id; $this->messenger->append("Erro ao recuperar situação da matrícula '{$matriculaId}': " . $e->getMessage()); } return $this->safeString($situacao); }