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()); } } }