Modificado a rotina de Lançamento de Faltas/Notas

Modificado a rotina de Lan&ccedil;amento de Faltas/Notas para:

1) Agrupar os Componentes Curriculares por &Aacute;rea de Conhecimento. O agrupamento &eacute; feito de duas formas, de acordo com o modo de preenchimento que o usu&aacute;rio escolher:
<ul><li><strong>Caso selecione o Componente Curricular:</strong> J&aacute; no menu de sele&ccedil;&atilde;o foram criados grupos (<em>&lt;optgroup/&gt;</em>) para cada &Aacute;rea de Conhecimento. No carregamento da tela de preenchimento das faltas/notas, &eacute; inserido uma nova coluna (<em>&lt;td/&gt;</em>) na primeira posi&ccedil;&atilde;o da tabela superior, informando a &Aacute;rea de Conhecimento do Componente Curricular selecionado.</li>
<li><strong>Caso n&atilde;o selecione o Componente Curricular:</strong> &Eacute; inserido uma nova linha (<em>&lt;tr/&gt;</em>) na listagem, antes do primeiro Componente Curricular de cada &Aacute;rea de Conhecimento.</li></ul>


2) Ordenar os Componentes Curriculares alfabeticamente por:
<ul><li>Nome da &Aacute;rea de Conhecimento, e;</li><li>Nome do Componente Curricular.</li></ul>


<u><strong>Modifica&ccedil;&otilde;es por arquivo</strong></u>

