| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735 |
- <?php
- namespace v1\controllers;
- use common\data\Respuesta;
- use common\rest\AuthController;
- use v1\models\Evento;
- use v1\models\Usuario;
- use v1\models\UsuarioDependencia;
- use yii\db\Expression;
- use yii\db\Query;
- class EventoController extends AuthController {
- public $modelClass = "v1\models\Evento";
- public $modelName = "Evento";
- public function actionIndex() {
- $id = intval($this->req->get("id", ""));
- $q = trim($this->req->get("q", ""));
- $query = $this->queryInicial;
- if($id > 0) {
- $query->andWhere(["id" => $id]);
- }
- if($q !== "") {
- # Ejemplo de buscador
- $query->andWhere([
- "OR",
- ["ilike", "nombre", $q],
- // ["ilike", "direccion", $q],
- ]);
- //
- }
- return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
- }
- public function actionGuardar() {
- $id = intval($this->req->getBodyParam("id", null));
- $modelo = null;
- if($id > 0) {
- $modelo = $this->modelClass::findOne($id);
- }
- if($modelo === null) {
- $modelo = new $this->modelClass();
- $modelo->creado = new Expression('now()');
- $modelo->idUsuarioCreador = $this->usuario->id;
- } else {
- $modelo->modificado = new Expression('now()');
- }
- $modelo->load($this->req->getBodyParams(), '');
- if (!$modelo->save()) {
- return (new Respuesta($modelo))
- ->mensaje("Hubo un problema al guardar el {$this->modelName}");
- }
- $modelo->refresh();
- return (new Respuesta($modelo))
- ->mensaje("{$this->modelName} guardado correctamente");
- }
- public function actionEliminar() {
- $id = intval($this->req->getBodyParam("id", null));
- $modelo = null;
- if($id > 0) {
- $modelo = $this->modelClass::findOne(["id" => $id]);
- }
- if($modelo === null) {
- return (new Respuesta())
- ->esError()
- ->mensaje("{$this->modelName} no encontrado");
- }
- $modelo->eliminado = null;
- if(!$modelo->save()) {
- return (new Respuesta($modelo))
- ->mensaje("No se pudo eliminar el {$this->modelName}");
- }
- return (new Respuesta())
- ->mensaje("{$this->modelName} eliminado");
- }
- public function actionResultadosIndividuales() {
- $idUsuario = intval($this->req->getBodyParam("idUsuario", null));
- $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
- $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
- $query = (new Query())
- ->select([
- "{{Evento}}.id as eventoId",
- "{{Resultado}}.accion as accionRes",
- "{{Evento}}.redSocial as redSocial",
- "{{Usuario}}.[[facebookVerificado]] as facebookVerificado",
- "{{Usuario}}.[[twitterVerificado]] as twitterVerificado",
- "{{Usuario}}.[[instagramVerificado]] as instagramVerificado",
- ])
- ->from("Evento")
- ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
- ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
- ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
- ->innerJoin("Usuario", "{{UsuarioGrupo}}.[[idUsuario]] = {{Usuario}}.id")
- ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
- ->andWhere(["{{Evento}}.eliminado" => null])
- ->orderBy(["eventoId" => SORT_ASC]);
-
- /* $query = (new Query())
- ->select([
- "{{Usuario}}.nombre as nombre",
- "{{Usuario}}.facebook as facebook",
- "{{Usuario}}.facebookVerificado as facebookVerificado",
- "{{Usuario}}.twitter as twitter",
- "{{Usuario}}.twitterVerificado as twitterVerificado",
- "{{Usuario}}.instagram as instagram",
- "{{Usuario}}.instagramVerificado as instagramVerificado",
- "{{Usuario}}.id as uId",
- // "{{Evento}}.id as eventoId",
- // "{{Evento}}.redSocial",
- "count({{Evento}}.id) as cantidadEventos",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = Facebook) as eventosFacebook",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = Twitter) as eventosTwitter",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = Instagram) as eventosInstagram",
- "count({{Resultado}}.accion) as cantidadResultados",
- "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
- ])
- ->from("Evento")
- ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
- ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
- ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
- ->innerJoin("Usuario", "{{Usuario}}.id = {{UsuarioGrupo}}.[[idUsuario]]")
- ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
- ->groupBy(["{{Usuario}}.nombre", "facebook", "facebookVerificado", "twitter", "twitterVerificado", "instagram", "instagramVerificado", "uId"]); */
- // ->orderBy(["eventoId" => SORT_ASC]);
-
- if ($idUsuario > 0) {
- $query->andWhere(["{{UsuarioGrupo}}.[[idUsuario]]" => $idUsuario]);
- }
- if ($fechaInicio != "" && $fechaFinal != ""){
- $query->andWhere([
- "AND",
- [">=", "fechaInicio", $fechaInicio],
- ["<=", "fechaFinal", $fechaFinal],
- ]);
- }
-
-
- $total = 0;
- $participo = 0;
- foreach($query->each() as $resultado) {
- $total++;
- if ($resultado["redSocial"] === "Facebook" && !isset($resultado["facebookVerificado"])){
- $total--;
- } else if ($resultado["redSocial"] === "Twitter" && !isset($resultado["twitterVerificado"])){
- $total--;
- } else if ($resultado["redSocial"] === "Instagram" && !isset($resultado["instagramVerificado"])){
- $total--;
- }
-
- if ($resultado["accionRes"] !== null) {
- $participo ++;
- }
- };
- return (new Respuesta())
- ->detalle([
- "total" => $total,
- "participo" => $participo,
- "pendientes" => ($total - $participo)
- ]);
- // return new Respuesta($query);
- }
- public function actionResultadosDependencia() {
- $idDependencia = intval($this->req->getBodyParam("idDependencia", null));
- $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
- $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
- $query = (new Query())
- ->select([
- "{{Usuario}}.nombre as nombre",
- "{{UsuarioDependencia}}.[[idDependencia]]",
- "{{Usuario}}.facebook as facebook",
- "{{Usuario}}.facebookVerificado as facebookVerificado",
- "{{Usuario}}.twitter as twitter",
- "{{Usuario}}.twitterVerificado as twitterVerificado",
- "{{Usuario}}.instagram as instagram",
- "{{Usuario}}.instagramVerificado as instagramVerificado",
- "{{Usuario}}.id as uId",
- "count({{Evento}}.id) as cantidadEventos",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook' and {{Usuario}}.[[facebookVerificado]]) as eventosFacebook",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter' and {{Usuario}}.[[twitterVerificado]]) as eventosTwitter",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram' and {{Usuario}}.[[instagramVerificado]]) as eventosInstagram",
- "count({{Resultado}}.accion) as cantidadResultados",
- "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
- ])
- ->from("Evento")
- ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
- ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
- ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
- ->innerJoin("Usuario", "{{Usuario}}.[[id]] = {{UsuarioGrupo}}.[[idUsuario]]")
- ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.id")
- ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
- ->andWhere(['{{Evento}}.eliminado' => null])
- ->andWhere(['{{Usuario}}.eliminado' => null])
- ->groupBy([
- "{{Usuario}}.nombre",
- "{{UsuarioDependencia}}.[[idDependencia]]",
- "facebook",
- "[[facebookVerificado]]",
- "twitter",
- "[[twitterVerificado]]",
- "instagram",
- "[[instagramVerificado]]",
- "uId"
- ]);
- if ($idDependencia > 0) {
- $query->andWhere(["{{UsuarioDependencia}}.[[idDependencia]]" => $idDependencia]);
- }
- if ($fechaInicio != "" && $fechaFinal != ""){
- $query->andWhere([
- "AND",
- [">=", "fechaInicio", $fechaInicio],
- ["<=", "fechaFinal", $fechaFinal],
- ]);
- }
- $query2 = (new Query())
- ->select([
- "*",
- "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) as [[cantidadEventos]]",
- "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) - [[cantidadResultados]] as [[cantidadPendientes]]"
- ])
- ->from(["t" => $query]);
- // return new Respuesta($query2);
- $info = [];
- $totalEventos = 0;
- $eventosAtendidos = 0;
- $eventosPendientes = 0;
- foreach($query2->each() as $resultado) {
- $info[] = $resultado;
- $totalEventos += $resultado["cantidadEventos"];
- $eventosAtendidos += $resultado["cantidadResultados"];
- $eventosPendientes += $resultado["cantidadPendientes"];
- }
- return (new Respuesta())->detalle([
- "total" => $totalEventos,
- "participo" => $eventosAtendidos,
- "pendientes" => $eventosPendientes,
- "usuarios" => $info
- ]);
- /* $total = 0;
- $participo = 0;
- foreach($query->each() as $resultado) {
- $total++;
- if ($resultado["accionRes"] !== null) {
- $participo ++;
- }
- }
- return (new Respuesta())
- ->detalle([
- "total" => $total,
- "participo" => $participo,
- "pendientes" => ($total - $participo)
- ]); */
- }
- public function actionComparativaDependencia() {
- $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
- $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
- /* $query = (new Query())
- ->select([
- "{{Dependencia}}.id as dependenciaId",
- "{{Dependencia}}.nombre as dependenciaNombre",
- "COUNT({{Resultado}}.[[idUsuario]]) filter ( where {{Resultado}}.[[idUsuario]] is not null ) as conteoNotNull",
- "COUNT({{UsuarioGrupo}}.[[idUsuario]]) as totalDependencia"
- ])
- ->from("Evento")
- ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
- ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
- ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
- ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
- ->innerJoin("Dependencia", "{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]")
- ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioDependencia}}.[[idUsuario]]")
- ->andWhere([
- "AND",
- [">=", "fechaInicio", $fechaInicio],
- ["<=", "fechaFinal", $fechaFinal],
- ])
- ->groupBy([
- "dependenciaId",
- "dependenciaNombre"
- ])
- ->orderBy(["dependenciaNombre" => SORT_ASC]); */
- $query = (new Query())
- ->select([
- "{{Dependencia}}.id as dependenciaId",
- "{{Dependencia}}.nombre as dependenciaNombre",
- "count({{Evento}}.id) as cantidadEventos",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Facebook' and {{Usuario}}.[[facebookVerificado]]) as eventosFacebook",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Twitter' and {{Usuario}}.[[twitterVerificado]]) as eventosTwitter",
- "count({{Evento}}.[[redSocial]]) filter (where {{Evento}}.[[redSocial]] = 'Instagram' and {{Usuario}}.[[instagramVerificado]]) as eventosInstagram",
- "count({{Resultado}}.accion) as cantidadResultados",
- "(count({{Evento}}.id) - count({{Resultado}}.accion)) as cantidadPendientes",
- ])
- ->from("Evento")
- ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
- ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
- ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
- ->innerJoin("Usuario", "{{Usuario}}.id = {{UsuarioGrupo}}.[[idUsuario]]")
- ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.[[id]]")
- ->innerJoin("Dependencia", "{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]")
- ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
- ->andWhere(["{{Evento}}.eliminado" => null])
- ->andWhere(["{{Dependencia}}.eliminado" => null])
- ->andWhere([
- "AND",
- [">=", "fechaInicio", $fechaInicio],
- ["<=", "fechaFinal", $fechaFinal],
- ])
- ->groupBy([
- "dependenciaId",
- "dependenciaNombre",
- ])
- ->orderBy(["dependenciaNombre" => SORT_ASC]);
- $query2 = (new Query())
- ->select([
- "*",
- "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) as [[cantidadEventos]]",
- "([[eventosFacebook]] + [[eventosTwitter]] + [[eventosInstagram]]) - [[cantidadResultados]] as [[cantidadPendientes]]"
- ])
- ->from(["t" => $query])
- ->orderBy(["t.[[cantidadResultados]]" => SORT_DESC]);
- $data = [];
- /* foreach($query->each() as $resultado) {
- $data[] = [
- "id" => $resultado["dependenciaId"],
- "nombre" => $resultado["dependenciaNombre"],
- "participaciones" => $resultado["conteoNotNull"],
- "pendientes" => $resultado["totalDependencia"] - $resultado["conteoNotNull"]
- ];
- }
- return (new Respuesta())
- ->detalle($data); */
- $eventosAtendidos = 0;
- $eventosPendientes = 0;
- foreach($query2->each() as $resultado) {
- $eventosAtendidos += $resultado["cantidadResultados"];
- $eventosPendientes += $resultado["cantidadPendientes"];
- $usuariosDependencia = UsuarioDependencia::find()
- ->innerJoin('Usuario', '{{Usuario}}.id = {{UsuarioDependencia}}.[[idUsuario]]')
- ->innerJoin('Dependencia', '{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]')
- ->andWhere(['{{UsuarioDependencia}}.[[idDependencia]]' => $resultado["dependenciaId"]])
- ->andWhere(['{{Dependencia}}.eliminado' => null])
- ->andWhere(['{{Usuario}}.eliminado' => null])
- ->count();
- $total = intval($resultado["cantidadResultados"]) + intval($resultado["cantidadPendientes"]);
- $porcentaje = 0;
- if ($total > 0) {
- $porcentaje = ($resultado["cantidadResultados"] * 100) / $total;
- }
- $data[] = [
- "id" => $resultado["dependenciaId"],
- "nombre" => $resultado["dependenciaNombre"],
- "participaciones" => $resultado["cantidadResultados"],
- "pendientes" => $resultado["cantidadPendientes"],
- "porcentajeParticipacion" => $porcentaje,
- "cantidadUsuarios" => $usuariosDependencia
- ];
- }
- return (new Respuesta())
- ->detalle($data);
- }
- public function actionPorEvento() {
- $idEvento = trim($this->req->getBodyParam("tag", null));
- $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
- $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
- /* $queryUsuario = (new Query())
- ->select([
- "{{Evento}}.id as eventoId",
- // "{{Usuario}}.id",
- "{{Resultado}}.accion as accionRes",
- ])
- ->from("Evento")
- ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
- ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
- ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
- // ->innerJoin("Usuario", "{{Usuario}}.[[id]] = {{UsuarioGrupo}}.[[idUsuario]]")
- ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
- ->andWhere([
- "AND",
- [">=", "fechaInicio", $fechaInicio],
- ["<=", "fechaFinal", $fechaFinal],
- ])
- ->andWhere(["{{Evento}}.id" => $idEvento])
- ->orderBy(["eventoId" => SORT_ASC]); */
- $queryUsuario = (new Query())
- ->select([
- "{{Usuario}}.id as idUsuario",
- "{{Resultado}}.accion as accionRes",
- ])
- ->from("Evento")
- ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
- ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
- ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
- ->innerJoin("Usuario", "{{Usuario}}.[[id]] = {{UsuarioGrupo}}.[[idUsuario]]")
- ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.[[id]]")
- ->andWhere([
- "AND",
- [">=", "fechaInicio", $fechaInicio],
- ["<=", "fechaFinal", $fechaFinal],
- ])
- ->andWhere(["{{Evento}}.tag" => $idEvento])
- ->groupBy([
- "{{Usuario}}.id",
- "{{Resultado}}.accion",
- "{{Evento}}.tag"
- ])
- ->orderBy(["{{Evento}}.tag" => SORT_ASC]);
-
- $totalUsuario = 0;
- $participoUsuario = 0;
- $idUsuarios = [];
- foreach($queryUsuario->each() as $resultado) {
- $totalUsuario++;
- if ($resultado["accionRes"] !== null && !in_array($resultado["idUsuario"], $idUsuarios)) {
- $participoUsuario ++;
- $idUsuarios[] = $resultado["idUsuario"];
- } else if ($resultado["accionRes"] === null && in_array($resultado["idUsuario"], $idUsuarios)) {
- $totalUsuario--;
- }
- }
- $queryDependencia = (new Query())
- ->select([
- "{{Dependencia}}.id as dependenciaId",
- "{{Dependencia}}.nombre as dependenciaNombre",
- "COUNT({{Resultado}}.[[idUsuario]]) filter ( where {{Resultado}}.[[idUsuario]] is not null ) as conteoNotNull",
- "COUNT({{UsuarioGrupo}}.[[idUsuario]]) as totalDependencia"
- ])
- ->from("Evento")
- ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
- ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
- ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
- ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]")
- ->innerJoin("Dependencia", "{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]")
- ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioDependencia}}.[[idUsuario]]")
- ->andWhere([
- "AND",
- [">=", "fechaInicio", $fechaInicio],
- ["<=", "fechaFinal", $fechaFinal],
- ])
- ->andWhere(["{{Evento}}.tag" => $idEvento])
- ->groupBy([
- "{{Evento}}.tag",
- "dependenciaId",
- "dependenciaNombre"
- ])
- ->orderBy(["dependenciaNombre" => SORT_ASC]);
- // $this->res->format = \yii\web\Response::FORMAT_RAW;
- // $sql = $queryDependencia->createCommand()->getRawSql();
- // return $sql;
- $dataDependencias = [];
- $totalParticipantesDependencias = 0;
- $totalPendientesDependencias = 0;
- foreach($queryDependencia->each() as $resultado) {
- $totalParticipantesDependencias += $resultado["conteoNotNull"];
- $totalPendientesDependencias += $resultado["totalDependencia"] - $resultado["conteoNotNull"];
- $dataDependencias[] = [
- "id" => $resultado["dependenciaId"],
- "nombre" => $resultado["dependenciaNombre"],
- "participaciones" => $resultado["conteoNotNull"],
- "pendientes" => $resultado["totalDependencia"] - $resultado["conteoNotNull"]
- ];
- }
- return (new Respuesta())
- ->detalle([
- "totalResultadosUsuarios" => $totalUsuario,
- "participoResultadosUsuarios" => $participoUsuario,
- "pendientesResultadosUsuarios" => ($totalUsuario - $participoUsuario),
- "datosDependencias" => $dataDependencias,
- "totalParticipantesDependencias" => $totalParticipantesDependencias,
- "totalPendientesDependencias" => $totalPendientesDependencias,
- "totalDependencias" => $totalPendientesDependencias + $totalPendientesDependencias
- ]);
- }
- public function actionTag() {
- $id = intval($this->req->get("id", ""));
- $q = trim($this->req->get("q", ""));
- // $query = $this->queryInicial;
- $query = (new Query())
- ->select([
- '{{Evento}}.tag',
- '{{Evento}}.nombre',
- '{{Evento}}.[[fechaInicio]]',
- '{{Evento}}.[[fechaFinal]]',
- 'case when count({{Resultado}}.accion) > 0 then true else false end as paticipo'
- ])
- ->from('Evento')
- ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id")
- ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]")
- ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id")
- ->innerJoin("Usuario", "{{Usuario}}.[[id]] = {{UsuarioGrupo}}.[[idUsuario]]")
- ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{Usuario}}.id")
- ->andWhere(["{{Evento}}.eliminado" => null])
- ->andWhere("{{Evento}}.tag is not null")
- ->groupBy([
- '{{Evento}}.tag',
- '{{Evento}}.nombre',
- '{{Evento}}.[[fechaInicio]]',
- '{{Evento}}.[[fechaFinal]]',
- ]);
- /* if($id > 0) {
- $query->andWhere(["id" => $id]);
- } */
- if($q !== "") {
- # Ejemplo de buscador
- $query->andWhere([
- "OR",
- ["ilike", "{{Evento}}.nombre", $q],
- // ["ilike", "direccion", $q],
- ]);
- //
- }
- return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
- }
- public function actionCondensado() {
- $tag = trim($this->req->getBodyParam("tag", null));
- $fechaInicio = trim($this->req->getBodyParam("fechaInicio", ""));
- $fechaFinal = trim($this->req->getBodyParam("fechaFinal", ""));
- try {
- $usuarios = (new Query())
- ->select([
- "{{Usuario}}.id as usuarioId",
- "{{Usuario}}.uid as uid",
- "{{Usuario}}.nombre as nombre",
- "case when {{Usuario}}.[[facebookVerificado]] = true then 1 else 0 end as [[tieneFb]]",
- "case when {{Usuario}}.[[twitterVerificado]] = true then 1 else 0 end as [[tieneTw]]",
- "case when {{Usuario}}.[[instagramVerificado]] = true then 1 else 0 end as [[tieneIg]]",
- "{{Usuario}}.facebook as facebook",
- "{{Usuario}}.instagram as instagram",
- "{{Usuario}}.twitter as twitter",
- "{{Usuario}}.verificado as verificado",
- "{{Dependencia}}.id as [[idDependencia]]",
- "{{Dependencia}}.nombre as dependencia",
- ])
- ->from("Usuario")
- ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idUsuario]] = {{Usuario}}.id")
- ->innerJoin("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{Usuario}}.id")
- ->innerJoin("Dependencia", "{{Dependencia}}.id = {{UsuarioDependencia}}.[[idDependencia]]")
- ->andWhere(["{{Usuario}}.eliminado" => null])
- ->andWhere(["{{UsuarioGrupo}}.[[idGrupo]]" => 1]) //Grupo ENLACES 2022
- ->andWhere(["!=", "{{UsuarioDependencia}}.[[idDependencia]]", 33]) //Diferente a dependencia Soporte
- ->orderBy(['dependencia' => SORT_ASC, 'nombre' => SORT_ASC])
- ->indexBy("usuarioId")
- ->all();
- $eventos = Evento::find()
- ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id")
- ->andWhere(["{{Evento}}.eliminado" => null])
- ->andWhere(["tag" => $tag])
- ->andWhere([
- "AND",
- [">=", "fechaInicio", $fechaInicio],
- ["<=", "fechaFinal", $fechaFinal],
- ]);
- $auxiliar = [];
- $auxiliarDependencias = [];
- foreach($eventos->each() as $e) {
- foreach($e->resultados as $resultado) {
- if (isset($usuarios[$resultado->idUsuario])) {
- $usuario = $usuarios[$resultado->idUsuario];
- if (!isset($auxiliar[$resultado->idUsuario])) {
- $auxiliar[$resultado->idUsuario] = [
- "id" => $usuario['usuarioId'],
- "uid" => $usuario['uid'],
- "nombre" => $usuario['nombre'],
- "idDependencia" => $usuario['idDependencia'],
- "dependencia" => $usuario['dependencia'],
- "tieneFb" => $usuario['tieneFb'],
- "facebook" => $usuario['facebook'],
- "tieneTw" => $usuario['tieneTw'],
- "twitter" => $usuario['twitter'],
- "tieneIg" => $usuario['tieneIg'],
- "instagram" => $usuario['instagram'],
- "verificado" => $usuario['verificado'],
- "participoFacebook" => 0,
- "participoTwitter" => 0,
- "participoInstagram" => 0,
- ];
- }
- if (!isset($auxiliarDependencias[$usuario['idDependencia']])) {
- $auxiliarDependencias[$usuario['idDependencia']] = [
- "id" => $usuario['idDependencia'],
- "nombre" => $usuario['dependencia'],
- "participaciones" => 0,
- "pendientes" => 0
- ];
- }
- if ($e->redSocial === 'Facebook') {
- $auxiliar[$resultado->idUsuario]["participoFacebook"] = 1;
- }
- if ($e->redSocial === 'Twitter') {
- $auxiliar[$resultado->idUsuario]["participoTwitter"] = 1;
- }
- if ($e->redSocial === 'Instagram') {
- $auxiliar[$resultado->idUsuario]["participoInstagram"] = 1;
- }
- }
- }
- foreach ($usuarios as $usr) {
- if (!isset($auxiliar[$usr["usuarioId"]])) {
- $auxiliar[$usr["usuarioId"]] = [
- "id" => $usr['usuarioId'],
- "uid" => $usr['uid'],
- "nombre" => $usr['nombre'],
- "idDependencia" => $usr['idDependencia'],
- "dependencia" => $usr['dependencia'],
- "tieneFb" => $usr['tieneFb'],
- "facebook" => $usr['facebook'],
- "tieneTw" => $usr['tieneTw'],
- "twitter" => $usr['twitter'],
- "tieneIg" => $usr['tieneIg'],
- "instagram" => $usr['instagram'],
- "verificado" => $usr['verificado'],
- "participoFacebook" => 0,
- "participoTwitter" => 0,
- "participoInstagram" => 0,
- ];
- }
- if (!isset($auxiliarDependencias[$usr['idDependencia']])) {
- $auxiliarDependencias[$usr['idDependencia']] = [
- "id" => $usr['idDependencia'],
- "nombre" => $usr['dependencia'],
- "participaciones" => 0,
- "pendientes" => 0
- ];
- }
- }
- }
- $segundoAuxiliar = [];
- $segundoAuxiliarDependencias = [];
- foreach($auxiliar as $aux) {
- if ($aux['tieneFb'] > 0) {
- if ($aux['participoFacebook'] > 0) {
- $auxiliarDependencias[$aux['idDependencia']]['participaciones'] += 1;
- } else {
- $auxiliarDependencias[$aux['idDependencia']]['pendientes'] += 1;
- }
- }
- if ($aux['tieneTw'] > 0) {
- if ($aux['participoTwitter'] > 0) {
- $auxiliarDependencias[$aux['idDependencia']]['participaciones'] += 1;
- } else {
- $auxiliarDependencias[$aux['idDependencia']]['pendientes'] += 1;
- }
- }
- if ($aux['tieneIg'] > 0) {
- if ($aux['participoInstagram'] > 0) {
- $auxiliarDependencias[$aux['idDependencia']]['participaciones'] += 1;
- } else {
- $auxiliarDependencias[$aux['idDependencia']]['pendientes'] += 1;
- }
- }
- $segundoAuxiliar[] = $aux;
- }
- $participaciones = 0;
- $pendientes = 0;
- foreach($auxiliarDependencias as $aux) {
- $participaciones += $aux['participaciones'];
- $pendientes += $aux['pendientes'];
- $segundoAuxiliarDependencias[] = $aux;
- }
- $total = $pendientes + $participaciones;
- $detalle = [
- "usuarios" => $segundoAuxiliar,
- "dependencias" => $segundoAuxiliarDependencias,
- "total" => $total,
- "participaciones" => $participaciones,
- "pendientes" => $pendientes
- ];
- return (new Respuesta())->detalle($detalle);
- } catch (\Exception $e) {
- return (new Respuesta())
- ->mensaje($e->getLine().'. '.$e->getMessage());
- }
- }
- }
|