ComparativaDependenciaController.php 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace v1\controllers;
  3. use common\data\Respuesta;
  4. use common\rest\JsonController;
  5. use yii\db\Query;
  6. use yii\web\NotFoundHttpException;
  7. class ComparativaDependenciaController extends JsonController {
  8. public function actionIndex() {
  9. $fechaInicio = trim($this->req->get("inicio", ""));
  10. $fechaFinal = trim($this->req->get("fin", ""));
  11. if($fechaInicio === "" || $fechaFinal === "") {
  12. throw new NotFoundHttpException("Los parámetros inicio y fin son obligatorios.");
  13. }
  14. $query = (new Query())
  15. ->select([
  16. "{{Dependencia}}.id as dependenciaId",
  17. "{{Dependencia}}.nombre as dependenciaNombre",
  18. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook' and {{Usuario}}.[[facebookVerificado]]) as eventosFacebook",
  19. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter' and {{Usuario}}.[[twitterVerificado]]) as eventosTwitter",
  20. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram' and {{Usuario}}.[[instagramVerificado]]) as eventosInstagram",
  21. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] not in('Facebook', 'Twitter', 'Instagram') and {{Usuario}}.[[instagramVerificado]]) as eventos",
  22. "count({{Resultado}}.accion) as cantidadResultados",
  23. ])
  24. ->from("Evento")
  25. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  26. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  27. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  28. ->innerJoin("Usuario", "{{Usuario}}.id = {{UsuarioGrupo}}.[[idUsuario]]")
  29. ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.[[id]]")
  30. ->innerJoin("Dependencia", "{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]")
  31. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
  32. ->andWhere([
  33. "AND",
  34. [">=", "fechaInicio", $fechaInicio],
  35. ["<=", "fechaFinal", $fechaFinal],
  36. ])
  37. ->groupBy([
  38. "dependenciaId",
  39. "dependenciaNombre",
  40. ])
  41. ->orderBy(["dependenciaNombre" => SORT_ASC]);
  42. $query2 = (new Query())
  43. ->select([
  44. "*",
  45. "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) as [[cantidadEventos]]",
  46. "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) - [[cantidadResultados]] as [[cantidadPendientes]]"
  47. ])
  48. ->from(["t" => $query]);
  49. $data = [];
  50. $eventosAtendidos = 0;
  51. $eventosPendientes = 0;
  52. $csv = "nombre,participaciones,pendientes\n";
  53. foreach($query2->each() as $resultado) {
  54. $eventosAtendidos += $resultado["cantidadResultados"];
  55. $eventosPendientes += $resultado["cantidadPendientes"];
  56. $data[] = [
  57. "id" => $resultado["dependenciaId"],
  58. "nombre" => $resultado["dependenciaNombre"],
  59. "participaciones" => $resultado["cantidadResultados"],
  60. "pendientes" => $resultado["cantidadPendientes"],
  61. ];
  62. $csv .= "{$resultado["dependenciaNombre"]},{$resultado["cantidadResultados"]},{$resultado["cantidadPendientes"]}\n";
  63. }
  64. \Yii::$app->getResponse()->sendContentAsFile($csv, "comparativa_dep_{$fechaInicio}_{$fechaFinal}.csv");
  65. \Yii::$app->end();
  66. }
  67. }