[Alba-desarrollo] SVN Alba r6311 - in prosistem/alba/trunk/alba: apps/principal/modules/boletin/actions lib lib/formulas lib/model
commits en pressenter.com.ar
commits en pressenter.com.ar
Jue Dic 17 00:32:19 CET 2009
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;
}
Más información sobre la lista de distribución Alba-desarrollo