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]]") ->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([ "{{Evento}}.id as eventoId", "{{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("UsuarioDependencia", "{{UsuarioDependencia}}.[[idUsuario]] = {{UsuarioGrupo}}.[[idUsuario]]") ->leftJoin("Resultado", "{{Resultado}}.[[idEvento]] = {{Evento}}.id and {{Resultado}}.[[idUsuario]] = {{UsuarioDependencia}}.[[idUsuario]]") ->andWhere([ "AND", [">=", "fechaInicio", $fechaInicio], ["<=", "fechaFinal", $fechaFinal], ]) ->andWhere(["{{UsuarioDependencia}}.[[idDependencia]]" => $idDependencia]) ->orderBy(["eventoId" => SORT_ASC]); */ $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") ->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]); $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); } public function actionPorEvento() { $idEvento = intval($this->req->getBodyParam("idEvento", null)); $fechaInicio = trim($this->req->getBodyParam("fechaInicio", "")); $fechaFinal = trim($this->req->getBodyParam("fechaFinal", "")); $queryUsuario = (new Query()) ->select([ "{{Evento}}.id as eventoId", "{{Resultado}}.accion as accionRes", ]) ->from("Evento") ->innerJoin("EventoGrupo", "{{EventoGrupo}}.[[idEvento]] = {{Evento}}.id") ->innerJoin("Grupo", "{{Grupo}}.id = {{EventoGrupo}}.[[idGrupo]]") ->innerJoin("UsuarioGrupo", "{{UsuarioGrupo}}.[[idGrupo]] = {{Grupo}}.id") ->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]); $totalUsuario = 0; $participoUsuario = 0; foreach($queryUsuario->each() as $resultado) { $totalUsuario++; if ($resultado["accionRes"] !== null) { $participoUsuario ++; } } $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}}.id" => $idEvento]) ->groupBy([ "dependenciaId", "dependenciaNombre" ]) ->orderBy(["dependenciaNombre" => SORT_ASC]); $dataDependencias = []; foreach($queryDependencia->each() as $resultado) { $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 ]); } }