req->get("id", "")); $idSolicitud = trim($this->req->get("idSolicitud", "")); $buscar = trim($this->req->get("q", "")); $usuario = $this->usuario; if (!$usuario->validarPerfilPermisos()) { return (new Respuesta()) ->esError(403) ->mensaje('No cuentas con los permisos para consultar esta información.'); } $query = $this->queryInicial; if ($id !== "") { $query->andWhere(["id" => $id]); } if (!$usuario->tienePermiso(Permiso::RR_VER_DETALLE)) { return (new Respuesta()) ->esError(401) ->mensaje('No cuentas con los permisos para consultar esta información.'); } if ($idSolicitud !== "") { $query->andWhere(["idSolicitud" => $idSolicitud]); } if ($buscar) { $query->andWhere([ "OR", "f_unaccent([[nombre]]) ilike f_unaccent(:q)", ])->addParams([':q' => "%{$buscar}%"]); } return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar); } public function actionGuardar() { $id = trim($this->req->getBodyParam("id", "")); $idSolicitud = trim($this->req->getBodyParam("idSolicitud", "")); $archivos = $this->req->getBodyParam("archivos", []); $esNuevo = false; $modelo = null; if ($id !== "") { $modelo = $this->modelClass::findOne($id); } $tran = \Yii::$app->getDb()->beginTransaction(); try { if ($modelo === null) { $esNuevo = true; $modelo = new $this->modelClass(); $modelo->uuid(); $modelo->creado = new Expression('now()'); } else { $modelo->modificado = new Expression('now()'); } $modelo->load($this->req->getBodyParams(), ''); $solicitud = Solicitud::findOne($idSolicitud); if ($modelo->isNewRecord) { $modelo->diasTranscurridos = 0; $modelo->diasRestantes = 40; $modelo->diasAmpliacion = 0; $modelo->tipo = RecursoRevision::TIPO_CON_SOLICITUD; $folio = ''; $folioRR = null; $ano = date('Y'); $folioRR = Folio::find() ->andWhere(['tipo' => Folio::TIPO_RECURSO_REVISION]) ->andWhere(['ano' => $ano]) ->andWhere(['eliminado' => null]) ->one(); if ($folioRR === null) { $tran->rollBack(); return (new Respuesta()) ->esError() ->mensaje("Hubo un problema al guardar el recurso. Folio no encontrado"); } $incremental = $folioRR->incremental; $folioPrefijo = $solicitud->folio; // $folio = $solicitud->folio . '' . $folioRR->letra . '-' . $incremental; $folio = Folio::obtenerSiguienteRR($folioPrefijo); $modelo->folio = $folio; $folioRR->incremental = $incremental + 1; if (!$folioRR->save()) { $tran->rollBack(); return (new Respuesta($folioRR)) ->mensaje("Hubo un problema al guardar el recurso"); } $estatus = Estatus::find() ->andWhere(['nombre' => 'Nuevo']) ->andWhere(['tipo' => Estatus::TIPO_RECURSO_REVISION]) ->andWhere(['eliminado' => null]) ->one(); $modelo->idEstatus = $estatus->id; $estatusBitacora = Estatus::find() ->andWhere(['nombre' => Estatus::ESTATUS_RR]) ->andWhere(['eliminado' => null]) ->one(); $solicitud->idEstatus = $estatusBitacora->id; if (!$solicitud->save()) { $tran->rollBack(); return (new Respuesta($solicitud)) ->mensaje("Hubo un problema al guardar el recurso"); } $bitacora = new BitacoraEstatus(); $bitacora->uuid(); $bitacora->idSolicitud = $idSolicitud; $bitacora->idUsuario = $this->usuario->id; $bitacora->estatusInicial = $solicitud->idEstatus; $bitacora->estatusFinal = $estatusBitacora->id; $bitacora->fechaCambio = new Expression('now()'); $bitacora->idSujetoObligado = $solicitud->idSujetoObligado; $bitacora->creado = new Expression('now()'); $bitacora->comentario = Estatus::ESTATUS_RR; if (!$bitacora->save()) { $tran->rollBack(); return (new Respuesta($bitacora)) ->mensaje("Hubo un problema al guardar el recurso"); } foreach ($archivos as $archivo) { $media = new MediaBitacoraEstatus(); $media->idMedia = $archivo['id']; $media->idBitacoraEstatus = $bitacora->id; $media->uuid(); $media->creado = new Expression('now()'); if (!$media->save()) { $tran->rollBack(); return (new Respuesta($media)) ->mensaje("Hubo un problema al guardar el registro de la solicitud"); } } } if (!$modelo->save()) { $tran->rollBack(); return (new Respuesta($modelo)) ->mensaje("Hubo un problema al guardar el recurso"); } $archivosAnteriores = RecursoRevisionMedia::find() ->where(["idRecursoRevision" => $modelo->id]) ->all(); foreach ($archivos as $archivo) { $archivoRecurso = null; $archivoRecurso = RecursoRevisionMedia::find() ->andWhere(["idRecursoRevision" => $modelo->id]) ->andWhere(["idMedia" => $archivo['id']]) ->one(); if ($archivoRecurso === null) { $archivoRecurso = new RecursoRevisionMedia(); $archivoRecurso->creado = new Expression('now()'); } else { $archivoRecurso->modificado = new Expression('now()'); if ($archivoRecurso->eliminado) { $archivoRecurso->eliminado = null; } } $archivoRecurso->uuid(); $archivoRecurso->idRecursoRevision = $modelo->id; $archivoRecurso->idMedia = $archivo['id']; if (!$archivoRecurso->save()) { $tran->rollBack(); return (new Respuesta($archivoRecurso)) ->mensaje("Hubo un problema al guardar el archivo"); } } foreach ($archivosAnteriores as $archivoAnterior) { if (!in_array($archivoAnterior->idMedia, $archivos)) { $archivoAnterior->eliminado = new Expression('now()'); if (!$archivoAnterior->save()) { return (new Respuesta($archivoAnterior)) ->mensaje("Hubo un problema al eliminar el archivo"); } } } $modelo->refresh(); if ($esNuevo) { $correos = []; $correos[] = $modelo->solicitud->correo; $sujetoObligado = SujetoObligado::findOne($modelo->solicitud->idSujetoObligado); $usuariosSujetoObligado = $sujetoObligado->usuarios; if (isset($sujetoObligado->correoInstitucional)) { $correos[] = $sujetoObligado->correoInstitucional; } foreach ($usuariosSujetoObligado as $usrSO) { if ($usrSO['verificarCorreo'] !== null) { $correos[] = $usrSO['correo']; } } $correosFiltrados = array_unique($correos); $fechaNotificacion = date('d/m/Y H:m:s'); $parametros = [ "prioridad" => NotificacionCorreo::PRIORIDAD_2, "asunto" => "Notificación SIISTAI Recurso Revisión: {$modelo->folio} {$fechaNotificacion}", "cuerpo" => $this->render("acuse", ["recurso" => $modelo, "usuario" => $modelo->solicitud->usuario]), "receptores" => $correosFiltrados, "adjuntos" => [], ]; $resultado = NotificacionCorreo::enviarMultiple($parametros); } $tran->commit(); $modelo->refresh(); return (new Respuesta($modelo)) ->mensaje("Recurso guardado con éxito."); } catch (\Exception $e) { $tran->rollBack(); return (new Respuesta()) ->esError() ->mensaje("Hubo un error en el servidor: " . $e->getMessage()); } } public function actionEliminar() { $id = intval($this->req->getBodyParam("id", null)); $modelo = null; if ($id !== "") { $modelo = $this->modelClass::findOne(["id" => $id]); } if ($modelo === null) { return (new Respuesta()) ->esError() ->mensaje("Recurso no encontrado"); } $modelo->eliminado = new Expression('now()'); if (!$modelo->save()) { return (new Respuesta($modelo)) ->mensaje("No se pudo eliminar el registro del Recurso"); } return (new Respuesta()) ->mensaje("Recurso de revisión eliminado"); } public function actionActualizarEstatus() { $idSolicitud = trim($this->req->getBodyParam('id', '')); $idRecurso = trim($this->req->getBodyParam('idRecurso', '')); $tipo = trim($this->req->getBodyParam('tipo', '')); $mensaje = trim($this->req->getBodyParam('comentario', '')); $referenciasEstatus = $this->req->getBodyParam('referenciasEstatus', []); $idEstatus = trim($this->req->getBodyParam('idEstatus', '')); $idPonencia = trim($this->req->getBodyParam('idPonencia', '')); $modelo = null; $usuario = $this->usuario; $transaccion = \Yii::$app->db->beginTransaction(); try { if ($idRecurso === '') { $transaccion->rollBack(); return (new Respuesta()) ->esError() ->mensaje('No se enconró el recurso.'); } $modelo = $this->modelClass::findOne($idRecurso); if ($modelo === null) { $transaccion->rollBack(); return (new Respuesta()) ->esError() ->mensaje('No se enconró el recurso.'); } $estatusActual = $modelo->idEstatus; if ($idEstatus !== '') { $modelo->idEstatus = $idEstatus; } if ($idPonencia !== '') { if ($modelo->idPonencia !== $idPonencia) { $usuarioPonencia = null; $usuarioPonencia = Usuario::find() ->andWhere(['idPonencia' => $idPonencia]) ->andWhere(['is not', 'verificarCorreo', null]) ->andWhere(['eliminado' => null]) ->one(); if ($usuarioPonencia !== null) { $fechaNotificacion = date('d/m/Y H:m:s'); $correosFiltrados = []; $correosFiltrados[] = $usuarioPonencia->correo; $parametros = [ "prioridad" => NotificacionCorreo::PRIORIDAD_2, "asunto" => "Notificación SIISTAI Recurso Revisión: {$modelo->folio} {$fechaNotificacion}", "cuerpo" => $this->render("acuse", ["recurso" => $modelo, "usuario" => $modelo->solicitud->usuario]), "receptores" => $correosFiltrados, "adjuntos" => [], ]; $resultado = NotificacionCorreo::enviarMultiple($parametros); } // turnado de ponencia } $modelo->idPonencia = $idPonencia; } $modelo->save(); $recursoManifestacion = new RecursoManifestacion(); $recursoManifestacion->uuid(); $recursoManifestacion->idEmisor = $usuario->id; $recursoManifestacion->idSolicitud = $idSolicitud; $recursoManifestacion->idRecurso = $idRecurso; $recursoManifestacion->tipo = $tipo; $recursoManifestacion->idEstatusActualRecurso = $estatusActual; if ($idPonencia !== '') { $recursoManifestacion->idPonencia = $idPonencia; } $recursoManifestacion->mensaje = $mensaje; if ($idEstatus !== '') { $recursoManifestacion->idEstatusNuevoRecurso = $idEstatus; } else { $recursoManifestacion->idEstatusNuevoRecurso = $estatusActual; } $recursoManifestacion->creado = new Expression('now()'); if (!$recursoManifestacion->save()) { $transaccion->rollBack(); return (new Respuesta($recursoManifestacion)) ->mensaje("Hubo un problema al guardar el recurso de manifestación"); } $recursoManifestacion->refresh(); foreach ($referenciasEstatus as $archivo) { $media = new RecursoManifestacionMedia(); $media->uuid(); $media->idRecursoManifestacion = $recursoManifestacion->id; $media->idMedia = $archivo['id']; $media->creado = new Expression('now()'); if (!$media->save()) { $transaccion->rollBack(); return (new Respuesta($media)) ->mensaje("Hubo un problema al guardar el recurso de manifestación"); } } $correos = []; $correos[] = $modelo->solicitud->correo; $sujetoObligado = SujetoObligado::findOne($modelo->solicitud->idSujetoObligado); $usuariosSujetoObligado = $sujetoObligado->usuarios; if (isset($sujetoObligado->correoInstitucional)) { $correos[] = $sujetoObligado->correoInstitucional; } foreach ($usuariosSujetoObligado as $usrSO) { if ($usrSO['verificarCorreo'] !== null) { $correos[] = $usrSO['correo']; } } $correosFiltrados = array_unique($correos); $fechaNotificacion = date('d/m/Y H:m:s'); $parametros = [ "prioridad" => NotificacionCorreo::PRIORIDAD_2, "asunto" => "Notificación SIISTAI Recurso Revisión: {$modelo->folio} {$fechaNotificacion}", "cuerpo" => $this->render("acuse", ["recurso" => $modelo, "usuario" => $modelo->solicitud->usuario]), "receptores" => $correosFiltrados, "adjuntos" => [], ]; $resultado = NotificacionCorreo::enviarMultiple($parametros); $transaccion->commit(); $recursoManifestacion->refresh(); return (new Respuesta($recursoManifestacion)) ->mensaje("Recurso manifestación guardado con éxito."); } catch (\Exception $e) { $transaccion->rollBack(); return (new Respuesta()) ->esError($e) ->mensaje("Hubo un error en el servidor"); } } public function actionAmpliacion() { $id = trim($this->req->getBodyParam('id', '')); $modelo = null; if ($id !== '') { $modelo = $this->modelClass::findOne($id); } if ($modelo === null) { return (new Respuesta()) ->esError() ->mensaje('No se encontró el recurso.'); } $modelo->diasAmpliacion = 20; $modelo->fechaAmpliacion = new Expression('now()'); if (!$modelo->save()) { return (new Respuesta($modelo)) ->mensaje("Hubo un problema al guardar el recurso"); } $modelo->refresh(); return (new Respuesta($modelo)) ->mensaje("Recurso guardado con éxito."); } public function actionExpediente() { $idRecurso = trim($this->req->get("idRecurso", "")); if ($idRecurso === "") { return (new Respuesta()) ->esError() ->mensaje("Es necesario proporcionar un identificador de recurso de revisión"); } $recursoManifestacion = RecursoManifestacion::find() ->andWhere(['{{RecursoManifestacion}}.[[idRecurso]]' => $idRecurso]); $detalle = []; foreach ($recursoManifestacion->each() as $rm) { if (!isset($rm->media)) { continue; } $estatusAnterior = Estatus::find() ->andWhere(['id' => $rm->idEstatusActualRecurso]) ->one(); $estatusNuevo = Estatus::find() ->andWhere(['id' => $rm->idEstatusNuevoRecurso]) ->one(); foreach ($rm->media as $archivo) { $nombreUsuario = ''; $usuario = Usuario::findOne($archivo->idUsuario); $nombreUsuario = $usuario->nombre; } $detalle[] = [ 'nombreUsuario' => $nombreUsuario, 'estatusAnterior' => $estatusAnterior->nombre, 'estatusNuevo' => $estatusNuevo->nombre, 'mensaje' => $rm->mensaje, 'media' => $archivo ]; } return (new Respuesta()) ->detalle($detalle); } public function actionSolicitud() { $fechaSolicitud = trim($this->req->getBodyParam('fechaSSolicitud', '')); $correo = trim(($this->req->getBodyParam('correo', ''))); $descripcion = trim(($this->req->getBodyParam('descripcion', ''))); $idModalidadEntrega = intval(($this->req->getBodyParam('idModalidadEntrega', ''))); $idSujetoObligado = intval(($this->req->getBodyParam('idSujetoObligado', ''))); $telefono = trim(($this->req->getBodyParam('telefono', ''))); // $telefonoMovil = trim(($this->req->getBodyParam('telefonoMovil', ''))); $tipoSolicitud = intval($this->req->getBodyParam('tipoSolicitud', '')); $razonesMotivos = trim($this->req->getBodyParam('razonesMotivos', '')); $idMotivoIncoformidad = trim($this->req->getBodyParam('idMotivoIncoformidad', '')); $documentoAnexo = trim($this->req->getBodyParam('documentoAnexo', '')); $documentoAnexoOtro = trim($this->req->getBodyParam('documentoAnexoOtro', '')); $archivos = $this->req->getBodyParam('archivos', []); $usuario = $this->usuario; $modeloSolicitud = null; $modeloRecurso = null; $transaccion = \Yii::$app->getDb()->beginTransaction(); try { $modeloSolicitud = new ModelsSolicitud(); $modeloSolicitud->uuid(); $modeloSolicitud->creado = new Expression('now()'); $modeloSolicitud->recepcion = $fechaSolicitud; $modeloSolicitud->recepcionSistema = new Expression('now()'); $modeloSolicitud->idUsuario = $usuario->id; $modeloSolicitud->idSujetoObligado = $idSujetoObligado; $modeloSolicitud->correo = $correo; $modeloSolicitud->descripcion = $descripcion; $modeloSolicitud->idModalidadEntrega = $idModalidadEntrega; $modeloSolicitud->telefono = $telefono; // $modeloSolicitud->telefonoMovil = $telefonoMovil; $modeloSolicitud->tipoSolicitud = $tipoSolicitud; $folioSolicitud = ''; $modeloFolioSolicitud = Folio::find() ->andWhere(['tipo' => 'Solicitud']) ->one(); $estatusSolicitud = Estatus::findOne(['nombre' => Estatus::ESTATUS_RR]); $modeloSolicitud->idEstatus = $estatusSolicitud->id; $modeloSolicitud->idSujetoObligadoInicial = $idSujetoObligado; $tipo = ''; if ($tipoSolicitud === 1) { $tipo = 'IP'; } $sujetoObligado = SujetoObligado::findOne($idSujetoObligado); $ano = date('y'); $claveEstado = ''; $claveSujetoObligado = ''; if (isset($sujetoObligado->estado->clave)) { $claveEstado = $sujetoObligado->estado->clave; } if (isset($sujetoObligado->clave)) { $claveSujetoObligado = $sujetoObligado->clave; } if ($sujetoObligado->secuencialSolicitud === null) { $sujetoObligado->secuencialSolicitud = 1; $sujetoObligado->save(); } $folio = $claveEstado . '' . $claveSujetoObligado . '' . $ano . '' . str_pad($sujetoObligado->secuencialSolicitud, 6, '0', 0); $modeloSolicitud->folio = $folio; $sujetoObligado->secuencialSolicitud = $sujetoObligado->secuencialSolicitud + 1; $sujetoObligado->save(); if (!$modeloSolicitud->save()) { $transaccion->rollBack(); return (new Respuesta($modeloSolicitud)) ->mensaje("Hubo un problema al guardar el registro de la solicitud"); } $bitacora = new BitacoraEstatus(); $bitacora->uuid(); $bitacora->idSolicitud = $modeloSolicitud->id; $bitacora->idUsuario = $usuario->id; $bitacora->estatusFinal = $estatusSolicitud->id; $bitacora->fechaCambio = $modeloSolicitud->creado; $bitacora->idSujetoObligado = $modeloSolicitud->idSujetoObligado; $bitacora->creado = new Expression('now()'); $bitacora->comentario = 'Recurso de revisión con solicitud existente'; if (!$bitacora->save()) { $transaccion->rollBack(); return (new Respuesta($bitacora)) ->mensaje("Hubo un problema al guardar el folio del registro de la solicitud"); } $modeloSolicitud->refresh(); $modeloRecurso = new $this->modelClass(); $modeloRecurso->uuid(); $modeloRecurso->creado = new Expression('now()'); $modeloRecurso->tipo = RecursoRevision::TIPO_SIN_SOLICITUD; $modeloRecurso->idSolicitud = $modeloSolicitud->id; $modeloRecurso->actoImpugnado = $descripcion; $modeloRecurso->razonesMotivos = $razonesMotivos; $modeloRecurso->idMotivoIncoformidad = $idMotivoIncoformidad; $prefijoFolioRR = $modeloSolicitud->folio; $folioRecurso = Folio::obtenerSiguienteRR($prefijoFolioRR); $modeloRecurso->folio = $folioRecurso; $estatusRR = Estatus::find() ->andWhere(['nombre' => 'Nuevo']) ->andWhere(['tipo' => Estatus::TIPO_RECURSO_REVISION]) ->andWhere(['eliminado' => null]) ->one(); $modeloRecurso->idEstatus = $estatusRR->id; $modeloRecurso->documentoAnexo = $documentoAnexo; if ($documentoAnexo === 'Otro') { $modeloRecurso->documentoAnexoOtro = $documentoAnexoOtro; } if (!$modeloRecurso->save()) { $transaccion->rollBack(); return (new Respuesta($modeloRecurso)) ->mensaje("Hubo un problema al guardar el recurso"); } $modeloRecurso->refresh(); foreach ($archivos as $archivo) { $archivoRecurso = new RecursoRevisionMedia(); $archivoRecurso->creado = new Expression('now()'); $archivoRecurso->uuid(); $archivoRecurso->idRecursoRevision = $modeloRecurso->id; $archivoRecurso->idMedia = $archivo['id']; if (!$archivoRecurso->save()) { $transaccion->rollBack(); return (new Respuesta($archivoRecurso)) ->mensaje("Hubo un problema al guardar el archivo"); } //************************** $mediaBitacora = new MediaBitacoraEstatus(); $mediaBitacora->idMedia = $archivo['id']; $mediaBitacora->idBitacoraEstatus = $bitacora->id; $mediaBitacora->uuid(); $mediaBitacora->creado = new Expression('now()'); if (!$mediaBitacora->save()) { $transaccion->rollBack(); return (new Respuesta($mediaBitacora)) ->mensaje("Hubo un problema al guardar el registro de la solicitud"); } } $correos = []; $correos[] = $correo; $sujetoObligado = SujetoObligado::findOne($idSujetoObligado); $usuariosSujetoObligado = $sujetoObligado->usuarios; if (isset($sujetoObligado->correoInstitucional)) { $correos[] = $sujetoObligado->correoInstitucional; } foreach ($usuariosSujetoObligado as $usrSO) { if ($usrSO['verificarCorreo'] !== null) { $correos[] = $usrSO['correo']; } } $correosFiltrados = array_unique($correos); $fechaNotificacion = date('d/m/Y H:m:s'); $parametros = [ "prioridad" => NotificacionCorreo::PRIORIDAD_2, "asunto" => "Notificación SIISTAI Recurso Revisión: {$modeloRecurso->folio} {$fechaNotificacion}", "cuerpo" => $this->render("acuse", ["recurso" => $modeloRecurso, "usuario" => $modeloSolicitud->usuario]), "receptores" => $correosFiltrados, "adjuntos" => [], ]; $resultado = NotificacionCorreo::enviarMultiple($parametros); $transaccion->commit(); $modeloRecurso->refresh(); return (new Respuesta($modeloRecurso)) ->mensaje("Recurso guardado con éxito."); } catch (\Exception $e) { $transaccion->rollBack(); return (new Respuesta()) ->esError() ->mensaje("Hubo un error en el servidor: " . $e->getMessage()); } } }