Commit 5516a061c984eab2f4a93e5eb0934d2aa26ad823
1 parent
c35fd453
Exists in
master
Atualizado relatório '''Alunos 5ª Avaliação''' para usar o ''service'' {{{Avalia…
…cao_Service_Boletim}}}:
* Relatório chama-se agora '''Alunos em Exame''' pois não é mais subentendido que o ano letivo será dividido em 4 módulos bimestrais
* Adicionado novo médoto em {{{TabelaArredondamento_Model_Tabela}}} {{{predictValue()}}} para prever qual é o primeiro arredondamento que satisfaz uma dada condição (ex: qual deve ser a nota no Exame para que o aluno obtenha a média necessária?)
Showing
9 changed files
with
470 additions
and
216 deletions
Show diff stats
ieducar/intranet/educar_relatorio_alunos_quinta_avaliacao.php
| ... | ... | @@ -48,7 +48,7 @@ class clsIndexBase extends clsBase |
| 48 | 48 | { |
| 49 | 49 | function Formular() |
| 50 | 50 | { |
| 51 | - $this->SetTitulo($this->_instituicao . ' i-Educar - Alunos em 5ª Avaliação'); | |
| 51 | + $this->SetTitulo($this->_instituicao . ' i-Educar - Alunos em Exame'); | |
| 52 | 52 | $this->processoAp = 807; |
| 53 | 53 | } |
| 54 | 54 | } |
| ... | ... | @@ -208,7 +208,7 @@ function acao2() |
| 208 | 208 | return; |
| 209 | 209 | } |
| 210 | 210 | |
| 211 | - showExpansivelImprimir(400, 200,'',[], 'Quinta Avaliação'); | |
| 211 | + showExpansivelImprimir(400, 200,'',[], 'Alunos em Exame'); | |
| 212 | 212 | |
| 213 | 213 | document.formcadastro.target = 'miolo_' + (DOM_divs.length - 1); |
| 214 | 214 | ... | ... |
ieducar/intranet/educar_relatorio_alunos_quinta_avaliacao_proc.php
| ... | ... | @@ -34,6 +34,10 @@ require_once 'include/clsBanco.inc.php'; |
| 34 | 34 | require_once 'include/pmieducar/geral.inc.php'; |
| 35 | 35 | require_once 'include/relatorio.inc.php'; |
| 36 | 36 | |
| 37 | +require_once 'Avaliacao/Service/Boletim.php'; | |
| 38 | +require_once 'ComponenteCurricular/Model/ComponenteDataMapper.php'; | |
| 39 | +require_once 'RegraAvaliacao/Model/RegraDataMapper.php'; | |
| 40 | + | |
| 37 | 41 | /** |
| 38 | 42 | * clsIndexBase class. |
| 39 | 43 | * |
| ... | ... | @@ -48,7 +52,7 @@ class clsIndexBase extends clsBase |
| 48 | 52 | { |
| 49 | 53 | function Formular() |
| 50 | 54 | { |
| 51 | - $this->SetTitulo($this->_instituicao . ' i-Educar - Alunos em 5ª Avaliação'); | |
| 55 | + $this->SetTitulo($this->_instituicao . ' i-Educar - Alunos em Exame'); | |
| 52 | 56 | $this->processoAp = 807; |
| 53 | 57 | $this->renderMenu = FALSE; |
| 54 | 58 | $this->renderMenuSuspenso = FALSE; |
| ... | ... | @@ -77,13 +81,8 @@ class indice extends clsCadastro |
| 77 | 81 | |
| 78 | 82 | var $ano; |
| 79 | 83 | |
| 80 | - var $cursos = array(); | |
| 81 | - | |
| 82 | 84 | var $get_link; |
| 83 | 85 | |
| 84 | - var $media; | |
| 85 | - var $media_exame; | |
| 86 | - | |
| 87 | 86 | function renderHTML() |
| 88 | 87 | { |
| 89 | 88 | if ($_POST){ |
| ... | ... | @@ -99,259 +98,208 @@ class indice extends clsCadastro |
| 99 | 98 | $fonte = 'arial'; |
| 100 | 99 | $corTexto = '#000000'; |
| 101 | 100 | |
| 102 | - if (is_numeric($this->ref_cod_escola) && is_numeric($this->ref_cod_curso) && | |
| 103 | - is_numeric($this->ref_cod_serie) && is_numeric($this->ref_cod_turma) && | |
| 104 | - is_numeric($this->ano) | |
| 101 | + if (!is_numeric($this->ref_cod_escola) || !is_numeric($this->ref_cod_curso) || | |
| 102 | + !is_numeric($this->ref_cod_serie) || !is_numeric($this->ref_cod_turma) || | |
| 103 | + !is_numeric($this->ano) | |
| 105 | 104 | ) { |
| 106 | - | |
| 105 | + print $this->getError(); | |
| 106 | + return; | |
| 107 | 107 | } |
| 108 | 108 | |
| 109 | - $obj_ref_cod_curso = new clsPmieducarCurso($this->ref_cod_curso); | |
| 110 | - $det_ref_cod_curso = $obj_ref_cod_curso->detalhe(); | |
| 111 | - | |
| 112 | - $nm_curso = $det_ref_cod_curso['nm_curso']; | |
| 113 | - $padrao_ano_escolar = $det_ref_cod_curso['padrao_ano_escolar']; | |
| 114 | - | |
| 115 | - if ($padrao_ano_escolar) { | |
| 116 | - $obj_ano_letivo = new clsPmieducarEscolaAnoLetivo(); | |
| 117 | - $lst_ano_letivo = $obj_ano_letivo->lista($this->ref_cod_escola, $this->ano, | |
| 118 | - NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1); | |
| 119 | - | |
| 120 | - if (is_array($lst_ano_letivo)) { | |
| 121 | - $det_ano_letivo = array_shift($lst_ano_letivo); | |
| 122 | - $ano_letivo = $det_ano_letivo['ano']; | |
| 123 | - | |
| 124 | - $obj_ano_letivo_modulo = new clsPmieducarAnoLetivoModulo(); | |
| 125 | - $lst_ano_letivo_modulo = $obj_ano_letivo_modulo->lista($ano_letivo, $this->ref_cod_escola); | |
| 126 | - | |
| 127 | - if (is_array($lst_ano_letivo_modulo)) { | |
| 128 | - $qtd_modulos = count($lst_ano_letivo_modulo); | |
| 129 | - } | |
| 130 | - } | |
| 131 | - else { | |
| 132 | - echo ' | |
| 133 | - <script> | |
| 134 | - alert("Escola não possui calendário definido para este ano"); | |
| 135 | - window.parent.fechaExpansivel(\'div_dinamico_\'+(window.parent.DOM_divs.length-1)); | |
| 136 | - </script>'; | |
| 137 | - | |
| 138 | - return TRUE; | |
| 139 | - } | |
| 140 | - } | |
| 141 | - else { | |
| 142 | - $obj_turma_modulo = new clsPmieducarTurmaModulo(); | |
| 143 | - $lst_turma_modulo = $obj_turma_modulo->lista($registro['ref_cod_turma']); | |
| 144 | - | |
| 145 | - if (is_array($lst_turma_modulo)) { | |
| 146 | - $qtd_modulos = count($lst_turma_modulo); | |
| 147 | - } | |
| 148 | - } | |
| 149 | - | |
| 150 | - if ($this->ano == date('Y')) { | |
| 151 | - $sql = sprintf(' | |
| 152 | - SELECT | |
| 153 | - m.cod_matricula, | |
| 154 | - ( | |
| 155 | - SELECT | |
| 156 | - nome | |
| 157 | - FROM | |
| 158 | - pmieducar.aluno al, | |
| 159 | - cadastro.pessoa | |
| 160 | - WHERE | |
| 161 | - al.cod_aluno = m.ref_cod_aluno | |
| 162 | - AND al.ref_idpes = pessoa.idpes | |
| 163 | - ) AS nome | |
| 164 | - FROM | |
| 165 | - pmieducar.matricula m, | |
| 166 | - pmieducar.matricula_turma mt | |
| 167 | - WHERE | |
| 168 | - mt.ref_cod_turma = %d | |
| 169 | - AND mt.ref_cod_matricula = m.cod_matricula | |
| 170 | - AND m.aprovado = 3 | |
| 171 | - AND mt.ativo = 1 AND m.ativo = 1 | |
| 172 | - AND m.modulo > %d | |
| 173 | - AND m.ano = %d | |
| 174 | - ORDER BY | |
| 175 | - nome', $this->ref_cod_turma, $qtd_modulos, $this->ano); | |
| 176 | - } | |
| 177 | - else { | |
| 178 | - $sql = sprintf(' | |
| 109 | + // Instituição | |
| 110 | + $obj_instituicao = new clsPmieducarInstituicao($this->ref_cod_instituicao); | |
| 111 | + $nm_instituicao = $obj_instituicao->detalhe(); | |
| 112 | + $nm_instituicao = $nm_instituicao['nm_instituicao']; | |
| 113 | + | |
| 114 | + // Escola | |
| 115 | + $obj_escola = new clsPmieducarEscola($this->ref_cod_escola); | |
| 116 | + $nm_escola = $obj_escola->detalhe(); | |
| 117 | + $nm_escola = $nm_escola['nome']; | |
| 118 | + | |
| 119 | + // Curso | |
| 120 | + $obj_curso = new clsPmieducarCurso($this->ref_cod_curso); | |
| 121 | + $obj_curso->setCamposLista('media, media_exame, nm_curso'); | |
| 122 | + $det_curso = $obj_curso->detalhe(); | |
| 123 | + $nm_curso = $det_curso['nm_curso']; | |
| 124 | + | |
| 125 | + // Série | |
| 126 | + $obj_serie = new clsPmieducarSerie($this->ref_cod_serie); | |
| 127 | + $obj_serie->setCamposLista('nm_serie'); | |
| 128 | + $det_serie = $obj_serie->detalhe(); | |
| 129 | + $nm_serie = $det_serie['nm_serie']; | |
| 130 | + $regraId = $det_serie['regra_avaliacao_id']; | |
| 131 | + | |
| 132 | + // Turma | |
| 133 | + $obj_turma = new clsPmieducarTurma($this->ref_cod_turma); | |
| 134 | + $obj_turma->setCamposLista('nm_turma'); | |
| 135 | + $det_turma = $obj_turma->detalhe(); | |
| 136 | + $nm_turma = $det_turma['nm_turma']; | |
| 137 | + | |
| 138 | + // Situação da matrícula do aluno (aprovado) | |
| 139 | + $situacao = $this->ano == date('Y') ? | |
| 140 | + App_Model_MatriculaSituacao::EM_ANDAMENTO : | |
| 141 | + implode(', ', array( | |
| 142 | + App_Model_MatriculaSituacao::APROVADO, | |
| 143 | + App_Model_MatriculaSituacao::REPROVADO, | |
| 144 | + App_Model_MatriculaSituacao::EM_ANDAMENTO | |
| 145 | + )); | |
| 146 | + | |
| 147 | + $sql = sprintf(' | |
| 148 | + SELECT | |
| 149 | + m.cod_matricula, | |
| 150 | + ( | |
| 179 | 151 | SELECT |
| 180 | - m.cod_matricula, | |
| 181 | - ( | |
| 182 | - SELECT | |
| 183 | - nome | |
| 184 | - FROM | |
| 185 | - pmieducar.aluno al, | |
| 186 | - cadastro.pessoa | |
| 187 | - WHERE | |
| 188 | - al.cod_aluno = m.ref_cod_aluno | |
| 189 | - AND al.ref_idpes = pessoa.idpes | |
| 190 | - ) AS nome | |
| 152 | + nome | |
| 191 | 153 | FROM |
| 192 | - pmieducar.matricula m, | |
| 193 | - pmieducar.matricula_turma mt | |
| 154 | + pmieducar.aluno al, | |
| 155 | + cadastro.pessoa | |
| 194 | 156 | WHERE |
| 195 | - mt.ref_cod_turma = %d | |
| 196 | - AND mt.ref_cod_matricula = m.cod_matricula | |
| 197 | - AND m.aprovado IN (1, 2, 3) | |
| 198 | - AND mt.ativo = 1 AND m.ativo = 1 | |
| 199 | - AND m.modulo > %d | |
| 200 | - AND m.ano = %d | |
| 201 | - ORDER BY | |
| 202 | - nome', $this->ref_cod_turma, $qtd_modulos, $this->ano); | |
| 203 | - } | |
| 157 | + al.cod_aluno = m.ref_cod_aluno | |
| 158 | + AND al.ref_idpes = pessoa.idpes | |
| 159 | + ) AS nome | |
| 160 | + FROM | |
| 161 | + pmieducar.matricula m, | |
| 162 | + pmieducar.matricula_turma mt | |
| 163 | + WHERE | |
| 164 | + mt.ref_cod_turma = %d | |
| 165 | + AND mt.ref_cod_matricula = m.cod_matricula | |
| 166 | + AND m.aprovado IN (%s) | |
| 167 | + AND mt.ativo = 1 | |
| 168 | + AND m.ativo = 1 | |
| 169 | + AND m.ano = %d | |
| 170 | + ORDER BY | |
| 171 | + nome', $this->ref_cod_turma, $situacao, $this->ano); | |
| 204 | 172 | |
| 205 | 173 | $db = new clsBanco(); |
| 206 | 174 | $db->Consulta($sql); |
| 207 | 175 | |
| 176 | + // Mappers | |
| 177 | + $regraMapper = new RegraAvaliacao_Model_RegraDataMapper(); | |
| 178 | + $componenteMapper = new ComponenteCurricular_Model_ComponenteDataMapper(); | |
| 179 | + | |
| 180 | + $regra = $regraMapper->find($regraId); | |
| 181 | + if (is_null($regra->formulaRecuperacao)) { | |
| 182 | + $regra = 'A regra de avaliação dessa série não possui uma fórmula de cálculo de recuperação.'; | |
| 183 | + } | |
| 184 | + else { | |
| 185 | + $regra = sprintf('Recuperação: %s; fórmula: %s.', $regra->formulaRecuperacao, $regra->formulaRecuperacao->formulaMedia); | |
| 186 | + } | |
| 187 | + | |
| 208 | 188 | if ($db->Num_Linhas()) { |
| 209 | 189 | $alunos = array(); |
| 210 | 190 | |
| 211 | 191 | // Disciplinas da escola-série |
| 212 | 192 | $obj_disciplinas = new clsPmieducarEscolaSerieDisciplina(); |
| 213 | - $obj_disciplinas->setOrderby('nm_disciplina'); | |
| 214 | - $obj_disciplinas->setCamposLista('cod_disciplina, nm_disciplina'); | |
| 215 | 193 | $lst_disciplinas = $obj_disciplinas->lista($this->ref_cod_serie, |
| 216 | - $this->ref_cod_escola, NULL, 1, TRUE); | |
| 217 | - | |
| 218 | - // Curso | |
| 219 | - $obj_curso = new clsPmieducarCurso($this->ref_cod_curso); | |
| 220 | - $obj_curso->setCamposLista('media, media_exame, nm_curso'); | |
| 221 | - $det_curso = $obj_curso->detalhe(); | |
| 222 | - | |
| 223 | - $this->media = $det_curso['media']; | |
| 224 | - $this->media_exame = $det_curso['media_exame']; | |
| 194 | + $this->ref_cod_escola, NULL, 1); | |
| 225 | 195 | |
| 226 | 196 | // Instancia objeto de relatório padrão |
| 227 | - $detalhes = sprintf('%s%s%s%s%s%s%s - Turma: %s %s', $this->nm_instituicao, | |
| 228 | - "\n", $this->nm_escola, "\n", $this->nm_curso, "\n", $this->nm_serie, | |
| 229 | - $this->nm_turma, date('d/m/Y')); | |
| 197 | + $detalhes = sprintf('%s%s%s%s%s%s%s - Turma: %s %s', $nm_instituicao, | |
| 198 | + "\n", $nm_escola, "\n", $nm_curso, "\n", $nm_serie, | |
| 199 | + $nm_turma, date('d/m/Y')); | |
| 230 | 200 | |
| 231 | - $relatorio = new relatorios('Relação de alunos em 5ª avaliação', 210, | |
| 232 | - FALSE, 'Relação de alunos em 5ª avaliação', 'A4', $detalhes); | |
| 201 | + $relatorio = new relatorios('Relação de alunos em exame', 210, | |
| 202 | + FALSE, 'Relação de alunos em exame', 'A4', $detalhes); | |
| 233 | 203 | |
| 204 | + $relatorio->exibe_produzido_por = FALSE; | |
| 234 | 205 | $relatorio->setMargem(20, 20, 20, 20); |
| 235 | 206 | |
| 236 | - // Escola | |
| 237 | - $obj_escola = new clsPmieducarEscola($this->ref_cod_escola); | |
| 238 | - $nm_escola = $obj_escola->detalhe(); | |
| 239 | - $nm_escola = $nm_escola['nome']; | |
| 240 | - $nm_curso = $det_curso['nm_curso']; | |
| 241 | - | |
| 242 | - // Série | |
| 243 | - $obj_serie = new clsPmieducarSerie($this->ref_cod_serie); | |
| 244 | - $obj_serie->setCamposLista('nm_serie'); | |
| 245 | - $det_serie = $obj_serie->detalhe(); | |
| 246 | - $nm_serie = $det_serie['nm_serie']; | |
| 247 | - | |
| 248 | - // Turma | |
| 249 | - $obj_turma = new clsPmieducarTurma($this->ref_cod_turma); | |
| 250 | - $obj_turma->setCamposLista('nm_turma'); | |
| 251 | - $det_turma = $obj_turma->detalhe(); | |
| 252 | - $nm_turma = $det_turma['nm_turma']; | |
| 253 | - | |
| 254 | 207 | $relatorio->novalinha(array(sprintf('Nome Escola: %s Ano: %d', $nm_escola, $this->ano)), |
| 255 | 208 | 0, 12, TRUE, 'arial', FALSE, '#000000', '#d3d3d3', '#FFFFFF', FALSE, TRUE); |
| 256 | 209 | |
| 257 | - $relatorio->novalinha(array(sprintf('Curso: %s Ano/Série: %s Turma: %s Date: %s', $nm_curso, $nm_serie, $nm_turma, date('d/m/Y'))), | |
| 210 | + $relatorio->novalinha(array(sprintf('Curso: %s Ano/Série: %s Turma: %s', $nm_curso, $nm_serie, $nm_turma)), | |
| 211 | + 0, 12, TRUE, 'arial', FALSE, '#000000', '#d3d3d3', '#FFFFFF', FALSE, TRUE); | |
| 212 | + | |
| 213 | + $relatorio->novalinha(array(sprintf('%s Data: %s', $regra, date('d/m/Y'))), | |
| 258 | 214 | 0, 12, TRUE, 'arial', FALSE, '#000000', '#d3d3d3', '#FFFFFF', FALSE, TRUE); |
| 259 | 215 | |
| 260 | - $relatorio->novalinha(array('Matrícula', 'Nome Aluno', 'Disciplinas', 'Pontos', 'Nota 5º Av. Passar'), | |
| 261 | - 0, 12, TRUE, 'arial', array(50, 200, 150, 50), '#515151', '#d3d3d3', '#FFFFFF', FALSE, TRUE); | |
| 216 | + $relatorio->novalinha(array('Mat.', 'Nome Aluno', 'Componentes', 'Média', 'Nota necessária (mín.)'), | |
| 217 | + 0, 12, TRUE, 'arial', array(30, 180, 150, 60), '#515151', '#d3d3d3', '#FFFFFF', FALSE, TRUE); | |
| 262 | 218 | |
| 263 | 219 | while ($db->ProximoRegistro()) { |
| 264 | 220 | list($cod_matricula, $nome_aluno) = $db->Tupla(); |
| 265 | 221 | |
| 266 | - foreach ($lst_disciplinas as $disciplina) { | |
| 267 | - $obj_nota_aluno = new clsPmieducarNotaAluno(); | |
| 268 | - $obj_nota_aluno->setOrderby('modulo ASC'); | |
| 269 | - $lst_nota_aluno = $obj_nota_aluno->lista(NULL, NULL, NULL, | |
| 270 | - $this->ref_cod_serie, $this->ref_cod_escola, $disciplina['cod_disciplina'], | |
| 271 | - $cod_matricula, NULL, NULL, NULL, NULL, NULL, NULL, 1); | |
| 222 | + $boletim = new Avaliacao_Service_Boletim(array( | |
| 223 | + 'matricula' => $cod_matricula, | |
| 224 | + 'RegraDataMapper' => $regraMapper, | |
| 225 | + 'ComponenteDataMapper' => $componenteMapper | |
| 226 | + )); | |
| 272 | 227 | |
| 273 | - $aluno_notas = array(); | |
| 274 | - $aluno_notas_normal = array(); | |
| 228 | + $componentes = $boletim->getComponentes(); | |
| 229 | + $medias = $boletim->getMediasComponentes(); | |
| 230 | + $situacao = $boletim->getSituacaoComponentesCurriculares(); | |
| 275 | 231 | |
| 276 | - if (is_array($lst_nota_aluno)) { | |
| 277 | - $aluno_notas[$disciplina['cod_disciplina']] = 0; | |
| 278 | - | |
| 279 | - foreach ($lst_nota_aluno as $nota_aluno) { | |
| 280 | - $obj_avaliacao_valores = new clsPmieducarTipoAvaliacaoValores( | |
| 281 | - $nota_aluno['ref_ref_cod_tipo_avaliacao'], $nota_aluno['ref_sequencial'] | |
| 282 | - ); | |
| 283 | - | |
| 284 | - $det_avaliacao_valores = $obj_avaliacao_valores->detalhe(); | |
| 285 | - | |
| 286 | - $aluno_notas[$disciplina['cod_disciplina']] += $det_avaliacao_valores['valor']; | |
| 287 | - } | |
| 232 | + if ($situacao->situacao != App_Model_MatriculaSituacao::EM_EXAME) { | |
| 233 | + continue; | |
| 234 | + } | |
| 288 | 235 | |
| 289 | - $aluno_notas_normal[$disciplina['cod_disciplina']] = $aluno_notas[$disciplina['cod_disciplina']]; | |
| 236 | + foreach ($situacao->componentesCurriculares as $id => $situacaoComponente) { | |
| 237 | + if ($situacaoComponente->situacao != App_Model_MatriculaSituacao::EM_EXAME) { | |
| 238 | + continue; | |
| 239 | + } | |
| 290 | 240 | |
| 291 | - $aluno_notas[$disciplina['cod_disciplina']] /= count($lst_nota_aluno); | |
| 241 | + $mediaRecuperacao = $boletim->preverNotaRecuperacao($id); | |
| 292 | 242 | |
| 293 | - $aluno_notas[$disciplina['cod_disciplina']] = sprintf('%01.1f', $aluno_notas[$disciplina['cod_disciplina']]); | |
| 243 | + if (!is_null($mediaRecuperacao)) { | |
| 244 | + $previsao = sprintf('%s (%.2f)', $mediaRecuperacao->nome, $mediaRecuperacao->valorMinimo); | |
| 294 | 245 | } |
| 295 | - | |
| 296 | - if (is_array($aluno_notas)) { | |
| 297 | - foreach ($aluno_notas as $cod_disciplina => $media) { | |
| 298 | - if ($media < $this->media && $this->media_exame) { | |
| 299 | - // @todo WTF!??? Que diabos de nota fixa é essa? | |
| 300 | - // FÓRMULA: 30 - (SOMA DE PONTOS DOS 4 BIMESTRES) / 2. | |
| 301 | - // Ex: 30 - 23 / 2 = 3,5 | |
| 302 | - $nota_necessaria_passar = (30 - $aluno_notas_normal[$cod_disciplina]) / 2; | |
| 303 | - | |
| 304 | - $data = array( | |
| 305 | - $cod_matricula, | |
| 306 | - $nome_aluno, | |
| 307 | - $disciplina['nm_disciplina'], | |
| 308 | - $aluno_notas_normal[$cod_disciplina], | |
| 309 | - $nota_necessaria_passar | |
| 310 | - ); | |
| 311 | - | |
| 312 | - $relatorio->novalinha($data, 0, 12, FALSE, 'arial', | |
| 313 | - array(50, 200, 150, 50), '#515151', '#d3d3d3', '#FFFFFF', FALSE, TRUE); | |
| 314 | - } | |
| 315 | - } | |
| 246 | + else { | |
| 247 | + $previsao = 'Nenhuma nota possível.'; | |
| 316 | 248 | } |
| 317 | - } | |
| 318 | - } | |
| 319 | 249 | |
| 320 | - $this->get_link = $relatorio->fechaPdf(); | |
| 250 | + $data = array( | |
| 251 | + $cod_matricula, | |
| 252 | + $nome_aluno, | |
| 253 | + $componentes[$id], | |
| 254 | + $medias[$id][0]->mediaArredondada, | |
| 255 | + $previsao | |
| 256 | + ); | |
| 321 | 257 | |
| 322 | - echo sprintf(' | |
| 323 | - <script> | |
| 324 | - window.onload=function() | |
| 325 | - { | |
| 326 | - parent.EscondeDiv("LoadImprimir"); | |
| 327 | - window.location="download.php?filename=%s" | |
| 328 | - } | |
| 329 | - </script>', $this->get_link); | |
| 330 | - | |
| 331 | - echo sprintf(' | |
| 332 | - <html> | |
| 333 | - <center> | |
| 334 | - Se o download não iniciar automaticamente <br> | |
| 335 | - <a target="blank" href="%s" style="font-size: 16px; color: #000000; text-decoration: underline;">clique aqui!</a><br><br> | |
| 336 | - <span style="font-size: 10px;"> | |
| 337 | - Para visualizar os arquivos PDF, é necessário instalar o Adobe Acrobat Reader.<br> | |
| 338 | - Clique na Imagem para Baixar o instalador<br><br> | |
| 339 | - <a href="http://www.adobe.com.br/products/acrobat/readstep2.html" target="new"><br><img src="imagens/acrobat.gif" width="88" height="31" border="0"></a> | |
| 340 | - </span> | |
| 341 | - </center> | |
| 342 | - </html>', $this->get_link); | |
| 258 | + $relatorio->novalinha($data, 0, 12, FALSE, 'arial', | |
| 259 | + array(30, 180, 150, 60), '#515151', '#d3d3d3', '#FFFFFF', FALSE, TRUE); | |
| 260 | + } | |
| 261 | + } | |
| 343 | 262 | } |
| 344 | 263 | else { |
| 345 | - echo ' | |
| 346 | - <script> | |
| 264 | + print $this->getError(); | |
| 265 | + return; | |
| 266 | + } | |
| 267 | + | |
| 268 | + $this->get_link = $relatorio->fechaPdf(); | |
| 269 | + | |
| 270 | + echo sprintf(' | |
| 271 | + <script> | |
| 347 | 272 | window.onload=function() |
| 348 | 273 | { |
| 349 | 274 | parent.EscondeDiv("LoadImprimir"); |
| 275 | + window.location="download.php?filename=%s" | |
| 350 | 276 | } |
| 351 | - </script>'; | |
| 277 | + </script>', $this->get_link); | |
| 278 | + | |
| 279 | + echo sprintf(' | |
| 280 | + <html> | |
| 281 | + <center> | |
| 282 | + Se o download não iniciar automaticamente <br> | |
| 283 | + <a target="blank" href="%s" style="font-size: 16px; color: #000000; text-decoration: underline;">clique aqui!</a><br><br> | |
| 284 | + <span style="font-size: 10px;"> | |
| 285 | + Para visualizar os arquivos PDF, é necessário instalar o Adobe Acrobat Reader.<br> | |
| 286 | + Clique na Imagem para Baixar o instalador<br><br> | |
| 287 | + <a href="http://www.adobe.com.br/products/acrobat/readstep2.html" target="new"><br><img src="imagens/acrobat.gif" width="88" height="31" border="0"></a> | |
| 288 | + </span> | |
| 289 | + </center> | |
| 290 | + </html>', $this->get_link); | |
| 291 | + } | |
| 352 | 292 | |
| 353 | - echo 'Nenhum aluno está em exame'; | |
| 354 | - } | |
| 293 | + function getError() | |
| 294 | + { | |
| 295 | + return ' | |
| 296 | + <script> | |
| 297 | + window.onload=function() | |
| 298 | + { | |
| 299 | + parent.EscondeDiv("LoadImprimir"); | |
| 300 | + } | |
| 301 | + </script>' . | |
| 302 | + 'Nenhum aluno está em exame'; | |
| 355 | 303 | } |
| 356 | 304 | |
| 357 | 305 | function Editar() | ... | ... |
ieducar/intranet/include/pmieducar/clsPmieducarEscolaSerieDisciplina.inc.php
| ... | ... | @@ -258,6 +258,8 @@ class clsPmieducarEscolaSerieDisciplina |
| 258 | 258 | /** |
| 259 | 259 | * Retorna uma lista de registros filtrados de acordo com os parâmetros. |
| 260 | 260 | * @return array |
| 261 | + * @todo Refatorar o primeiro if, tabela referenciada não armazena mais os | |
| 262 | + * componentes curriculares | |
| 261 | 263 | */ |
| 262 | 264 | function lista($int_ref_ref_cod_serie = NULL, $int_ref_ref_cod_escola = NULL, |
| 263 | 265 | $int_ref_cod_disciplina = NULL, $int_ativo = NULL, $boo_nome_disc = FALSE) | ... | ... |
ieducar/misc/database/deltas/19_atualiza_nome_de_relatorio_no_menu_e_permissoes.sql
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +-- // | |
| 2 | + | |
| 3 | +-- | |
| 4 | +-- @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br> | |
| 5 | +-- @license @@license@@ | |
| 6 | +-- @version $Id$ | |
| 7 | +-- | |
| 8 | + | |
| 9 | +UPDATE portal.menu_submenu SET nm_submenu = 'Alunos em Exame' WHERE cod_menu_submenu = 917; | |
| 10 | +UPDATE pmicontrolesis.menu SET tt_menu = 'Alunos em Exame' WHERE cod_menu = 21184; | |
| 11 | + | |
| 12 | +-- //@UNDO | |
| 13 | + | |
| 14 | +UPDATE portal.menu_submenu SET nm_submenu = 'Alunos 5ª Avaliação' WHERE cod_menu_submenu = 917; | |
| 15 | +UPDATE pmicontrolesis.menu SET tt_menu = 'Alunos 5ª Avaliação' WHERE cod_menu = 21184; | |
| 16 | + | |
| 17 | +-- // | |
| 0 | 18 | \ No newline at end of file | ... | ... |
ieducar/misc/database/ieducar.sql
| ... | ... | @@ -17935,7 +17935,6 @@ INSERT INTO menu VALUES (21180, 911, 21126, 'Ficha de Rematrícula', 22, 'educar_ |
| 17935 | 17935 | INSERT INTO menu VALUES (21181, 835, 21124, 'Relatório Quadros de Horário', 25, 'educar_relatorio_quadro_horario.php', '_self', 1, 15, 105); |
| 17936 | 17936 | INSERT INTO menu VALUES (21182, 916, 21126, 'Registro de Trans. Expedidas', 25, 'educar_relatorio_registro_transferencias.php', '_self', 1, 15, 1); |
| 17937 | 17937 | INSERT INTO menu VALUES (21183, 774, 21126, 'Relatório Alunos Idade x Sexo', 25, 'educar_relatorio_quadro_idade_sexo_serie.php', '_self', 1, 15, 1); |
| 17938 | -INSERT INTO menu VALUES (21184, 917, 21126, 'Alunos 5ª Avaliação', 26, 'educar_relatorio_alunos_quinta_avaliacao.php', '_self', 1, 15, 1); | |
| 17939 | 17938 | INSERT INTO menu VALUES (21185, 918, 21126, 'Ata Resultado Final', 28, 'educar_relatorio_ata_resultado_final.php', '_self', 1, 15, 1); |
| 17940 | 17939 | INSERT INTO menu VALUES (21186, 836, 21126, 'Relatório de alunos por idade', 30, 'educar_relatorio_alunos_idade.php', '_self', 1, 15, 1); |
| 17941 | 17940 | INSERT INTO menu VALUES (21187, 823, 21126, 'Resultado Final', 30, 'educar_relatorio_resultado_final.php', '_self', 1, 15, 1); |
| ... | ... | @@ -17980,6 +17979,7 @@ INSERT INTO menu VALUES (21227, 947, 21226, 'Listar Regras', 0, 'module/RegraAva |
| 17980 | 17979 | INSERT INTO menu VALUES (21228, 948, 21226, 'Fórmulas de Cálculo de Média', 1, 'module/FormulaMedia/index', '_self', 1, 15, 198); |
| 17981 | 17980 | INSERT INTO menu VALUES (21229, 949, 21226, 'Tabelas de Arredondamento', 2, 'module/TabelaArredondamento/index', '_self', 1, 15, 199); |
| 17982 | 17981 | INSERT INTO menu VALUES (21230, 693, 21126, 'Registro de Matrículas', 30, 'educar_relatorio_registro_matriculas.php', '_self', 1, 15, 1); |
| 17982 | +INSERT INTO menu VALUES (21184, 917, 21126, 'Alunos em Exame', 26, 'educar_relatorio_alunos_quinta_avaliacao.php', '_self', 1, 15, 1); | |
| 17983 | 17983 | |
| 17984 | 17984 | |
| 17985 | 17985 | -- |
| ... | ... | @@ -19951,7 +19951,6 @@ INSERT INTO menu_submenu VALUES (845, 55, 2, 'Rematrícula Automática', 'educar_a |
| 19951 | 19951 | INSERT INTO menu_submenu VALUES (944, 55, 2, 'Demonstrativo Alunos Defasados Nominal', 'educar_alunos_defasados_nominal.php', '', 3); |
| 19952 | 19952 | INSERT INTO menu_submenu VALUES (930, 55, 2, 'Levantamento Alfab. e não Alfab.', 'educar_relatorio_alfabetizados.php', '', 3); |
| 19953 | 19953 | INSERT INTO menu_submenu VALUES (918, 55, 2, 'Ata Resultado Final', 'educar_relatorio_ata_resultado_final.php', '', 3); |
| 19954 | -INSERT INTO menu_submenu VALUES (917, 55, 2, 'Alunos 5ª Avaliação', 'educar_relatorio_alunos_quinta_avaliacao.php', '', 3); | |
| 19955 | 19954 | INSERT INTO menu_submenu VALUES (911, 55, 2, 'Ficha de Rematrícula', 'educar_relatorio_ficha_rematricula.php', '', 3); |
| 19956 | 19955 | INSERT INTO menu_submenu VALUES (916, 55, 2, 'Registro de Transferências Expedidas', 'educar_relatorio_registro_transferencias.php', '', 3); |
| 19957 | 19956 | INSERT INTO menu_submenu VALUES (900, 55, 2, 'Relação de Alunos ANEEs Quantidade', 'educar_relatorio_relacao_qtd_aluno_pnee_escola.php', '', 3); |
| ... | ... | @@ -19987,6 +19986,7 @@ INSERT INTO menu_submenu VALUES (946, 55, 2, 'Componentes Curriculares', 'module |
| 19987 | 19986 | INSERT INTO menu_submenu VALUES (947, 55, 2, 'Regras de Avaliação', 'module/RegraAvaliacao/index', '', 3); |
| 19988 | 19987 | INSERT INTO menu_submenu VALUES (948, 55, 2, 'Fórmula de Cálculo de Média', 'module/FormulaMedia/index', '', 3); |
| 19989 | 19988 | INSERT INTO menu_submenu VALUES (949, 55, 2, 'Tabelas de Arredondamento de Nota', 'module/TabelaArredondamento/index', '', 3); |
| 19989 | +INSERT INTO menu_submenu VALUES (917, 55, 2, 'Alunos em Exame', 'educar_relatorio_alunos_quinta_avaliacao.php', '', 3); | |
| 19990 | 19990 | |
| 19991 | 19991 | |
| 19992 | 19992 | -- |
| ... | ... | @@ -20097,6 +20097,7 @@ INSERT INTO changelog VALUES (15, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '15_atua |
| 20097 | 20097 | INSERT INTO changelog VALUES (16, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '16_permissoes_para_modules_e_correcao_menus.sql'); |
| 20098 | 20098 | INSERT INTO changelog VALUES (17, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '17_adiciona_campo_curso_componente_ano_escolar_e_atualiza_constraint_servidor_disciplina.sql'); |
| 20099 | 20099 | INSERT INTO changelog VALUES (18, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '18_cria_tabelas_de_parecer_descritivo.sql'); |
| 20100 | +INSERT INTO changelog VALUES (19, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '19_atualiza_nome_de_relatorio_no_menu_e_permissoes.sql'); | |
| 20100 | 20101 | |
| 20101 | 20102 | |
| 20102 | 20103 | -- | ... | ... |
ieducar/modules/Avaliacao/Service/Boletim.php
| ... | ... | @@ -2107,13 +2107,62 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable |
| 2107 | 2107 | return $this->getRegra()->tabelaArredondamento->round($nota); |
| 2108 | 2108 | } |
| 2109 | 2109 | |
| 2110 | + /** | |
| 2111 | + * Prevê a nota necessária para que o aluno seja aprovado após a recuperação | |
| 2112 | + * escolar. | |
| 2113 | + * | |
| 2114 | + * @param int $id | |
| 2115 | + * @return TabelaArredondamento_Model_TabelaValor|NULL | |
| 2116 | + * @see TabelaArredondamento_Model_Tabela#predictValue() | |
| 2117 | + */ | |
| 2118 | + public function preverNotaRecuperacao($id) | |
| 2119 | + { | |
| 2120 | + if (is_null($this->getRegra()->formulaRecuperacao) || !isset($this->_notasComponentes[$id])) { | |
| 2121 | + return NULL; | |
| 2122 | + } | |
| 2123 | + | |
| 2124 | + $notas = $this->_notasComponentes[$id]; | |
| 2125 | + $somaEtapas = array_sum(CoreExt_Entity::entityFilterAttr($notas, 'etapa', 'nota')); | |
| 2126 | + $formula = $this->getRegra()->formulaRecuperacao; | |
| 2127 | + | |
| 2128 | + $data = array( | |
| 2129 | + 'formulaValues' => array( | |
| 2130 | + 'Se' => $somaEtapas, | |
| 2131 | + 'Et' => $this->getOption('etapas'), | |
| 2132 | + 'Rc' => NULL | |
| 2133 | + ), | |
| 2134 | + 'expected' => array( | |
| 2135 | + 'var' => 'Rc', | |
| 2136 | + 'value' => $this->getRegra()->media | |
| 2137 | + ) | |
| 2138 | + ); | |
| 2139 | + | |
| 2140 | + foreach ($notas as $nota) { | |
| 2141 | + $data['formulaValues']['E' . $nota->etapa] = $nota->nota; | |
| 2142 | + } | |
| 2110 | 2143 | |
| 2144 | + return $this->getRegra()->tabelaArredondamento->predictValue($formula, $data); | |
| 2145 | + } | |
| 2111 | 2146 | |
| 2147 | + /** | |
| 2148 | + * @param numeric $falta | |
| 2149 | + * @param numeric $horaFalta | |
| 2150 | + * @return numeric | |
| 2151 | + */ | |
| 2112 | 2152 | protected function _calculateHoraFalta($falta, $horaFalta) |
| 2113 | 2153 | { |
| 2114 | 2154 | return ($falta * $horaFalta); |
| 2115 | 2155 | } |
| 2116 | 2156 | |
| 2157 | + /** | |
| 2158 | + * Calcula a proporção de $num2 para $num1. | |
| 2159 | + * | |
| 2160 | + * @param numeric $num1 | |
| 2161 | + * @param numeric $num2 | |
| 2162 | + * @param bool $decimal Opcional. Se o resultado é retornado como decimal | |
| 2163 | + * ou percentual. O padrão é TRUE. | |
| 2164 | + * @return float | |
| 2165 | + */ | |
| 2117 | 2166 | protected function _calculatePorcentagem($num1, $num2, $decimal = TRUE) |
| 2118 | 2167 | { |
| 2119 | 2168 | $num1 = floatval($num1); | ... | ... |
ieducar/modules/Avaliacao/_tests/Service/UtilityTest.php
| ... | ... | @@ -122,4 +122,55 @@ class Avaliacao_Service_UtilityTest extends Avaliacao_Service_TestCommon |
| 122 | 122 | $this->assertEquals('S', $service->arredondaNota(6.50)); |
| 123 | 123 | $this->assertEquals('O', $service->arredondaNota(9.15)); |
| 124 | 124 | } |
| 125 | + | |
| 126 | + public function testPreverNotaParaRecuperacao() | |
| 127 | + { | |
| 128 | + // Define as notas do aluno | |
| 129 | + $notaAluno = $this->_getConfigOption('notaAluno', 'instance'); | |
| 130 | + | |
| 131 | + $notas = array( | |
| 132 | + new Avaliacao_Model_NotaComponente(array( | |
| 133 | + 'componenteCurricular' => 1, | |
| 134 | + 'nota' => 4, | |
| 135 | + 'etapa' => 1 | |
| 136 | + )), | |
| 137 | + new Avaliacao_Model_NotaComponente(array( | |
| 138 | + 'componenteCurricular' => 1, | |
| 139 | + 'nota' => 4, | |
| 140 | + 'etapa' => 2 | |
| 141 | + )), | |
| 142 | + new Avaliacao_Model_NotaComponente(array( | |
| 143 | + 'componenteCurricular' => 1, | |
| 144 | + 'nota' => 4, | |
| 145 | + 'etapa' => 3 | |
| 146 | + )), | |
| 147 | + new Avaliacao_Model_NotaComponente(array( | |
| 148 | + 'componenteCurricular' => 1, | |
| 149 | + 'nota' => 4, | |
| 150 | + 'etapa' => 4 | |
| 151 | + )), | |
| 152 | + ); | |
| 153 | + | |
| 154 | + // Configura mock para Avaliacao_Model_NotaComponenteDataMapper | |
| 155 | + $mock = $this->getCleanMock('Avaliacao_Model_NotaComponenteDataMapper'); | |
| 156 | + | |
| 157 | + $mock->expects($this->at(0)) | |
| 158 | + ->method('findAll') | |
| 159 | + ->with(array(), array('notaAluno' => $notaAluno->id), array('etapa' => 'ASC')) | |
| 160 | + ->will($this->returnValue($notas)); | |
| 161 | + | |
| 162 | + $this->_setNotaComponenteDataMapperMock($mock); | |
| 163 | + | |
| 164 | + $service = $this->_getServiceInstance(); | |
| 165 | + | |
| 166 | + $expected = new TabelaArredondamento_Model_TabelaValor(array( | |
| 167 | + 'nome' => 10, | |
| 168 | + 'valorMinimo' => 9, | |
| 169 | + 'valorMaximo' => 10 | |
| 170 | + )); | |
| 171 | + | |
| 172 | + $ret = $service->preverNotaRecuperacao(1); | |
| 173 | + $this->assertEquals(array($expected->nome, $expected->valorMinimo, $expected->valorMaximo), | |
| 174 | + array($ret->nome, $ret->valorMinimo, $ret->valorMaximo)); | |
| 175 | + } | |
| 125 | 176 | } |
| 126 | 177 | \ No newline at end of file | ... | ... |
ieducar/modules/TabelaArredondamento/Model/Tabela.php
| ... | ... | @@ -137,6 +137,106 @@ class TabelaArredondamento_Model_Tabela extends CoreExt_Entity |
| 137 | 137 | } |
| 138 | 138 | |
| 139 | 139 | /** |
| 140 | + * Prevê em qual range de arredondamento de acordo com um valor esperado. A | |
| 141 | + * definição do valor a retornar é dada por uma instância de | |
| 142 | + * FormulaMedia_Model_Formula e um array com valores para as tokens da fórmula | |
| 143 | + * e o valor da variável a prever. Exemplo: | |
| 144 | + * | |
| 145 | + * <code> | |
| 146 | + * <?php | |
| 147 | + * // Passa valores para as tokens disponíveis de FormulaMedia_Model_Formula | |
| 148 | + * // e espera que o resultado do cálculo dê 6, usando como referência a | |
| 149 | + * // variável "Rc" | |
| 150 | + * $data = array( | |
| 151 | + * 'formulaValues' => array( | |
| 152 | + * 'Se' => 16, | |
| 153 | + * 'Et' => 4, | |
| 154 | + * 'E1' => 4, | |
| 155 | + * 'E2' => 4, | |
| 156 | + * 'E3' => 4, | |
| 157 | + * 'E4' => 4, | |
| 158 | + * 'Rc' => NULL | |
| 159 | + * ), | |
| 160 | + * 'expected' => array( | |
| 161 | + * 'var' => 'Rc', | |
| 162 | + * 'value' => 6 | |
| 163 | + * ) | |
| 164 | + * ); | |
| 165 | + * </code> | |
| 166 | + * | |
| 167 | + * @param FormulaMedia_Model_Formula $formula | |
| 168 | + * @param array $data | |
| 169 | + * @return TabelaArredondamento_Model_TabelaValor|NULL Retorna NULL caso | |
| 170 | + * nenhuma instância de TabelaArredondamento_Model_TabelaValor corresponda | |
| 171 | + * ao valor esperado | |
| 172 | + * @todo Considerar o atributo valorMaximo da instância para o cálculo da | |
| 173 | + * fórmula. Pode ser útil para os casos de notas conceituais (Exemplo: uma | |
| 174 | + * nota "EP" que tem o range 5.25 a 7, sendo 6 a média de aprovação. Nesse | |
| 175 | + * caso somente o próximo range (se houvesse) daria o valor esperado para | |
| 176 | + * alcançar a média 6). | |
| 177 | + */ | |
| 178 | + public function predictValue(FormulaMedia_Model_Formula $formula, array $data) | |
| 179 | + { | |
| 180 | + $values = $data['formulaValues']; | |
| 181 | + $scale = pow(10, $this->_precision); | |
| 182 | + $return = NULL; | |
| 183 | + | |
| 184 | + if (0 == count($this->_tabelaValores)) { | |
| 185 | + $this->_tabelaValores = $this->getDataMapper()->findTabelaValor($this); | |
| 186 | + } | |
| 187 | + | |
| 188 | + $i = 0; | |
| 189 | + $total = count($this->_tabelaValores); | |
| 190 | + | |
| 191 | + foreach ($this->_tabelaValores as $tabelaValor) { | |
| 192 | + $process = array(); | |
| 193 | + $values[$data['expected']['var']] = $tabelaValor->valorMinimo; | |
| 194 | + $process[] = $values; | |
| 195 | + | |
| 196 | + // Se for o último item, verifica se a nota máxima também | |
| 197 | + if (++$i == $total) { | |
| 198 | + $values[$data['expected']['var']] = $tabelaValor->valorMaximo; | |
| 199 | + $process[] = $values; | |
| 200 | + } | |
| 201 | + | |
| 202 | + $valueRounded = $this->_getBestResultFromValuesArray($formula, $process); | |
| 203 | + | |
| 204 | + if ($valueRounded * $scale >= ($data['expected']['value'] * $scale)) { | |
| 205 | + $return = $tabelaValor; | |
| 206 | + break; | |
| 207 | + } | |
| 208 | + } | |
| 209 | + | |
| 210 | + return $return; | |
| 211 | + } | |
| 212 | + | |
| 213 | + /** | |
| 214 | + * @param FormulaMedia_Model_Formula $formula | |
| 215 | + * @param array $values | |
| 216 | + * @return TabelaArredondamento_Model_TabelaValor|NULL | |
| 217 | + */ | |
| 218 | + protected function _getBestResultFromValuesArray(FormulaMedia_Model_Formula $formula, array $values) | |
| 219 | + { | |
| 220 | + $best = NULL; | |
| 221 | + | |
| 222 | + foreach ($values as $value) { | |
| 223 | + $value = $formula->execFormulaMedia($value); | |
| 224 | + $rounded = $this->round($value); | |
| 225 | + | |
| 226 | + if (is_null($best)) { | |
| 227 | + $best = $rounded; | |
| 228 | + continue; | |
| 229 | + } | |
| 230 | + | |
| 231 | + if ($best < $rounded) { | |
| 232 | + $best = $rounded; | |
| 233 | + } | |
| 234 | + } | |
| 235 | + | |
| 236 | + return $rounded; | |
| 237 | + } | |
| 238 | + | |
| 239 | + /** | |
| 140 | 240 | * Método finder para TabelaArredondamento_Model_TabelaValor. Wrapper simples |
| 141 | 241 | * para o mesmo método de TabelaArredondamento_Model_TabelaDataMapper. |
| 142 | 242 | * | ... | ... |
ieducar/modules/TabelaArredondamento/_tests/TabelaTest.php
| ... | ... | @@ -32,6 +32,7 @@ |
| 32 | 32 | require_once 'TabelaArredondamento/Model/Tabela.php'; |
| 33 | 33 | require_once 'TabelaArredondamento/Model/TabelaDataMapper.php'; |
| 34 | 34 | require_once 'TabelaArredondamento/Model/TabelaValorDataMapper.php'; |
| 35 | +require_once 'FormulaMedia/Model/Formula.php'; | |
| 35 | 36 | require_once 'include/pmieducar/clsPmieducarInstituicao.inc.php'; |
| 36 | 37 | |
| 37 | 38 | /** |
| ... | ... | @@ -142,6 +143,91 @@ class TabelaTest extends UnitBaseTest |
| 142 | 143 | } |
| 143 | 144 | } |
| 144 | 145 | |
| 146 | + public function testCalculoDeNotaNecessariaParaMedia() | |
| 147 | + { | |
| 148 | + $this->_entity->getDataMapper()->setTabelaValorDataMapper($this->_getMockTabelaValor()); | |
| 149 | + | |
| 150 | + $formula = new FormulaMedia_Model_Formula(array( | |
| 151 | + 'formulaMedia' => '(Se / Et * 0.6) + (Rc * 0.4)', | |
| 152 | + 'tipoFormula' => FormulaMedia_Model_TipoFormula::MEDIA_RECUPERACAO | |
| 153 | + )); | |
| 154 | + | |
| 155 | + $expected = new TabelaArredondamento_Model_TabelaValor(array( | |
| 156 | + 'nome' => 10, | |
| 157 | + 'valorMinimo' => 9.751, | |
| 158 | + 'valorMaximo' => 10 | |
| 159 | + )); | |
| 160 | + | |
| 161 | + $data = array( | |
| 162 | + 'formulaValues' => array( | |
| 163 | + 'Se' => 13.334, | |
| 164 | + 'Et' => 4, | |
| 165 | + 'Rc' => NULL | |
| 166 | + ), | |
| 167 | + 'expected' => array( | |
| 168 | + 'var' => 'Rc', | |
| 169 | + 'value' => 6 | |
| 170 | + ) | |
| 171 | + ); | |
| 172 | + | |
| 173 | + $ret = $this->_entity->predictValue($formula, $data); | |
| 174 | + $this->assertEquals(array($expected->nome, $expected->valorMinimo, $expected->valorMaximo), | |
| 175 | + array($ret->nome, $ret->valorMinimo, $ret->valorMaximo)); | |
| 176 | + | |
| 177 | + $expected = new TabelaArredondamento_Model_TabelaValor(array( | |
| 178 | + 'nome' => 9, | |
| 179 | + 'valorMinimo' => 8.751, | |
| 180 | + 'valorMaximo' => 9.250 | |
| 181 | + )); | |
| 182 | + | |
| 183 | + $data = array( | |
| 184 | + 'formulaValues' => array( | |
| 185 | + 'Se' => 16, | |
| 186 | + 'Et' => 4, | |
| 187 | + 'Rc' => NULL | |
| 188 | + ), | |
| 189 | + 'expected' => array( | |
| 190 | + 'var' => 'Rc', | |
| 191 | + 'value' => 6 | |
| 192 | + ) | |
| 193 | + ); | |
| 194 | + | |
| 195 | + $ret = $this->_entity->predictValue($formula, $data); | |
| 196 | + $this->assertEquals(array($expected->nome, $expected->valorMinimo, $expected->valorMaximo), | |
| 197 | + array($ret->nome, $ret->valorMinimo, $ret->valorMaximo)); | |
| 198 | + | |
| 199 | + $formula = new FormulaMedia_Model_Formula(array( | |
| 200 | + 'formulaMedia' => '((E1 + E2 + E3 + E4) / 4 * 0.6) + (Rc * 0.4)', | |
| 201 | + 'tipoFormula' => FormulaMedia_Model_TipoFormula::MEDIA_RECUPERACAO | |
| 202 | + )); | |
| 203 | + | |
| 204 | + $expected = new TabelaArredondamento_Model_TabelaValor(array( | |
| 205 | + 'nome' => 9, | |
| 206 | + 'valorMinimo' => 8.751, | |
| 207 | + 'valorMaximo' => 9.250 | |
| 208 | + )); | |
| 209 | + | |
| 210 | + $data = array( | |
| 211 | + 'formulaValues' => array( | |
| 212 | + 'Se' => NULL, | |
| 213 | + 'Et' => NULL, | |
| 214 | + 'E1' => 4, | |
| 215 | + 'E2' => 4, | |
| 216 | + 'E3' => 4, | |
| 217 | + 'E4' => 4, | |
| 218 | + 'Rc' => NULL | |
| 219 | + ), | |
| 220 | + 'expected' => array( | |
| 221 | + 'var' => 'Rc', | |
| 222 | + 'value' => 6 | |
| 223 | + ) | |
| 224 | + ); | |
| 225 | + | |
| 226 | + $ret = $this->_entity->predictValue($formula, $data); | |
| 227 | + $this->assertEquals(array($expected->nome, $expected->valorMinimo, $expected->valorMaximo), | |
| 228 | + array($ret->nome, $ret->valorMinimo, $ret->valorMaximo)); | |
| 229 | + } | |
| 230 | + | |
| 145 | 231 | /** |
| 146 | 232 | * @group CoreExt_Locale |
| 147 | 233 | */ | ... | ... |