Пример #1
0
 /**
  * Atualiza a média dos componentes curriculares.
  */
 protected function _updateNotaComponenteMedia()
 {
     require_once 'Avaliacao/Model/NotaComponenteMedia.php';
     $this->_loadNotaComponenteCurricular(FALSE);
     foreach ($this->_notasComponentes as $id => $notasComponentes) {
         // Cria um array onde o índice é a etapa
         $etapasNotas = CoreExt_Entity::entityFilterAttr($notasComponentes, 'etapa', 'nota');
         $notas = array('Se' => 0, 'Et' => $this->getOption('etapas'));
         // Cria o array formatado para o cálculo da fórmula da média
         foreach ($etapasNotas as $etapa => $nota) {
             if (is_numeric($etapa)) {
                 $notas['E' . $etapa] = $nota;
                 $notas['Se'] += $nota;
                 continue;
             }
             $notas[$etapa] = $nota;
         }
         // Calcula a média
         $media = $this->_calculaMedia($notas);
         // Cria uma nova instância de média, já com a nota arredondada e a etapa
         $notaComponenteCurricularMedia = new Avaliacao_Model_NotaComponenteMedia(array('notaAluno' => $this->_getNotaAluno()->id, 'componenteCurricular' => $id, 'media' => $media, 'mediaArredondada' => $this->arredondaNota($media), 'etapa' => $etapa));
         try {
             // Se existir, marca como "old" para possibilitar a atualização
             $this->getNotaComponenteMediaDataMapper()->find(array($notaComponenteCurricularMedia->get('notaAluno'), $notaComponenteCurricularMedia->get('componenteCurricular')));
             $notaComponenteCurricularMedia->markOld();
         } catch (Exception $e) {
             // Prossegue, sem problemas.
         }
         // Salva a média
         $this->getNotaComponenteMediaDataMapper()->save($notaComponenteCurricularMedia);
     }
 }