Commit a750338588790d041b501fa6ce73504464ae822f

Authored by Lucas Schmoeller da Silva
1 parent cd62e105
Exists in master

Criado regra para armazenar notas necessárias no exame

portabilis/ieducar#130
ieducar/intranet/include/modules/clsModulesNotaExame.inc.php 0 → 100644
... ... @@ -0,0 +1,337 @@
  1 +<?php
  2 +/**
  3 + * i-Educar - Sistema de gestão escolar
  4 + *
  5 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  6 + * <ctima@itajai.sc.gov.br>
  7 + *
  8 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  9 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  10 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  11 + * qualquer versão posterior.
  12 + *
  13 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  14 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  15 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  16 + * do GNU para mais detalhes.
  17 + *
  18 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  19 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  20 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  21 + *
  22 + * @author Lucas Schmoeller da Silva <lucas@portabilis.com.br>
  23 + * @category i-Educar
  24 + * @license @@license@@
  25 + * @package Module
  26 + * @since ?
  27 + * @version $Id$
  28 + */
  29 +
  30 +require_once( "include/pmieducar/geral.inc.php" );
  31 +
  32 +/**
  33 + * clsModulesNotaExame class.
  34 + *
  35 + * @author Lucas Schmoeller da Silva <lucas@portabilis.com.br>
  36 + * @category i-Educar
  37 + * @license @@license@@
  38 + * @package Module
  39 + * @since ?
  40 + * @version @@package_version@@
  41 + */
  42 +
  43 +class clsModulesNotaExame
  44 +{
  45 + var $ref_cod_matricula;
  46 + var $ref_cod_componente_curricular;
  47 + var $nota_exame;
  48 +
  49 + // propriedades padrao
  50 +
  51 + /**
  52 + * Armazena o total de resultados obtidos na ultima chamada ao metodo lista
  53 + *
  54 + * @var int
  55 + */
  56 + var $_total;
  57 +
  58 + /**
  59 + * Nome do schema
  60 + *
  61 + * @var string
  62 + */
  63 + var $_schema;
  64 +
  65 + /**
  66 + * Nome da tabela
  67 + *
  68 + * @var string
  69 + */
  70 + var $_tabela;
  71 +
  72 + /**
  73 + * Lista separada por virgula, com os campos que devem ser selecionados na proxima chamado ao metodo lista
  74 + *
  75 + * @var string
  76 + */
  77 + var $_campos_lista;
  78 +
  79 + /**
  80 + * Lista com todos os campos da tabela separados por virgula, padrao para selecao no metodo lista
  81 + *
  82 + * @var string
  83 + */
  84 + var $_todos_campos;
  85 +
  86 + /**
  87 + * Valor que define a quantidade de registros a ser retornada pelo metodo lista
  88 + *
  89 + * @var int
  90 + */
  91 + var $_limite_quantidade;
  92 +
  93 + /**
  94 + * Define o valor de offset no retorno dos registros no metodo lista
  95 + *
  96 + * @var int
  97 + */
  98 + var $_limite_offset;
  99 +
  100 + /**
  101 + * Define o campo padrao para ser usado como padrao de ordenacao no metodo lista
  102 + *
  103 + * @var string
  104 + */
  105 + var $_campo_order_by;
  106 +
  107 +
  108 + /**
  109 + * Construtor (PHP 4)
  110 + *
  111 + * @return object
  112 + */
  113 + function clsModulesNotaExame($ref_cod_matricula = NULL , $ref_cod_componente_curricular = NULL, $nota_exame = NULL)
  114 + {
  115 + $db = new clsBanco();
  116 + $this->_schema = "modules.";
  117 + $this->_tabela = "{$this->_schema}nota_exame";
  118 +
  119 + $this->_campos_lista = $this->_todos_campos = "ref_cod_matricula, ref_cod_componente_curricular, nota_exame";
  120 +
  121 + if( is_numeric( $ref_cod_matricula ) )
  122 + {
  123 + $this->ref_cod_matricula = $ref_cod_matricula;
  124 + }
  125 + if( is_numeric( $ref_cod_componente_curricular ) )
  126 + {
  127 + $this->ref_cod_componente_curricular = $ref_cod_componente_curricular;
  128 + }
  129 + if( is_numeric( $nota_exame ) )
  130 + {
  131 + $this->nota_exame = $nota_exame;
  132 + }
  133 + }
  134 +
  135 + /**
  136 + * Cria um novo registro
  137 + *
  138 + * @return bool
  139 + */
  140 + function cadastra()
  141 + {
  142 + if( is_numeric( $this->ref_cod_matricula ) && is_numeric( $this->ref_cod_componente_curricular ) && is_numeric( $this->nota_exame ) )
  143 + {
  144 + $db = new clsBanco();
  145 +
  146 + $campos = "";
  147 + $valores = "";
  148 + $gruda = "";
  149 +
  150 + if( is_numeric( $this->ref_cod_matricula ) )
  151 + {
  152 + $campos .= "{$gruda}ref_cod_matricula";
  153 + $valores .= "{$gruda}'{$this->ref_cod_matricula}'";
  154 + $gruda = ", ";
  155 + }
  156 + if( is_numeric( $this->ref_cod_componente_curricular ) )
  157 + {
  158 + $campos .= "{$gruda}ref_cod_componente_curricular";
  159 + $valores .= "{$gruda}'{$this->ref_cod_componente_curricular}'";
  160 + $gruda = ", ";
  161 + }
  162 + if( is_numeric( $this->nota_exame ) )
  163 + {
  164 + $campos .= "{$gruda}nota_exame";
  165 + $valores .= "{$gruda}'{$this->nota_exame}'";
  166 + $gruda = ", ";
  167 + }
  168 +
  169 + $db->Consulta( "INSERT INTO {$this->_tabela} ( $campos ) VALUES( $valores )" );
  170 + return $this->ref_cod_matricula;
  171 + }
  172 + return false;
  173 + }
  174 +
  175 + /**
  176 + * Edita os dados de um registro
  177 + *
  178 + * @return bool
  179 + */
  180 + function edita()
  181 + {
  182 + if( is_numeric( $this->ref_cod_matricula ) && is_numeric( $this->ref_cod_componente_curricular ) && is_numeric( $this->nota_exame ) )
  183 + {
  184 +
  185 + $db = new clsBanco();
  186 + $set = "";
  187 +
  188 + if( is_numeric( $this->nota_exame ) )
  189 + {
  190 + $set .= "{$gruda}nota_exame = '{$this->nota_exame}'";
  191 + $gruda = ", ";
  192 + }
  193 +
  194 + if( $set )
  195 + {
  196 + $db->Consulta( "UPDATE {$this->_tabela} SET $set WHERE ref_cod_matricula = '{$this->ref_cod_matricula}' AND ref_cod_componente_curricular = '{$this->ref_cod_componente_curricular}'" );
  197 + return true;
  198 + }
  199 + }
  200 + return false;
  201 + }
  202 +
  203 + /**
  204 + * Retorna um array com os dados de um registro
  205 + *
  206 + * @return array
  207 + */
  208 + function detalhe()
  209 + {
  210 + if( is_numeric( $this->ref_cod_matricula ) && is_numeric( $this->ref_cod_componente_curricular ) )
  211 + {
  212 +
  213 + $db = new clsBanco();
  214 + $db->Consulta( "SELECT {$this->_todos_campos} FROM {$this->_tabela} WHERE ref_cod_matricula = '{$this->ref_cod_matricula}' AND ref_cod_componente_curricular = '{$this->ref_cod_componente_curricular}'" );
  215 + $db->ProximoRegistro();
  216 + return $db->Tupla();
  217 + }
  218 + return false;
  219 + }
  220 +
  221 + /**
  222 + * Retorna um array com os dados de um registro
  223 + *
  224 + * @return array
  225 + */
  226 + function existe()
  227 + {
  228 + if( is_numeric( $this->ref_cod_matricula ) && is_numeric( $this->ref_cod_componente_curricular ) )
  229 + {
  230 +
  231 + $db = new clsBanco();
  232 + $db->Consulta( "SELECT 1 FROM {$this->_tabela} WHERE ref_cod_matricula = '{$this->ref_cod_matricula}' AND ref_cod_componente_curricular = '{$this->ref_cod_componente_curricular}'" );
  233 + $db->ProximoRegistro();
  234 + return $db->Tupla();
  235 + }
  236 + return false;
  237 + }
  238 +
  239 + /**
  240 + * Exclui um registro
  241 + *
  242 + * @return bool
  243 + */
  244 + function excluir()
  245 + {
  246 + if( is_numeric( $this->ref_cod_matricula ) && is_numeric( $this->ref_cod_componente_curricular ) )
  247 + {
  248 +
  249 + $db = new clsBanco();
  250 + $db->Consulta( "DELETE FROM {$this->_tabela} WHERE ref_cod_matricula = '{$this->ref_cod_matricula}' AND ref_cod_componente_curricular = '{$this->ref_cod_componente_curricular}'" );
  251 + return true;
  252 + }
  253 + return false;
  254 + }
  255 +
  256 + /**
  257 + * Define quais campos da tabela serao selecionados na invocacao do metodo lista
  258 + *
  259 + * @return null
  260 + */
  261 + function setCamposLista( $str_campos )
  262 + {
  263 + $this->_campos_lista = $str_campos;
  264 + }
  265 +
  266 + /**
  267 + * Define que o metodo Lista devera retornoar todos os campos da tabela
  268 + *
  269 + * @return null
  270 + */
  271 + function resetCamposLista()
  272 + {
  273 + $this->_campos_lista = $this->_todos_campos;
  274 + }
  275 +
  276 + /**
  277 + * Define limites de retorno para o metodo lista
  278 + *
  279 + * @return null
  280 + */
  281 + function setLimite( $intLimiteQtd, $intLimiteOffset = null )
  282 + {
  283 + $this->_limite_quantidade = $intLimiteQtd;
  284 + $this->_limite_offset = $intLimiteOffset;
  285 + }
  286 +
  287 + /**
  288 + * Retorna a string com o trecho da query resposavel pelo Limite de registros
  289 + *
  290 + * @return string
  291 + */
  292 + function getLimite()
  293 + {
  294 + if( is_numeric( $this->_limite_quantidade ) )
  295 + {
  296 + $retorno = " LIMIT {$this->_limite_quantidade}";
  297 + if( is_numeric( $this->_limite_offset ) )
  298 + {
  299 + $retorno .= " OFFSET {$this->_limite_offset} ";
  300 + }
  301 + return $retorno;
  302 + }
  303 + return "";
  304 + }
  305 +
  306 + /**
  307 + * Define campo para ser utilizado como ordenacao no metolo lista
  308 + *
  309 + * @return null
  310 + */
  311 + function setOrderby( $strNomeCampo )
  312 + {
  313 + // limpa a string de possiveis erros (delete, insert, etc)
  314 + //$strNomeCampo = eregi_replace();
  315 +
  316 + if( is_string( $strNomeCampo ) && $strNomeCampo )
  317 + {
  318 + $this->_campo_order_by = $strNomeCampo;
  319 + }
  320 + }
  321 +
  322 + /**
  323 + * Retorna a string com o trecho da query resposavel pela Ordenacao dos registros
  324 + *
  325 + * @return string
  326 + */
  327 + function getOrderby()
  328 + {
  329 + if( is_string( $this->_campo_order_by ) )
  330 + {
  331 + return " ORDER BY {$this->_campo_order_by} ";
  332 + }
  333 + return "";
  334 + }
  335 +
  336 +}
  337 +?>
