瀏覽代碼

Consultas para grafias de reportes

ElPoteito 2 年之前
父節點
當前提交
a62b91f3dc
共有 3 個文件被更改,包括 282 次插入3 次删除
  1. 1 0
      config/web.php
  2. 198 3
      modules/v1/controllers/EventoController.php
  3. 83 0
      modules/v1/controllers/UsuarioController.php

+ 1 - 0
config/web.php

@@ -57,6 +57,7 @@ $config = [
             'v1/evento',
             'v1/grupo',
             'v1/resultado',
+            'v1/usuario'
           ],
         ]
       ],

+ 198 - 3
modules/v1/controllers/EventoController.php

@@ -5,6 +5,7 @@ namespace v1\controllers;
 use common\data\Respuesta;
 use common\rest\AuthController;
 use yii\db\Expression;
+use yii\db\Query;
 
 class EventoController extends AuthController {
 
@@ -22,13 +23,13 @@ class EventoController extends AuthController {
     }
 
     if($q !== "") {
-      /*# Ejemplo de buscador
+      # Ejemplo de buscador
       $query->andWhere([
         "OR",
         ["ilike", "nombre", $q],
-        ["ilike", "direccion", $q],
+        // ["ilike", "direccion", $q],
       ]);
-      // */
+      //
     }
 
     return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
@@ -82,4 +83,198 @@ class EventoController extends AuthController {
       ->mensaje("{$this->modelName} eliminado");
   }
 
+  public function actionResultadosIndividuales() {
+    $idUsuario = intval($this->req->getBodyParam("idUsuario", null));
+    $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
+    $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
+
+    $query = (new Query())
+      ->select([
+        "{{Evento}}.id as eventoId",
+        "{{Resultado}}.accion as accionRes",
+      ])
+      ->from("Evento")
+      ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
+      ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
+      ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
+      ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
+      ->andWhere([
+        "AND",
+        [">=", "fechaInicio", $fechaInicio],
+        ["<=", "fechaFinal", $fechaFinal],
+      ])
+      ->andWhere(["{{UsuarioGrupo}}.[[idUsuario]]" => $idUsuario])
+      ->orderBy(["eventoId" => SORT_ASC]);
+    
+    $total = 0;
+    $participo = 0;
+    foreach($query->each() as $resultado) {
+      $total++;
+      if ($resultado["accionRes"] !== null) {
+        $participo ++;
+      }
+    }
+
+    return (new Respuesta())
+      ->detalle([
+        "total" => $total,
+        "participo" => $participo,
+        "pendientes" => ($total - $participo)
+      ]);
+  }
+
+  public function actionResultadosDependencia() {
+    $idDependencia = intval($this->req->getBodyParam("idDependencia", null));
+    $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
+    $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
+
+    $query = (new Query())
+      ->select([
+        "{{Evento}}.id as eventoId",
+        "{{Resultado}}.accion as accionRes",
+      ])
+      ->from("Evento")
+      ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
+      ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
+      ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
+      ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
+      ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioDependencia}}.[[idUsuario]]")
+      ->andWhere([
+        "AND",
+        [">=", "fechaInicio", $fechaInicio],
+        ["<=", "fechaFinal", $fechaFinal],
+      ])
+      ->andWhere(["{{UsuarioDependencia}}.[[idDependencia]]" => $idDependencia])
+      ->orderBy(["eventoId" => SORT_ASC]);
+    
+    $total = 0;
+    $participo = 0;
+    foreach($query->each() as $resultado) {
+      $total++;
+      if ($resultado["accionRes"] !== null) {
+        $participo ++;
+      }
+    }
+
+    return (new Respuesta())
+      ->detalle([
+        "total" => $total,
+        "participo" => $participo,
+        "pendientes" => ($total - $participo)
+      ]);
+  }
+
+  public function actionComparativaDependencia() {
+    $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
+    $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
+
+    $query = (new Query())
+      ->select([
+        "{{Dependencia}}.id as dependenciaId",
+        "{{Dependencia}}.nombre as dependenciaNombre",
+        "COUNT({{Resultado}}.[[idUsuario]]) filter ( where {{Resultado}}.[[idUsuario]] is not null ) as conteoNotNull",
+        "COUNT({{UsuarioGrupo}}.[[idUsuario]]) as totalDependencia"
+      ])
+      ->from("Evento")
+      ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
+      ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
+      ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
+      ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
+      ->innerJoin("Dependencia", "{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]")
+      ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioDependencia}}.[[idUsuario]]")
+      ->andWhere([
+        "AND",
+        [">=", "fechaInicio", $fechaInicio],
+        ["<=", "fechaFinal", $fechaFinal],
+      ])
+      ->groupBy([
+        "dependenciaId",
+        "dependenciaNombre"
+      ])
+      ->orderBy(["dependenciaNombre" => SORT_ASC]);
+
+    $data = [];
+    foreach($query->each() as $resultado) {
+      $data[] = [
+        "id" => $resultado["dependenciaId"],
+        "nombre" => $resultado["dependenciaNombre"],
+        "participaciones" => $resultado["conteoNotNull"],
+        "pendientes" => $resultado["totalDependencia"] - $resultado["conteoNotNull"]
+      ];
+    }
+
+    return (new Respuesta())
+      ->detalle($data);
+  }
+
+  public function actionPorEvento() {
+    $idEvento = intval($this->req->getBodyParam("idEvento", null));
+    $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
+    $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
+
+    $queryUsuario = (new Query())
+      ->select([
+        "{{Evento}}.id as eventoId",
+        "{{Resultado}}.accion as accionRes",
+      ])
+      ->from("Evento")
+      ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
+      ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
+      ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
+      ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
+      ->andWhere([
+        "AND",
+        [">=", "fechaInicio", $fechaInicio],
+        ["<=", "fechaFinal", $fechaFinal],
+      ])
+      ->andWhere(["{{Evento}}.id" => $idEvento])
+      ->orderBy(["eventoId" => SORT_ASC]);
+    
+    $totalUsuario = 0;
+    $participoUsuario = 0;
+    foreach($queryUsuario->each() as $resultado) {
+      $totalUsuario++;
+      if ($resultado["accionRes"] !== null) {
+        $participoUsuario ++;
+      }
+    }
+
+    $queryDependencia = (new Query())
+      ->select([
+        "{{Evento}}.id as eventoId",
+        "{{Resultado}}.accion as accionRes",
+      ])
+      ->from("Evento")
+      ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
+      ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
+      ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
+      ->innerJoin("UsuarioDependencia", '{{UsuarioDependencia}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]')
+      ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
+      ->andWhere([
+        "AND",
+        [">=", "fechaInicio", $fechaInicio],
+        ["<=", "fechaFinal", $fechaFinal],
+      ])
+      ->andWhere(["{{Evento}}.id" => $idEvento])
+      ->orderBy(["eventoId" => SORT_ASC]);
+
+    $totalDependencia = 0;
+    $participoDependencia = 0;
+    foreach($queryDependencia->each() as $resultado) {
+      $totalDependencia++;
+      if ($resultado["accionRes"] !== null) {
+        $participoDependencia ++;
+      }
+    }
+
+    return (new Respuesta())
+      ->detalle([
+        "totalResultadosDependencias" => $totalDependencia,
+        "participoResultadosDependencias" => $participoDependencia,
+        "pendientesResultadosDependencias" => ($totalDependencia - $participoDependencia),
+        "totalResultadosUsuarios" => $totalUsuario,
+        "participoResultadosUsuarios" => $participoUsuario,
+        "pendientesResultadosUsuarios" => ($totalUsuario - $participoUsuario)
+      ]);
+  }
 }

