SVN Alba r6311 - in prosistem/alba/trunk/alba: apps/principal/modules/boletin/actions lib lib/formulas lib/model
Author: ftoledo Date: 2009-12-16 20:32:19 -0300 (Wed, 16 Dec 2009) New Revision: 6311 Added: prosistem/alba/trunk/alba/lib/formulas/ prosistem/alba/trunk/alba/lib/formulas/albaFormulaBoletin.class.php prosistem/alba/trunk/alba/lib/formulas/formula_FatimaDefinitiva.class.php prosistem/alba/trunk/alba/lib/formulas/formula_Promedio.class.php Modified: prosistem/alba/trunk/alba/apps/principal/modules/boletin/actions/components.class.php prosistem/alba/trunk/alba/lib/model/Alumno.php Log: soporte de formulas para calcular las notas del boletin ver: http://alba.pressenter.com.ar/cgi-bin/trac.cgi/wiki/Boletines Modified: prosistem/alba/trunk/alba/apps/principal/modules/boletin/actions/components.class.php =================================================================== --- prosistem/alba/trunk/alba/apps/principal/modules/boletin/actions/components.class.php 2009-12-16 20:32:56 UTC (rev 6310) +++ prosistem/alba/trunk/alba/apps/principal/modules/boletin/actions/components.class.php 2009-12-16 23:32:19 UTC (rev 6311) @@ -61,7 +61,7 @@ if($ad) { $division_id = $ad->getFkDivisionId(); } else { - $no_cargar = 1; + $no_cargar = 1; } } @@ -74,12 +74,12 @@ $e = EstablecimientoPeer::retrieveByPk($establecimiento_id); $optionsConcepto = $e->getConceptosArray(); - $notaAlumno = $alumno->getNotas(); + $notaAlumno = $alumno->getNotas($this->getUser()->getAttribute('fk_ciclolectivo_id')); $conceptoAlumno = $alumno->getNotasConcepto(); $c = CiclolectivoPeer::retrieveByPk($this->getUser()->getAttribute('fk_ciclolectivo_id')); $optionsPeriodo = $c->getPeriodosArray(); - + $aAsistencia = $alumno->getAsistenciasPorCiclolectivo($this->getUser()->getAttribute('fk_ciclolectivo_id')); } else { $this->getUser()->setFlash('notice','Error: el alumno no esta en ninguna división'); Added: prosistem/alba/trunk/alba/lib/formulas/albaFormulaBoletin.class.php =================================================================== --- prosistem/alba/trunk/alba/lib/formulas/albaFormulaBoletin.class.php (rev 0) +++ prosistem/alba/trunk/alba/lib/formulas/albaFormulaBoletin.class.php 2009-12-16 23:32:19 UTC (rev 6311) @@ -0,0 +1,15 @@ +<?php + +class albaFormulaBoletin { + function init() + { + + } + + function calcular($params = array()) + { + return $params; + } + +} +?> Added: prosistem/alba/trunk/alba/lib/formulas/formula_FatimaDefinitiva.class.php =================================================================== --- prosistem/alba/trunk/alba/lib/formulas/formula_FatimaDefinitiva.class.php (rev 0) +++ prosistem/alba/trunk/alba/lib/formulas/formula_FatimaDefinitiva.class.php 2009-12-16 23:32:19 UTC (rev 6311) @@ -0,0 +1,56 @@ +<?php + +require_once ('lib/formulas/albaFormulaBoletin.class.php'); + +class formula_FatimaDefinitiva extends albaFormulaBoletin { + + public function init() + { + $this->ayuda = "Esta formula calcula la nota final segun el criterio siguiente:"; + $this->ayuda .= "Parametros: Nfinal, N3trimestre, NDiciembre, NMarzo"; + $this->nombre = 'FatimaDefinitiva'; + } + + public function calcular($parametros = array()) + { + if (count($parametros) < 2) { + return ''; + } + + //se va a marzo derecho + if ($parametros[0] <4 || $parametros[2] <6) { + //marzo derecho + if (isset($parametros[3]) && $parametros[3] != '') { + //queda la nota de marzo como definitiva + return $parametros[3]; + } + else { + //todavia no hay nota de marzo + return ''; + } + + } + + // aprobo todo oka durante los trimestres + if ($parametros[0] >= 6 && $parametros[1] >=6) { + return $parametros[0]; + } + + + //rinde en diciembre + if (($parametros[0] >=4 && $parametros[0] <6) || $parametros[1] < 6) { + if (isset($parametros[2]) && $parametros[2] >=6) { + return sprintf("%01.2f",($parametros[0]+$parametros[2])/2); + } + else { + //no hay nota de diciembre o no aprobo + return ''; + } + } + + + + + } +} +?> Added: prosistem/alba/trunk/alba/lib/formulas/formula_Promedio.class.php =================================================================== --- prosistem/alba/trunk/alba/lib/formulas/formula_Promedio.class.php (rev 0) +++ prosistem/alba/trunk/alba/lib/formulas/formula_Promedio.class.php 2009-12-16 23:32:19 UTC (rev 6311) @@ -0,0 +1,27 @@ +<?php + +require_once ('lib/formulas/albaFormulaBoletin.class.php'); + +class formula_Promedio extends albaFormulaBoletin { + + public function init() + { + $this->ayuda = "Esta formula calcula el promedio entre los parametros pasados (P1 y P2)\n"; + $this->ayuda .= "Luego si P3 >=6, queda como resultado este promedio de P1 y P2"; + $this->ayuda .= "Si P3<6 el resultado es P3"; + $this->nombre = 'Promedio'; + } + + public function calcular($parametros = array()) + { + $total = 0; + if ($parametros[0] == '' || $parametros[1] == '' || $parametros[2] =='' ) { + return ''; + } + $suma = $parametros[0]+$parametros[1]+ $parametros[2]; + $prom =($suma) / 3; + + return sprintf("%01.2f",$prom); + } +} +?> Modified: prosistem/alba/trunk/alba/lib/model/Alumno.php =================================================================== --- prosistem/alba/trunk/alba/lib/model/Alumno.php 2009-12-16 20:32:56 UTC (rev 6310) +++ prosistem/alba/trunk/alba/lib/model/Alumno.php 2009-12-16 23:32:19 UTC (rev 6311) @@ -78,21 +78,70 @@ return $conceptoAlumno; } - public function getNotas() { + public function getNotas($ciclolectivo_id) { $notaAlumno = array(); + $notaActividad = array(); // notas del alumno $criteria = new Criteria(); $criteria->add(BoletinActividadesPeer::FK_ALUMNO_ID, $this->getId()); + $criteria->add(PeriodoPeer::CALCULAR, false); + $criteria->add(PeriodoPeer::FK_CICLOLECTIVO_ID, $ciclolectivo_id); $criteria->addJoin(BoletinActividadesPeer::FK_ESCALANOTA_ID, EscalanotaPeer::ID); + $criteria->addJoin(BoletinActividadesPeer::FK_PERIODO_ID, PeriodoPeer::ID); $criteria->addAsColumn("boletinActividades_periodo_id", BoletinActividadesPeer::FK_PERIODO_ID); $criteria->addAsColumn("boletinActividades_actividad_id", BoletinActividadesPeer::FK_ACTIVIDAD_ID); $criteria->addAsColumn("escalanota_nombre", EscalanotaPeer::NOMBRE); + $aBoletinActividades = BasePeer::doSelect($criteria); foreach($aBoletinActividades as $boletinActividades) { $notaAlumno[$boletinActividades[0]][$boletinActividades[1]] = $boletinActividades[2]; - $notaAlumno['calcular'] = true; + $notaActividad[$boletinActividades[1]][$boletinActividades[0]] = $boletinActividades[2]; } + $c = new Criteria(); + $c->add(PeriodoPeer::FK_CICLOLECTIVO_ID, $ciclolectivo_id); + $c->add(PeriodoPeer::CALCULAR,true); + $periodos = PeriodoPeer::doSelect($c); + foreach ($notaActividad as $act_indice => &$act) { + foreach ($periodos as $periodo) { + //validar que esten ok + if (trim($periodo->getFormula()) != '') { + + list($class_formula,$parametros) = explode('|', $periodo->getFormula()); + + $parametros = explode(',', $parametros); + //if (array_intersect($parametros,array_keys($act)) == $parametros) { + sfContext::getInstance()->getLogger()->debug("estan todo slo ids"); + + $class_formula = "formula_$class_formula"; + + require_once(sfConfig::get('sf_lib_dir') . DIRECTORY_SEPARATOR. 'formulas' . DIRECTORY_SEPARATOR . $class_formula . ".class.php"); + $formula = new $class_formula; + $notas_parametros = array(); + foreach($parametros as $parametro) { + if (isset($act[$parametro])) { + array_push($notas_parametros,sprintf("%01.2f",str_replace(",",".",$act[$parametro]))); + } + else { + array_push($notas_parametros,''); + } + + } + $nota = $formula->calcular($notas_parametros); + $notaAlumno[$periodo->getId()][$act_indice] = $nota; + $act[$periodo->getId()] = $nota; + //} + //else { + // sfContext::getInstance()->getLogger()->debug('faltan parametros para la formula'); + //} + } + else + { + sfContext::getInstance()->getLogger()->debug('el periodo es calculable pero no tiene una formula cargada'); + } + } + } + return $notaAlumno; }
participants (1)
-
commits@pressenter.com.ar