Explorar o código

Reporte de dependencias

Hugo Quijada %!s(int64=2) %!d(string=hai) anos
pai
achega
aaa9b31ce6

+ 80 - 0
modules/v1/controllers/ComparativaDependenciaController.php

@@ -0,0 +1,80 @@
+<?php
+
+namespace v1\controllers;
+
+use common\data\Respuesta;
+use common\rest\JsonController;
+use yii\db\Query;
+use yii\web\NotFoundHttpException;
+
+class ComparativaDependenciaController extends JsonController {
+
+  public function actionIndex() {
+    $fechaInicio = trim($this->req->get("inicio", ""));
+    $fechaFinal = trim($this->req->get("fin", ""));
+
+    if($fechaInicio === "" || $fechaFinal === "") {
+      throw new NotFoundHttpException("Los parámetros inicio y fin son obligatorios.");
+    }
+
+    $query = (new Query())
+      ->select([
+        "{{Dependencia}}.id as dependenciaId",
+        "{{Dependencia}}.nombre as dependenciaNombre",
+        "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook' and {{Usuario}}.[[facebookVerificado]]) as eventosFacebook",
+        "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter' and {{Usuario}}.[[twitterVerificado]]) as eventosTwitter",
+        "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram' and {{Usuario}}.[[instagramVerificado]]) as eventosInstagram",
+        "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] not in('Facebook', 'Twitter', 'Instagram') and {{Usuario}}.[[instagramVerificado]]) as eventos",
+        "count({{Resultado}}.accion) as cantidadResultados",
+      ])
+      ->from("Evento")
+      ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
+      ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
+      ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
+      ->innerJoin("Usuario", "{{Usuario}}.id = {{UsuarioGrupo}}.[[idUsuario]]")
+      ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.[[id]]")
+      ->innerJoin("Dependencia", "{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]")
+      ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
+      ->andWhere([
+        "AND",
+        [">=", "fechaInicio", $fechaInicio],
+        ["<=", "fechaFinal", $fechaFinal],
+      ])
+      ->groupBy([
+        "dependenciaId",
+        "dependenciaNombre",
+      ])
+      ->orderBy(["dependenciaNombre" => SORT_ASC]);
+
+    $query2 = (new Query())
+      ->select([
+        "*",
+        "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) as [[cantidadEventos]]",
+        "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) - [[cantidadResultados]] as [[cantidadPendientes]]"
+      ])
+      ->from(["t" => $query]);
+
+    $data = [];
+
+    $eventosAtendidos = 0;
+    $eventosPendientes = 0;
+    $csv = "nombre,participaciones,pendientes\n";
+    foreach($query2->each() as $resultado) {
+      $eventosAtendidos += $resultado["cantidadResultados"];
+      $eventosPendientes += $resultado["cantidadPendientes"];
+
+      $data[] = [
+        "id" => $resultado["dependenciaId"],
+        "nombre" => $resultado["dependenciaNombre"],
+        "participaciones" => $resultado["cantidadResultados"],
+        "pendientes" => $resultado["cantidadPendientes"],
+      ];
+
+      $csv .= "{$resultado["dependenciaNombre"]},{$resultado["cantidadResultados"]},{$resultado["cantidadPendientes"]}\n";
+    }
+
+    \Yii::$app->getResponse()->sendContentAsFile($csv, "comparativa_dep_{$fechaInicio}_{$fechaFinal}.csv");
+    \Yii::$app->end();
+  }
+
+}

+ 2 - 2
modules/v1/controllers/EventoController.php

@@ -336,9 +336,9 @@ class EventoController extends AuthController {
       ->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("Usuario", "{{Usuario}}.id = {{UsuarioGrupo}}.[[idUsuario]]")
+      ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.[[id]]")
       ->innerJoin("Dependencia", "{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]")
-      ->innerJoin("Usuario", "{{Usuario}}.id = {{UsuarioDependencia}}.[[idUsuario]]")
       ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
       ->andWhere([
         "AND",