+ 83 - 0
modules/v1/controllers/UsuarioController.php

@@ -0,0 +1,83 @@
+<?php
+
+namespace v1\controllers;
+
+use common\data\Respuesta;
+use common\rest\AuthController;
+use yii\db\Expression;
+
+class UsuarioController extends AuthController {
+
+  public $modelClass = "v1\models\Usuario";
+  public $modelName = "Usuario";
+
+  public function actionIndex() {
+    $id = intval($this->req->get("id", ""));
+    $q = trim($this->req->get("q", ""));
+
+    $query = $this->queryInicial;
+
+    if ($id > 0) {
+      $query->andWhere(["id" => $id]);
+    }
+
+    if ($q !== "") {
+      # Ejemplo de buscador
+      $query->andWhere([
+        "OR",
+        ["ilike", "nombre", $q],
+      ]);
+      //
+    }
+
+    return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
+  }
+
+  public function actionGuardar() {
+    $id = intval($this->req->getBodyParam("id", null));
+    $modelo = null;
+
+    if ($id > 0) {
+      $modelo = $this->modelClass::findOne($id);
+    }
+    if ($modelo === null) {
+      $modelo = new $this->modelClass();
+      $modelo->creado = new Expression('now()');
+      $modelo->idUsuarioCreador = $this->usuario->id;
+    } else {
+      $modelo->modificado = new Expression('now()');
+    }
+
+    $modelo->load($this->req->getBodyParams(), '');
+    if (!$modelo->save()) {
+      return (new Respuesta($modelo))
+        ->mensaje("Hubo un problema al guardar el {$this->modelName}");
+    }
+
+    $modelo->refresh();
+    return (new Respuesta($modelo))
+      ->mensaje("{$this->modelName} guardado correctamente");
+  }
+
+  public function actionEliminar() {
+    $id = intval($this->req->getBodyParam("id", null));
+    $modelo = null;
+
+    if ($id > 0) {
+      $modelo = $this->modelClass::findOne(["id" => $id]);
+    }
+    if ($modelo === null) {
+      return (new Respuesta())
+        ->esError()
+        ->mensaje("{$this->modelName} no encontrado");
+    }
+    $modelo->eliminado = null;
+    if (!$modelo->save()) {
+      return (new Respuesta($modelo))
+        ->mensaje("No se pudo eliminar el {$this->modelName}");
+    }
+
+    return (new Respuesta())
+      ->mensaje("{$this->modelName} eliminado");
+  }
+}