Commit 2ec380bbc48d14c5850098e3274efd9d7ffcfdbb

Authored by Eriksen Costa
1 parent 1f2a7d73
Exists in master

Adicionada classe {{{ComponenteCurricular_Model_Turma}}}. Usuário poderá definir…

… componentes curriculares específicos para uma turma:

 * Pode-se atribuir uma grade curricular específica para uma turma durante o seu cadastro ou atualização
 * {{{App_Model_IedFinder}}}:
  * Adicionado método {{{getComponentesTurma()}}} para selecionar os componentes curriculares de uma turma. Caso não existam componentes específicos para a turma, retorna os componentes da escola-série (através de {{{getEscolaSerieDisciplina()}}})
 * Adicionado arquivo delta (23) para criar a tabela {{{modules.componente_curricular_turma}}}. Arquivo {{{misc/database/ieducar.sql}}} atualizado
 * Módulo {{{ComponenteCurricular}}}:
  * Novas classes: {{{ComponenteCurricular_Model_Turma}}} e {{{ComponenteCurricular_Model_TurmaDataMapper}}}
  * Atualizado arquivo {{{_data/install.sql}}} com a definição da tabela {{{modules.componente_curricular_turma}}}
 * Módulo {{{Avaliacao}}}:
  * Nova dependência opcional em {{{Avaliacao_Service_Boletim}}}: {{{ComponenteCurricular_Model_TurmaDataMapper}}}
  * Testes atualizados
ieducar/intranet/educar_turma_cad.php
@@ -324,8 +324,93 @@ class indice extends clsCadastro @@ -324,8 +324,93 @@ class indice extends clsCadastro
324 324
325 $this->campoHora( 'hora_fim_intervalo', 'Hora Fim Intervalo', $this->hora_fim_intervalo, FALSE); 325 $this->campoHora( 'hora_fim_intervalo', 'Hora Fim Intervalo', $this->hora_fim_intervalo, FALSE);
326 326
327 - // Inclui módulo  
328 - $this->campoQuebra(); 327 + if ($this->ref_ref_cod_serie) {
  328 + require_once 'ComponenteCurricular/Model/ComponenteDataMapper.php';
  329 + require_once 'ComponenteCurricular/Model/AnoEscolarDataMapper.php';
  330 + require_once 'ComponenteCurricular/Model/TurmaDataMapper.php';
  331 +
  332 + $disciplinas = '';
  333 + $conteudo = '';
  334 +
  335 + // Instancia o mapper de componente curricular
  336 + $mapper = new ComponenteCurricular_Model_ComponenteDataMapper();
  337 +
  338 + // Instancia o mapper de ano escolar
  339 + $anoEscolar = new ComponenteCurricular_Model_AnoEscolarDataMapper();
  340 + $lista = $anoEscolar->findComponentePorSerie($this->ref_ref_cod_serie);
  341 +
  342 + // Instancia o mapper de turma
  343 + $componenteTurmaMapper = new ComponenteCurricular_Model_TurmaDataMapper();
  344 + $componentesTurma = $componenteTurmaMapper->findAll(array(), array('turma' => $this->cod_turma));
  345 +
  346 + $componentes = array();
  347 + foreach ($componentesTurma as $componenteTurma) {
  348 + $componentes[$componenteTurma->get('componenteCurricular')] = $componenteTurma;
  349 + }
  350 + unset($componentesTurma);
  351 +
  352 + $this->escola_serie_disciplina = array();
  353 +
  354 + if (is_array($lista) && count($lista)) {
  355 + $conteudo .= '<div style="margin-bottom: 10px;">';
  356 + $conteudo .= ' <span style="display: block; float: left; width: 250px;">Nome</span>';
  357 + $conteudo .= ' <span style="display: block; float: left; width: 100px;">Carga horária</span>';
  358 + $conteudo .= ' <span style="display: block; float: left">Usar padrão do componente?</span>';
  359 + $conteudo .= '</div>';
  360 + $conteudo .= '<br style="clear: left" />';
  361 +
  362 + foreach ($lista as $registro) {
  363 + $checked = '';
  364 +
  365 + if (isset($componentes[$registro->id])) {
  366 + $checked = 'checked="checked"';
  367 + }
  368 +
  369 + if (is_null($componentes[$registro->id]->cargaHoraria) ||
  370 + 0 == $componentes[$registro->id]->cargaHoraria) {
  371 + $usarComponente = TRUE;
  372 + }
  373 + else {
  374 + $cargaHoraria = $componentes[$registro->id]->cargaHoraria;
  375 + }
  376 + $cargaComponente = $registro->cargaHoraria;
  377 +
  378 + $conteudo .= '<div style="margin-bottom: 10px; float: left">';
  379 + $conteudo .= " <label style='display: block; float: left; width: 250px'><input type=\"checkbox\" $checked name=\"disciplinas[$registro->id]\" id=\"disciplinas[]\" value=\"{$registro->id}\">{$registro}</label>";
  380 + $conteudo .= " <label style='display: block; float: left; width: 100px;'><input type='text' name='carga_horaria[$registro->id]' value='{$cargaHoraria}' size='5' maxlength='7'></label>";
  381 + $conteudo .= " <label style='display: block; float: left'><input type='checkbox' name='usar_componente[$registro->id]' value='1' ". ($usarComponente == TRUE ? $checked : '') .">($cargaComponente h)</label>";
  382 + $conteudo .= '</div>';
  383 + $conteudo .= '<br style="clear: left" />';
  384 +
  385 + $cargaHoraria = '';
  386 + }
  387 +
  388 + $disciplinas = '<table cellspacing="0" cellpadding="0" border="0">';
  389 + $disciplinas .= sprintf('<tr align="left"><td>%s</td></tr>', $conteudo);
  390 + $disciplinas .= '</table>';
  391 + }
  392 + else {
  393 + $disciplinas = 'A série/ano escolar não possui componentes curriculares cadastrados.';
  394 + }
  395 + }
  396 +
  397 + $this->campoQuebra2();
  398 +
  399 + $help = array();
  400 + $componentes = App_Model_IedFinder::getEscolaSerieDisciplina($this->ref_ref_cod_serie, $this->ref_cod_escola);
  401 + foreach ($componentes as $componente) {
  402 + $help[] = sprintf('%s (%.0f h)', $componente->nome, $componente->cargaHoraria);
  403 + }
  404 + $help = '<ul><li>' . implode('</li><li>', $help) . '</li></ul>';
  405 +
  406 + $label = 'Componentes curriculares:<br />'
  407 + . '<strong>Observação:</strong> caso não defina os componentes<br />'
  408 + . 'curriculares para a turma, esta usará a definição<br />'
  409 + . 'da série/ano escolar da escola'
  410 + . $help;
  411 +
  412 + $this->campoRotulo('disciplinas_', $label,
  413 + "<div id='disciplinas'>$disciplinas</div>");
329 414
330 if ($_POST['turma_modulo']) { 415 if ($_POST['turma_modulo']) {
331 $this->turma_modulo = unserialize(urldecode($_POST['turma_modulo'])); 416 $this->turma_modulo = unserialize(urldecode($_POST['turma_modulo']));
@@ -540,14 +625,14 @@ class indice extends clsCadastro @@ -540,14 +625,14 @@ class indice extends clsCadastro
540 625
541 $this->ref_cod_instituicao_regente = $this->ref_cod_instituicao; 626 $this->ref_cod_instituicao_regente = $this->ref_cod_instituicao;
542 627
543 - if ($this->multiseriada == 'on') { 628 + if (isset($this->multiseriada)) {
544 $this->multiseriada = 1; 629 $this->multiseriada = 1;
545 } 630 }
546 else { 631 else {
547 $this->multiseriada = 0; 632 $this->multiseriada = 0;
548 } 633 }
549 634
550 - if ($this->visivel == 'on') { 635 + if (isset($this->visivel)) {
551 $this->visivel = TRUE; 636 $this->visivel = TRUE;
552 } 637 }
553 else { 638 else {
@@ -648,6 +733,11 @@ class indice extends clsCadastro @@ -648,6 +733,11 @@ class indice extends clsCadastro
648 733
649 return FALSE; 734 return FALSE;
650 } 735 }
  736 +
  737 + $this->atualizaComponentesCurriculares(
  738 + $this->ref_ref_cod_serie, $this->ref_cod_escola, $this->cod_turma,
  739 + $this->disciplinas, $this->carga_horaria, $this->usar_componente
  740 + );
651 } 741 }
652 742
653 function Editar() 743 function Editar()
@@ -658,14 +748,14 @@ class indice extends clsCadastro @@ -658,14 +748,14 @@ class indice extends clsCadastro
658 748
659 $this->ref_cod_instituicao_regente = $this->ref_cod_instituicao; 749 $this->ref_cod_instituicao_regente = $this->ref_cod_instituicao;
660 750
661 - if ($this->multiseriada == 'on') { 751 + if (isset($this->multiseriada)) {
662 $this->multiseriada = 1; 752 $this->multiseriada = 1;
663 } 753 }
664 else { 754 else {
665 $this->multiseriada = 0; 755 $this->multiseriada = 0;
666 } 756 }
667 757
668 - if ($this->visivel == 'on') { 758 + if (isset($this->visivel)) {
669 $this->visivel = TRUE; 759 $this->visivel = TRUE;
670 } 760 }
671 else { 761 else {
@@ -761,6 +851,11 @@ class indice extends clsCadastro @@ -761,6 +851,11 @@ class indice extends clsCadastro
761 $editou = $obj->edita(); 851 $editou = $obj->edita();
762 } 852 }
763 853
  854 + $this->atualizaComponentesCurriculares(
  855 + $this->ref_ref_cod_serie, $this->ref_cod_escola, $this->cod_turma,
  856 + $this->disciplinas, $this->carga_horaria, $this->usar_componente
  857 + );
  858 +
