ResultadosIndividualesController.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace v1\controllers;
  3. use common\data\Respuesta;
  4. use common\rest\AuthController;
  5. use yii\db\Expression;
  6. use yii\db\Query;
  7. class ResultadosIndividualesController extends AuthController {
  8. public function actionIndex() {
  9. $idUsuario = intval($this->req->getBodyParam("idUsuario", ""));
  10. $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
  11. $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
  12. $limite = intval($this->req->getBodyParam("limite", ""));
  13. $pagina = intval($this->req->getBodyParam("pagina", 1));
  14. $query = (new Query())
  15. ->select([
  16. "{{Usuario}}.nombre as nombre",
  17. "{{Usuario}}.facebook as facebook",
  18. "{{Usuario}}.facebookVerificado as facebookVerificado",
  19. "{{Usuario}}.twitter as twitter",
  20. "{{Usuario}}.twitterVerificado as twitterVerificado",
  21. "{{Usuario}}.instagram as instagram",
  22. "{{Usuario}}.instagramVerificado as instagramVerificado",
  23. "{{Usuario}}.id as uId",
  24. "count({{Evento}}.id) as cantidadEventos",
  25. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook') as eventosFacebook",
  26. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter') as eventosTwitter",
  27. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram') as eventosInstagram",
  28. "count({{Resultado}}.accion) as cantidadResultados",
  29. "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
  30. ])
  31. ->from("Evento")
  32. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  33. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  34. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  35. ->innerJoin("Usuario", "{{Usuario}}.id = {{UsuarioGrupo}}.[[idUsuario]]")
  36. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
  37. ->groupBy(["{{Usuario}}.nombre", "facebook", "facebookVerificado", "twitter", "twitterVerificado", "instagram", "instagramVerificado", "uId"]);
  38. if ($idUsuario > 0) {
  39. $query->andWhere(["{{Usuario}}.[[id]]" => $idUsuario]);
  40. $limite = 1;
  41. $pagina = 1;
  42. }
  43. if ($fechaInicio != "" && $fechaFinal != "") {
  44. $query->andWhere([
  45. "AND",
  46. [">=", "{{Evento}}.[[fechaInicio]]", $fechaInicio],
  47. ["<=", "{{Evento}}.[[fechaFinal]]", $fechaFinal],
  48. ]);
  49. }
  50. $query2 = (new Query())
  51. ->select([
  52. "*",
  53. "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) as [[cantidadEventos]]",
  54. "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) - [[cantidadResultados]] as [[cantidadPendientes]]"
  55. ])
  56. ->from(["t" => $query]);
  57. return new Respuesta($query2, $limite, $pagina, $this->ordenar);
  58. }
  59. }