0 338 \ No newline at end of file
... ...
ieducar/misc/database/deltas/portabilis/71_cria_tabela_nota_exame.sql 0 → 100644
... ... @@ -0,0 +1,27 @@
  1 + -- //
  2 +
  3 + --
  4 + -- Cria tabela temporaria que guarda nota do exame dos alunos
  5 + --
  6 + -- @author Lucas Schmoeller da Silva <lucas@portabilis.com.br>
  7 + -- @license @@license@@
  8 + -- @version $Id$
  9 +
  10 + CREATE TABLE modules.nota_exame
  11 + (
  12 + ref_cod_matricula integer NOT NULL,
  13 + ref_cod_componente_curricular integer NOT NULL,
  14 + nota_exame numeric(5,3),
  15 + CONSTRAINT moradia_aluno_fkey FOREIGN KEY (ref_cod_matricula)
  16 + REFERENCES pmieducar.matricula(cod_matricula) MATCH SIMPLE
  17 + ON UPDATE RESTRICT ON DELETE RESTRICT
  18 + )
  19 + WITH (
  20 + OIDS=TRUE
  21 + );
  22 +
  23 + -- //@UNDO
  24 +
  25 + DROP TABLE modules.nota_exame;
  26 +
  27 + -- //
0 28 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/Views/DiarioApiController.php
... ... @@ -47,6 +47,7 @@ require_once &#39;RegraAvaliacao/Model/TipoPresenca.php&#39;;
47 47 require_once 'RegraAvaliacao/Model/TipoParecerDescritivo.php';
48 48  
49 49 require_once 'include/pmieducar/clsPmieducarMatricula.inc.php';
  50 +require_once 'include/modules/clsModulesNotaExame.inc.php';
