Commit 2ec380bbc48d14c5850098e3274efd9d7ffcfdbb
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
Showing
12 changed files
with
945 additions
and
98 deletions
Show diff stats
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('ref_ref_cod_serie').onchange = function() | @@ -1140,15 +1255,59 @@ document.getElementById('ref_ref_cod_serie').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('componente_curricular_id_seq', 1, false); | @@ -10337,6 +10337,19 @@ SELECT pg_catalog.setval('componente_curricular_id_seq', 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, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '19_atua | @@ -20115,6 +20134,7 @@ INSERT INTO changelog VALUES (19, 'Main', 'NOW()', 'NOW()', 'dbdeploy', '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 "modules"."falta_componente_curricular" ( | @@ -24,7 +24,7 @@ CREATE TABLE "modules"."falta_componente_curricular" ( | ||
| 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 "modules"."falta_geral" ( | @@ -32,13 +32,13 @@ CREATE TABLE "modules"."falta_geral" ( | ||
| 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 "modules"."nota_componente_curricular" ( | @@ -48,7 +48,7 @@ CREATE TABLE "modules"."nota_componente_curricular" ( | ||
| 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 "modules"."nota_componente_curricular_media" ( | @@ -57,50 +57,83 @@ CREATE TABLE "modules"."nota_componente_curricular_media" ( | ||
| 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 'TabelaArredondamento/Model/TabelaDataMapper.php'; | @@ -49,6 +49,8 @@ require_once 'TabelaArredondamento/Model/TabelaDataMapper.php'; | ||
| 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; |
| @@ -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 'TabelaArredondamento/Model/TabelaDataMapper.php'; | @@ -44,6 +44,7 @@ require_once 'TabelaArredondamento/Model/TabelaDataMapper.php'; | ||
| 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 |