示例#1
0
 /**
  * @see CoreExt_Entity_Validatable#getDefaultValidatorCollection()
  */
 public function getDefaultValidatorCollection()
 {
     // Enums
     $tipoNotaValor = RegraAvaliacao_Model_Nota_TipoValor::getInstance();
     $tipoProgressao = RegraAvaliacao_Model_TipoProgressao::getInstance();
     $tipoParecerDescritivo = RegraAvaliacao_Model_TipoParecerDescritivo::getInstance();
     $tipoPresenca = RegraAvaliacao_Model_TipoPresenca::getInstance();
     // ids de fórmulas de média
     $formulaMedia = $this->getDataMapper()->findFormulaMediaFinal();
     $formulaMedia = CoreExt_Entity::entityFilterAttr($formulaMedia, 'id');
     // ids de fórmulas de recuperação
     $formulaRecuperacao = $this->getDataMapper()->findFormulaMediaRecuperacao();
     $formulaRecuperacao = CoreExt_Entity::entityFilterAttr($formulaRecuperacao, 'id');
     $formulaRecuperacao[0] = NULL;
     // ids de tabelas de arredondamento
     $tabelas = $this->getDataMapper()->findTabelaArredondamento($this);
     $tabelas = CoreExt_Entity::entityFilterAttr($tabelas, 'id');
     // Instituições
     $instituicoes = array_keys(App_Model_IedFinder::getInstituicoes());
     // Fórmula de média é obrigatória?
     $isFormulaMediaRequired = TRUE;
     // Média é obrigatória?
     $isMediaRequired = TRUE;
     if ($this->get('tipoNota') == RegraAvaliacao_Model_Nota_TipoValor::NENHUM) {
         $isFormulaMediaRequired = FALSE;
         $isMediaRequired = FALSE;
         // Aceita somente o valor NULL quando o tipo de nota é Nenhum.
         $formulaMedia = $formulaMedia + array(NULL);
     }
     return array('instituicao' => new CoreExt_Validate_Choice(array('choices' => $instituicoes)), 'nome' => new CoreExt_Validate_String(array('min' => 5, 'max' => 50)), 'formulaMedia' => new CoreExt_Validate_Choice(array('choices' => $formulaMedia, 'required' => $isFormulaMediaRequired)), 'formulaRecuperacao' => new CoreExt_Validate_Choice(array('choices' => $formulaRecuperacao, 'required' => FALSE)), 'tipoNota' => new CoreExt_Validate_Choice(array('choices' => $tipoNotaValor->getKeys())), 'tipoProgressao' => new CoreExt_Validate_Choice(array('choices' => $tipoProgressao->getKeys())), 'tabelaArredondamento' => new CoreExt_Validate_Choice(array('choices' => $tabelas, 'choice_error' => 'A tabela de arredondamento selecionada não ' . 'corresponde ao sistema de nota escolhido.')), 'parecerDescritivo' => new CoreExt_Validate_Choice(array('choices' => $tipoParecerDescritivo->getKeys())), 'tipoPresenca' => new CoreExt_Validate_Choice(array('choices' => $tipoPresenca->getKeys())), 'media' => $this->validateIfEquals('tipoProgressao', RegraAvaliacao_Model_TipoProgressao::CONTINUADA, 'CoreExt_Validate_Numeric', array('required' => $isMediaRequired, 'min' => 1, 'max' => 10), array('required' => $isMediaRequired, 'min' => 0, 'max' => 10)), 'porcentagemPresenca' => new CoreExt_Validate_Numeric(array('min' => 1, 'max' => 100)), 'mediaRecuperacao' => $this->validateIfEquals('tipoProgressao', RegraAvaliacao_Model_TipoProgressao::CONTINUADA, 'CoreExt_Validate_Numeric', array('required' => $isMediaRequired, 'min' => 1, 'max' => 14), array('required' => $isMediaRequired, 'min' => 0, 'max' => 14)));
 }
