[Alba-desarrollo] SVN Alba r5440 - prosistem/alba/trunk/alba/apps/principal/modules/boletin/actions

commits en pressenter.com.ar commits en pressenter.com.ar
Mar Ene 29 16:05:26 CET 2008


Author: josx
Date: 2008-01-29 13:05:26 -0200 (Tue, 29 Jan 2008)
New Revision: 5440

Modified:
   prosistem/alba/trunk/alba/apps/principal/modules/boletin/actions/actions.class.php
Log:
Modificacion de consulta que trae la totalizacion de asistencias e inasistencias de un alumno para soportar pg

Modified: prosistem/alba/trunk/alba/apps/principal/modules/boletin/actions/actions.class.php
===================================================================
--- prosistem/alba/trunk/alba/apps/principal/modules/boletin/actions/actions.class.php	2008-01-28 14:46:59 UTC (rev 5439)
+++ prosistem/alba/trunk/alba/apps/principal/modules/boletin/actions/actions.class.php	2008-01-29 15:05:26 UTC (rev 5440)
@@ -508,31 +508,40 @@
 
     public function getAsistenciaTotal($alumno_id, $fecha_inicio, $fecha_fin) {
         $aAsistencia = array();
-        
-        $con = sfContext::getInstance()->getDatabaseConnection($connection='propel');
-        // consulta muy fea que supongo que se puede hacer mas elegante y simple
-        $sql = "
-(
- SELECT ta.grupo as grupo, 0 as valor, asistencia.id as id
- FROM tipoasistencia ta
- LEFT JOIN asistencia ON  asistencia.fk_tipoasistencia_id = ta.id AND asistencia.fk_alumno_id = %s AND asistencia.fecha >= '%s' AND asistencia.fecha <= '%s'
- GROUP BY ta.grupo
- HAVING asistencia.id IS NULL
- )
- UNION
- (
- SELECT ta.grupo as grupo,SUM(ta.valor) as valor, a.id as id
- FROM tipoasistencia ta, asistencia a
- WHERE a.fk_tipoasistencia_id = ta.id  AND a.fk_alumno_id = %s AND a.fecha >= '%s' AND a.fecha <= '%s'
- GROUP BY ta.grupo
- )
-                ";
-        $stmt = $con->createStatement();
-        $aDatos = $stmt->executeQuery(sprintf($sql,$alumno_id, $fecha_inicio, $fecha_fin, $alumno_id, $fecha_inicio, $fecha_fin), ResultSet::FETCHMODE_ASSOC);        
-        foreach($aDatos as $dato) {
-            $aAsistencia[$dato['grupo']] = $dato['valor'];
+
+        // En teoria esta dos consultas pueden reemplazarse con una solo usando LEFT JOIN y CASE
+
+        $c = new Criteria();
+        $c->addGroupByColumn(TipoasistenciaPeer::GRUPO);
+        $c->addSelectColumn(TipoasistenciaPeer::GRUPO);
+        $rsColumna = TipoasistenciaPeer::doSelectRS($c);
+
+        $c = new Criteria();
+        $c->clearSelectColumns();
+        $c->addGroupByColumn(TipoasistenciaPeer::GRUPO);
+        $c->addSelectColumn(TipoasistenciaPeer::GRUPO);
+        $c->addSelectColumn('SUM('.TipoasistenciaPeer::VALOR.') AS valor');
+        $c->addJoin(TipoasistenciaPeer::ID, AsistenciaPeer::FK_TIPOASISTENCIA_ID);
+        $c->add(AsistenciaPeer::FK_ALUMNO_ID, $alumno_id, Criteria::EQUAL);
+        $c2 = new Criteria();
+        $criterion = $c2->getNewCriterion(AsistenciaPeer::FECHA, $fecha_inicio, Criteria::GREATER_EQUAL);
+        $criterion->addAnd($c2->getNewCriterion(AsistenciaPeer::FECHA, $fecha_fin, Criteria::LESS_EQUAL));
+        $c->add($criterion);
+        $rsValor = TipoasistenciaPeer::doSelectRS($c);
+
+        if($rsColumna) {
+            while($rsColumna->next()) {
+                $aAsistencia[$rsColumna->getString(1)] = 0;  // indice: nombre del Grupo, contenido: 
+            }
         }
 
+        if($rsValor) {
+            while($rsValor->next()) {
+                // indice: nombre del Grupo, contenido: sumatoria de valor
+                $aAsistencia[$rsValor->getString(1)] = $rsValor->getFloat(2); 
+            }
+        }
+
         return $aAsistencia;
     }
 




Más información sobre la lista de distribución Alba-desarrollo