req->get("id", "")); $idSolicitud = trim($this->req->get("idSolicitud", "")); $buscar = trim($this->req->get("q", "")); $query = $this->queryInicial; if ($id !== "") { $query->andWhere(["id" => $id]); } if ($idSolicitud !== "") { $query->andWhere(['idSolicitud' => $idSolicitud]); } if ($buscar) { $query->andWhere([ "OR", "f_unaccent([[id]]) 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", "")); $archivos = $this->req->getBodyParam("archivos", []); $correos = $this->req->getBodyParam("correos", []); $esNuevo = false; $modelo = null; if ($id !== "") { $modelo = $this->modelClass::findOne($id); } $tran = \Yii::$app->getDb()->beginTransaction(); try { if ($modelo === null) { $modelo = new $this->modelClass(); $modelo->uuid(); $modelo->enviado = new Expression('now()'); $modelo->folioTransaccion = Folio::obtenerSiguienteAcuse(); $esNuevo = true; } 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 registro de la solicitud"); } $archivosAnteriores = SolicitudAcuseMedia::find() ->andWhere(['idMedia' => $archivos]) ->all(); $archivosAgregados = []; foreach ($archivos as $archivo) { $archivoRegistro = SolicitudAcuseMedia::find() ->andWhere(['idMedia' => $archivo]) ->andWhere(['idSolicitudAcuse' => $modelo->id]) ->one(); if ($archivoRegistro === null) { $nuevoArchivo = new SolicitudAcuseMedia(); $nuevoArchivo->creado = new Expression('now()'); $nuevoArchivo->idMedia = $archivo; $nuevoArchivo->idSolicitudAcuse = $modelo->id; $nuevoArchivo->uuid(); $archivosAgregados[] = $nuevoArchivo->id; } else { $archivoRegistro->modificado = new Expression('now()'); $archivosAgregados[] = $archivoRegistro->id; } if (!$nuevoArchivo->save()) { $tran->rollBack(); return (new Respuesta($nuevoArchivo)) ->mensaje("Error al guardar los Adjuntos"); } } foreach ($archivosAnteriores as $archivoAnterior) { if (!in_array($archivoAnterior->id, $archivosAgregados)) { $archivoAnterior->eliminado = new Expression('now()'); $archivoAnterior->save(); } else { $archivoAnterior->eliminado = null; $archivoAnterior->save(); } } if ($esNuevo) { $notificacionToken = new SolicitudAcusePersonas(); $notificacionToken->uuid(); $notificacionToken->idSolicitud = $modelo->id; $notificacionToken->creado = new Expression('now()'); $notificacionToken->tokenRecepcion = bin2hex(random_bytes(32)); if (!$notificacionToken->save()) { return (new Respuesta($notificacionToken)) ->mensaje("Hubo un problema al crear el Token para confirmación"); } $tz = new DateTimeZone('America/Hermosillo'); $fechaNotificacion = new DateTime(); $fechaNotificacion->setTimezone($tz); $fechaNotificacion = $fechaNotificacion->format('d/m/Y H:i a'); $parametros = [ "prioridad" => NotificacionCorreo::PRIORIDAD_2, "asunto" => "Notificación SIISTAI Acuse: " . $modelo->folioTransaccion . " " . $fechaNotificacion, "cuerpo" => $this->renderPartial('correo', ["modelo" => $modelo, "infoToken" => $notificacionToken]), "receptores" => $correos, "adjuntos" => [] ]; $resultado = NotificacionCorreo::enviarMultiple($parametros); } $tran->commit(); $modelo->refresh(); return (new Respuesta($modelo)) ->mensaje("Registro de acuse 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 = trim($this->req->getBodyParam("id", null)); $modelo = null; if ($id !== "") { $modelo = $this->modelClass::findOne(["id" => $id]); } if ($modelo === null) { return (new Respuesta()) ->esError() ->mensaje("Registro de solicitud no encontrado"); } $modelo->eliminado = new Expression('now()'); if (!$modelo->save()) { return (new Respuesta($modelo)) ->mensaje("No se pudo eliminar el registro del solicitud"); } return (new Respuesta()) ->mensaje("Registro de solicitud eliminado"); } public function actionNotificar() { $acuse = trim($this->req->getBodyParam('acuse', '')); $correos = $this->req->getBodyParam("correos", []); $acuseRegistro = null; if ($acuse !== "") { $acuseRegistro = SolicitudAcuse::findOne($acuse); } if ($acuseRegistro !== null) { $parametros = [ "prioridad" => NotificacionCorreo::PRIORIDAD_2, "asunto" => "Notificacion de Acuse para Solicitud " . $acuse . " " . date('d/m/Y H:m a'), "cuerpo" => $this->render("@app/modules/mail/views/layouts/cuerpo", 'correo', ["modelo" => $acuseRegistro]), "receptores" => $correos, "adjuntos" => [] ]; $resultado = NotificacionCorreo::enviarMultiple($parametros); } else { return (new Respuesta()) ->esError() ->mensaje("No se encontró el Acuse"); } } public function actionConfirmarAcuse() { $token = trim($this->req->getBodyParam('token', '')); if ($token !== "") { $acusePersona = SolicitudAcusePersonas::find()->andWhere(['tokenRecepcion' => $token]); if ($acusePersona !== null) { $acusePersona->confirmado = new Expression('now()'); if (!$acusePersona->save()) { return (new Respuesta()) ->esError() ->mensaje('Hubo un problema al confirmar el Acuse'); } }else{ return (new Respuesta()) ->esError() ->mensaje('Hubo un problema al confirmar el Acuse'); } } } }