示例#2
0
 /**
  * Promove o aluno de etapa escolar caso esteja aprovado de acordo com o
  * necessário estabelecido por tipoProgressao de
  * RegraAvaliacao_Model_Regra.
  *
  * @param bool $ok Caso a progressão não seja automática, é necessário uma
  *   confirmação externa para a promoção do aluno.
  * @return bool
  */
 public function promover($ok = NULL)
 {
     $situacao = $this->getSituacaoAluno();
     if (TRUE == $situacao->andamento) {
         require_once 'CoreExt/Service/Exception.php';
         throw new CoreExt_Service_Exception('Não é possível promover uma matrícula em andamento.');
     }
     // Se a matrícula já foi alterada (aluno aprovado ou reprovado), lança exceção.
     if (App_Model_MatriculaSituacao::EM_ANDAMENTO > $this->getOption('aprovado')) {
         require_once 'CoreExt/Service/Exception.php';
         throw new CoreExt_Service_Exception('A matrícula já foi promovida.');
     }
     $tipoProgressao = $this->getRegra()->get('tipoProgressao');
     switch ($tipoProgressao) {
         case RegraAvaliacao_Model_TipoProgressao::CONTINUADA:
             $promover = TRUE;
             break;
         case RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_AUTO_MEDIA_PRESENCA:
             $promover = $situacao->aprovado && !$situacao->retidoFalta;
             break;
         case RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_AUTO_SOMENTE_MEDIA:
             $promover = $situacao->aprovado;
             break;
         case RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_MANUAL:
             if (is_null($ok)) {
                 $enum = RegraAvaliacao_Model_TipoProgressao::getInstance();
                 $message = sprintf('Para atualizar a matrícula em uma regra %s é ' . 'necessário confirmação externa no argumento "$ok".', $enum->getValue($tipoProgressao));
                 require_once 'CoreExt/Service/Exception.php';
                 throw new CoreExt_Service_Exception($message);
             }
             $promover = $ok;
             break;
     }
     return $this->_updateMatricula($this->getOption('matricula'), $this->getOption('usuario'), $promover);
 }
示例#3
0
 /**
  * @see clsCadastro#Gerar()
  */
 public function Gerar()
 {
     $this->campoOculto('id', $this->getEntity()->id);
     // Instituição
     $instituicoes = App_Model_IedFinder::getInstituicoes();
     $this->campoLista('instituicao', $this->_getLabel('instituicao'), $instituicoes, $this->getEntity()->instituicao);
     // Nome
     $this->campoTexto('nome', $this->_getLabel('nome'), $this->getEntity()->nome, 50, 50, TRUE, FALSE, FALSE, $this->_getHelp('nome'));
     // Nota tipo valor
     $notaTipoValor = RegraAvaliacao_Model_Nota_TipoValor::getInstance();
     $this->campoRadio('tipoNota', $this->_getLabel('tipoNota'), $notaTipoValor->getEnums(), $this->getEntity()->get('tipoNota'), '', $this->_getHelp('tipoNota'));
     // Tabela de arredondamento
     $tabelaArredondamento = $this->getDataMapper()->findTabelaArredondamento($this->getEntity());
     $tabelaArredondamento = CoreExt_Entity::entityFilterAttr($tabelaArredondamento, 'id', 'nome');
     if (empty($tabelaArredondamento)) {
         $tabelaArredondamento = array(0 => 'O tipo de nota não possui tabela de arredondamento.');
     }
     $this->campoLista('tabelaArredondamento', $this->_getLabel('tabelaArredondamento'), $tabelaArredondamento, $this->getEntity()->get('tabelaArredondamento'), '', FALSE, $this->_getHelp('tabelaArredondamento'), '', FALSE, FALSE);
     // Tipo progressão
     $tipoProgressao = RegraAvaliacao_Model_TipoProgressao::getInstance();
     $this->campoRadio('tipoProgressao', $this->_getLabel('tipoProgressao'), $tipoProgressao->getEnums(), $this->getEntity()->get('tipoProgressao'), '', $this->_getHelp('tipoProgressao'));
     // Média
     $this->campoTexto('media', $this->_getLabel('media'), $this->getEntity()->media, 5, 50, FALSE, FALSE, FALSE, $this->_getHelp('media'));
     $this->campoTexto('mediaRecuperacao', $this->_getLabel('mediaRecuperacao'), $this->getEntity()->mediaRecuperacao, 5, 50, FALSE, FALSE, FALSE, $this->_getHelp('mediaRecuperacao'));
     // Cálculo média
     $formulas = $this->getDataMapper()->findFormulaMediaFinal();
     $formulas = CoreExt_Entity::entityFilterAttr($formulas, 'id', 'nome');
     $this->campoLista('formulaMedia', $this->_getLabel('formulaMedia'), $formulas, $this->getEntity()->get('formulaMedia'), '', FALSE, $this->_getHelp('formulaMedia'), '', FALSE, FALSE);
     // Cálculo média recuperação
     $formulas = $this->getDataMapper()->findFormulaMediaRecuperacao();
     $formulasArray = array(0 => 'Não usar recuperação');
     $formulasArray = $formulasArray + CoreExt_Entity::entityFilterAttr($formulas, 'id', 'nome');
     $this->campoLista('formulaRecuperacao', $this->_getLabel('formulaRecuperacao'), $formulasArray, $this->getEntity()->get('formulaRecuperacao'), '', FALSE, $this->_getHelp('formulaRecuperacao'), '', FALSE, FALSE);
     // Porcentagem presença
     $this->campoTexto('porcentagemPresenca', $this->_getLabel('porcentagemPresenca'), $this->getEntity()->porcentagemPresenca, 5, 50, TRUE, FALSE, FALSE, $this->_getHelp('porcentagemPresenca'));
     // Parecer descritivo
     $parecerDescritivo = RegraAvaliacao_Model_TipoParecerDescritivo::getInstance();
     $this->campoRadio('parecerDescritivo', $this->_getLabel('parecerDescritivo'), $parecerDescritivo->getEnums(), $this->getEntity()->get('parecerDescritivo'), '', $this->_getHelp('parecerDescritivo'));
     // Presença
     $tipoPresenca = RegraAvaliacao_Model_TipoPresenca::getInstance();
     $this->campoRadio('tipoPresenca', $this->_getLabel('tipoPresenca'), $tipoPresenca->getEnums(), $this->getEntity()->get('tipoPresenca'), '', $this->_getHelp('tipoPresenca'));
 }
