Просмотр исходного кода

Correción petición de reporte individual

ElPoteito 2 лет назад
Родитель
Сommit
c518150973

+ 1 - 1
config/web.php

@@ -58,7 +58,7 @@ $config = [
             'v1/grupo',
             'v1/resultado',
             'v1/usuario',
-            'v1/reporte-individual'
+            'v1/reporte-individual',
           ],
         ]
       ],

+ 32 - 5
modules/v1/controllers/ReporteIndividualController.php

@@ -20,7 +20,34 @@ class ReporteIndividualController extends AuthController {
     $pagina = intval($this->req->getBodyParam("pagina", 1));
     // $q = trim($this->req->get("q", ""));
 
-    $query = (new QuerY())
+    $query = (new Query())
+      ->select([
+        "{{Usuario}}.nombre as nombre",
+        "{{Usuario}}.facebook as facebook",
+        "{{Usuario}}.facebookVerificado as facebookVerificado",
+        "{{Usuario}}.twitter as twitter",
+        "{{Usuario}}.twitterVerificado as twitterVerificado",
+        "{{Usuario}}.instagram as instagram",
+        "{{Usuario}}.instagramVerificado as instagramVerificado",
+        "{{Usuario}}.id as uId",
+        // "{{Evento}}.id as eventoId",
+        // "{{Evento}}.redSocial",
+        "count({{Evento}}.id) as cantidadEventos",
+        "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook') as eventosFacebook",
+        "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter') as eventosTwitter",
+        "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram') as eventosInstagram",
+        "count({{Resultado}}.accion) as cantidadResultados",
+        "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
+      ])
+      ->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]]")
+      ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
+      ->groupBy(["{{Usuario}}.nombre", "facebook", "facebookVerificado", "twitter", "twitterVerificado", "instagram", "instagramVerificado", "uId"]);
+
+    /* $query = (new QuerY())
       ->select([
         "{{ReporteIndividual}}.nombre",
         "{{ReporteIndividual}}.facebook",
@@ -57,10 +84,10 @@ class ReporteIndividualController extends AuthController {
         "{{ReporteIndividual}}.cantidadResultados",
         "({{ReporteIndividual}}.[[cantidadFacebook]] + {{ReporteIndividual}}.[[cantidadTwitter]] + {{ReporteIndividual}}.[[cantidadInstagram]])",
         "({{ReporteIndividual}}.[[cantidadFacebook]] + {{ReporteIndividual}}.[[cantidadTwitter]] + {{ReporteIndividual}}.[[cantidadInstagram]]) - {{ReporteIndividual}}.[[cantidadResultados]]"
-      ]);
+      ]); */
 
     if($idUsuario > 0) {
-      $query->andWhere(["{{ReporteIndividual}}.[[idUsuario]]" => $idUsuario]);
+      $query->andWhere(["{{Usuario}}.[[id]]" => $idUsuario]);
       $limite = 1;
       $pagina = 1;
     }
@@ -68,8 +95,8 @@ class ReporteIndividualController extends AuthController {
     if ($fechaInicio != "" && $fechaFinal != ""){
       $query->andWhere([
         "AND",
-        [">=", "fechaInicio", $fechaInicio],
-        ["<=", "fechaFinal", $fechaFinal],
+        [">=", "{{Evento}}.[[fechaInicio]]", $fechaInicio],
+        ["<=", "{{Evento}}.[[fechaFinal]]", $fechaFinal],
       ]);
     }
 

+ 69 - 0
modules/v1/controllers/ResultadosIndividualesController.php

@@ -0,0 +1,69 @@
+<?php
+
+namespace v1\controllers;
+
+use common\data\Respuesta;
+use common\rest\AuthController;
+use yii\db\Expression;
+use yii\db\Query;
+
+class ResultadosIndividualesController extends AuthController {
+
+  public function actionIndex() {
+    $idUsuario = intval($this->req->getBodyParam("idUsuario", ""));
+    $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
+    $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
+    $limite = intval($this->req->getBodyParam("limite", ""));
+    $pagina = intval($this->req->getBodyParam("pagina", 1));
+
+    $query = (new Query())
+      ->select([
+        "{{Usuario}}.nombre as nombre",
+        "{{Usuario}}.facebook as facebook",
+        "{{Usuario}}.facebookVerificado as facebookVerificado",
+        "{{Usuario}}.twitter as twitter",
+        "{{Usuario}}.twitterVerificado as twitterVerificado",
+        "{{Usuario}}.instagram as instagram",
+        "{{Usuario}}.instagramVerificado as instagramVerificado",
+        "{{Usuario}}.id as uId",
+        "count({{Evento}}.id) as cantidadEventos",
+        "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook') as eventosFacebook",
+        "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter') as eventosTwitter",
+        "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram') as eventosInstagram",
+        "count({{Resultado}}.accion) as cantidadResultados",
+        "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
+      ])
+      ->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]]")
+      ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
+      ->groupBy(["{{Usuario}}.nombre", "facebook", "facebookVerificado", "twitter", "twitterVerificado", "instagram", "instagramVerificado", "uId"]);
+
+
+    if ($idUsuario > 0) {
+      $query->andWhere(["{{Usuario}}.[[id]]" => $idUsuario]);
+      $limite = 1;
+      $pagina = 1;
+    }
+
+    if ($fechaInicio != "" && $fechaFinal != "") {
+      $query->andWhere([
+        "AND",
+        [">=", "{{Evento}}.[[fechaInicio]]", $fechaInicio],
+        ["<=", "{{Evento}}.[[fechaFinal]]", $fechaFinal],
+      ]);
+    }
+
+    $query2 = (new Query())
+        ->select([
+          "*",
+          "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) as [[cantidadEventos]]",
+          "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) - [[cantidadResultados]] as [[cantidadPendientes]]"
+        ])
+        ->from(["t" => $query]);
+
+    return new Respuesta($query2, $limite, $pagina, $this->ordenar);
+  }
+}