Commit 49c6eaf0b8737e2474ef29549a00b5893c250eec
1 parent
27018e9e
Exists in
master
Modificado a rotina de Lançamento de Faltas/Notas para:
1) Agrupar os Componentes Curriculares por Área de Conhecimento. O agrupamento é feito de duas formas, de acordo com o modo de preenchimento que o usuário escolher: * Caso selecione o Componente Curricular: Já no menu de seleção foram criados grupos (<optgroup/>) para cada Área de Conhecimento. No carregamento da tela de preenchimento das faltas/notas, é inserido uma nova coluna (<td/>) na primeira posição da tabela superior, informando a Área de Conhecimento do Componente Curricular selecionado. * Caso não selecione o Componente Curricular: É inserido uma nova linha (<tr/>) na listagem, antes do primeiro Componente Curricular de cada Área de Conhecimento. 2) Ordenar os Componentes Curriculares alfabeticamente por: * Nome da Área de Conhecimento, e; * Nome do Componente Curricular. /* * Modificações por arquivo */ [1] File: /ieducar/modules/Avaliacao/Views/DiarioApiController.php - Adicionado a função "strtoupper()" no conteúdo da variável "$componente['nome']" - Adicionado segundo parâmetro como "false", no método "safeString()" utilizado no conteúdo da variável "$componente['nome']" - Criado novo método "getAreaConhecimento($componenteCurricularId)" com visibilidade "protected", para retornar uma classe com o Id e o Nome da Área de Conhecimento do Componente Curricular cujo Id foi passado pelo parâmetro - Criado nova posição "area_id" no array "$componente" para gravar o Id da Área de Conhecimento - Criado nova posição "area_nome" no array "$componente" para gravar o Nome da Área de Conhecimento - Criado nova posição temporária "my_order" no array "$componente" para ordenar alfabeticamente através do método "sortByKey" os Componentes Curriculares pelo Nome da Área de Conhecimento e pelo Nome do Componente Curricular, respectivamente e sem acentos. Esta posição é removida após a ordenação para que não seja enviada na requisição. [2] File: /ieducar/modules/Avaliacao/Assets/Diario.js - Criado na função "setTableSearchDetails()" um novo elemento <th/> com o conteúdo "Área de Conhecimento" - Criado na função "setTableSearchDetails()" um novo elemento <td/> com o Nome da Área de Conhecimento, recuperado através do atributo "label" do elemento pai (<optgroup/> criado no arquivo [7]) do <option/> selecionado - Adicionado seletor "optgroup" na função "setTableSearchDetails()", no jQuery que busca o Nome do Componente Curricular selecionado, para considerar a existência do(s) <optgroup/> criado(s) no arquivo [7] - Adicionado seletor ":not(.area-conhecimento)" na função "handleSearch()", no jQuery que busca os elementos que possuem o atributo "colspan" - Criado na função "updateComponenteCurriculares()" array de controle "areas" para salvar o Id das Áreas de Conhecimento já exibidas, obtidas no arquivo [1] - Criado na função "updateComponenteCurriculares()" variável "areaColspan" para salvar a quantidade de colunas da linha do cabeçalho - Criado na função "updateComponenteCurriculares()" novo elemento <tr/> referente a linha da Área de Conhecimento - Criado na função "updateComponenteCurriculares()" novo elemento <td/> referente ao Nome da Área de Conhecimento obtido no arquivo [1], e atribuído a classe "area-conhecimento" criada no arquivo [3] - Criado nova função "myNextValid($selectElement)", para ir para o próximo <option/> após o selecionado, considerando agora a existência do(s) <optgroup/> criado(s) no arquivo [7] - Alterado conteúdo da variável $nextOption na função "selectNextOption()" para realizar chamada a nova função "myNextValid()" mencionada acima [3] File: /ieducar/intranet/styles/mytdt.css - Novo arquivo criado para contemplar o CSS das contribuições da MyTDT Corp. para o i-Educar - Adicionado estilo para a classe "area-conhecimento" utilizada no <td/> do arquivo [2] [4] File: /ieducar/intranet/templates/nvp_htmlhead.tpl - Adicionado novo elemento <link/> para incluir o novo arquivo de estilo (CSS) criado [3] [5] File: /ieducar/lib/Portabilis/Business/Professor.php - Modificado as queries dos métodos "componentesCurricularesTurmaAlocado()" e "componentesCurricularesCursoAlocado()": * Adicionado campo (SELECT) "ac.nome as area_conhecimento" * Adicionado tabela (FROM) "modules.area_conhecimento as ac" * Adicionado condição (WHERE) "and cc.area_conhecimento_id = ac.id" * Adicionado ordenamento (ORDER) "order by ac.nome, cc.nome" [6] File: /ieducar/modules/DynamicInput/Views/ComponenteCurricularController.php - Modificado as duas queries do método "getComponentesCurriculares()": * Adicionado campo (SELECT) "ac.nome as area_conhecimento" * Adicionado tabela (FROM) "modules.area_conhecimento as ac" * Adicionado condição (WHERE) "and cc.area_conhecimento_id = ac.id" * Adicionado ordenamento (ORDER) "order by ac.nome, cc.nome" - Alterado conteúdo da variável "$options[]" para um array associativo (que será convertido para um objeto JSON), conforme segue: * Chave "value": Se utilizado um array associativo a mesma deve existir, pois será o conteúdo do <option/> a ser gerado * Chave "group": Criada com intuito de salvar o conteúdo do campo "area_conhecimento" retornado por uma das queries mencionada acima ou no arquivo [5], que será utilizada no arquivo [7] * OBS: Assim como a chave "group", poderá ser criado qualquer outra chave no array associativo que o conteúdo da mesma estará acessível no <option/> através do atributo "data-*" onde "*" é o nome da chave criada [7] File: /ieducar/modules/DynamicInput/Assets/Javascripts/DynamicInput.js - Criado na função "updateSelect()" array de controle "groups" para salvar o Nome das Áreas de Conhecimento que já possuem <optgroup/>, obtidas no arquivo [6] - Criado na função "updateSelect()" variável "optgroup" para salvar o último elemento <optgroup/> criado - Modificado a função "updateSelect()" para verificar se existe o atributo "data-group" no elemento <option/>, onde, caso exista: * Irá gerar um novo elemento <optgroup/> com o atributo "label" preenchido com o conteúdo do "data-group" obtido no arquivo [6] e definido pela função "jsonResourcesToSelectOptions()" neste mesmo arquivo [7] * O elemento <option/> será adicionado como filho do novo elemento <optgroup/> acima citado * O elemento <optgroup/> por sua vez, que será adicionado ao <select/> - Modificado a função "jsonResourcesToSelectOptions()" para verificar se o atributo "value" retornado pela requisição é do tipo objeto, onde, caso seja: * Irá adicionar ao elemento <option/> o(s) atributo(s) "data-*" com o conteúdo extraído conforme modificação realizada no item [6] * Irá adicionar ao contéudo do <option/> conforme mencionado em [6] a chave "value", referente ao Nome do Componente Curricular Change-Id: Ie93c75ef7fe1d6e390a7e0e14de69b991be902c9 Signed-off-by: Thieres Tembra <tdt@mytdt.com.br>
Showing
7 changed files
with
156 additions
and
29 deletions
Show diff stats
... | ... | @@ -0,0 +1,16 @@ |
1 | +/* | |
2 | + * Module: Avaliacao | |
3 | + * Controller: Diario | |
4 | + * | |
5 | + * Referente a linha adicionada na tabela de Lançamentos | |
6 | + * de Faltas/Notas para a Área de Conhecimento | |
7 | + * | |
8 | + * @author Thieres Tembra | |
9 | + * @company MyTDT Corporation [http://www.mytdt.com.br] | |
10 | + */ | |
11 | +td.area-conhecimento { | |
12 | + background-color: #546C76; | |
13 | + color: #FFF; | |
14 | + font-weight: bold; | |
15 | + text-align: left; | |
16 | +} | ... | ... |
ieducar/intranet/templates/nvp_htmlhead.tpl
... | ... | @@ -17,6 +17,7 @@ |
17 | 17 | <!--link rel=stylesheet type='text/css' href='styles/reset.css' /> |
18 | 18 | <link rel=stylesheet type='text/css' href='styles/portabilis.css' /--> |
19 | 19 | <link rel=stylesheet type='text/css' href='styles/min-portabilis.css' /> |
20 | + <link rel=stylesheet type='text/css' href='styles/mytdt.css' /> | |
20 | 21 | |
21 | 22 | <!-- #&ESTILO&# --> |
22 | 23 | ... | ... |
ieducar/lib/Portabilis/Business/Professor.php
... | ... | @@ -102,13 +102,14 @@ class Portabilis_Business_Professor { |
102 | 102 | |
103 | 103 | |
104 | 104 | protected static function componentesCurricularesTurmaAlocado($turmaId, $anoLetivo, $userId) { |
105 | - $sql = "select cc.id, cc.nome | |
106 | - from modules.componente_curricular_turma as cct, pmieducar.turma, modules.componente_curricular as cc, | |
105 | + $sql = "select cc.id, cc.nome, ac.nome as area_conhecimento | |
106 | + from modules.componente_curricular_turma as cct, pmieducar.turma, modules.componente_curricular as cc, modules.area_conhecimento as ac, | |
107 | 107 | pmieducar.escola_ano_letivo as al, pmieducar.servidor_disciplina as scc |
108 | 108 | where turma.cod_turma = $1 and cct.turma_id = turma.cod_turma and cct.escola_id = turma.ref_ref_cod_escola |
109 | 109 | and cct.componente_curricular_id = cc.id and al.ano = $2 and cct.escola_id = al.ref_cod_escola and |
110 | 110 | scc.ref_ref_cod_instituicao = turma.ref_cod_instituicao and scc.ref_cod_servidor = $3 and |
111 | - scc.ref_cod_curso = turma.ref_cod_curso and scc.ref_cod_disciplina = cc.id"; | |
111 | + scc.ref_cod_curso = turma.ref_cod_curso and scc.ref_cod_disciplina = cc.id and cc.area_conhecimento_id = ac.id | |
112 | + order by ac.nome, cc.nome"; | |
112 | 113 | |
113 | 114 | $options = array('params' => array($turmaId, $anoLetivo, $userId)); |
114 | 115 | |
... | ... | @@ -117,14 +118,15 @@ class Portabilis_Business_Professor { |
117 | 118 | |
118 | 119 | |
119 | 120 | protected static function componentesCurricularesCursoAlocado($turmaId, $anoLetivo, $userId) { |
120 | - $sql = "select cc.id as id, cc.nome as nome from pmieducar.serie, pmieducar.escola_serie_disciplina as esd, | |
121 | - pmieducar.turma, modules.componente_curricular as cc, pmieducar.escola_ano_letivo as al, | |
121 | + $sql = "select cc.id as id, cc.nome as nome, ac.nome as area_conhecimento from pmieducar.serie, pmieducar.escola_serie_disciplina as esd, | |
122 | + pmieducar.turma, modules.componente_curricular as cc, modules.area_conhecimento as ac, pmieducar.escola_ano_letivo as al, | |
122 | 123 | pmieducar.servidor_disciplina as scc where turma.cod_turma = $1 and serie.cod_serie = |
123 | 124 | turma.ref_ref_cod_serie and esd.ref_ref_cod_escola = turma.ref_ref_cod_escola and esd.ref_ref_cod_serie = |
124 | 125 | serie.cod_serie and esd.ref_cod_disciplina = cc.id and al.ano = $2 and esd.ref_ref_cod_escola = |
125 | 126 | al.ref_cod_escola and serie.ativo = 1 and esd.ativo = 1 and al.ativo = 1 and scc.ref_ref_cod_instituicao = |
126 | 127 | turma.ref_cod_instituicao and scc.ref_cod_servidor = $3 and scc.ref_cod_curso = serie.ref_cod_curso and |
127 | - scc.ref_cod_disciplina = cc.id"; | |
128 | + scc.ref_cod_disciplina = cc.id and cc.area_conhecimento_id = ac.id | |
129 | + order by ac.nome, cc.nome"; | |
128 | 130 | |
129 | 131 | $options = array('params' => array($turmaId, $anoLetivo, $userId)); |
130 | 132 | |
... | ... | @@ -142,4 +144,4 @@ class Portabilis_Business_Professor { |
142 | 144 | protected static function fetchPreparedQuery($sql, $options = array()) { |
143 | 145 | return Portabilis_Utils_Database::fetchPreparedQuery($sql, $options); |
144 | 146 | } |
145 | -} | |
146 | 147 | \ No newline at end of file |
148 | +} | ... | ... |
ieducar/modules/Avaliacao/Assets/Javascripts/Diario.js
... | ... | @@ -453,8 +453,10 @@ function setTableSearchDetails($tableSearchDetails, dataDetails) { |
453 | 453 | //set headers table |
454 | 454 | var $linha = $j('<tr />'); |
455 | 455 | |
456 | - if (componenteCurricularSelected) | |
456 | + if (componenteCurricularSelected) { | |
457 | + $j('<th />').html('Área de Conhecimento').appendTo($linha); | |
457 | 458 | $j('<th />').html('Componente curricular').appendTo($linha); |
459 | + } | |
458 | 460 | |
459 | 461 | $j('<th />').html('Etapa').appendTo($linha); |
460 | 462 | $j('<th />').html('Turma').appendTo($linha); |
... | ... | @@ -470,8 +472,10 @@ function setTableSearchDetails($tableSearchDetails, dataDetails) { |
470 | 472 | |
471 | 473 | var $linha = $j('<tr />').addClass('cellColor'); |
472 | 474 | |
473 | - if (componenteCurricularSelected) | |
474 | - $j('<td />').html(safeToUpperCase($j('#ref_cod_componente_curricular').children("[selected='selected']").html())).appendTo($linha); | |
475 | + if (componenteCurricularSelected) { | |
476 | + $j('<td />').html(safeToUpperCase($j('#ref_cod_componente_curricular optgroup').children("[selected='selected']").parent().attr('label'))).appendTo($linha); | |
477 | + $j('<td />').html(safeToUpperCase($j('#ref_cod_componente_curricular optgroup').children("[selected='selected']").html())).appendTo($linha); | |
478 | + } | |
475 | 479 | |
476 | 480 | $j('<td />').html(safeToUpperCase($j('#etapa').children("[selected='selected']").html())).appendTo($linha); |
477 | 481 | $j('<td />').html(safeToUpperCase($j('#ref_cod_turma').children("[selected='selected']").html())).appendTo($linha); |
... | ... | @@ -547,7 +551,7 @@ function handleSearch($resultTable, dataResponse) { |
547 | 551 | // seta colspan [th, td].aluno quando exibe nota exame |
548 | 552 | if ($tableSearchDetails.data('details').tipo_nota != 'nenhum' && |
549 | 553 | $tableSearchDetails.data('details').quantidade_etapas == $j('#etapa').val()) { |
550 | - $resultTable.find('[colspan]').attr('colspan', componenteCurricularSelected ? 1 : 5); | |
554 | + $resultTable.find('[colspan]:not(.area-conhecimento)').attr('colspan', componenteCurricularSelected ? 1 : 5); | |
551 | 555 | } |
552 | 556 | |
553 | 557 | $resultTable.find('tr:even').addClass('even'); |
... | ... | @@ -709,14 +713,29 @@ function updateComponenteCurriculares($targetElement, matriculaId, componentesCu |
709 | 713 | var useNota = $tableSearchDetails.data('details').tipo_nota != 'nenhum'; |
710 | 714 | var useParecer = $tableSearchDetails.data('details').tipo_parecer_descritivo != 'nenhum'; |
711 | 715 | |
716 | + var areas = new Array(); | |
717 | + | |
712 | 718 | var $ccHeader = $j('<tr />').addClass('strong'); |
713 | 719 | |
714 | 720 | $j('<td />').addClass('center').html('Componente curricular').appendTo($ccHeader); |
715 | 721 | updateComponenteCurricularHeaders($ccHeader, $j('<td />')); |
716 | 722 | |
717 | 723 | $ccHeader.appendTo($targetElement); |
724 | + | |
725 | + var areaColspan = $j('td', $ccHeader).length; | |
726 | + | |
718 | 727 | |
719 | 728 | $j.each(componentesCurriculares, function(index, cc) { |
729 | + if (areas.indexOf(cc.area_id) == -1) { | |
730 | + areas.push(cc.area_id); | |
731 | + | |
732 | + var $areaRow = $j('<tr />'); | |
733 | + | |
734 | + $j('<td />').addClass('area-conhecimento').attr('colspan', areaColspan).html(cc.area_nome).appendTo($areaRow); | |
735 | + | |
736 | + $areaRow.appendTo($targetElement); | |
737 | + } | |
738 | + | |
720 | 739 | var $ccRow = $j('<tr />'); |
721 | 740 | |
722 | 741 | $j('<td />').addClass('center').html(cc.nome).appendTo($ccRow); |
... | ... | @@ -764,9 +783,23 @@ function canSearch(){ |
764 | 783 | return true; |
765 | 784 | } |
766 | 785 | |
786 | +function myNextValid($selectElement) { | |
787 | + var a = $selectElement.find('option:selected'); | |
788 | + if (a.next('option').length == 0) { | |
789 | + b = a.parent(); | |
790 | + if (b.prop('tagName').toUpperCase() == 'SELECT') { | |
791 | + return null; | |
792 | + } else { | |
793 | + return b.next().children('option:first'); | |
794 | + } | |
795 | + } else { | |
796 | + return a.next('option'); | |
797 | + } | |
798 | +} | |
799 | + | |
767 | 800 | function selectNextOption($selectElement){ |
768 | - var $nextOption = $selectElement.find('option:selected').next('option'); | |
769 | - | |
801 | + var $nextOption = myNextValid($selectElement); | |
802 | + | |
770 | 803 | if ($nextOption.val() != undefined) { |
771 | 804 | $selectElement.val($nextOption.val()); |
772 | 805 | ... | ... |
ieducar/modules/Avaliacao/Views/DiarioApiController.php
... | ... | @@ -748,20 +748,57 @@ class DiarioApiController extends ApiCoreController |
748 | 748 | $componente = array(); |
749 | 749 | |
750 | 750 | $componente['id'] = $_componente->get('id'); |
751 | - $componente['nome'] = $this->safeString($_componente->get('nome')); | |
751 | + $componente['nome'] = $this->safeString(strtoupper($_componente->get('nome')), false); | |
752 | 752 | $componente['nota_atual'] = $this->getNotaAtual($etapa = null, $componente['id']); |
753 | 753 | $componente['nota_exame'] = $this->getNotaExame($componente['id']); |
754 | 754 | //$componente['nota_necessaria_exame'] = $this->getNotaNecessariaExame($componente['id']); |
755 | 755 | $componente['falta_atual'] = $this->getFaltaAtual($etapa = null, $componente['id']); |
756 | 756 | $componente['parecer_atual'] = $this->getParecerAtual($componente['id']); |
757 | 757 | $componente['situacao'] = $this->getSituacaoMatricula($componente['id']); |
758 | + | |
759 | + //buscando pela área do conhecimento | |
760 | + $area = $this->getAreaConhecimento($componente['id']); | |
761 | + $componente['area_id'] = $area->id; | |
762 | + $componente['area_nome'] = $this->safeString(strtoupper($area->nome), false); | |
763 | + | |
764 | + //criando chave para ordenamento temporário | |
765 | + //área de conhecimento + componente curricular | |
766 | + $componente['my_order'] = Portabilis_String_Utils::unaccent(strtoupper($area->nome)) . Portabilis_String_Utils::unaccent(strtoupper($_componente->get('nome'))); | |
758 | 767 | |
759 | 768 | $componentesCurriculares[] = $componente; |
760 | 769 | } |
761 | 770 | |
762 | - // ordenado por id, da mesma maneira que nos boletins, | |
763 | - // obs: poderá ainda ocorrer diferença entre a ordem das areas de conhecimento? | |
764 | - return Portabilis_Array_Utils::sortByKey('id', $componentesCurriculares); | |
771 | + //ordenando pela chave temporária criada | |
772 | + $componentesCurriculares = Portabilis_Array_Utils::sortByKey('my_order', $componentesCurriculares); | |
773 | + | |
774 | + //removendo chave temporária | |
775 | + $len = count($componentesCurriculares); | |
776 | + for ($i = 0; $i < $len; $i++) { | |
777 | + unset($componentesCurriculares[$i]['my_order']); | |
778 | + } | |
779 | + return $componentesCurriculares; | |
780 | + } | |
781 | + | |
782 | + protected function getAreaConhecimento($componenteCurricularId = null) { | |
783 | + if (is_null($componenteCurricularId)) | |
784 | + $componenteCurricularId = $this->getRequest()->componente_curricular_id; | |
785 | + | |
786 | + if (! is_numeric($componenteCurricularId)) { | |
787 | + throw new Exception('Não foi possível obter a área de conhecimento pois não foi recebido o id do componente curricular.'); | |
788 | + } | |
789 | + | |
790 | + require_once 'ComponenteCurricular/Model/ComponenteDataMapper.php'; | |
791 | + $mapper = new ComponenteCurricular_Model_ComponenteDataMapper(); | |
792 | + | |
793 | + $where = array('id' => $componenteCurricularId); | |
794 | + | |
795 | + $area = $mapper->findAll(array('area_conhecimento'), $where); | |
796 | + | |
797 | + $areaConhecimento = new stdClass(); | |
798 | + $areaConhecimento->id = $area[0]->area_conhecimento->id; | |
799 | + $areaConhecimento->nome = $area[0]->area_conhecimento->nome; | |
800 | + | |
801 | + return $areaConhecimento; | |
765 | 802 | } |
766 | 803 | |
767 | 804 | ... | ... |
ieducar/modules/DynamicInput/Assets/Javascripts/DynamicInput.js
1 | 1 | function updateSelect($targetElement, options, emptyOptionHtml) { |
2 | 2 | $targetElement.children().not('[value=""]').remove(); |
3 | - | |
3 | + | |
4 | + var groups = new Array(); | |
5 | + var optgroup = null; | |
6 | + | |
4 | 7 | $j.each(options, function(index, value){ |
5 | - $j(value).appendTo($targetElement); | |
8 | + if ($j(value).data('group')) { | |
9 | + if (groups.indexOf($j(value).data('group')) == -1) { | |
10 | + if (optgroup != null) { | |
11 | + optgroup.appendTo($targetElement); | |
12 | + } | |
13 | + optgroup = $j('<optgroup />').attr('label', $j(value).data('group')); | |
14 | + groups.push($j(value).data('group')); | |
15 | + } | |
16 | + $j(value).appendTo(optgroup); | |
17 | + } else { | |
18 | + $j(value).appendTo($targetElement); | |
19 | + } | |
6 | 20 | }); |
21 | + if (optgroup != null) { | |
22 | + optgroup.appendTo($targetElement); | |
23 | + } | |
7 | 24 | |
8 | 25 | if (options.length > 0) { |
9 | 26 | $targetElement.removeAttr('disabled'); |
... | ... | @@ -56,8 +73,23 @@ function jsonResourcesToSelectOptions(resources) { |
56 | 73 | |
57 | 74 | if (id.indexOf && id.substr && id.indexOf('__') == 0) |
58 | 75 | id = id.substr(2); |
59 | - | |
60 | - options.push($j('<option />').attr('value', id).html(safeCapitalize(value))); | |
76 | + | |
77 | + var opt = $j('<option />').attr('value', id); | |
78 | + | |
79 | + var newValue = value; | |
80 | + if (typeof(value) == 'object') { | |
81 | + $j.each(value, function(optId, optValue) { | |
82 | + if (optId != 'value') { | |
83 | + opt.data(optId, optValue); | |
84 | + } else { | |
85 | + newValue = optValue; | |
86 | + } | |
87 | + }); | |
88 | + } | |
89 | + | |
90 | + opt.html(safeCapitalize(newValue)); | |
91 | + | |
92 | + options.push(opt); | |
61 | 93 | }); |
62 | 94 | |
63 | 95 | return options; | ... | ... |
ieducar/modules/DynamicInput/Views/ComponenteCurricularController.php
... | ... | @@ -71,29 +71,35 @@ class ComponenteCurricularController extends ApiCoreController |
71 | 71 | } |
72 | 72 | |
73 | 73 | else { |
74 | - $sql = "select cc.id, cc.nome | |
75 | - from pmieducar.turma, modules.componente_curricular_turma as cct, modules.componente_curricular as cc, | |
74 | + $sql = "select cc.id, cc.nome, ac.nome as area_conhecimento | |
75 | + from pmieducar.turma, modules.componente_curricular_turma as cct, modules.componente_curricular as cc, modules.area_conhecimento as ac, | |
76 | 76 | pmieducar.escola_ano_letivo as al where turma.cod_turma = $1 and cct.turma_id = turma.cod_turma and |
77 | 77 | cct.escola_id = turma.ref_ref_cod_escola and cct.componente_curricular_id = cc.id and al.ano = $2 |
78 | - and cct.escola_id = al.ref_cod_escola"; | |
78 | + and cct.escola_id = al.ref_cod_escola and cc.area_conhecimento_id = ac.id | |
79 | + order by ac.nome, cc.nome"; | |
79 | 80 | |
80 | 81 | $componentesCurriculares = $this->fetchPreparedQuery($sql, array($turmaId, $ano)); |
81 | 82 | |
82 | 83 | if (count($ComponentesCurriculares) < 1) { |
83 | - $sql = "select cc.id, cc.nome from | |
84 | + $sql = "select cc.id, cc.nome, ac.nome as area_conhecimento from | |
84 | 85 | pmieducar.turma as t, pmieducar.escola_serie_disciplina as esd, modules.componente_curricular |
85 | - as cc, pmieducar.escola_ano_letivo as al where t.cod_turma = $1 and esd.ref_ref_cod_escola = | |
86 | + as cc, modules.area_conhecimento as ac, pmieducar.escola_ano_letivo as al where t.cod_turma = $1 and esd.ref_ref_cod_escola = | |
86 | 87 | t.ref_ref_cod_escola and esd.ref_ref_cod_serie = t.ref_ref_cod_serie and esd.ref_cod_disciplina = |
87 | 88 | cc.id and al.ano = $2 and esd.ref_ref_cod_escola = al.ref_cod_escola and t.ativo = 1 and |
88 | - esd.ativo = 1 and al.ativo = 1"; | |
89 | + esd.ativo = 1 and al.ativo = 1 and cc.area_conhecimento_id = ac.id | |
90 | + order by ac.nome, cc.nome"; | |
89 | 91 | |
90 | 92 | $componentesCurriculares = $this->fetchPreparedQuery($sql, array($turmaId, $ano)); |
91 | 93 | } |
92 | 94 | } |
93 | 95 | |
94 | 96 | $options = array(); |
95 | - foreach ($componentesCurriculares as $componenteCurricular) | |
96 | - $options['__' . $componenteCurricular['id']] = $this->toUtf8($componenteCurricular['nome']); | |
97 | + foreach ($componentesCurriculares as $componenteCurricular) { | |
98 | + $options['__' . $componenteCurricular['id']] = array( | |
99 | + 'value' => $this->toUtf8($componenteCurricular['nome']), | |
100 | + 'group' => $this->toUtf8($componenteCurricular['area_conhecimento']) | |
101 | + ); | |
102 | + } | |
97 | 103 | |
98 | 104 | return array('options' => $options); |
99 | 105 | } | ... | ... |