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", ]) ->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(["{{UsuarioGrupo}}.[[idUsuario]]" => $idUsuario]) ->orderBy(["eventoId" => SORT_ASC]); $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 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]); $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([ "{{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]] = {{UsuarioGrupo}}.[[idUsuario]]") ->andWhere([ "AND", [">=", "fechaInicio", $fechaInicio], ["<=", "fechaFinal", $fechaFinal], ]) ->andWhere(["{{Evento}}.id" => $idEvento]) ->orderBy(["eventoId" => SORT_ASC]); $totalDependencia = 0; $participoDependencia = 0; foreach($queryDependencia->each() as $resultado) { $totalDependencia++; if ($resultado["accionRes"] !== null) { $participoDependencia ++; } } return (new Respuesta()) ->detalle([ "totalResultadosDependencias" => $totalDependencia, "participoResultadosDependencias" => $participoDependencia, "pendientesResultadosDependencias" => ($totalDependencia - $participoDependencia), "totalResultadosUsuarios" => $totalUsuario, "participoResultadosUsuarios" => $participoUsuario, "pendientesResultadosUsuarios" => ($totalUsuario - $participoUsuario) ]); } }