ReporteIndividualController.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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 ReporteIndividualController extends AuthController {
  8. /* public $modelClass = "v1\models\ReporteIndividual";
  9. public $modelName = "ReporteIndividual"; */
  10. public function actionGuardar() {
  11. $idUsuario = intval($this->req->getBodyParam("idUsuario", ""));
  12. $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
  13. $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
  14. $limite = intval($this->req->getBodyParam("limite", ""));
  15. $pagina = intval($this->req->getBodyParam("pagina", 1));
  16. // $q = trim($this->req->get("q", ""));
  17. $query = (new Query())
  18. ->select([
  19. "{{Usuario}}.nombre as nombre",
  20. "{{Usuario}}.facebook as facebook",
  21. "{{Usuario}}.facebookVerificado as facebookVerificado",
  22. "{{Usuario}}.twitter as twitter",
  23. "{{Usuario}}.twitterVerificado as twitterVerificado",
  24. "{{Usuario}}.instagram as instagram",
  25. "{{Usuario}}.instagramVerificado as instagramVerificado",
  26. "{{Usuario}}.id as uId",
  27. // "{{Evento}}.id as eventoId",
  28. // "{{Evento}}.redSocial",
  29. "count({{Evento}}.id) as cantidadEventos",
  30. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook') as eventosFacebook",
  31. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter') as eventosTwitter",
  32. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram') as eventosInstagram",
  33. "count({{Resultado}}.accion) as cantidadResultados",
  34. "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
  35. ])
  36. ->from("Evento")
  37. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  38. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  39. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  40. ->innerJoin("Usuario", "{{Usuario}}.id = {{UsuarioGrupo}}.[[idUsuario]]")
  41. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
  42. ->groupBy(["{{Usuario}}.nombre", "facebook", "facebookVerificado", "twitter", "twitterVerificado", "instagram", "instagramVerificado", "uId"]);
  43. /* $query = (new QuerY())
  44. ->select([
  45. "{{ReporteIndividual}}.nombre",
  46. "{{ReporteIndividual}}.facebook",
  47. "{{ReporteIndividual}}.[[facebookVerificado]]",
  48. "{{ReporteIndividual}}.twitter",
  49. "{{ReporteIndividual}}.[[twitterVerificado]]",
  50. "{{ReporteIndividual}}.instagram",
  51. "{{ReporteIndividual}}.[[instagramVerificado]]",
  52. "{{ReporteIndividual}}.[[idUsuario]]",
  53. "{{ReporteIndividual}}.[[cantidadFacebook]]",
  54. "{{ReporteIndividual}}.[[cantidadTwitter]]",
  55. "{{ReporteIndividual}}.[[cantidadInstagram]]",
  56. "{{ReporteIndividual}}.[[cantidadInstagram]]",
  57. "{{ReporteIndividual}}.[[cantidadResultados]]",
  58. "({{ReporteIndividual}}.[[cantidadFacebook]] + {{ReporteIndividual}}.[[cantidadTwitter]] + {{ReporteIndividual}}.[[cantidadInstagram]]) as cantidadEventos",
  59. "({{ReporteIndividual}}.[[cantidadFacebook]] + {{ReporteIndividual}}.[[cantidadTwitter]] + {{ReporteIndividual}}.[[cantidadInstagram]]) - {{ReporteIndividual}}.[[cantidadResultados]] as cantidadPendientes"
  60. ])
  61. ->from("ReporteIndividual")
  62. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idUsuario]] = {{ReporteIndividual}}.[[idUsuario]]")
  63. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idGrupo]] = {{UsuarioGrupo}}.[[idGrupo]]")
  64. ->innerJoin("Evento", "{{Evento}}.id = {{EventoGrupo}}.[[idEvento]]")
  65. ->groupBy([
  66. "{{ReporteIndividual}}.nombre",
  67. "{{ReporteIndividual}}.facebook",
  68. "{{ReporteIndividual}}.facebookVerificado",
  69. "{{ReporteIndividual}}.twitter",
  70. "{{ReporteIndividual}}.twitterVerificado",
  71. "{{ReporteIndividual}}.instagram",
  72. "{{ReporteIndividual}}.instagramVerificado",
  73. "{{ReporteIndividual}}.idUsuario",
  74. "{{ReporteIndividual}}.cantidadFacebook",
  75. "{{ReporteIndividual}}.cantidadTwitter",
  76. "{{ReporteIndividual}}.cantidadInstagram",
  77. "{{ReporteIndividual}}.cantidadResultados",
  78. "({{ReporteIndividual}}.[[cantidadFacebook]] + {{ReporteIndividual}}.[[cantidadTwitter]] + {{ReporteIndividual}}.[[cantidadInstagram]])",
  79. "({{ReporteIndividual}}.[[cantidadFacebook]] + {{ReporteIndividual}}.[[cantidadTwitter]] + {{ReporteIndividual}}.[[cantidadInstagram]]) - {{ReporteIndividual}}.[[cantidadResultados]]"
  80. ]); */
  81. if($idUsuario > 0) {
  82. $query->andWhere(["{{Usuario}}.[[id]]" => $idUsuario]);
  83. $limite = 1;
  84. $pagina = 1;
  85. }
  86. if ($fechaInicio != "" && $fechaFinal != ""){
  87. $query->andWhere([
  88. "AND",
  89. [">=", "{{Evento}}.[[fechaInicio]]", $fechaInicio],
  90. ["<=", "{{Evento}}.[[fechaInicio]]", $fechaFinal],
  91. ]);
  92. }
  93. /*if($q !== "") {
  94. # Ejemplo de buscador
  95. $query->andWhere([
  96. "OR",
  97. ["ilike", "nombre", $q],
  98. ["ilike", "direccion", $q],
  99. ]);
  100. //
  101. } */
  102. /* if ($limite > 0) {
  103. return new Respuesta($query, $limite);
  104. }
  105. return new Respuesta($query); */
  106. return new Respuesta($query, $limite, $pagina, $this->ordenar);
  107. }
  108. /* public function actionGuardar() {
  109. $id = intval($this->req->getBodyParam("id", null));
  110. $modelo = null;
  111. if($id > 0) {
  112. $modelo = $this->modelClass::findOne($id);
  113. }
  114. if($modelo === null) {
  115. $modelo = new $this->modelClass();
  116. $modelo->creado = new Expression('now()');
  117. $modelo->idUsuarioCreador = $this->usuario->id;
  118. } else {
  119. $modelo->modificado = new Expression('now()');
  120. }
  121. $modelo->load($this->req->getBodyParams(), '');
  122. if (!$modelo->save()) {
  123. return (new Respuesta($modelo))
  124. ->mensaje("Hubo un problema al guardar el {$this->modelName}");
  125. }
  126. $modelo->refresh();
  127. return (new Respuesta($modelo))
  128. ->mensaje("{$this->modelName} guardado correctamente");
  129. } */
  130. public function actionEliminar() {
  131. $id = intval($this->req->getBodyParam("id", null));
  132. $modelo = null;
  133. if($id > 0) {
  134. $modelo = $this->modelClass::findOne(["id" => $id]);
  135. }
  136. if($modelo === null) {
  137. return (new Respuesta())
  138. ->esError()
  139. ->mensaje("{$this->modelName} no encontrado");
  140. }
  141. $modelo->eliminado = null;
  142. if(!$modelo->save()) {
  143. return (new Respuesta($modelo))
  144. ->mensaje("No se pudo eliminar el {$this->modelName}");
  145. }
  146. return (new Respuesta())
  147. ->mensaje("{$this->modelName} eliminado");
  148. }
  149. }