|
|
@@ -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();
|
|
|
+ }
|
|
|
+
|
|
|
+}
|