764 if ($editou) { 859 if ($editou) {
765 $this->mensagem .= 'Edição efetuada com sucesso.'; 860 $this->mensagem .= 'Edição efetuada com sucesso.';
766 header('Location: educar_turma_lst.php'); 861 header('Location: educar_turma_lst.php');
@@ -774,6 +869,26 @@ class indice extends clsCadastro @@ -774,6 +869,26 @@ class indice extends clsCadastro
774 } 869 }
775 } 870 }
776 871
  872 + function atualizaComponentesCurriculares($codSerie, $codEscola, $codTurma, $componentes, $cargaHoraria, $usarComponente)
  873 + {
  874 + require_once 'ComponenteCurricular/Model/TurmaDataMapper.php';
  875 + $mapper = new ComponenteCurricular_Model_TurmaDataMapper();
  876 +
  877 + $componentesTurma = array();
  878 +
  879 + foreach ($componentes as $key => $value) {
  880 + $carga = isset($usarComponente[$key]) ?
  881 + NULL : $cargaHoraria[$key];
  882 +
  883 + $componentesTurma[] = array(
  884 + 'id' => $value,
  885 + 'cargaHoraria' => $carga
  886 + );
  887 + }
  888 +
  889 + $mapper->bulkUpdate($codSerie, $codEscola, $codTurma, $componentesTurma);
  890 + }
  891 +