示例#4
0
 /**
  * Promove o aluno de etapa escolar caso esteja aprovado de acordo com o
  * necessário estabelecido por tipoProgressao de
  * RegraAvaliacao_Model_Regra.
  *
  * @param bool $ok Caso a progressão não seja automática, é necessário uma
  *   confirmação externa para a promoção do aluno.
  * @return bool
  */
 public function promover($novaSituacaoMatricula = NULL)
 {
     $tipoProgressao = $this->getRegra()->get('tipoProgressao');
     $situacaoMatricula = $this->getOption('aprovado');
     $situacaoBoletim = $this->getSituacaoAluno();
     $exceptionMsg = '';
     if ($situacaoBoletim->andamento) {
         $novaSituacaoMatricula = App_Model_MatriculaSituacao::EM_ANDAMENTO;
     } else {
         switch ($tipoProgressao) {
             case RegraAvaliacao_Model_TipoProgressao::CONTINUADA:
                 $novaSituacaoMatricula = App_Model_MatriculaSituacao::APROVADO;
                 break;
             case RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_AUTO_MEDIA_PRESENCA:
                 if ($situacaoBoletim->aprovado && !$situacaoBoletim->retidoFalta) {
                     $novaSituacaoMatricula = App_Model_MatriculaSituacao::APROVADO;
                 } else {
                     $novaSituacaoMatricula = App_Model_MatriculaSituacao::REPROVADO;
                 }
                 break;
             case RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_AUTO_SOMENTE_MEDIA:
                 if ($situacaoBoletim->aprovado) {
                     $novaSituacaoMatricula = App_Model_MatriculaSituacao::APROVADO;
                 } else {
                     $novaSituacaoMatricula = App_Model_MatriculaSituacao::REPROVADO;
                 }
                 break;
             case RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_MANUAL && is_null($novaSituacaoMatricula):
                 $tipoProgressaoInstance = RegraAvaliacao_Model_TipoProgressao::getInstance();
                 $exceptionMsg = sprintf('Para atualizar a matrícula em uma regra %s é ' . 'necessário passar o valor do argumento "$novaSituacaoMatricula".', $tipoProgressaoInstance->getValue($tipoProgressao));
                 break;
         }
     }
     if ($novaSituacaoMatricula == $situacaoMatricula) {
         $exceptionMsg = "Matrícula ({$this->getOption('matricula')}) não precisou ser promovida, " . "pois a nova situação continua a mesma da anterior ({$novaSituacaoMatricula})";
     }
     if ($exceptionMsg) {
         require_once 'CoreExt/Service/Exception.php';
         throw new CoreExt_Service_Exception($exceptionMsg);
     }
     return $this->_updateMatricula($this->getOption('matricula'), $this->getOption('usuario'), $novaSituacaoMatricula);
 }