[1] <strong>File:</strong> /ieducar/modules/Avaliacao/Views/DiarioApiController.php
<ul><li>Adicionado a fun&ccedil;&atilde;o <em>&quot;strtoupper()&quot;</em> no conte&uacute;do da vari&aacute;vel <em>&quot;$componente[&#39;nome&#39;]&quot;</em></li>
<li>Adicionado segundo par&acirc;metro como <em>&quot;false&quot;</em>, no m&eacute;todo <em>&quot;safeString()&quot;</em> utilizado no conte&uacute;do da vari&aacute;vel <em>&quot;$componente[&#39;nome&#39;]&quot;</em></li>
<li>Criado novo m&eacute;todo <em>&quot;getAreaConhecimento($componenteCurricularId)&quot;</em> com visibilidade <em>&quot;protected&quot;</em>, para retornar uma classe com o Id e o Nome da &Aacute;rea de Conhecimento do Componente Curricular cujo Id foi passado pelo par&acirc;metro</li>
<li>Criado nova posi&ccedil;&atilde;o <em>&quot;area_id&quot;</em> no array <em>&quot;$componente&quot;</em> para gravar o Id da &Aacute;rea de Conhecimento</li>
<li>Criado nova posi&ccedil;&atilde;o <em>&quot;area_nome&quot;</em> no array <em>&quot;$componente&quot;</em> para gravar o Nome da &Aacute;rea de Conhecimento</li>
<li>Criado nova posi&ccedil;&atilde;o tempor&aacute;ria <em>&quot;my_order&quot;</em> no array <em>&quot;$componente&quot;</em> para ordenar alfabeticamente atrav&eacute;s do m&eacute;todo <em>&quot;sortByKey&quot;</em> os Componentes Curriculares pelo Nome da &Aacute;rea de Conhecimento e pelo Nome do Componente Curricular, respectivamente e sem acentos. Esta posi&ccedil;&atilde;o &eacute; removida ap&oacute;s a ordena&ccedil;&atilde;o para que n&atilde;o seja enviada na requisi&ccedil;&atilde;o.</li></ul>


[2] <strong>File:</strong> /ieducar/modules/Avaliacao/Assets/Diario.js
<ul><li>Criado na fun&ccedil;&atilde;o <em>&quot;setTableSearchDetails()&quot;</em> um novo elemento <em>&lt;th/&gt;</em> com o conte&uacute;do <em>&quot;&Aacute;rea de Conhecimento&quot;</em></li>
<li>Criado na fun&ccedil;&atilde;o <em>&quot;setTableSearchDetails()&quot;</em> um novo elemento <em>&lt;td/&gt;</em> com o Nome da &Aacute;rea de Conhecimento, recuperado atrav&eacute;s do atributo <em>&quot;label&quot;</em> do elemento pai (<em>&lt;optgroup/&gt;</em> criado no arquivo [7]) do <em>&lt;option/&gt;</em> selecionado</li>
<li>Adicionado seletor <em>&quot;optgroup&quot;</em> na fun&ccedil;&atilde;o <em>&quot;setTableSearchDetails()&quot;</em>, no jQuery que busca o Nome do Componente Curricular selecionado, para considerar a exist&ecirc;ncia do(s) <em>&lt;optgroup/&gt;</em> criado(s) no arquivo [7]</li>
<li>Adicionado seletor <em>&quot;:not(.area-conhecimento)&quot;</em> na fun&ccedil;&atilde;o <em>&quot;handleSearch()&quot;</em>, no jQuery que busca os elementos que possuem o atributo <em>&quot;colspan&quot;</em></li>
<li>Criado na fun&ccedil;&atilde;o <em>&quot;updateComponenteCurriculares()&quot;</em> array de controle <em>&quot;areas&quot;</em> para salvar o Id das &Aacute;reas de Conhecimento j&aacute; exibidas, obtidas no arquivo [1]</li>
<li>Criado na fun&ccedil;&atilde;o <em>&quot;updateComponenteCurriculares()&quot;</em> vari&aacute;vel <em>&quot;areaColspan&quot;</em> para salvar a quantidade de colunas da linha do cabe&ccedil;alho</li>
<li>Criado na fun&ccedil;&atilde;o <em>&quot;updateComponenteCurriculares()&quot;</em> novo elemento <em>&lt;tr/&gt;</em> referente a linha da &Aacute;rea de Conhecimento</li>
<li>Criado na fun&ccedil;&atilde;o <em>&quot;updateComponenteCurriculares()&quot;</em> novo elemento <em>&lt;td/&gt;</em> referente ao Nome da &Aacute;rea de Conhecimento obtido no arquivo [1], e atribu&iacute;do a classe <em>&quot;area-conhecimento&quot;</em> criada no arquivo [3]</li>
<li>Criado nova fun&ccedil;&atilde;o <em>&quot;myNextValid($selectElement)&quot;</em>, para ir para o pr&oacute;ximo <em>&lt;option/&gt;</em> ap&oacute;s o selecionado, considerando agora a exist&ecirc;ncia do(s) <em>&lt;optgroup/&gt;</em> criado(s) no arquivo [7]</li>
<li>Alterado conte&uacute;do da vari&aacute;vel $nextOption na fun&ccedil;&atilde;o <em>&quot;selectNextOption()&quot;</em> para realizar chamada a nova fun&ccedil;&atilde;o <em>&quot;myNextValid()&quot;</em> mencionada acima</li></ul>


[3] <strong>File:</strong> /ieducar/intranet/styles/mytdt.css
<ul><li>Novo arquivo criado para contemplar o CSS das contribui&ccedil;&otilde;es da MyTDT Corp. para o i-Educar</li>
<li>Adicionado estilo para a classe <em>&quot;area-conhecimento&quot;</em> utilizada no <em>&lt;td/&gt;</em> do arquivo [2]</li></ul>


[4] <strong>File:</strong> /ieducar/intranet/templates/nvp_htmlhead.tpl
<ul><li>Adicionado novo elemento <em>&lt;link/&gt;</em> para incluir o novo arquivo de estilo (CSS) criado [3]</li></ul>


[5] <strong>File:</strong> /ieducar/lib/Portabilis/Business/Professor.php
<ul><li>Modificado as queries dos m&eacute;todos <em>&quot;componentesCurricularesTurmaAlocado()&quot;</em> e <em>&quot;componentesCurricularesCursoAlocado()&quot;</em>:
<ul><li>Adicionado campo (SELECT) <em>&quot;ac.nome as area_conhecimento&quot;</em></li>
<li>Adicionado tabela (FROM) <em>&quot;modules.area_conhecimento as ac&quot;</em></li>
<li>Adicionado condi&ccedil;&atilde;o (WHERE) <em>&quot;and cc.area_conhecimento_id = ac.id&quot;</em></li>
<li>Adicionado ordenamento (ORDER) <em>&quot;order by ac.nome, cc.nome&quot;</em></li></ul></li></ul>


[6] <strong>File:</strong> /ieducar/modules/DynamicInput/Views/ComponenteCurricularController.php
<ul><li>Modificado as duas queries do m&eacute;todo <em>&quot;getComponentesCurriculares()&quot;</em>:
<ul><li>Adicionado campo (SELECT) <em>&quot;ac.nome as area_conhecimento&quot;</em></li>
<li>Adicionado tabela (FROM) <em>&quot;modules.area_conhecimento as ac&quot;</em></li>
<li>Adicionado condi&ccedil;&atilde;o (WHERE) <em>&quot;and cc.area_conhecimento_id = ac.id&quot;</em></li>
<li>Adicionado ordenamento (ORDER) <em>&quot;order by ac.nome, cc.nome&quot;</em></li></ul></li>
<li>Alterado conte&uacute;do da vari&aacute;vel <em>&quot;$options[]&quot;</em> para um array associativo (que ser&aacute; convertido para um objeto JSON), conforme segue:
<ul><li><strong>Chave <em>&quot;value&quot;</em>:</strong> Se utilizado um array associativo a mesma deve existir, pois ser&aacute; o conte&uacute;do do <em>&lt;option/&gt;</em> a ser gerado</li>
<li><strong>Chave <em>&quot;group&quot;</em>:</strong> Criada com intuito de salvar o conte&uacute;do do campo <em>&quot;area_conhecimento&quot;</em> retornado por uma das queries mencionada acima ou no arquivo [5], que ser&aacute; utilizada no arquivo [7]</li>
<li><strong>OBS:</strong> Assim como a chave <em>&quot;group&quot;</em>, poder&aacute; ser criado qualquer outra chave no array associativo que o conte&uacute;do da mesma estar&aacute; acess&iacute;vel no <em>&lt;option/&gt;</em> atrav&eacute;s do atributo <em>&quot;data-*&quot;</em> onde <em>&quot;*&quot;</em> &eacute; o nome da chave criada</li></ul></li></ul>


[7] <strong>File:</strong> /ieducar/modules/DynamicInput/Assets/Javascripts/DynamicInput.js
<ul><li>Criado na fun&ccedil;&atilde;o <em>&quot;updateSelect()&quot;</em> array de controle <em>&quot;groups&quot;</em> para salvar o Nome das &Aacute;reas de Conhecimento que j&aacute; possuem <em>&lt;optgroup/&gt;</em>, obtidas no arquivo [6]</li>
<li>Criado na fun&ccedil;&atilde;o <em>&quot;updateSelect()&quot;</em> vari&aacute;vel <em>&quot;optgroup&quot;</em> para salvar o &uacute;ltimo elemento <em>&lt;optgroup/&gt;</em> criado</li>
<li>Modificado a fun&ccedil;&atilde;o <em>&quot;updateSelect()&quot;</em> para verificar se existe o atributo <em>&quot;data-group&quot;</em> no elemento <em>&lt;option/&gt;</em>, onde, caso exista:
<ul><li>Ir&aacute; gerar um novo elemento <em>&lt;optgroup/&gt;</em> com o atributo <em>&quot;label&quot;</em> preenchido com o conte&uacute;do do <em>&quot;data-group&quot;</em> obtido no arquivo [6] e definido pela fun&ccedil;&atilde;o <em>&quot;jsonResourcesToSelectOptions()&quot;</em> neste mesmo arquivo [7]</li>
<li>O elemento <em>&lt;option/&gt;</em> ser&aacute; adicionado como filho do novo elemento <em>&lt;optgroup/&gt;</em> acima citado</li>
<li>O elemento <em>&lt;optgroup/&gt;</em> por sua vez, que ser&aacute; adicionado ao <em>&lt;select/&gt;</em></li></ul></li>
<li>Modificado a fun&ccedil;&atilde;o <em>&quot;jsonResourcesToSelectOptions()&quot;</em> para verificar se o atributo <em>&quot;value&quot;</em> retornado pela requisi&ccedil;&atilde;o &eacute; do tipo objeto, onde, caso seja:
<ul><li>Ir&aacute; adicionar ao elemento <em>&lt;option/&gt;</em> o(s) atributo(s) <em>&quot;data-*&quot;</em> com o conte&uacute;do extra&iacute;do conforme modifica&ccedil;&atilde;o realizada no item [6]</li>
<li>Ir&aacute; adicionar ao cont&eacute;udo do <em>&lt;option/&gt;</em> conforme mencionado em [6] a chave <em>&quot;value&quot;</em>, referente ao Nome do Componente Curricular</li></ul></li></ul>