777 function Excluir() 892 function Excluir()
778 { 893 {
779 @session_start(); 894 @session_start();
@@ -1140,15 +1255,59 @@ document.getElementById(&#39;ref_ref_cod_serie&#39;).onchange = function() @@ -1140,15 +1255,59 @@ document.getElementById(&#39;ref_ref_cod_serie&#39;).onchange = function()
1140 { 1255 {
1141 if (this.value) { 1256 if (this.value) {
1142 getHoraEscolaSerie(); 1257 getHoraEscolaSerie();
  1258 + getComponentesCurriculares(this.value);
1143 } 1259 }
1144 1260
1145 - if(document.getElementById('multiseriada').checked == true) { 1261 + if (document.getElementById('multiseriada').checked == true) {
1146 changeMultiSerie(); 1262 changeMultiSerie();
1147 } 1263 }
1148 1264
1149 hideMultiSerie(); 1265 hideMultiSerie();
1150 } 1266 }
1151 1267
  1268 +function getComponentesCurriculares(campoSerie)
  1269 +{
  1270 + var xml_disciplina = new ajax(parseComponentesCurriculares);
  1271 + xml_disciplina.envia("educar_disciplina_xml.php?ser=" + campoSerie);
  1272 +}
  1273 +
  1274 +function parseComponentesCurriculares(xml_disciplina)
  1275 +{
  1276 + var campoDisciplinas = document.getElementById('disciplinas');
  1277 + var DOM_array = xml_disciplina.getElementsByTagName('disciplina');
  1278 + var conteudo = '';
  1279 +
  1280 + if (DOM_array.length) {
  1281 + conteudo += '<div style="margin-bottom: 10px; float: left">';
  1282 + conteudo += ' <span style="display: block; float: left; width: 250px;">Nome</span>';
  1283 + conteudo += ' <label span="display: block; float: left; width: 100px">Carga horária</span>';
  1284 + conteudo += ' <label span="display: block; float: left">Usar padrão do componente?</span>';
  1285 + conteudo += '</div>';
  1286 + conteudo += '<br style="clear: left" />';
  1287 +
  1288 + for (var i = 0; i < DOM_array.length; i++) {
  1289 + id = DOM_array[i].getAttribute("cod_disciplina");
  1290 +
  1291 + conteudo += '<div style="margin-bottom: 10px; float: left">';
  1292 + conteudo += ' <label style="display: block; float: left; width: 250px;"><input type="checkbox" name="disciplinas['+ id +']" id="disciplinas[]" value="'+ id +'">'+ DOM_array[i].firstChild.data +'</label>';
  1293 + conteudo += ' <label style="display: block; float: left; width: 100px;"><input type="text" name="carga_horaria['+ id +']" value="" size="5" maxlength="7"></label>';
  1294 + conteudo += ' <label style="display: block; float: left"><input type="checkbox" name="usar_componente['+ id +']" value="1">('+ DOM_array[i].getAttribute("carga_horaria") +' h)</label>';
  1295 + conteudo += '</div>';
  1296 + conteudo += '<br style="clear: left" />';
  1297 + }
  1298 + }
  1299 + else {
  1300 + campoDisciplinas.innerHTML = 'A série/ano escolar não possui componentes '
  1301 + + 'curriculares cadastrados.';
  1302 + }
  1303 +
  1304 + if (conteudo) {
  1305 + campoDisciplinas.innerHTML = '<table cellspacing="0" cellpadding="0" border="0">';
  1306 + campoDisciplinas.innerHTML += '<tr align="left"><td>'+ conteudo +'</td></tr>';
  1307 + campoDisciplinas.innerHTML += '</table>';
  1308 + }
  1309 +}
  1310 +
1152 function hideMultiSerie() 1311 function hideMultiSerie()
1153 { 1312 {
1154 setVisibility('tr_multiseriada', document.getElementById('ref_ref_cod_serie').value != '' ? true : false); 1313 setVisibility('tr_multiseriada', document.getElementById('ref_ref_cod_serie').value != '' ? true : false);
@@ -1159,6 +1318,7 @@ function hideMultiSerie() @@ -1159,6 +1318,7 @@ function hideMultiSerie()
1159 setVisibility('ref_ref_cod_serie_mult', multiBool); 1318 setVisibility('ref_ref_cod_serie_mult', multiBool);
1160 setVisibility('tr_ref_ref_cod_serie_mult',multiBool); 1319 setVisibility('tr_ref_ref_cod_serie_mult',multiBool);
1161 } 1320 }
  1321 +
1162 function PadraoAnoEscolar(xml) 1322 function PadraoAnoEscolar(xml)
1163 { 1323 {
1164 var escola_curso_ = new Array(); 1324 var escola_curso_ = new Array();
ieducar/lib/App/Model/IedFinder.php
@@ -239,20 +239,24 @@ class App_Model_IedFinder extends CoreExt_Entity @@ -239,20 +239,24 @@ class App_Model_IedFinder extends CoreExt_Entity
239 * Retorna array com as referências de pmieducar.escola_serie_disciplina 239 * Retorna array com as referências de pmieducar.escola_serie_disciplina
240 * a modules.componente_curricular ('ref_ref_cod_disciplina'). 240 * a modules.componente_curricular ('ref_ref_cod_disciplina').
241 * 241 *
242 - * @param int $codSerie  
243 - * @param int $codEscola  
244 - * @param ComponenteCurricular_Model_ComponenteDataMapper $mapper 242 + * @param int $anoEscolar O código do ano escolar/série.
  243 + * @param int $escola O código da escola.
  244 + * @param ComponenteCurricular_Model_ComponenteDataMapper $mapper (Opcional)
  245 + * Instância do mapper para recuperar todas as instâncias persistidas de
  246 + * ComponenteCurricular_Model_Componente atribuídas no ano escolar/série da
  247 + * escola.
245 * @return array 248 * @return array
246 - * @throws App_Model_Exception 249 + * @throws App_Model_Exception caso não existam componentes curriculares
  250 + * atribuídos ao ano escolar/série da escola.
247 */ 251 */
248 - public static function getEscolaSerieDisciplina($codSerie, $codEscola, 252 + public static function getEscolaSerieDisciplina($anoEscolar, $escola,
249 ComponenteCurricular_Model_ComponenteDataMapper $mapper = NULL) 253 ComponenteCurricular_Model_ComponenteDataMapper $mapper = NULL)
250 { 254 {
251 // Disciplinas na série na escola 255 // Disciplinas na série na escola
252 $escolaSerieDisciplina = self::addClassToStorage('clsPmieducarEscolaSerieDisciplina', 256 $escolaSerieDisciplina = self::addClassToStorage('clsPmieducarEscolaSerieDisciplina',
253 NULL, 'include/pmieducar/clsPmieducarEscolaSerieDisciplina.inc.php'); 257 NULL, 'include/pmieducar/clsPmieducarEscolaSerieDisciplina.inc.php');
254 258
255 - $disciplinas = $escolaSerieDisciplina->lista($codSerie, $codEscola, NULL, 1); 259 + $disciplinas = $escolaSerieDisciplina->lista($anoEscolar, $escola, NULL, 1);
256 260
257 if (FALSE === $disciplinas) { 261 if (FALSE === $disciplinas) {
258 throw new App_Model_Exception(sprintf( 262 throw new App_Model_Exception(sprintf(
@@ -261,19 +265,91 @@ class App_Model_IedFinder extends CoreExt_Entity @@ -261,19 +265,91 @@ class App_Model_IedFinder extends CoreExt_Entity
261 )); 265 ));
262 } 266 }
263 267
  268 + $componentes = array();
  269 + foreach ($disciplinas as $disciplina) {
  270 + $componente = new stdClass();
  271 +
  272 + $componente->id = $disciplina['ref_cod_disciplina'];
  273 + $componente->cargaHoraria = $disciplina['carga_horaria'];
  274 +
  275 + $componentes[] = $componente;
  276 + }
  277 +
  278 + return self::_hydrateComponentes($componentes, $anoEscolar, $mapper);
  279 + }
  280 +
  281 + /**
  282 + * Retorna as instâncias de ComponenteCurricular_Model_Componente de uma turma.
  283 + *
  284 + * @param int $anoEscolar O código do ano escolar/série da turma.
  285 + * @param int $escola O código da escola da turma.
  286 + * @param int $turma O código da turma.
  287 + * @param ComponenteCurricular_Model_TurmaDataMapper $mapper (Opcional) Instância
  288 + * do mapper para selecionar todas as referências de
  289 + * ComponenteCurricular_Model_Componente persistidas para a turma.
  290 + * @param ComponenteCurricular_Model_ComponenteDataMapper $componenteMapper (Opcional)
  291 + * Instância do mapper para recuperar as instâncias de
  292 + * ComponenteCurricular_Model_Componente recuperadas por $mapper.
  293 + * @return array
  294 + */
  295 + public static function getComponentesTurma($anoEscolar, $escola, $turma,
  296 + ComponenteCurricular_Model_TurmaDataMapper $mapper = NULL,
  297 + ComponenteCurricular_Model_ComponenteDataMapper $componenteMapper = NULL)
  298 + {
  299 + if (is_null($mapper)) {
  300 + require_once 'ComponenteCurricular/Model/TurmaDataMapper.php';
  301 + $mapper = new ComponenteCurricular_Model_TurmaDataMapper();
  302 + }
  303 +
  304 + $componentesTurma = $mapper->findAll(array(), array('turma' => $turma));
  305 +
  306 + // Não existem componentes específicos para a turma
  307 + if (0 == count($componentesTurma)) {
  308 + return self::getEscolaSerieDisciplina($anoEscolar, $escola, $componenteMapper);
  309 + }
  310 +
  311 + $componentes = array();
  312 + foreach ($componentesTurma as $componenteTurma) {
  313 + $componente = new stdClass();
  314 +
  315 + $componente->id = $componenteTurma->get('componenteCurricular');
  316 + $componente->cargaHoraria = $componenteTurma->cargaHoraria;
  317 +
  318 + $componentes[] = $componente;
  319 + }
  320 +
  321 + return self::_hydrateComponentes($componentes, $anoEscolar, $componenteMapper);
  322 + }
  323 +
  324 + /**
  325 + * Recupera instâncias persistidas de ComponenteCurricular_Model_Componente,
  326 + * retornando-as com a carga horária padrão caso o componente identificado
  327 + * em $componentes possua uma carga horária (atributo cargaHoraria) nula.
  328 + *
  329 + * @param array $componentes (array(stdClass->id, stdClass->cargaHoraria))
  330 + * @param int $anoEscolar O ano escolar/série para recuperar a carga
  331 + * horária padrão do componente curricular.
  332 + * @param ComponenteCurricular_Model_ComponenteDataMapper $mapper (Opcional)
  333 + * O mapper para recuperar a instância persistida com a carga horária padrão.
  334 + * @return array
  335 + */
  336 + protected static function _hydrateComponentes(array $componentes, $anoEscolar,
  337 + ComponenteCurricular_Model_ComponenteDataMapper $mapper = NULL)
  338 + {
264 if (is_null($mapper)) { 339 if (is_null($mapper)) {
265 require_once 'ComponenteCurricular/Model/ComponenteDataMapper.php'; 340 require_once 'ComponenteCurricular/Model/ComponenteDataMapper.php';
266 $mapper = new ComponenteCurricular_Model_ComponenteDataMapper(); 341 $mapper = new ComponenteCurricular_Model_ComponenteDataMapper();
267 } 342 }
268 343
269 $ret = array(); 344 $ret = array();
270 - foreach ($disciplinas as $disciplina) {  
271 - $id = $disciplina['ref_cod_disciplina'];  
272 - $carga = $disciplina['carga_horaria'];  
273 345
274 - $componente = $mapper->findComponenteCurricularAnoEscolar($id, $codSerie); 346 + foreach ($componentes as $componentePlaceholder) {
  347 + $id = $componentePlaceholder->id;
  348 + $carga = $componentePlaceholder->cargaHoraria;
  349 +
  350 + $componente = $mapper->findComponenteCurricularAnoEscolar($id, $anoEscolar);
275 351
276 - if (!is_null($carga)) { 352 + if (! is_null($carga)) {
277 $componente->cargaHoraria = $carga; 353 $componente->cargaHoraria = $carga;
278 } 354 }
279 355
@@ -375,22 +451,27 @@ class App_Model_IedFinder extends CoreExt_Entity @@ -375,22 +451,27 @@ class App_Model_IedFinder extends CoreExt_Entity
375 * de cursar. 451 * de cursar.
376 * 452 *
377 * @param int $codMatricula 453 * @param int $codMatricula
378 - * @param ComponenteCurricular_Model_ComponenteDataMapper $mapper 454 + * @param ComponenteCurricular_Model_ComponenteDataMapper $componenteMapper
  455 + * @param ComponenteCurricular_Model_TurmaDataMapper $turmaMapper
379 * @return array 456 * @return array
380 * @throws App_Model_Exception 457 * @throws App_Model_Exception
381 */ 458 */
382 public static function getComponentesPorMatricula($codMatricula, 459 public static function getComponentesPorMatricula($codMatricula,
383 - ComponenteCurricular_Model_ComponenteDataMapper $mapper = NULL) 460 + ComponenteCurricular_Model_ComponenteDataMapper $componenteMapper = NULL,
  461 + ComponenteCurricular_Model_TurmaDataMapper $turmaMapper = NULL)
384 { 462 {
385 $matricula = self::getMatricula($codMatricula); 463 $matricula = self::getMatricula($codMatricula);
386 464
387 $codEscola = $matricula['ref_ref_cod_escola']; 465 $codEscola = $matricula['ref_ref_cod_escola'];
388 $codSerie = $matricula['ref_ref_cod_serie']; 466 $codSerie = $matricula['ref_ref_cod_serie'];
  467 + $turma = $matricula['ref_cod_turma'];
389 468
390 $serie = self::getSerie($codSerie); 469 $serie = self::getSerie($codSerie);
391 470
392 // Disciplinas da escola na série em que o aluno está matriculado 471 // Disciplinas da escola na série em que o aluno está matriculado
393 - $componentes = self::getEscolaSerieDisciplina($codSerie, $codEscola, $mapper); 472 + $componentes = self::getComponentesTurma(
  473 + $codSerie, $codEscola, $turma, $turmaMapper, $componenteMapper
  474 + );
394 475
395 // Dispensas do aluno 476 // Dispensas do aluno
396 $disciplinasDispensa = self::getDisciplinasDispensadasPorMatricula( 477 $disciplinasDispensa = self::getDisciplinasDispensadasPorMatricula(
ieducar/misc/database/deltas/23_cria_tabela_modules_componente_curricular_turma.sql 0 → 100644
@@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
  1 +-- //
  2 +
  3 +--
  4 +-- Cria a tabela modules.componente_curricular_turma para permitir a atribuição
  5 +-- de componentes curriculares a uma turma, dando mais flexibilidade de
  6 +-- configuração ao usuário.
  7 +--
  8 +-- @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  9 +-- @license @@license@@
  10 +-- @version $Id$
  11 +--
  12 +
  13 +CREATE TABLE "modules"."componente_curricular_turma" (
  14 + "componente_curricular_id" int NOT NULL,
  15 + "ano_escolar_id" int NOT NULL,
  16 + "escola_id" int NOT NULL,
  17 + "turma_id" int NOT NULL,
  18 + "carga_horaria" numeric(6,3),
  19 + PRIMARY KEY("componente_curricular_id","turma_id")
  20 +);
  21 +
  22 +ALTER TABLE "modules"."componente_curricular_turma"
  23 + ADD CONSTRAINT "componente_curricular_turma_componente_curricular_fkey"
  24 + FOREIGN KEY("componente_curricular_id")
  25 + REFERENCES "modules"."componente_curricular"("id")
  26 + ON DELETE RESTRICT
  27 + ON UPDATE NO ACTION;
  28 +
  29 +ALTER TABLE "modules"."componente_curricular_turma"
  30 + ADD CONSTRAINT "componente_curricular_turma_fkey"
  31 + FOREIGN KEY("turma_id")
  32 + REFERENCES "pmieducar"."turma"("cod_turma")
  33 + ON DELETE CASCADE
  34 + ON UPDATE NO ACTION;
  35 +
  36 +CREATE INDEX "componente_curricular_turma_turma_idx"
  37 + ON "modules"."componente_curricular_turma"("turma_id");
  38 +
  39 +-- //@UNDO
  40 +
  41 +DROP INDEX "componente_curricular_turma_turma_idx";
  42 +ALTER TABLE "modules"."componente_curricular_turma"
  43 + DROP CONSTRAINT "componente_curricular_turma_componente_curricular_fkey" CASCADE;
  44 +ALTER TABLE "modules"."componente_curricular_turma"
  45 + DROP CONSTRAINT "componente_curricular_turma_fkey" CASCADE;
  46 +DROP TABLE "modules"."componente_curricular_turma";
  47 +
  48 +-- //
0 \ No newline at end of file 49 \ No newline at end of file
ieducar/misc/database/ieducar.sql
@@ -10337,6 +10337,19 @@ SELECT pg_catalog.setval(&#39;componente_curricular_id_seq&#39;, 1, false); @@ -10337,6 +10337,19 @@ SELECT pg_catalog.setval(&#39;componente_curricular_id_seq&#39;, 1, false);
10337 10337
10338 10338
10339 -- 10339 --
  10340 +-- Name: componente_curricular_turma; Type: TABLE; Schema: modules; Owner: -; Tablespace:
  10341 +--
  10342 +
  10343 +CREATE TABLE componente_curricular_turma (
  10344 + componente_curricular_id integer NOT NULL,
  10345 + ano_escolar_id integer NOT NULL,
  10346 + escola_id integer NOT NULL,
  10347 + turma_id integer NOT NULL,
  10348 + carga_horaria numeric(6,3)
  10349 +);
  10350 +
  10351 +
  10352 +--
10340 -- Name: falta_aluno; Type: TABLE; Schema: modules; Owner: -; Tablespace: 10353 -- Name: falta_aluno; Type: TABLE; Schema: modules; Owner: -; Tablespace:
10341 -- 10354 --
10342 10355
@@ -17718,6 +17731,12 @@ SET search_path = modules, pg_catalog; @@ -17718,6 +17731,12 @@ SET search_path = modules, pg_catalog;
17718 17731
17719 17732
17720 -- 17733 --
  17734 +-- Data for Name: componente_curricular_turma; Type: TABLE DATA; Schema: modules; Owner: -
  17735 +--
  17736 +
  17737 +
  17738 +
  17739 +--
17721 -- Data for Name: falta_aluno; Type: TABLE DATA; Schema: modules; Owner: - 17740 -- Data for Name: falta_aluno; Type: TABLE DATA; Schema: modules; Owner: -
17722 -- 17741 --
17723 17742
@@ -20115,6 +20134,7 @@ INSERT INTO changelog VALUES (19, &#39;Main&#39;, &#39;NOW()&#39;, &#39;NOW()&#39;, &#39;dbdeploy&#39;, &#39;19_atua @@ -20115,6 +20134,7 @@ INSERT INTO changelog VALUES (19, &#39;Main&#39;, &#39;NOW()&#39;, &#39;NOW()&#39;, &#39;dbdeploy&#39;, &#39;19_atua
20115 INSERT INTO changelog VALUES (20, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '20_remove_permissao_e_menu_diario_avaliacao_temp.sql'); 20134 INSERT INTO changelog VALUES (20, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '20_remove_permissao_e_menu_diario_avaliacao_temp.sql');
20116 INSERT INTO changelog VALUES (21, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '21_cria_tabelas_modulo_calendario.sql'); 20135 INSERT INTO changelog VALUES (21, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '21_cria_tabelas_modulo_calendario.sql');
20117 INSERT INTO changelog VALUES (22, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '22_cria_primary_key_em_modules_calendario_turma.sql'); 20136 INSERT INTO changelog VALUES (22, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '22_cria_primary_key_em_modules_calendario_turma.sql');
  20137 +INSERT INTO changelog VALUES (23, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '23_cria_tabela_modules_componente_curricular_turma.sql');
20118 20138
20119 20139
20120 -- 20140 --
@@ -27017,6 +27037,14 @@ ALTER TABLE ONLY componente_curricular @@ -27017,6 +27037,14 @@ ALTER TABLE ONLY componente_curricular
27017 27037
27018 27038
27019 -- 27039 --
  27040 +-- Name: componente_curricular_turma_pkey; Type: CONSTRAINT; Schema: modules; Owner: -; Tablespace:
  27041 +--
  27042 +
  27043 +ALTER TABLE ONLY componente_curricular_turma
  27044 + ADD CONSTRAINT componente_curricular_turma_pkey PRIMARY KEY (componente_curricular_id, turma_id);
  27045 +
  27046 +
  27047 +--
27020 -- Name: falta_aluno_pkey; Type: CONSTRAINT; Schema: modules; Owner: -; Tablespace: 27048 -- Name: falta_aluno_pkey; Type: CONSTRAINT; Schema: modules; Owner: -; Tablespace:
27021 -- 27049 --
27022 27050
@@ -28960,6 +28988,13 @@ CREATE UNIQUE INDEX componente_curricular_id_key ON componente_curricular USING @@ -28960,6 +28988,13 @@ CREATE UNIQUE INDEX componente_curricular_id_key ON componente_curricular USING
28960 28988
28961 28989
28962 -- 28990 --
  28991 +-- Name: componente_curricular_turma_turma_idx; Type: INDEX; Schema: modules; Owner: -; Tablespace:
  28992 +--
  28993 +
  28994 +CREATE INDEX componente_curricular_turma_turma_idx ON componente_curricular_turma USING btree (turma_id);
  28995 +
  28996 +
  28997 +--
28963 -- Name: regra_avaliacao_id_key; Type: INDEX; Schema: modules; Owner: -; Tablespace: 28998 -- Name: regra_avaliacao_id_key; Type: INDEX; Schema: modules; Owner: -; Tablespace:
28964 -- 28999 --
28965 29000
@@ -32810,6 +32845,22 @@ ALTER TABLE ONLY componente_curricular @@ -32810,6 +32845,22 @@ ALTER TABLE ONLY componente_curricular
32810 32845
32811 32846
32812 -- 32847 --
  32848 +-- Name: componente_curricular_turma_componente_curricular_fkey; Type: FK CONSTRAINT; Schema: modules; Owner: -
  32849 +--
  32850 +
  32851 +ALTER TABLE ONLY componente_curricular_turma
  32852 + ADD CONSTRAINT componente_curricular_turma_componente_curricular_fkey FOREIGN KEY (componente_curricular_id) REFERENCES componente_curricular(id) ON DELETE RESTRICT;
  32853 +
  32854 +
  32855 +--
  32856 +-- Name: componente_curricular_turma_fkey; Type: FK CONSTRAINT; Schema: modules; Owner: -
  32857 +--
  32858 +
  32859 +ALTER TABLE ONLY componente_curricular_turma
  32860 + ADD CONSTRAINT componente_curricular_turma_fkey FOREIGN KEY (turma_id) REFERENCES pmieducar.turma(cod_turma) ON DELETE CASCADE;
  32861 +
  32862 +
  32863 +--
32813 -- Name: falta_componente_curricular_falta_aluno_fk; Type: FK CONSTRAINT; Schema: modules; Owner: - 32864 -- Name: falta_componente_curricular_falta_aluno_fk; Type: FK CONSTRAINT; Schema: modules; Owner: -
32814 -- 32865 --
32815 32866
ieducar/modules/Avaliacao/Service/Boletim.php
@@ -79,6 +79,11 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable @@ -79,6 +79,11 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
79 protected $_componenteDataMapper = NULL; 79 protected $_componenteDataMapper = NULL;
80 80
81 /** 81 /**
  82 + * @var ComponenteCurricular_Model_TurmaDataMapper
  83 + */
  84 + protected $_componenteTurmaDataMapper = NULL;
  85 +
  86 + /**
82 * @var RegraAvaliacao_Model_RegraDataMapper 87 * @var RegraAvaliacao_Model_RegraDataMapper
83 */ 88 */
84 protected $_regraDataMapper = NULL; 89 protected $_regraDataMapper = NULL;
@@ -273,6 +278,11 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable @@ -273,6 +278,11 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
273 unset($options['ComponenteDataMapper']); 278 unset($options['ComponenteDataMapper']);
274 } 279 }
275 280
  281 + if (isset($options['ComponenteTurmaDataMapper'])) {
  282 + $this->setComponenteTurmaDataMapper($options['ComponenteTurmaDataMapper']);
  283 + unset($options['ComponenteTurmaDataMapper']);
  284 + }
  285 +
276 if (isset($options['RegraDataMapper'])) { 286 if (isset($options['RegraDataMapper'])) {
277 $this->setRegraDataMapper($options['RegraDataMapper']); 287 $this->setRegraDataMapper($options['RegraDataMapper']);
278 unset($options['RegraDataMapper']); 288 unset($options['RegraDataMapper']);
@@ -383,6 +393,30 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable @@ -383,6 +393,30 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
383 393
384 /** 394 /**
385 * Setter. 395 * Setter.
  396 + * @param ComponenteCurricular_Model_TurmaDataMapper $mapper
  397 + * @return App_Service_Boletim Provê interface fluída
  398 + */
  399 + public function setComponenteTurmaDataMapper(ComponenteCurricular_Model_TurmaDataMapper $mapper)
  400 + {
  401 + $this->_componenteTurmaDataMapper = $mapper;
  402 + return $this;
  403 + }
  404 +
  405 + /**
  406 + * Getter.
  407 + * @return ComponenteCurricular_Model_TurmaDataMapper
  408 + */
  409 + public function getComponenteTurmaDataMapper()
  410 + {
  411 + if (is_null($this->_componenteTurmaDataMapper)) {
  412 + require_once 'ComponenteCurricular/Model/TurmaDataMapper.php';
  413 + $this->setComponenteTurmaDataMapper(new ComponenteCurricular_Model_TurmaDataMapper());
  414 + }
  415 + return $this->_componenteTurmaDataMapper;
  416 + }
  417 +
  418 + /**
  419 + * Setter.
386 * @param RegraAvaliacao_Model_RegraDataMapper $mapper 420 * @param RegraAvaliacao_Model_RegraDataMapper $mapper
387 * @return App_Service_Boletim Provê interface fluída 421 * @return App_Service_Boletim Provê interface fluída
388 */ 422 */
@@ -773,7 +807,8 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable @@ -773,7 +807,8 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
773 )) 807 ))
774 808
775 ->_setComponentes(App_Model_IedFinder::getComponentesPorMatricula( 809 ->_setComponentes(App_Model_IedFinder::getComponentesPorMatricula(
776 - $codMatricula, $this->getComponenteDataMapper() 810 + $codMatricula, $this->getComponenteDataMapper(),
  811 + $this->getComponenteTurmaDataMapper()
777 )); 812 ));
778 813
779 // Valores scalar de referência 814 // Valores scalar de referência
ieducar/modules/Avaliacao/_data/install.sql
@@ -8,14 +8,14 @@ @@ -8,14 +8,14 @@
8 -- @version $Id$ 8 -- @version $Id$
9 -- 9 --
10 10
11 -CREATE TABLE "modules"."falta_aluno" ( 11 +CREATE TABLE "modules"."falta_aluno" (
12 "id" serial NOT NULL, 12 "id" serial NOT NULL,
13 "matricula_id" int NOT NULL, 13 "matricula_id" int NOT NULL,
14 "tipo_falta" smallint NOT NULL, 14 "tipo_falta" smallint NOT NULL,
15 PRIMARY KEY("id") 15 PRIMARY KEY("id")
16 ); 16 );
17 17
18 -CREATE TABLE "modules"."falta_componente_curricular" ( 18 +CREATE TABLE "modules"."falta_componente_curricular" (
19 "id" serial NOT NULL, 19 "id" serial NOT NULL,
20 "falta_aluno_id" int NOT NULL, 20 "falta_aluno_id" int NOT NULL,
21 "componente_curricular_id" int NOT NULL, 21 "componente_curricular_id" int NOT NULL,
@@ -24,7 +24,7 @@ CREATE TABLE &quot;modules&quot;.&quot;falta_componente_curricular&quot; ( @@ -24,7 +24,7 @@ CREATE TABLE &quot;modules&quot;.&quot;falta_componente_curricular&quot; (
24 PRIMARY KEY("id") 24 PRIMARY KEY("id")
25 ); 25 );
26 26
27 -CREATE TABLE "modules"."falta_geral" ( 27 +CREATE TABLE "modules"."falta_geral" (
28 "id" serial NOT NULL, 28 "id" serial NOT NULL,
29 "falta_aluno_id" int NOT NULL, 29 "falta_aluno_id" int NOT NULL,
30 "quantidade" int NULL DEFAULT 0, 30 "quantidade" int NULL DEFAULT 0,
@@ -32,13 +32,13 @@ CREATE TABLE &quot;modules&quot;.&quot;falta_geral&quot; ( @@ -32,13 +32,13 @@ CREATE TABLE &quot;modules&quot;.&quot;falta_geral&quot; (
32 PRIMARY KEY("id") 32 PRIMARY KEY("id")
33 ); 33 );
34 34
35 -CREATE TABLE "modules"."nota_aluno" ( 35 +CREATE TABLE "modules"."nota_aluno" (
36 "id" serial NOT NULL, 36 "id" serial NOT NULL,
37 "matricula_id" int NOT NULL, 37 "matricula_id" int NOT NULL,
38 PRIMARY KEY("id") 38 PRIMARY KEY("id")
39 ); 39 );
40 40
41 -CREATE TABLE "modules"."nota_componente_curricular" ( 41 +CREATE TABLE "modules"."nota_componente_curricular" (
42 "id" serial NOT NULL, 42 "id" serial NOT NULL,
43 "nota_aluno_id" int NOT NULL, 43 "nota_aluno_id" int NOT NULL,
44 "componente_curricular_id" int NOT NULL, 44 "componente_curricular_id" int NOT NULL,
@@ -48,7 +48,7 @@ CREATE TABLE &quot;modules&quot;.&quot;nota_componente_curricular&quot; ( @@ -48,7 +48,7 @@ CREATE TABLE &quot;modules&quot;.&quot;nota_componente_curricular&quot; (
48 PRIMARY KEY("id") 48 PRIMARY KEY("id")
49 ); 49 );
50 50
51 -CREATE TABLE "modules"."nota_componente_curricular_media" ( 51 +CREATE TABLE "modules"."nota_componente_curricular_media" (
52 "nota_aluno_id" int NOT NULL, 52 "nota_aluno_id" int NOT NULL,
53 "componente_curricular_id" int NOT NULL, 53 "componente_curricular_id" int NOT NULL,
54 "media" decimal(5,3) NULL DEFAULT 0, 54 "media" decimal(5,3) NULL DEFAULT 0,
@@ -57,50 +57,83 @@ CREATE TABLE &quot;modules&quot;.&quot;nota_componente_curricular_media&quot; ( @@ -57,50 +57,83 @@ CREATE TABLE &quot;modules&quot;.&quot;nota_componente_curricular_media&quot; (
57 PRIMARY KEY("nota_aluno_id","componente_curricular_id") 57 PRIMARY KEY("nota_aluno_id","componente_curricular_id")
58 ); 58 );
59 59
  60 +CREATE TABLE "modules"."componente_curricular_turma" (
  61 + "componente_curricular_id" int NOT NULL,
  62 + "ano_escolar_id" int NOT NULL,
  63 + "escola_id" int NOT NULL,
  64 + "turma_id" int NOT NULL,
  65 + "carga_horaria" numeric(6,3),
  66 + PRIMARY KEY("componente_curricular_id","turma_id")
  67 +);
  68 +
60 ALTER TABLE "modules"."falta_componente_curricular" 69 ALTER TABLE "modules"."falta_componente_curricular"
61 ADD CONSTRAINT "falta_componente_curricular_falta_aluno_fk" 70 ADD CONSTRAINT "falta_componente_curricular_falta_aluno_fk"
62 FOREIGN KEY("falta_aluno_id") 71 FOREIGN KEY("falta_aluno_id")
63 REFERENCES "modules"."falta_aluno"("id") 72 REFERENCES "modules"."falta_aluno"("id")
64 - ON DELETE CASCADE  
65 - ON UPDATE NO ACTION ; 73 + ON DELETE CASCADE
  74 + ON UPDATE NO ACTION;
66 75
67 ALTER TABLE "modules"."falta_geral" 76 ALTER TABLE "modules"."falta_geral"
68 ADD CONSTRAINT "falta_geral_falta_aluno_fk" 77 ADD CONSTRAINT "falta_geral_falta_aluno_fk"
69 FOREIGN KEY("falta_aluno_id") 78 FOREIGN KEY("falta_aluno_id")
70 REFERENCES "modules"."falta_aluno"("id") 79 REFERENCES "modules"."falta_aluno"("id")
71 - ON DELETE CASCADE  
72 - ON UPDATE NO ACTION ; 80 + ON DELETE CASCADE
  81 + ON UPDATE NO ACTION;
73 82
74 ALTER TABLE "modules"."nota_componente_curricular" 83 ALTER TABLE "modules"."nota_componente_curricular"
75 ADD CONSTRAINT "nota_componente_curricular_nota_aluno_fk" 84 ADD CONSTRAINT "nota_componente_curricular_nota_aluno_fk"
76 FOREIGN KEY("nota_aluno_id") 85 FOREIGN KEY("nota_aluno_id")
77 REFERENCES "modules"."nota_aluno"("id") 86 REFERENCES "modules"."nota_aluno"("id")
78 - ON DELETE CASCADE  
79 - ON UPDATE NO ACTION ; 87 + ON DELETE CASCADE
  88 + ON UPDATE NO ACTION;
80 89
81 ALTER TABLE "modules"."nota_componente_curricular_media" 90 ALTER TABLE "modules"."nota_componente_curricular_media"
82 ADD CONSTRAINT "nota_componente_curricular_media_nota_aluno_fk" 91 ADD CONSTRAINT "nota_componente_curricular_media_nota_aluno_fk"
83 FOREIGN KEY("nota_aluno_id") 92 FOREIGN KEY("nota_aluno_id")
84 REFERENCES "modules"."nota_aluno"("id") 93 REFERENCES "modules"."nota_aluno"("id")
85 - ON DELETE CASCADE  
86 - ON UPDATE NO ACTION ; 94 + ON DELETE CASCADE
  95 + ON UPDATE NO ACTION;
  96 +
  97 +ALTER TABLE "modules"."componente_curricular_turma"
  98 + ADD CONSTRAINT "componente_curricular_turma_componente_curricular_fkey"
  99 + FOREIGN KEY("componente_curricular_id")
  100 + REFERENCES "modules"."componente_curricular"("id")
  101 + ON DELETE RESTRICT
  102 + ON UPDATE NO ACTION;
87 103
  104 +ALTER TABLE "modules"."componente_curricular_turma"
  105 + ADD CONSTRAINT "componente_curricular_turma_fkey"
  106 + FOREIGN KEY("turma_id")
  107 + REFERENCES "pmieducar"."turma"("cod_turma")
  108 + ON DELETE CASCADE
  109 + ON UPDATE NO ACTION;
  110 +
  111 +CREATE INDEX "componente_curricular_turma_turma_idx"
  112 + ON "modules"."componente_curricular_turma"("turma_id");
88 113
89 -- //@UNDO 114 -- //@UNDO
90 115
  116 +DROP INDEX "componente_curricular_turma_turma_idx";
  117 +
91 ALTER TABLE "modules"."falta_componente_curricular" 118 ALTER TABLE "modules"."falta_componente_curricular"
92 - DROP CONSTRAINT "falta_componente_curricular_falta_aluno_fk" CASCADE ; 119 + DROP CONSTRAINT "falta_componente_curricular_falta_aluno_fk" CASCADE;
93 ALTER TABLE "modules"."falta_geral" 120 ALTER TABLE "modules"."falta_geral"
94 - DROP CONSTRAINT "falta_geral_falta_aluno_fk" CASCADE ; 121 + DROP CONSTRAINT "falta_geral_falta_aluno_fk" CASCADE;
95 ALTER TABLE "modules"."nota_componente_curricular" 122 ALTER TABLE "modules"."nota_componente_curricular"
96 - DROP CONSTRAINT "nota_componente_curricular_nota_aluno_fk" CASCADE ; 123 + DROP CONSTRAINT "nota_componente_curricular_nota_aluno_fk" CASCADE;
97 ALTER TABLE "modules"."nota_componente_curricular_media" 124 ALTER TABLE "modules"."nota_componente_curricular_media"
98 - DROP CONSTRAINT "nota_componente_curricular_media_nota_aluno_fk" CASCADE ; 125 + DROP CONSTRAINT "nota_componente_curricular_media_nota_aluno_fk" CASCADE;
  126 +ALTER TABLE "modules"."componente_curricular_turma"
  127 + DROP CONSTRAINT "componente_curricular_turma_componente_curricular_fkey" CASCADE;
  128 +ALTER TABLE "modules"."componente_curricular_turma"
  129 + DROP CONSTRAINT "componente_curricular_turma_fkey" CASCADE;
  130 +
99 DROP TABLE "modules"."falta_aluno"; 131 DROP TABLE "modules"."falta_aluno";
100 DROP TABLE "modules"."falta_componente_curricular"; 132 DROP TABLE "modules"."falta_componente_curricular";
101 DROP TABLE "modules"."falta_geral"; 133 DROP TABLE "modules"."falta_geral";
102 DROP TABLE "modules"."nota_aluno"; 134 DROP TABLE "modules"."nota_aluno";
103 DROP TABLE "modules"."nota_componente_curricular"; 135 DROP TABLE "modules"."nota_componente_curricular";
104 DROP TABLE "modules"."nota_componente_curricular_media"; 136 DROP TABLE "modules"."nota_componente_curricular_media";
  137 +DROP TABLE "modules"."componente_curricular_turma";
105 138
106 -- // 139 -- //
107 \ No newline at end of file 140 \ No newline at end of file
ieducar/modules/Avaliacao/_tests/Service/TestCommon.php
@@ -49,6 +49,8 @@ require_once &#39;TabelaArredondamento/Model/TabelaDataMapper.php&#39;; @@ -49,6 +49,8 @@ require_once &#39;TabelaArredondamento/Model/TabelaDataMapper.php&#39;;
49 require_once 'RegraAvaliacao/Model/Regra.php'; 49 require_once 'RegraAvaliacao/Model/Regra.php';
50 require_once 'RegraAvaliacao/Model/RegraDataMapper.php'; 50 require_once 'RegraAvaliacao/Model/RegraDataMapper.php';
51 51
  52 +require_once 'ComponenteCurricular/Model/TurmaDataMapper.php';
  53 +
52 require_once 'Avaliacao/Model/NotaAlunoDataMapper.php'; 54 require_once 'Avaliacao/Model/NotaAlunoDataMapper.php';
53 require_once 'Avaliacao/Model/NotaComponenteDataMapper.php'; 55 require_once 'Avaliacao/Model/NotaComponenteDataMapper.php';
54 require_once 'Avaliacao/Model/NotaComponenteMediaDataMapper.php'; 56 require_once 'Avaliacao/Model/NotaComponenteMediaDataMapper.php';
@@ -179,6 +181,8 @@ abstract class Avaliacao_Service_TestCommon extends UnitBaseTest @@ -179,6 +181,8 @@ abstract class Avaliacao_Service_TestCommon extends UnitBaseTest
179 181
180 protected $_componenteDataMapperMock = NULL; 182 protected $_componenteDataMapperMock = NULL;
181 183
  184 + protected $_componenteTurmaDataMapperMock = NULL;
  185 +
182 protected $_notaAlunoDataMapperMock = NULL; 186 protected $_notaAlunoDataMapperMock = NULL;
183 187
184 protected $_notaComponenteDataMapperMock = NULL; 188 protected $_notaComponenteDataMapperMock = NULL;
@@ -205,6 +209,7 @@ abstract class Avaliacao_Service_TestCommon extends UnitBaseTest @@ -205,6 +209,7 @@ abstract class Avaliacao_Service_TestCommon extends UnitBaseTest
205 ->_setConfigOptions('escolaAnoLetivo', $this->_getEscolaAnoLetivo()) 209 ->_setConfigOptions('escolaAnoLetivo', $this->_getEscolaAnoLetivo())
206 ->_setConfigOptions('anoLetivoModulo', $this->_getAnoLetivoModulo()) 210 ->_setConfigOptions('anoLetivoModulo', $this->_getAnoLetivoModulo())
207 ->_setConfigOptions('modulo', $this->_getModulo()) 211 ->_setConfigOptions('modulo', $this->_getModulo())
  212 + ->_setConfigOptions('componentesTurma', $this->_getComponentesTurma())
208 ->_setConfigOptions('escolaSerieDisciplina', $this->_getEscolaSerieDisciplina()) 213 ->_setConfigOptions('escolaSerieDisciplina', $this->_getEscolaSerieDisciplina())
209 ->_setConfigOptions('dispensaDisciplina', $this->_getDispensaDisciplina()) 214 ->_setConfigOptions('dispensaDisciplina', $this->_getDispensaDisciplina())
210 ->_setConfigOptions('componenteCurricular', $this->_getComponenteCurricular()) 215 ->_setConfigOptions('componenteCurricular', $this->_getComponenteCurricular())
@@ -224,6 +229,7 @@ abstract class Avaliacao_Service_TestCommon extends UnitBaseTest @@ -224,6 +229,7 @@ abstract class Avaliacao_Service_TestCommon extends UnitBaseTest
224 $mappers = array( 229 $mappers = array(
225 'RegraDataMapper' => $this->_getRegraDataMapperMock(), 230 'RegraDataMapper' => $this->_getRegraDataMapperMock(),
226 'ComponenteDataMapper' => $this->_getComponenteDataMapperMock(), 231 'ComponenteDataMapper' => $this->_getComponenteDataMapperMock(),
  232 + 'ComponenteTurmaDataMapper' => $this->_getComponenteTurmaDataMapperMock(),
227 'NotaAlunoDataMapper' => $this->_getNotaAlunoDataMapperMock(), 233 'NotaAlunoDataMapper' => $this->_getNotaAlunoDataMapperMock(),
228 'NotaComponenteDataMapper' => $this->_getNotaComponenteDataMapperMock(), 234 'NotaComponenteDataMapper' => $this->_getNotaComponenteDataMapperMock(),
229 'NotaComponenteMediaDataMapper' => $this->_getNotaComponenteMediaDataMapperMock(), 235 'NotaComponenteMediaDataMapper' => $this->_getNotaComponenteMediaDataMapperMock(),
@@ -261,6 +267,7 @@ abstract class Avaliacao_Service_TestCommon extends UnitBaseTest @@ -261,6 +267,7 @@ abstract class Avaliacao_Service_TestCommon extends UnitBaseTest
261 'usuario' => $this->_getConfigOption('usuario', 'cod_usuario'), 267 'usuario' => $this->_getConfigOption('usuario', 'cod_usuario'),
262 'RegraDataMapper' => $this->_getConfigOption('mappers', 'RegraDataMapper'), 268 'RegraDataMapper' => $this->_getConfigOption('mappers', 'RegraDataMapper'),
263 'ComponenteDataMapper' => $this->_getConfigOption('mappers', 'ComponenteDataMapper'), 269 'ComponenteDataMapper' => $this->_getConfigOption('mappers', 'ComponenteDataMapper'),
  270 + 'ComponenteTurmaDataMapper' => $this->_getConfigOption('mappers', 'ComponenteTurmaDataMapper'),
264 'NotaAlunoDataMapper' => $this->_getConfigOption('mappers', 'NotaAlunoDataMapper'), 271 'NotaAlunoDataMapper' => $this->_getConfigOption('mappers', 'NotaAlunoDataMapper'),
265 'NotaComponenteDataMapper' => $this->_getConfigOption('mappers', 'NotaComponenteDataMapper'), 272 'NotaComponenteDataMapper' => $this->_getConfigOption('mappers', 'NotaComponenteDataMapper'),
266 'NotaComponenteMediaDataMapper' => $this->_getConfigOption('mappers', 'NotaComponenteMediaDataMapper'), 273 'NotaComponenteMediaDataMapper' => $this->_getConfigOption('mappers', 'NotaComponenteMediaDataMapper'),
@@ -449,6 +456,14 @@ abstract class Avaliacao_Service_TestCommon extends UnitBaseTest @@ -449,6 +456,14 @@ abstract class Avaliacao_Service_TestCommon extends UnitBaseTest
449 /** 456 /**
450 * @return array 457 * @return array
451 */ 458 */
  459 + protected function _getComponentesTurma()
  460 + {
  461 + return array();
  462 + }
  463 +
  464 + /**
  465 + * @return array
  466 + */
452 protected function _getEscolaSerieDisciplina() 467 protected function _getEscolaSerieDisciplina()
453 { 468 {
454 return array( 469 return array(
@@ -850,6 +865,29 @@ abstract class Avaliacao_Service_TestCommon extends UnitBaseTest @@ -850,6 +865,29 @@ abstract class Avaliacao_Service_TestCommon extends UnitBaseTest
850 return $this->_componenteDataMapperMock; 865 return $this->_componenteDataMapperMock;
851 } 866 }
852 867
  868 + protected function _setComponenteTurmaDataMapperMock(ComponenteCurricular_Model_TurmaDataMapper $mapper)
  869 + {
  870 + $this->_componenteTurmaDataMapperMock = $mapper;
  871 + return $this;
  872 + }
  873 +
  874 + protected function _getComponenteTurmaDataMapperMock()
  875 + {
  876 + if (is_null($this->_componenteTurmaDataMapperMock)) {
  877 + $componentes = $this->_getConfigOptions('componentesTurma');
  878 +
  879 + // Mock para ComponenteCurricular_Model_TurmaDataMapper
  880 + $mock = $this->getCleanMock('ComponenteCurricular_Model_TurmaDataMapper');
  881 + $mock->expects($this->any())
  882 + ->method('findAll')
  883 + ->will(new PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls($componentes));
  884 +
  885 + $this->_setComponenteTurmaDataMapperMock($mock);
  886 + }
  887 +
  888 + return $this->_componenteTurmaDataMapperMock;
  889 + }
  890 +
853 protected function _setNotaAlunoDataMapperMock(Avaliacao_Model_NotaAlunoDataMapper $mapper = NULL) 891 protected function _setNotaAlunoDataMapperMock(Avaliacao_Model_NotaAlunoDataMapper $mapper = NULL)
854 { 892 {
855 $this->_notaAlunoDataMapperMock = $mapper; 893 $this->_notaAlunoDataMapperMock = $mapper;
ieducar/modules/ComponenteCurricular/Model/Turma.php 0 → 100644
@@ -0,0 +1,85 @@ @@ -0,0 +1,85 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package ComponenteCurricular
  27 + * @subpackage Modules
  28 + * @since Arquivo disponível desde a versão 1.2.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'CoreExt/Entity.php';
  33 +
  34 +/**
  35 + * ComponenteCurricular_Model_Turma class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package ComponenteCurricular
  41 + * @subpackage Modules
  42 + * @since Classe disponível desde a versão 1.2.0
  43 + * @version @@package_version@@
  44 + */
  45 +class ComponenteCurricular_Model_Turma extends CoreExt_Entity
  46 +{
  47 + protected $_data = array(
  48 + 'componenteCurricular' => NULL,
  49 + 'anoEscolar' => NULL,
  50 + 'escola' => NULL,
  51 + 'turma' => NULL,
  52 + 'cargaHoraria' => NULL
  53 + );
  54 +
  55 + protected $_dataTypes = array(
  56 + 'cargaHoraria' => 'numeric'
  57 + );
  58 +
  59 + protected $_references = array(
  60 + 'componenteCurricular' => array(
  61 + 'value' => NULL,
  62 + 'class' => 'ComponenteCurricular_Model_ComponenteDataMapper',
  63 + 'file' => 'ComponenteCurricular/Model/ComponenteDataMapper.php'
  64 + )
  65 + );
  66 +
  67 + /**
  68 + * Construtor. Remove o campo identidade já que usa uma chave composta.
  69 + * @see CoreExt_Entity#__construct($options = array())
  70 + */
  71 + public function __construct($options = array()) {
  72 + parent::__construct($options);
  73 + unset($this->_data['id']);
  74 + }
  75 +
  76 + /**
  77 + * @see CoreExt_Entity_Validatable#getDefaultValidatorCollection()
  78 + */
  79 + public function getDefaultValidatorCollection()
  80 + {
  81 + return array(
  82 + 'cargaHoraria' => new CoreExt_Validate_Numeric(array('required' => FALSE))
  83 + );
  84 + }
  85 +}
0 \ No newline at end of file 86 \ No newline at end of file
ieducar/modules/ComponenteCurricular/Model/TurmaDataMapper.php 0 → 100644
@@ -0,0 +1,137 @@ @@ -0,0 +1,137 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package ComponenteCurricular
  27 + * @subpackage Modules
  28 + * @since Arquivo disponível desde a versão 1.2.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'CoreExt/DataMapper.php';
  33 +require_once 'ComponenteCurricular/Model/Turma.php';
  34 +
  35 +/**
  36 + * ComponenteCurricular_Model_TurmaDataMapper class.
  37 + *
  38 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  39 + * @category i-Educar
  40 + * @license @@license@@
  41 + * @package ComponenteCurricular
  42 + * @subpackage Modules
  43 + * @since Classe disponível desde a versão 1.2.0
  44 + * @version @@package_version@@
  45 + */
  46 +class ComponenteCurricular_Model_TurmaDataMapper extends CoreExt_DataMapper
  47 +{
  48 + protected $_entityClass = 'ComponenteCurricular_Model_Turma';
  49 + protected $_tableName = 'componente_curricular_turma';
  50 + protected $_tableSchema = 'modules';
  51 +
  52 + /**
  53 + * Os atributos anoEscolar e escola estão presentes apenas para
  54 + * fins de desnormalização.
  55 + * @var array
  56 + */
  57 + protected $_attributeMap = array(
  58 + 'componenteCurricular' => 'componente_curricular_id',
  59 + 'anoEscolar' => 'ano_escolar_id',
  60 + 'escola' => 'escola_id',
  61 + 'turma' => 'turma_id',
  62 + 'cargaHoraria' => 'carga_horaria'
  63 + );
  64 +
  65 + protected $_primaryKey = array(
  66 + 'componenteCurricular', 'turma'
  67 + );
  68 +
  69 + /**
  70 + * Realiza uma operação de atualização em todas as instâncias persistidas de
  71 + * ComponenteCurricular_Model_Turma. A atualização envolve criar, atualizar
  72 + * e/ou apagar instâncias persistidas.
  73 + *
  74 + * No exemplo de código a seguir, se uma instância de
  75 + * ComponenteCurricular_Model_Turma com uma referência a componenteCurricular
  76 + * "1" existisse, esta teria seus atributos atualizados e persistidos
  77 + * novamente. Se a referência não existisse, uma nova instância de
  78 + * ComponenteCurricular_Model_Turma seria criada e persistida. Caso uma
  79 + * referência a "2" existisse, esta seria apagada por não estar referenciada
  80 + * no array $componentes.
  81 + *
  82 + * <code>
  83 + * <?php
  84 + * $componentes = array(
  85 + * array('id' => 1, 'cargaHoraria' => 100)
  86 + * );
  87 + * $mapper->bulkUpdate(1, 1, 1, $componentes);
  88 + * </code>
  89 + *
  90 + *
  91 + *
  92 + * @param int $anoEscolar O código do ano escolar/série.
  93 + * @param int $escola O código da escola.
  94 + * @param int $turma O código da turma.
  95 + * @param array $componentes (id => integer, cargaHoraria => float|null)
  96 + * @throws Exception
  97 + */
  98 + public function bulkUpdate($anoEscolar, $escola, $turma, array $componentes)
  99 + {
  100 + $update = $insert = $delete = array();
  101 +
  102 + $componentesTurma = $this->findAll(array(), array('turma' => $turma));
  103 +
  104 + $objects = array();
  105 + foreach ($componentesTurma as $componenteTurma) {
  106 + $objects[$componenteTurma->get('componenteCurricular')] = $componenteTurma;
  107 + }
  108 +
  109 + foreach ($componentes as $componente) {
  110 + $id = $componente['id'];
  111 +
  112 + if (isset($objects[$id])) {
  113 + $insert[$id] = $objects[$id];
  114 + $insert[$id]->cargaHoraria = $componente['cargaHoraria'];
  115 + continue;
  116 + }
  117 +
  118 + $insert[$id] = new ComponenteCurricular_Model_Turma(array(
  119 + 'componenteCurricular' => $id,
  120 + 'anoEscolar' => $anoEscolar,
  121 + 'escola' => $escola,
  122 + 'turma' => $turma,
  123 + 'cargaHoraria' => $componente['cargaHoraria']
  124 + ));
  125 + }
  126 +
  127 + $delete = array_diff(array_keys($objects), array_keys($insert));
  128 +
  129 + foreach ($delete as $id) {
  130 + $this->delete($objects[$id]);
  131 + }
  132 +
  133 + foreach ($insert as $entry) {
  134 + $this->save($entry);
  135 + }
  136 + }
  137 +}
0 \ No newline at end of file 138 \ No newline at end of file
ieducar/modules/ComponenteCurricular/_tests/TurmaDataMapperTest.php 0 → 100644
@@ -0,0 +1,96 @@ @@ -0,0 +1,96 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package ComponenteCurricular
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.2.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'ComponenteCurricular/Model/TurmaDataMapper.php';
  33 +
  34 +/**
  35 + * TurmDataMapperTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package ComponenteCurricular
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.2.0
  43 + * @version @@package_version@@
  44 + */
  45 +class TurmaDataMapperTest extends UnitBaseTest
  46 +{
  47 + protected $_mapper = NULL;
  48 +
  49 + public function testBulkUpdate()
  50 + {
  51 + $returnValue = array(
  52 + array(
  53 + 'componente_curricular_id' => 1,
  54 + 'ano_escolar_id' => 1,
  55 + 'escola_id' => 1,
  56 + 'turma_id' => 1,
  57 + 'carga_horaria' => NULL
  58 + ),
  59 + array(
  60 + 'componente_curricular_id' => 3,
  61 + 'ano_escolar_id' => 1,
  62 + 'escola_id' => 1,
  63 + 'turma_id' => 1,
  64 + 'carga_horaria' => 100
  65 + )
  66 + );
  67 +
  68 + $componentes = array(
  69 + array(
  70 + 'id' => 1,
  71 + 'cargaHoraria' => 100
  72 + ),
  73 + array(
  74 + 'id' => 2,
  75 + 'cargaHoraria' => NULL
  76 + )
  77 + );
  78 +
  79 + $mock = $this->getDbMock();
  80 +
  81 + // 1 SELECT, 1 DELETE, 1 INSERT e 1 UPDATE
  82 + $mock->expects($this->exactly(4))
  83 + ->method('Consulta');
  84 +
  85 + $mock->expects($this->exactly(3))
  86 + ->method('ProximoRegistro')
  87 + ->will($this->onConsecutiveCalls(TRUE, TRUE, FALSE));
  88 +
  89 + $mock->expects($this->exactly(2))
  90 + ->method('Tupla')
  91 + ->will($this->onConsecutiveCalls($returnValue[0], $returnValue[1]));
  92 +
  93 + $mapper = new ComponenteCurricular_Model_TurmaDataMapper($mock);
  94 + $mapper->bulkUpdate(1, 1, 1, $componentes);
  95 + }
  96 +}
0 \ No newline at end of file 97 \ No newline at end of file
ieducar/modules/ComponenteCurricular/_tests/TurmaTest.php 0 → 100644
@@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package ComponenteCurricular
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.2.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'ComponenteCurricular/Model/Turma.php';
  33 +
  34 +/**
  35 + * ComponenteCurricular_Model_TurmaTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package ComponenteCurricular
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.2.0
  43 + * @version @@package_version@@
  44 + */
  45 +class ComponenteCurricular_Model_TurmaTest extends UnitBaseTest
  46 +{
  47 + protected $_entity = NULL;
  48 +
  49 + protected function setUp()
  50 + {
  51 + $this->_entity = new ComponenteCurricular_Model_Turma();
  52 + }
  53 +
  54 + public function testEntityValidators()
  55 + {
  56 + $validators = $this->_entity->getValidatorCollection();
  57 + $this->assertType('CoreExt_Validate_Numeric', $validators['cargaHoraria']);
  58 + }
  59 +}
0 \ No newline at end of file 60 \ No newline at end of file
ieducar/tests/unit/App/Model/IedFinderTest.php
@@ -44,6 +44,7 @@ require_once &#39;TabelaArredondamento/Model/TabelaDataMapper.php&#39;; @@ -44,6 +44,7 @@ require_once &#39;TabelaArredondamento/Model/TabelaDataMapper.php&#39;;
44 require_once 'TabelaArredondamento/Model/TabelaValorDataMapper.php'; 44 require_once 'TabelaArredondamento/Model/TabelaValorDataMapper.php';
45 require_once 'ComponenteCurricular/Model/ComponenteDataMapper.php'; 45 require_once 'ComponenteCurricular/Model/ComponenteDataMapper.php';
46 require_once 'ComponenteCurricular/Model/AnoEscolarDataMapper.php'; 46 require_once 'ComponenteCurricular/Model/AnoEscolarDataMapper.php';
  47 +require_once 'ComponenteCurricular/Model/TurmaDataMapper.php';
47 require_once 'AreaConhecimento/Model/AreaDataMapper.php'; 48 require_once 'AreaConhecimento/Model/AreaDataMapper.php';
48 49
49 /** 50 /**
@@ -101,6 +102,58 @@ class App_Model_IedFinderTest extends UnitBaseTest @@ -101,6 +102,58 @@ class App_Model_IedFinderTest extends UnitBaseTest
101 return $tabela; 102 return $tabela;
102 } 103 }
103 104
  105 + /**
  106 + * Configura mocks para ComponenteCurricular_Model_ComponenteDataMapper e
  107 + * ComponenteCurricular_Model_TurmaDataMapper para o método getComponentesTurma().
  108 + *
  109 + * @return array ('componenteMock', 'turmaMock', 'expected')
  110 + */
  111 + protected function _getComponentesTurmaMock()
  112 + {
  113 + $returnComponenteMock = array(
  114 + 1 => new ComponenteCurricular_Model_Componente(
  115 + array('id' => 1, 'nome' => 'Matemática', 'cargaHoraria' => 100)
  116 + ),
  117 + 2 => new ComponenteCurricular_Model_Componente(
  118 + array('id' => 2, 'nome' => 'Português', 'cargaHoraria' => 100)
  119 + )
  120 + );
  121 +
  122 + $expected = $returnComponenteMock;
  123 +
  124 + $componenteMock = $this->getCleanMock('ComponenteCurricular_Model_ComponenteDataMapper');
  125 + $componenteMock->expects($this->exactly(2))
  126 + ->method('findComponenteCurricularAnoEscolar')
  127 + ->will($this->onConsecutiveCalls(
  128 + $returnComponenteMock[1], $returnComponenteMock[2]
  129 + ));
  130 +
  131 + $returnTurmaMock = array(
  132 + new ComponenteCurricular_Model_Turma(
  133 + array('componenteCurricular' => 1, 'cargaHoraria' => 200)
  134 + ),
  135 + new ComponenteCurricular_Model_Turma(
  136 + array('componenteCurricular' => 2, 'cargaHoraria' => NULL)
  137 + )
  138 + );
  139 +
  140 + $turmaMock = $this->getCleanMock('ComponenteCurricular_Model_TurmaDataMapper');
  141 + $turmaMock->expects($this->once())
  142 + ->method('findAll')
  143 + ->with(array(), array('turma' => 1))
  144 + ->will($this->returnValue($returnTurmaMock));
  145 +
  146 + // O primeiro componente tem carga horária definida na turma, o segundo usa o padrão do componente
  147 + $expected[1] = clone $expected[1];
  148 + $expected[1]->cargaHoraria = 200;
  149 +
  150 + return array(
  151 + 'componenteMock' => $componenteMock,
  152 + 'turmaMock' => $turmaMock,
  153 + 'expected' => $expected
  154 + );
  155 + }
  156 +
104 public function testGetCurso() 157 public function testGetCurso()
105 { 158 {
106 $returnValue = array( 159 $returnValue = array(
@@ -237,6 +290,10 @@ class App_Model_IedFinderTest extends UnitBaseTest @@ -237,6 +290,10 @@ class App_Model_IedFinderTest extends UnitBaseTest
237 290
238 App_Model_IedFinder::addClassToStorage('clsPmieducarEscolaSerieDisciplina', $escolaMock, NULL, TRUE); 291 App_Model_IedFinder::addClassToStorage('clsPmieducarEscolaSerieDisciplina', $escolaMock, NULL, TRUE);
239 292
  293 + // O primeiro componente tem uma carga horária definida em escola-série.
  294 + $expected[1] = clone $returnAnoEscolar[1];
  295 + $expected[1]->cargaHoraria = 80;
  296 +
240 $componentes = App_Model_IedFinder::getEscolaSerieDisciplina(1, 1, $anoEscolarMock); 297 $componentes = App_Model_IedFinder::getEscolaSerieDisciplina(1, 1, $anoEscolarMock);
241 $this->assertEquals( 298 $this->assertEquals(
242 $expected, $componentes, 299 $expected, $componentes,
@@ -244,6 +301,20 @@ class App_Model_IedFinderTest extends UnitBaseTest @@ -244,6 +301,20 @@ class App_Model_IedFinderTest extends UnitBaseTest
244 ); 301 );
245 } 302 }
246 303
  304 + public function testGetComponentesTurma()
  305 + {
  306 + $mocks = $this->_getComponentesTurmaMock();
  307 +
  308 + $componentes = App_Model_IedFinder::getComponentesTurma(
  309 + 1, 1, 1, $mocks['turmaMock'], $mocks['componenteMock']
  310 + );
  311 +
  312 + $this->assertEquals(
  313 + $mocks['expected'], $componentes,
  314 + '::getComponentesTurma() retorna os componentes de uma turma.'
  315 + );
  316 + }
  317 +
247 public function testGetMatricula() 318 public function testGetMatricula()
248 { 319 {
249 $expected = array( 320 $expected = array(
@@ -353,81 +424,34 @@ class App_Model_IedFinderTest extends UnitBaseTest @@ -353,81 +424,34 @@ class App_Model_IedFinderTest extends UnitBaseTest
353 */ 424 */
354 public function testGetComponentesPorMatricula() 425 public function testGetComponentesPorMatricula()
355 { 426 {
356 - $componentes = array(  
357 - new ComponenteCurricular_Model_Componente(  
358 - array('id' => 1, 'nome' => 'Matemática', 'cargaHoraria' => 100)  
359 - ),  
360 - new ComponenteCurricular_Model_Componente(  
361 - array('id' => 2, 'nome' => 'Português', 'cargaHoraria' => 100)  
362 - ),  
363 - new ComponenteCurricular_Model_Componente(  
364 - array('id' => 3, 'nome' => 'Ciências', 'cargaHoraria' => 60)  
365 - ),  
366 - new ComponenteCurricular_Model_Componente(  
367 - array('id' => 4, 'nome' => 'Física', 'cargaHoraria' => 60)  
368 - )  
369 - );  
370 -  
371 - $expected = array(  
372 - 1 => $componentes[0],  
373 - 3 => $componentes[2]  
374 - );  
375 -  
376 - // Retorna para clsPmieducarEscolaSerieDisciplina  
377 - $returnEscolaSerieDisciplina = array(  
378 - array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 1, 'carga_horaria' => 80),  
379 - array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 2, 'carga_horaria' => NULL),  
380 - array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 3, 'carga_horaria' => NULL),  
381 - array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 4, 'carga_horaria' => NULL),  
382 - );  
383 -  
384 - // Mock para clsPmieducarEscolaSerieDisciplina  
385 - $escolaMock = $this->getCleanMock('clsPmieducarEscolaSerieDisciplina');  
386 - $escolaMock->expects($this->any())  
387 - ->method('lista')  
388 - ->will($this->returnValue($returnEscolaSerieDisciplina)); 427 + // A turma possui apenas 2 componentes, com os ids: 1 e 2
  428 + $mocks = $this->_getComponentesTurmaMock();
389 429
390 // Retorna para clsPmieducarDispensaDisciplina 430 // Retorna para clsPmieducarDispensaDisciplina
391 $returnDispensa = array( 431 $returnDispensa = array(
392 - array('ref_cod_matricula' => 1, 'ref_cod_disciplina' => 2),  
393 - array('ref_cod_matricula' => 1, 'ref_cod_disciplina' => 4), 432 + array('ref_cod_matricula' => 1, 'ref_cod_disciplina' => 2)
394 ); 433 );
395 434
396 // Mock para clsPmieducarDispensaDisciplina 435 // Mock para clsPmieducarDispensaDisciplina
397 $dispensaMock = $this->getCleanMock('clsPmieducarDispensaDisciplina'); 436 $dispensaMock = $this->getCleanMock('clsPmieducarDispensaDisciplina');
398 - $dispensaMock->expects($this->any()) 437 + $dispensaMock->expects($this->once())
399 ->method('lista') 438 ->method('lista')
400 ->with(1, 1, 1) 439 ->with(1, 1, 1)
401 ->will($this->returnValue($returnDispensa)); 440 ->will($this->returnValue($returnDispensa));
402 441
403 - // Mock para ComponenteCurricular_Model_ComponenteDataMapper  
404 - $mapperMock = $this->getCleanMock('ComponenteCurricular_Model_ComponenteDataMapper');  
405 - $mapperMock->expects($this->exactly(4))  
406 - ->method('findComponenteCurricularAnoEscolar')  
407 - ->will($this->onConsecutiveCalls(  
408 - $componentes[0], $componentes[1], $componentes[2], $componentes[3]  
409 - ));  
410 -  
411 - // Registra mocks  
412 - CoreExt_Entity::addClassToStorage('clsPmieducarEscolaSerieDisciplina',  
413 - $escolaMock, NULL, TRUE);  
414 CoreExt_Entity::addClassToStorage('clsPmieducarDispensaDisciplina', 442 CoreExt_Entity::addClassToStorage('clsPmieducarDispensaDisciplina',
415 $dispensaMock, NULL, TRUE); 443 $dispensaMock, NULL, TRUE);
416 444
417 - $disciplinas = App_Model_IedFinder::getComponentesPorMatricula(1, $mapperMock);  
418 -  
419 - // O esperado é que use a carga horária de escola_serie_disciplina ao  
420 - // invés de componente_curricular_ano_escolar.  
421 - // Usa clone para clonar a instância, senão usaria a mesma (copy by reference)  
422 - $expected[1] = clone($expected[1]);  
423 - $expected[1]->cargaHoraria = 80; 445 + $componentes = App_Model_IedFinder::getComponentesPorMatricula(
  446 + 1, $mocks['componenteMock'], $mocks['turmaMock']
  447 + );
424 448
425 - $expected[3] = clone($expected[3]);  
426 - $expected[3]->cargaHoraria = 60; 449 + $expected = $mocks['expected'];
  450 + $expected = array(1 => clone $expected[1]);
427 451
428 $this->assertEquals( 452 $this->assertEquals(
429 - $expected, $disciplinas,  
430 - '::getComponentesPorMatricula() retorna um array de ComponenteCurricular_Model_Componente para uma matrícula.' 453 + $expected, $componentes,
  454 + '::getComponentesPorMatricula() retorna os componentes curriculares de uma matrícula, descartando aqueles em regime de dispensa (dispensa de componente)'
431 ); 455 );
432 } 456 }
433 457