EventoController.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730
  1. <?php
  2. namespace v1\controllers;
  3. use common\data\Respuesta;
  4. use common\rest\AuthController;
  5. use v1\models\Evento;
  6. use v1\models\Usuario;
  7. use yii\db\Expression;
  8. use yii\db\Query;
  9. class EventoController extends AuthController {
  10. public $modelClass = "v1\models\Evento";
  11. public $modelName = "Evento";
  12. public function actionIndex() {
  13. $id = intval($this->req->get("id", ""));
  14. $q = trim($this->req->get("q", ""));
  15. $query = $this->queryInicial;
  16. if($id > 0) {
  17. $query->andWhere(["id" => $id]);
  18. }
  19. if($q !== "") {
  20. # Ejemplo de buscador
  21. $query->andWhere([
  22. "OR",
  23. ["ilike", "nombre", $q],
  24. // ["ilike", "direccion", $q],
  25. ]);
  26. //
  27. }
  28. return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
  29. }
  30. public function actionGuardar() {
  31. $id = intval($this->req->getBodyParam("id", null));
  32. $modelo = null;
  33. if($id > 0) {
  34. $modelo = $this->modelClass::findOne($id);
  35. }
  36. if($modelo === null) {
  37. $modelo = new $this->modelClass();
  38. $modelo->creado = new Expression('now()');
  39. $modelo->idUsuarioCreador = $this->usuario->id;
  40. } else {
  41. $modelo->modificado = new Expression('now()');
  42. }
  43. $modelo->load($this->req->getBodyParams(), '');
  44. if (!$modelo->save()) {
  45. return (new Respuesta($modelo))
  46. ->mensaje("Hubo un problema al guardar el {$this->modelName}");
  47. }
  48. $modelo->refresh();
  49. return (new Respuesta($modelo))
  50. ->mensaje("{$this->modelName} guardado correctamente");
  51. }
  52. public function actionEliminar() {
  53. $id = intval($this->req->getBodyParam("id", null));
  54. $modelo = null;
  55. if($id > 0) {
  56. $modelo = $this->modelClass::findOne(["id" => $id]);
  57. }
  58. if($modelo === null) {
  59. return (new Respuesta())
  60. ->esError()
  61. ->mensaje("{$this->modelName} no encontrado");
  62. }
  63. $modelo->eliminado = null;
  64. if(!$modelo->save()) {
  65. return (new Respuesta($modelo))
  66. ->mensaje("No se pudo eliminar el {$this->modelName}");
  67. }
  68. return (new Respuesta())
  69. ->mensaje("{$this->modelName} eliminado");
  70. }
  71. public function actionResultadosIndividuales() {
  72. $idUsuario = intval($this->req->getBodyParam("idUsuario", null));
  73. $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
  74. $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
  75. $query = (new Query())
  76. ->select([
  77. "{{Evento}}.id as eventoId",
  78. "{{Resultado}}.accion as accionRes",
  79. "{{Evento}}.redSocial as redSocial",
  80. "{{Usuario}}.[[facebookVerificado]] as facebookVerificado",
  81. "{{Usuario}}.[[twitterVerificado]] as twitterVerificado",
  82. "{{Usuario}}.[[instagramVerificado]] as instagramVerificado",
  83. ])
  84. ->from("Evento")
  85. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  86. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  87. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  88. ->innerJoin("Usuario", "{{UsuarioGrupo}}.[[idUsuario]] = {{Usuario}}.id")
  89. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
  90. ->orderBy(["eventoId" => SORT_ASC]);
  91. /* $query = (new Query())
  92. ->select([
  93. "{{Usuario}}.nombre as nombre",
  94. "{{Usuario}}.facebook as facebook",
  95. "{{Usuario}}.facebookVerificado as facebookVerificado",
  96. "{{Usuario}}.twitter as twitter",
  97. "{{Usuario}}.twitterVerificado as twitterVerificado",
  98. "{{Usuario}}.instagram as instagram",
  99. "{{Usuario}}.instagramVerificado as instagramVerificado",
  100. "{{Usuario}}.id as uId",
  101. // "{{Evento}}.id as eventoId",
  102. // "{{Evento}}.redSocial",
  103. "count({{Evento}}.id) as cantidadEventos",
  104. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = Facebook) as eventosFacebook",
  105. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = Twitter) as eventosTwitter",
  106. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = Instagram) as eventosInstagram",
  107. "count({{Resultado}}.accion) as cantidadResultados",
  108. "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
  109. ])
  110. ->from("Evento")
  111. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  112. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  113. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  114. ->innerJoin("Usuario", "{{Usuario}}.id = {{UsuarioGrupo}}.[[idUsuario]]")
  115. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
  116. ->groupBy(["{{Usuario}}.nombre", "facebook", "facebookVerificado", "twitter", "twitterVerificado", "instagram", "instagramVerificado", "uId"]); */
  117. // ->orderBy(["eventoId" => SORT_ASC]);
  118. if ($idUsuario > 0) {
  119. $query->andWhere(["{{UsuarioGrupo}}.[[idUsuario]]" => $idUsuario]);
  120. }
  121. if ($fechaInicio != "" && $fechaFinal != ""){
  122. $query->andWhere([
  123. "AND",
  124. [">=", "fechaInicio", $fechaInicio],
  125. ["<=", "fechaFinal", $fechaFinal],
  126. ]);
  127. }
  128. $total = 0;
  129. $participo = 0;
  130. foreach($query->each() as $resultado) {
  131. $total++;
  132. if ($resultado["redSocial"] === "Facebook" && !isset($resultado["facebookVerificado"])){
  133. $total--;
  134. } else if ($resultado["redSocial"] === "Twitter" && !isset($resultado["twitterVerificado"])){
  135. $total--;
  136. } else if ($resultado["redSocial"] === "Instagram" && !isset($resultado["instagramVerificado"])){
  137. $total--;
  138. }
  139. if ($resultado["accionRes"] !== null) {
  140. $participo ++;
  141. }
  142. };
  143. return (new Respuesta())
  144. ->detalle([
  145. "total" => $total,
  146. "participo" => $participo,
  147. "pendientes" => ($total - $participo)
  148. ]);
  149. // return new Respuesta($query);
  150. }
  151. public function actionResultadosDependencia() {
  152. $idDependencia = intval($this->req->getBodyParam("idDependencia", null));
  153. $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
  154. $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
  155. /* $query = (new Query())
  156. ->select([
  157. "{{Evento}}.id as eventoId",
  158. "{{Resultado}}.accion as accionRes",
  159. ])
  160. ->from("Evento")
  161. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  162. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  163. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  164. ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
  165. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioDependencia}}.[[idUsuario]]")
  166. ->andWhere([
  167. "AND",
  168. [">=", "fechaInicio", $fechaInicio],
  169. ["<=", "fechaFinal", $fechaFinal],
  170. ])
  171. ->andWhere(["{{UsuarioDependencia}}.[[idDependencia]]" => $idDependencia])
  172. ->orderBy(["eventoId" => SORT_ASC]); */
  173. $query = (new Query())
  174. ->select([
  175. "{{Usuario}}.nombre as nombre",
  176. "{{UsuarioDependencia}}.[[idDependencia]]",
  177. "{{Usuario}}.facebook as facebook",
  178. "{{Usuario}}.facebookVerificado as facebookVerificado",
  179. "{{Usuario}}.twitter as twitter",
  180. "{{Usuario}}.twitterVerificado as twitterVerificado",
  181. "{{Usuario}}.instagram as instagram",
  182. "{{Usuario}}.instagramVerificado as instagramVerificado",
  183. "{{Usuario}}.id as uId",
  184. "count({{Evento}}.id) as cantidadEventos",
  185. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook' and {{Usuario}}.[[facebookVerificado]]) as eventosFacebook",
  186. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter' and {{Usuario}}.[[twitterVerificado]]) as eventosTwitter",
  187. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram' and {{Usuario}}.[[instagramVerificado]]) as eventosInstagram",
  188. "count({{Resultado}}.accion) as cantidadResultados",
  189. "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
  190. ])
  191. ->from("Evento")
  192. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  193. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  194. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  195. ->innerJoin("Usuario", "{{Usuario}}.[[id]] = {{UsuarioGrupo}}.[[idUsuario]]")
  196. ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.id")
  197. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
  198. ->groupBy([
  199. "{{Usuario}}.nombre",
  200. "{{UsuarioDependencia}}.[[idDependencia]]",
  201. "facebook",
  202. "[[facebookVerificado]]",
  203. "twitter",
  204. "[[twitterVerificado]]",
  205. "instagram",
  206. "[[instagramVerificado]]",
  207. "uId"
  208. ]);
  209. if ($idDependencia > 0) {
  210. $query->andWhere(["{{UsuarioDependencia}}.[[idDependencia]]" => $idDependencia]);
  211. }
  212. if ($fechaInicio != "" && $fechaFinal != ""){
  213. $query->andWhere([
  214. "AND",
  215. [">=", "fechaInicio", $fechaInicio],
  216. ["<=", "fechaFinal", $fechaFinal],
  217. ]);
  218. }
  219. $query2 = (new Query())
  220. ->select([
  221. "*",
  222. "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) as [[cantidadEventos]]",
  223. "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) - [[cantidadResultados]] as [[cantidadPendientes]]"
  224. ])
  225. ->from(["t" => $query]);
  226. // return new Respuesta($query2);
  227. $info = [];
  228. $totalEventos = 0;
  229. $eventosAtendidos = 0;
  230. $eventosPendientes = 0;
  231. foreach($query2->each() as $resultado) {
  232. $info[] = $resultado;
  233. $totalEventos += $resultado["cantidadEventos"];
  234. $eventosAtendidos += $resultado["cantidadResultados"];
  235. $eventosPendientes += $resultado["cantidadPendientes"];
  236. }
  237. return (new Respuesta())->detalle([
  238. "total" => $totalEventos,
  239. "participo" => $eventosAtendidos,
  240. "pendientes" => $eventosPendientes,
  241. "usuarios" => $info
  242. ]);
  243. /* $total = 0;
  244. $participo = 0;
  245. foreach($query->each() as $resultado) {
  246. $total++;
  247. if ($resultado["accionRes"] !== null) {
  248. $participo ++;
  249. }
  250. }
  251. return (new Respuesta())
  252. ->detalle([
  253. "total" => $total,
  254. "participo" => $participo,
  255. "pendientes" => ($total - $participo)
  256. ]); */
  257. }
  258. public function actionComparativaDependencia() {
  259. $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
  260. $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
  261. /* $query = (new Query())
  262. ->select([
  263. "{{Dependencia}}.id as dependenciaId",
  264. "{{Dependencia}}.nombre as dependenciaNombre",
  265. "COUNT({{Resultado}}.[[idUsuario]]) filter ( where {{Resultado}}.[[idUsuario]] is not null ) as conteoNotNull",
  266. "COUNT({{UsuarioGrupo}}.[[idUsuario]]) as totalDependencia"
  267. ])
  268. ->from("Evento")
  269. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  270. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  271. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  272. ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
  273. ->innerJoin("Dependencia", "{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]")
  274. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioDependencia}}.[[idUsuario]]")
  275. ->andWhere([
  276. "AND",
  277. [">=", "fechaInicio", $fechaInicio],
  278. ["<=", "fechaFinal", $fechaFinal],
  279. ])
  280. ->groupBy([
  281. "dependenciaId",
  282. "dependenciaNombre"
  283. ])
  284. ->orderBy(["dependenciaNombre" => SORT_ASC]); */
  285. $query = (new Query())
  286. ->select([
  287. "{{Dependencia}}.id as dependenciaId",
  288. "{{Dependencia}}.nombre as dependenciaNombre",
  289. "count({{Evento}}.id) as cantidadEventos",
  290. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook' and {{Usuario}}.[[facebookVerificado]]) as eventosFacebook",
  291. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter' and {{Usuario}}.[[twitterVerificado]]) as eventosTwitter",
  292. "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram' and {{Usuario}}.[[instagramVerificado]]) as eventosInstagram",
  293. "count({{Resultado}}.accion) as cantidadResultados",
  294. "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
  295. ])
  296. ->from("Evento")
  297. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  298. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  299. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  300. ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
  301. ->innerJoin("Dependencia", "{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]")
  302. ->innerJoin("Usuario", "{{Usuario}}.id = {{UsuarioDependencia}}.[[idUsuario]]")
  303. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
  304. ->andWhere([
  305. "AND",
  306. [">=", "fechaInicio", $fechaInicio],
  307. ["<=", "fechaFinal", $fechaFinal],
  308. ])
  309. ->groupBy([
  310. "dependenciaId",
  311. "dependenciaNombre",
  312. ])
  313. ->orderBy(["dependenciaNombre" => SORT_ASC]);
  314. $query2 = (new Query())
  315. ->select([
  316. "*",
  317. "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) as [[cantidadEventos]]",
  318. "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) - [[cantidadResultados]] as [[cantidadPendientes]]"
  319. ])
  320. ->from(["t" => $query]);
  321. $data = [];
  322. /* foreach($query->each() as $resultado) {
  323. $data[] = [
  324. "id" => $resultado["dependenciaId"],
  325. "nombre" => $resultado["dependenciaNombre"],
  326. "participaciones" => $resultado["conteoNotNull"],
  327. "pendientes" => $resultado["totalDependencia"] - $resultado["conteoNotNull"]
  328. ];
  329. }
  330. return (new Respuesta())
  331. ->detalle($data); */
  332. $eventosAtendidos = 0;
  333. $eventosPendientes = 0;
  334. foreach($query2->each() as $resultado) {
  335. $eventosAtendidos += $resultado["cantidadResultados"];
  336. $eventosPendientes += $resultado["cantidadPendientes"];
  337. $data[] = [
  338. "id" => $resultado["dependenciaId"],
  339. "nombre" => $resultado["dependenciaNombre"],
  340. "participaciones" => $resultado["cantidadResultados"],
  341. "pendientes" => $resultado["cantidadPendientes"],
  342. ];
  343. }
  344. return (new Respuesta())
  345. ->detalle($data);
  346. }
  347. public function actionPorEvento() {
  348. $idEvento = trim($this->req->getBodyParam("tag", null));
  349. $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
  350. $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
  351. /* $queryUsuario = (new Query())
  352. ->select([
  353. "{{Evento}}.id as eventoId",
  354. // "{{Usuario}}.id",
  355. "{{Resultado}}.accion as accionRes",
  356. ])
  357. ->from("Evento")
  358. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  359. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  360. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  361. // ->innerJoin("Usuario", "{{Usuario}}.[[id]] = {{UsuarioGrupo}}.[[idUsuario]]")
  362. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
  363. ->andWhere([
  364. "AND",
  365. [">=", "fechaInicio", $fechaInicio],
  366. ["<=", "fechaFinal", $fechaFinal],
  367. ])
  368. ->andWhere(["{{Evento}}.id" => $idEvento])
  369. ->orderBy(["eventoId" => SORT_ASC]); */
  370. $queryUsuario = (new Query())
  371. ->select([
  372. "{{Usuario}}.id as idUsuario",
  373. "{{Resultado}}.accion as accionRes",
  374. ])
  375. ->from("Evento")
  376. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  377. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  378. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  379. ->innerJoin("Usuario", "{{Usuario}}.[[id]] = {{UsuarioGrupo}}.[[idUsuario]]")
  380. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.[[id]]")
  381. ->andWhere([
  382. "AND",
  383. [">=", "fechaInicio", $fechaInicio],
  384. ["<=", "fechaFinal", $fechaFinal],
  385. ])
  386. ->andWhere(["{{Evento}}.tag" => $idEvento])
  387. ->groupBy([
  388. "{{Usuario}}.id",
  389. "{{Resultado}}.accion",
  390. "{{Evento}}.tag"
  391. ])
  392. ->orderBy(["{{Evento}}.tag" => SORT_ASC]);
  393. $totalUsuario = 0;
  394. $participoUsuario = 0;
  395. $idUsuarios = [];
  396. foreach($queryUsuario->each() as $resultado) {
  397. $totalUsuario++;
  398. if ($resultado["accionRes"] !== null && !in_array($resultado["idUsuario"], $idUsuarios)) {
  399. $participoUsuario ++;
  400. $idUsuarios[] = $resultado["idUsuario"];
  401. } else if ($resultado["accionRes"] === null && in_array($resultado["idUsuario"], $idUsuarios)) {
  402. $totalUsuario--;
  403. }
  404. }
  405. $queryDependencia = (new Query())
  406. ->select([
  407. "{{Dependencia}}.id as dependenciaId",
  408. "{{Dependencia}}.nombre as dependenciaNombre",
  409. "COUNT({{Resultado}}.[[idUsuario]]) filter ( where {{Resultado}}.[[idUsuario]] is not null ) as conteoNotNull",
  410. "COUNT({{UsuarioGrupo}}.[[idUsuario]]) as totalDependencia"
  411. ])
  412. ->from("Evento")
  413. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  414. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  415. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  416. ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
  417. ->innerJoin("Dependencia", "{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]")
  418. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioDependencia}}.[[idUsuario]]")
  419. ->andWhere([
  420. "AND",
  421. [">=", "fechaInicio", $fechaInicio],
  422. ["<=", "fechaFinal", $fechaFinal],
  423. ])
  424. ->andWhere(["{{Evento}}.tag" => $idEvento])
  425. ->groupBy([
  426. "{{Evento}}.tag",
  427. "dependenciaId",
  428. "dependenciaNombre"
  429. ])
  430. ->orderBy(["dependenciaNombre" => SORT_ASC]);
  431. // $this->res->format = \yii\web\Response::FORMAT_RAW;
  432. // $sql = $queryDependencia->createCommand()->getRawSql();
  433. // return $sql;
  434. $dataDependencias = [];
  435. $totalParticipantesDependencias = 0;
  436. $totalPendientesDependencias = 0;
  437. foreach($queryDependencia->each() as $resultado) {
  438. $totalParticipantesDependencias += $resultado["conteoNotNull"];
  439. $totalPendientesDependencias += $resultado["totalDependencia"] - $resultado["conteoNotNull"];
  440. $dataDependencias[] = [
  441. "id" => $resultado["dependenciaId"],
  442. "nombre" => $resultado["dependenciaNombre"],
  443. "participaciones" => $resultado["conteoNotNull"],
  444. "pendientes" => $resultado["totalDependencia"] - $resultado["conteoNotNull"]
  445. ];
  446. }
  447. return (new Respuesta())
  448. ->detalle([
  449. "totalResultadosUsuarios" => $totalUsuario,
  450. "participoResultadosUsuarios" => $participoUsuario,
  451. "pendientesResultadosUsuarios" => ($totalUsuario - $participoUsuario),
  452. "datosDependencias" => $dataDependencias,
  453. "totalParticipantesDependencias" => $totalParticipantesDependencias,
  454. "totalPendientesDependencias" => $totalPendientesDependencias,
  455. "totalDependencias" => $totalPendientesDependencias + $totalPendientesDependencias
  456. ]);
  457. }
  458. public function actionTag() {
  459. $id = intval($this->req->get("id", ""));
  460. $q = trim($this->req->get("q", ""));
  461. // $query = $this->queryInicial;
  462. $query = (new Query())
  463. ->select([
  464. '{{Evento}}.tag',
  465. '{{Evento}}.nombre',
  466. '{{Evento}}.[[fechaInicio]]',
  467. '{{Evento}}.[[fechaFinal]]',
  468. 'case when count({{Resultado}}.accion) > 0 then true else false end as paticipo'
  469. ])
  470. ->from('Evento')
  471. ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
  472. ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
  473. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
  474. ->innerJoin("Usuario", "{{Usuario}}.[[id]] = {{UsuarioGrupo}}.[[idUsuario]]")
  475. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
  476. ->andWhere(["{{Evento}}.eliminado" => null])
  477. ->andWhere("{{Evento}}.tag is not null")
  478. ->groupBy([
  479. '{{Evento}}.tag',
  480. '{{Evento}}.nombre',
  481. '{{Evento}}.[[fechaInicio]]',
  482. '{{Evento}}.[[fechaFinal]]',
  483. ]);
  484. /* if($id > 0) {
  485. $query->andWhere(["id" => $id]);
  486. } */
  487. if($q !== "") {
  488. # Ejemplo de buscador
  489. $query->andWhere([
  490. "OR",
  491. ["ilike", "{{Evento}}.nombre", $q],
  492. // ["ilike", "direccion", $q],
  493. ]);
  494. //
  495. }
  496. return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
  497. }
  498. public function actionCondensado() {
  499. $tag = trim($this->req->getBodyParam("tag", null));
  500. $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
  501. $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
  502. try {
  503. $usuarios = (new Query())
  504. ->select([
  505. "{{Usuario}}.id as usuarioId",
  506. "{{Usuario}}.uid as uid",
  507. "{{Usuario}}.nombre as nombre",
  508. "case when {{Usuario}}.[[facebookVerificado]] = true then 1 else 0 end as [[tieneFb]]",
  509. "case when {{Usuario}}.[[twitterVerificado]] = true then 1 else 0 end as [[tieneTw]]",
  510. "case when {{Usuario}}.[[instagramVerificado]] = true then 1 else 0 end as [[tieneIg]]",
  511. "{{Usuario}}.facebook as facebook",
  512. "{{Usuario}}.instagram as instagram",
  513. "{{Usuario}}.twitter as twitter",
  514. "{{Usuario}}.verificado as verificado",
  515. "{{Dependencia}}.id as [[idDependencia]]",
  516. "{{Dependencia}}.nombre as dependencia",
  517. ])
  518. ->from("Usuario")
  519. ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idUsuario]] = {{Usuario}}.id")
  520. ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.id")
  521. ->innerJoin("Dependencia", "{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]")
  522. ->andWhere(["{{Usuario}}.eliminado" => null])
  523. ->andWhere(["{{UsuarioGrupo}}.[[idGrupo]]" => 1]) //Grupo ENLACES 2022
  524. ->andWhere(["!=", "{{UsuarioDependencia}}.[[idDependencia]]", 33]) //Diferente a dependencia Soporte
  525. ->orderBy(['dependencia' => SORT_ASC, 'nombre' => SORT_ASC])
  526. ->indexBy("usuarioId")
  527. ->all();
  528. $eventos = Evento::find()
  529. ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id")
  530. ->andWhere(["{{Evento}}.eliminado" => null])
  531. ->andWhere(["tag" => $tag])
  532. ->andWhere([
  533. "AND",
  534. [">=", "fechaInicio", $fechaInicio],
  535. ["<=", "fechaFinal", $fechaFinal],
  536. ]);
  537. $auxiliar = [];
  538. $auxiliarDependencias = [];
  539. foreach($eventos->each() as $e) {
  540. foreach($e->resultados as $resultado) {
  541. if (isset($usuarios[$resultado->idUsuario])) {
  542. $usuario = $usuarios[$resultado->idUsuario];
  543. if (!isset($auxiliar[$resultado->idUsuario])) {
  544. $auxiliar[$resultado->idUsuario] = [
  545. "id" => $usuario['usuarioId'],
  546. "uid" => $usuario['uid'],
  547. "nombre" => $usuario['nombre'],
  548. "idDependencia" => $usuario['idDependencia'],
  549. "dependencia" => $usuario['dependencia'],
  550. "tieneFb" => $usuario['tieneFb'],
  551. "facebook" => $usuario['facebook'],
  552. "tieneTw" => $usuario['tieneTw'],
  553. "twitter" => $usuario['twitter'],
  554. "tieneIg" => $usuario['tieneIg'],
  555. "instagram" => $usuario['instagram'],
  556. "verificado" => $usuario['verificado'],
  557. "participoFacebook" => 0,
  558. "participoTwitter" => 0,
  559. "participoInstagram" => 0,
  560. ];
  561. }
  562. if (!isset($auxiliarDependencias[$usuario['idDependencia']])) {
  563. $auxiliarDependencias[$usuario['idDependencia']] = [
  564. "id" => $usuario['idDependencia'],
  565. "nombre" => $usuario['dependencia'],
  566. "participaciones" => 0,
  567. "pendientes" => 0
  568. ];
  569. }
  570. if ($e->redSocial === 'Facebook') {
  571. $auxiliar[$resultado->idUsuario]["participoFacebook"] = 1;
  572. }
  573. if ($e->redSocial === 'Twitter') {
  574. $auxiliar[$resultado->idUsuario]["participoTwitter"] = 1;
  575. }
  576. if ($e->redSocial === 'Instagram') {
  577. $auxiliar[$resultado->idUsuario]["participoInstagram"] = 1;
  578. }
  579. }
  580. }
  581. foreach ($usuarios as $usr) {
  582. if (!isset($auxiliar[$usr["usuarioId"]])) {
  583. $auxiliar[$usr["usuarioId"]] = [
  584. "id" => $usr['usuarioId'],
  585. "uid" => $usr['uid'],
  586. "nombre" => $usr['nombre'],
  587. "idDependencia" => $usr['idDependencia'],
  588. "dependencia" => $usr['dependencia'],
  589. "tieneFb" => $usr['tieneFb'],
  590. "facebook" => $usr['facebook'],
  591. "tieneTw" => $usr['tieneTw'],
  592. "twitter" => $usr['twitter'],
  593. "tieneIg" => $usr['tieneIg'],
  594. "instagram" => $usr['instagram'],
  595. "verificado" => $usr['verificado'],
  596. "participoFacebook" => 0,
  597. "participoTwitter" => 0,
  598. "participoInstagram" => 0,
  599. ];
  600. }
  601. if (!isset($auxiliarDependencias[$usr['idDependencia']])) {
  602. $auxiliarDependencias[$usr['idDependencia']] = [
  603. "id" => $usr['idDependencia'],
  604. "nombre" => $usr['dependencia'],
  605. "participaciones" => 0,
  606. "pendientes" => 0
  607. ];
  608. }
  609. }
  610. }
  611. $segundoAuxiliar = [];
  612. $segundoAuxiliarDependencias = [];
  613. foreach($auxiliar as $aux) {
  614. if ($aux['tieneFb'] > 0) {
  615. if ($aux['participoFacebook'] > 0) {
  616. $auxiliarDependencias[$aux['idDependencia']]['participaciones'] += 1;
  617. } else {
  618. $auxiliarDependencias[$aux['idDependencia']]['pendientes'] += 1;
  619. }
  620. }
  621. if ($aux['tieneTw'] > 0) {
  622. if ($aux['participoTwitter'] > 0) {
  623. $auxiliarDependencias[$aux['idDependencia']]['participaciones'] += 1;
  624. } else {
  625. $auxiliarDependencias[$aux['idDependencia']]['pendientes'] += 1;
  626. }
  627. }
  628. if ($aux['tieneIg'] > 0) {
  629. if ($aux['participoInstagram'] > 0) {
  630. $auxiliarDependencias[$aux['idDependencia']]['participaciones'] += 1;
  631. } else {
  632. $auxiliarDependencias[$aux['idDependencia']]['pendientes'] += 1;
  633. }
  634. }
  635. $segundoAuxiliar[] = $aux;
  636. }
  637. $participaciones = 0;
  638. $pendientes = 0;
  639. foreach($auxiliarDependencias as $aux) {
  640. $participaciones += $aux['participaciones'];
  641. $pendientes += $aux['pendientes'];
  642. $segundoAuxiliarDependencias[] = $aux;
  643. }
  644. $total = $pendientes + $participaciones;
  645. $detalle = [
  646. "usuarios" => $segundoAuxiliar,
  647. "dependencias" => $segundoAuxiliarDependencias,
  648. "total" => $total,
  649. "participaciones" => $participaciones,
  650. "pendientes" => $pendientes
  651. ];
  652. return (new Respuesta())->detalle($detalle);
  653. } catch (\Exception $e) {
  654. return (new Respuesta())
  655. ->mensaje($e->getLine().'. '.$e->getMessage());
  656. }
  657. }
  658. }