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 | } | ... | ... |