portabilis/ieducar — pull request #58 by tembra (2014-01-09 14:56:58+00:00)
Title: Modificado a rotina de Lançamento de Faltas/Notas

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