50 51  
51 52 require_once 'Portabilis/Controller/ApiCoreController.php';
52 53 require_once 'Portabilis/Array/Utils.php';
... ... @@ -404,7 +405,12 @@ class DiarioApiController extends ApiCoreController
404 405 $this->appendResponse('componente_curricular_id', $this->getRequest()->componente_curricular_id);
405 406 $this->appendResponse('matricula_id', $this->getRequest()->matricula_id);
406 407 $this->appendResponse('situacao', $this->getSituacaoMatricula());
407   - $this->appendResponse('nota_necessaria_exame', $this->getNotaNecessariaExame($this->getRequest()->componente_curricular_id));
  408 + $this->appendResponse('nota_necessaria_exame', $notaNecessariaExame = $this->getNotaNecessariaExame($this->getRequest()->componente_curricular_id));
  409 +
  410 + if (!empty($notaNecessariaExame) && $this->getSituacaoMatricula()=='Em Exame')
  411 + $this->createOrUpdateNotaExame($this->getRequest()->matricula_id, $this->getRequest()->componente_curricular_id, $notaNecessariaExame);
  412 + else
  413 + $this->deleteNotaExame($this->getRequest()->matricula_id, $this->getRequest()->componente_curricular_id);
408 414 }
409 415  
410 416  
... ... @@ -753,10 +759,15 @@ class DiarioApiController extends ApiCoreController
753 759 $componente['nome'] = $this->safeString(strtoupper($_componente->get('nome')), false);
754 760 $componente['nota_atual'] = $this->getNotaAtual($etapa = null, $componente['id']);
755 761 $componente['nota_exame'] = $this->getNotaExame($componente['id']);
756   - $componente['nota_necessaria_exame'] = ($componente['situacao'] != 'Em andamento' ? $this->getNotaNecessariaExame($componente['id']) : null );
757 762 $componente['falta_atual'] = $this->getFaltaAtual($etapa = null, $componente['id']);
758 763 $componente['parecer_atual'] = $this->getParecerAtual($componente['id']);
759 764 $componente['situacao'] = $this->getSituacaoMatricula($componente['id']);
  765 + $componente['nota_necessaria_exame'] = ($componente['situacao'] == 'Em Exame' ? $this->getNotaNecessariaExame($componente['id']) : null );
  766 +
  767 + if (!empty($componente['nota_necessaria_exame']))
  768 + $this->createOrUpdateNotaExame($matriculaId, $componente['id'], $componente['nota_necessaria_exame']);
  769 + else
  770 + $this->deleteNotaExame($matriculaId, $componente['id']);
760 771  
761 772 //buscando pela área do conhecimento
762 773 $area = $this->getAreaConhecimento($componente['id']);
... ... @@ -805,6 +816,17 @@ class DiarioApiController extends ApiCoreController
805 816 return $areaConhecimento;
806 817 }
807 818  
  819 + protected function createOrUpdateNotaExame($matriculaId, $componenteCurricularId, $notaExame) {
  820 +
  821 + $obj = new clsModulesNotaExame($matriculaId, $componenteCurricularId, $notaExame);
  822 +
  823 + return ($obj->existe() ? $obj->edita() : $obj->cadastra());
  824 + }
  825 +
  826 + protected function deleteNotaExame($matriculaId, $componenteCurricularId){
  827 + $obj = new clsModulesNotaExame($matriculaId, $componenteCurricularId);
  828 + return ($obj->excluir());
  829 + }
808 830  
809 831 protected function getNotaAtual($etapa = null, $componenteCurricularId = null) {
810 832 // defaults
... ...