From 1f2a7d738b0a9a65b1536b370cad58e38daa7c20 Mon Sep 17 00:00:00 2001 From: Eriksen Costa Date: Wed, 21 Jul 2010 16:39:33 -0300 Subject: [PATCH] Code refactoring no método {{{App_Model_IedFinder::getEscolaSerieDisciplina()}}} e nos códigos clientes --- ieducar/intranet/educar_relatorio_diario_classe_avaliacao_proc.php | 4 ++-- ieducar/intranet/educar_relatorio_diario_classe_proc.php | 4 ++-- ieducar/lib/App/Model/IedFinder.php | 73 +++++++++++++++++++++++++++++-------------------------------------------- ieducar/tests/unit/App/Model/IedFinderTest.php | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 87 insertions(+), 50 deletions(-) diff --git a/ieducar/intranet/educar_relatorio_diario_classe_avaliacao_proc.php b/ieducar/intranet/educar_relatorio_diario_classe_avaliacao_proc.php index 0283411..5264743 100644 --- a/ieducar/intranet/educar_relatorio_diario_classe_avaliacao_proc.php +++ b/ieducar/intranet/educar_relatorio_diario_classe_avaliacao_proc.php @@ -211,7 +211,7 @@ class indice extends clsCadastro // Recupera a lista de componentes curriculares da escola/série $componentes = App_Model_IedFinder::getEscolaSerieDisciplina( - $this->ref_cod_serie, $this->ref_cod_escola, TRUE + $this->ref_cod_serie, $this->ref_cod_escola ); if (0 == count($componentes)) { @@ -477,4 +477,4 @@ $miolo = new indice(); $pagina->addForm($miolo); // Gera o código HTML -$pagina->MakeAll(); \ No newline at end of file +$pagina->MakeAll(); diff --git a/ieducar/intranet/educar_relatorio_diario_classe_proc.php b/ieducar/intranet/educar_relatorio_diario_classe_proc.php index 83cc874..114ae08 100644 --- a/ieducar/intranet/educar_relatorio_diario_classe_proc.php +++ b/ieducar/intranet/educar_relatorio_diario_classe_proc.php @@ -293,7 +293,7 @@ class indice extends clsCadastro // Seleciona os componentes da escola/série $componentes = App_Model_IedFinder::getEscolaSerieDisciplina( - $this->ref_cod_serie, $this->ref_cod_escola, TRUE + $this->ref_cod_serie, $this->ref_cod_escola ); if (0 < count($componentes) && FALSE == $presencaGeral) { @@ -887,4 +887,4 @@ $miolo = new indice(); $pagina->addForm($miolo); // Gera o código HTML -$pagina->MakeAll(); \ No newline at end of file +$pagina->MakeAll(); diff --git a/ieducar/lib/App/Model/IedFinder.php b/ieducar/lib/App/Model/IedFinder.php index 37166ba..8965b30 100644 --- a/ieducar/lib/App/Model/IedFinder.php +++ b/ieducar/lib/App/Model/IedFinder.php @@ -239,46 +239,48 @@ class App_Model_IedFinder extends CoreExt_Entity * Retorna array com as referências de pmieducar.escola_serie_disciplina * a modules.componente_curricular ('ref_ref_cod_disciplina'). * - * @param int $codSerie - * @param int $codEscola - * @param bool $hydrate + * @param int $codSerie + * @param int $codEscola + * @param ComponenteCurricular_Model_ComponenteDataMapper $mapper * @return array * @throws App_Model_Exception */ - public static function getEscolaSerieDisciplina($codSerie, $codEscola, $hydrate = FALSE) + public static function getEscolaSerieDisciplina($codSerie, $codEscola, + ComponenteCurricular_Model_ComponenteDataMapper $mapper = NULL) { // Disciplinas na série na escola $escolaSerieDisciplina = self::addClassToStorage('clsPmieducarEscolaSerieDisciplina', NULL, 'include/pmieducar/clsPmieducarEscolaSerieDisciplina.inc.php'); - $disciplinasEscolaSerie = $escolaSerieDisciplina->lista($codSerie, $codEscola, NULL, 1); + $disciplinas = $escolaSerieDisciplina->lista($codSerie, $codEscola, NULL, 1); - if (FALSE === $disciplinasEscolaSerie) { - throw new App_Model_Exception( - sprintf('Nenhuma disciplina para a série (%d) e a escola (%d) informados', - $codSerie, $codEscola) - ); + if (FALSE === $disciplinas) { + throw new App_Model_Exception(sprintf( + 'Nenhuma disciplina para a série (%d) e a escola (%d) informados', + $codSerie, $codEscola + )); } - if ($hydrate) { + if (is_null($mapper)) { require_once 'ComponenteCurricular/Model/ComponenteDataMapper.php'; $mapper = new ComponenteCurricular_Model_ComponenteDataMapper(); } - $disciplinas = array(); - foreach ($disciplinasEscolaSerie as $disciplinaEscolaSerie) { - if ($hydrate) { - $disciplinas[] = $mapper->find($disciplinaEscolaSerie['ref_cod_disciplina']); - continue; + $ret = array(); + foreach ($disciplinas as $disciplina) { + $id = $disciplina['ref_cod_disciplina']; + $carga = $disciplina['carga_horaria']; + + $componente = $mapper->findComponenteCurricularAnoEscolar($id, $codSerie); + + if (!is_null($carga)) { + $componente->cargaHoraria = $carga; } - $disciplinas[] = array( - 'ref_cod_disciplina' => $disciplinaEscolaSerie['ref_cod_disciplina'], - 'carga_horaria' => $disciplinaEscolaSerie['carga_horaria'] - ); + $ret[$id] = $componente; } - return $disciplinas; + return $ret; } /** @@ -388,40 +390,23 @@ class App_Model_IedFinder extends CoreExt_Entity $serie = self::getSerie($codSerie); // Disciplinas da escola na série em que o aluno está matriculado - $disciplinas = self::getEscolaSerieDisciplina($codSerie, $codEscola); + $componentes = self::getEscolaSerieDisciplina($codSerie, $codEscola, $mapper); // Dispensas do aluno $disciplinasDispensa = self::getDisciplinasDispensadasPorMatricula( $codMatricula, $codSerie, $codEscola ); - // Instancia um data mapper caso nenhum seja provido - if (is_null($mapper)) { - require_once 'ComponenteCurricular/Model/ComponenteDataMapper.php'; - $mapper = new ComponenteCurricular_Model_ComponenteDataMapper(); - } - - // Seleciona os componentes curriculares em que o aluno está cursando - $componentes = array(); - - foreach ($disciplinas as $disciplina) { - if (in_array($disciplina['ref_cod_disciplina'], $disciplinasDispensa)) { + $ret = array(); + foreach ($componentes as $id => $componente) { + if (in_array($id, $disciplinasDispensa)) { continue; } - $componenteCurricular = $mapper->findComponenteCurricularAnoEscolar( - $disciplina['ref_cod_disciplina'], - $codSerie - ); - - if (!is_null($disciplina['carga_horaria'])) { - $componenteCurricular->cargaHoraria = $disciplina['carga_horaria']; - } - - $componentes[$componenteCurricular->id] = $componenteCurricular; + $ret[$id] = $componente; } - return $componentes; + return $ret; } /** diff --git a/ieducar/tests/unit/App/Model/IedFinderTest.php b/ieducar/tests/unit/App/Model/IedFinderTest.php index d4e13ce..7464fba 100644 --- a/ieducar/tests/unit/App/Model/IedFinderTest.php +++ b/ieducar/tests/unit/App/Model/IedFinderTest.php @@ -194,6 +194,56 @@ class App_Model_IedFinderTest extends UnitBaseTest ); } + public function testGetEscolaSerieDisciplina() + { + $returnAnoEscolar = array( + 1 => new ComponenteCurricular_Model_Componente( + array('id' => 1, 'nome' => 'Matemática', 'cargaHoraria' => 100) + ), + 2 => new ComponenteCurricular_Model_Componente( + array('id' => 2, 'nome' => 'Português', 'cargaHoraria' => 100) + ), + 3 => new ComponenteCurricular_Model_Componente( + array('id' => 3, 'nome' => 'Ciências', 'cargaHoraria' => 60) + ), + 4 => new ComponenteCurricular_Model_Componente( + array('id' => 4, 'nome' => 'Física', 'cargaHoraria' => 60) + ) + ); + + $expected = $returnAnoEscolar; + + $anoEscolarMock = $this->getCleanMock('ComponenteCurricular_Model_ComponenteDataMapper'); + $anoEscolarMock->expects($this->exactly(4)) + ->method('findComponenteCurricularAnoEscolar') + ->will($this->onConsecutiveCalls( + $returnAnoEscolar[1], $returnAnoEscolar[2], $returnAnoEscolar[3], $returnAnoEscolar[4] + )); + + // Retorna para clsPmieducarEscolaSerieDisciplina + $returnEscolaSerieDisciplina = array( + array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 1, 'carga_horaria' => 80), + array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 2, 'carga_horaria' => NULL), + array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 3, 'carga_horaria' => NULL), + array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 4, 'carga_horaria' => NULL), + ); + + // Mock para clsPmieducarEscolaSerieDisciplina + $escolaMock = $this->getCleanMock('clsPmieducarEscolaSerieDisciplina'); + $escolaMock->expects($this->any()) + ->method('lista') + ->with(1, 1, NULL, 1) + ->will($this->returnValue($returnEscolaSerieDisciplina)); + + App_Model_IedFinder::addClassToStorage('clsPmieducarEscolaSerieDisciplina', $escolaMock, NULL, TRUE); + + $componentes = App_Model_IedFinder::getEscolaSerieDisciplina(1, 1, $anoEscolarMock); + $this->assertEquals( + $expected, $componentes, + '::getEscolaSerieDisciplina() retorna os componentes de um escola-série.' + ); + } + public function testGetMatricula() { $expected = array( @@ -352,9 +402,11 @@ class App_Model_IedFinderTest extends UnitBaseTest // Mock para ComponenteCurricular_Model_ComponenteDataMapper $mapperMock = $this->getCleanMock('ComponenteCurricular_Model_ComponenteDataMapper'); - $mapperMock->expects($this->any()) + $mapperMock->expects($this->exactly(4)) ->method('findComponenteCurricularAnoEscolar') - ->will($this->onConsecutiveCalls($expected[1], $expected[3])); + ->will($this->onConsecutiveCalls( + $componentes[0], $componentes[1], $componentes[2], $componentes[3] + )); // Registra mocks CoreExt_Entity::addClassToStorage('clsPmieducarEscolaSerieDisciplina', -- libgit2 0.21.2