ReporteGlobalController.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <?php
  2. namespace v1\controllers;
  3. use common\rest\AuthController;
  4. use common\rest\JsonController;
  5. use yii\db\Query;
  6. class ReporteGlobalController extends JsonController {
  7. public function actionIndex() {
  8. $fechas = [
  9. ["2022-08-01 00:00:00", "2022-08,31 23:59:59"],
  10. ["2022-09-01 00:00:00", "2022-09,30 23:59:59"],
  11. ["2022-10-01 00:00:00", "2022-10,31 23:59:59"],
  12. ["2022-11-01 00:00:00", "2022-11,30 23:59:59"],
  13. ["2022-12-01 00:00:00", "2022-12,31 23:59:59"],
  14. ["2023-01-01 00:00:00", "2023-01,31 23:59:59"],
  15. ];
  16. $query = (new Query())
  17. ->select([
  18. "{{Usuario}}.nombre as nombre",
  19. "{{Usuario}}.verificado as verificado",
  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. "count({{Evento}}.id) as cantidadEventos",
  28. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook') as eventosFacebook",
  29. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter') as eventosTwitter",
  30. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram') as eventosInstagram",
  31. "count({{Resultado}}.accion) as cantidadResultados",
  32. "count({{Resultado}}.accion) filter (where {{Evento}}.[[redSocial]] = 'Facebook') as participacionesFacebook",
  33. "count({{Resultado}}.accion) filter (where {{Evento}}.[[redSocial]] = 'Twitter') as participacionesTwitter",
  34. "count({{Resultado}}.accion) filter (where {{Evento}}.[[redSocial]] = 'Instagram') as participacionesInstagram",
  35. "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
  36. ])
  37. ->from("Usuario")
  38. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idUsuario]] = {{Usuario}}.id")
  39. ->innerJoin("Grupo", "{{Grupo}}.id = {{UsuarioGrupo}}.[[idGrupo]]")
  40. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  41. ->leftJoin("Resultado", "{{Resultado}}.[[idUsuario]] = {{Usuario}}.id and {{Resultado}}.[[idEvento]] = {{Evento}}.id")
  42. ->groupBy(["{{Usuario}}.verificado", "facebook", "facebookVerificado", "twitter", "twitterVerificado", "instagram", "instagramVerificado", "uId"]);
  43. $query2 = (new Query())
  44. ->select([
  45. "verificado",
  46. "[[eventosFacebook]]",
  47. "[[participacionesFacebook]]",
  48. "[[eventosTwitter]]",
  49. "[[participacionesTwitter]]",
  50. "[[eventosInstagram]]",
  51. "[[participacionesInstagram]]",
  52. "[[cantidadResultados]]",
  53. "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) as [[cantidadEventos]]",
  54. "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) - [[cantidadResultados]] as [[cantidadPendientes]]"
  55. ]);
  56. // ->from(["t" => $query]);
  57. $meses = [];
  58. foreach($fechas as $_fechas) {
  59. $queryClon = (clone $query)->andWhere([
  60. "AND",
  61. [">=", "{{Evento}}.[[fechaInicio]]", $_fechas[0]],
  62. ["<=", "{{Evento}}.[[fechaInicio]]", $_fechas[1]],
  63. [">=", "verificado", $_fechas[0]],
  64. ["<=", "verificado", $_fechas[1]],
  65. ]);
  66. $mes = (clone $query2)->from(["t" => $queryClon])->one();
  67. $meses[] = $mes;
  68. }
  69. return $meses;
  70. }
  71. public function actionGuardar() {
  72. $metodo = "";
  73. $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
  74. $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
  75. $fechas = [
  76. ["2022-08-01 00:00:00", "2022-08,31 23:59:59"],
  77. ["2022-09-01 00:00:00", "2022-09,30 23:59:59"],
  78. ["2022-10-01 00:00:00", "2022-10,31 23:59:59"],
  79. ["2022-11-01 00:00:00", "2022-11,30 23:59:59"],
  80. ["2022-12-01 00:00:00", "2022-12,31 23:59:59"],
  81. ["2023-01-01 00:00:00", "2023-01,31 23:59:59"],
  82. ];
  83. $query = (new Query())
  84. ->select([
  85. "{{Usuario}}.nombre as nombre",
  86. "{{Usuario}}.verificado as verificado",
  87. "{{Usuario}}.facebook as facebook",
  88. "{{Usuario}}.facebookVerificado as facebookVerificado",
  89. "{{Usuario}}.twitter as twitter",
  90. "{{Usuario}}.twitterVerificado as twitterVerificado",
  91. "{{Usuario}}.instagram as instagram",
  92. "{{Usuario}}.instagramVerificado as instagramVerificado",
  93. "{{Usuario}}.id as uId",
  94. "count({{Evento}}.id) as cantidadEventos",
  95. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook') as eventosFacebook",
  96. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter') as eventosTwitter",
  97. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram') as eventosInstagram",
  98. "count({{Resultado}}.accion) as cantidadResultados",
  99. "count({{Resultado}}.accion) filter (where {{Evento}}.[[redSocial]] = 'Facebook') as participacionesFacebook",
  100. "count({{Resultado}}.accion) filter (where {{Evento}}.[[redSocial]] = 'Twitter') as participacionesTwitter",
  101. "count({{Resultado}}.accion) filter (where {{Evento}}.[[redSocial]] = 'Instagram') as participacionesInstagram",
  102. "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
  103. ])
  104. ->from("Usuario")
  105. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idUsuario]] = {{Usuario}}.id")
  106. ->innerJoin("Grupo", "{{Grupo}}.id = {{UsuarioGrupo}}.[[idGrupo]]")
  107. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  108. ->leftJoin("Resultado", "{{Resultado}}.[[idUsuario]] = {{Usuario}}.id and {{Resultado}}.[[idEvento]] = {{Evento}}.id")
  109. ->groupBy(["{{Usuario}}.verificado", "facebook", "facebookVerificado", "twitter", "twitterVerificado", "instagram", "instagramVerificado", "uId"]);
  110. $query2 = (new Query())
  111. ->select([
  112. "verificado",
  113. "[[eventosFacebook]]",
  114. "[[participacionesFacebook]]",
  115. "[[eventosTwitter]]",
  116. "[[participacionesTwitter]]",
  117. "[[eventosInstagram]]",
  118. "[[participacionesInstagram]]",
  119. "[[cantidadResultados]]",
  120. "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) as [[cantidadEventos]]",
  121. "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) - [[cantidadResultados]] as [[cantidadPendientes]]"
  122. ]);
  123. // ->from(["t" => $query]);
  124. $meses = [];
  125. foreach($fechas as $_fechas) {
  126. $queryClon = (clone $query)->andWhere([
  127. "AND",
  128. [">=", "{{Evento}}.[[fechaInicio]]", $_fechas[0]],
  129. ["<=", "{{Evento}}.[[fechaInicio]]", $_fechas[1]],
  130. [">=", "verificado", $_fechas[0]],
  131. ["<=", "verificado", $_fechas[1]],
  132. ]);
  133. $mes = (clone $query2)->from(["t" => $queryClon])->one();
  134. $meses[] = $mes;
  135. }
  136. }
  137. public function actionEliminar() {
  138. return "Ejemplo de un delete";
  139. }
  140. }