EventoController.php 28 KB

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