[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