SolicitudAcuseController.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <?php
  2. namespace v1\controllers;
  3. use app\models\Folio;
  4. use app\modules\mail\models\NotificacionCorreo;
  5. use common\data\Respuesta;
  6. use common\rest\AuthController;
  7. use DateTime;
  8. use DateTimeZone;
  9. use v1\models\SolicitudAcuse;
  10. use v1\models\SolicitudAcuseMedia;
  11. use v1\models\SolicitudAcusePersonas;
  12. use yii\db\Expression;
  13. class SolicitudAcuseController extends AuthController {
  14. public $modelClass = "v1\models\SolicitudAcuse";
  15. public function actionIndex() {
  16. $id = trim($this->req->get("id", ""));
  17. $idSolicitud = trim($this->req->get("idSolicitud", ""));
  18. $buscar = trim($this->req->get("q", ""));
  19. $query = $this->queryInicial;
  20. if ($id !== "") {
  21. $query->andWhere(["id" => $id]);
  22. }
  23. if ($idSolicitud !== "") {
  24. $query->andWhere(['idSolicitud' => $idSolicitud]);
  25. }
  26. if ($buscar) {
  27. $query->andWhere([
  28. "OR",
  29. "f_unaccent([[id]]) ilike f_unaccent(:q)",
  30. ])->addParams([':q' => "%{$buscar}%"]);
  31. }
  32. return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
  33. }
  34. public function actionGuardar() {
  35. $id = trim($this->req->getBodyParam("id", ""));
  36. $archivos = $this->req->getBodyParam("archivos", []);
  37. $correos = $this->req->getBodyParam("correos", []);
  38. $esNuevo = false;
  39. $modelo = null;
  40. if ($id !== "") {
  41. $modelo = $this->modelClass::findOne($id);
  42. }
  43. $tran = \Yii::$app->getDb()->beginTransaction();
  44. try {
  45. if ($modelo === null) {
  46. $modelo = new $this->modelClass();
  47. $modelo->uuid();
  48. $modelo->enviado = new Expression('now()');
  49. $modelo->folioTransaccion = Folio::obtenerSiguienteAcuse();
  50. $esNuevo = true;
  51. } else {
  52. $modelo->modificado = new Expression('now()');
  53. }
  54. $modelo->load($this->req->getBodyParams(), '');
  55. if (!$modelo->save()) {
  56. return (new Respuesta($modelo))
  57. ->mensaje("Hubo un problema al guardar el registro de la solicitud");
  58. }
  59. $archivosAnteriores = SolicitudAcuseMedia::find()
  60. ->andWhere(['idMedia' => $archivos])
  61. ->all();
  62. $archivosAgregados = [];
  63. foreach ($archivos as $archivo) {
  64. $archivoRegistro = SolicitudAcuseMedia::find()
  65. ->andWhere(['idMedia' => $archivo])
  66. ->andWhere(['idSolicitudAcuse' => $modelo->id])
  67. ->one();
  68. if ($archivoRegistro === null) {
  69. $nuevoArchivo = new SolicitudAcuseMedia();
  70. $nuevoArchivo->creado = new Expression('now()');
  71. $nuevoArchivo->idMedia = $archivo;
  72. $nuevoArchivo->idSolicitudAcuse = $modelo->id;
  73. $nuevoArchivo->uuid();
  74. $archivosAgregados[] = $nuevoArchivo->id;
  75. } else {
  76. $archivoRegistro->modificado = new Expression('now()');
  77. $archivosAgregados[] = $archivoRegistro->id;
  78. }
  79. if (!$nuevoArchivo->save()) {
  80. $tran->rollBack();
  81. return (new Respuesta($nuevoArchivo))
  82. ->mensaje("Error al guardar los Adjuntos");
  83. }
  84. }
  85. foreach ($archivosAnteriores as $archivoAnterior) {
  86. if (!in_array($archivoAnterior->id, $archivosAgregados)) {
  87. $archivoAnterior->eliminado = new Expression('now()');
  88. $archivoAnterior->save();
  89. } else {
  90. $archivoAnterior->eliminado = null;
  91. $archivoAnterior->save();
  92. }
  93. }
  94. if ($esNuevo) {
  95. $notificacionToken = new SolicitudAcusePersonas();
  96. $notificacionToken->uuid();
  97. $notificacionToken->idSolicitud = $modelo->id;
  98. $notificacionToken->creado = new Expression('now()');
  99. $notificacionToken->tokenRecepcion = bin2hex(random_bytes(32));
  100. if (!$notificacionToken->save()) {
  101. return (new Respuesta($notificacionToken))
  102. ->mensaje("Hubo un problema al crear el Token para confirmación");
  103. }
  104. $tz = new DateTimeZone('America/Hermosillo');
  105. $fechaNotificacion = new DateTime();
  106. $fechaNotificacion->setTimezone($tz);
  107. $fechaNotificacion = $fechaNotificacion->format('d/m/Y H:i a');
  108. $parametros = [
  109. "prioridad" => NotificacionCorreo::PRIORIDAD_2,
  110. "asunto" => "Notificación SIISTAI Acuse: " . $modelo->folioTransaccion . " " . $fechaNotificacion,
  111. "cuerpo" => $this->renderPartial('correo', ["modelo" => $modelo, "infoToken" => $notificacionToken]),
  112. "receptores" => $correos,
  113. "adjuntos" => []
  114. ];
  115. $resultado = NotificacionCorreo::enviarMultiple($parametros);
  116. }
  117. $tran->commit();
  118. $modelo->refresh();
  119. return (new Respuesta($modelo))
  120. ->mensaje("Registro de acuse guardado con éxito.");
  121. } catch (\Exception $e) {
  122. $tran->rollBack();
  123. return (new Respuesta())
  124. ->esError()
  125. ->mensaje("Hubo un error en el servidor" . $e->getMessage());
  126. }
  127. }
  128. public function actionEliminar() {
  129. $id = trim($this->req->getBodyParam("id", null));
  130. $modelo = null;
  131. if ($id !== "") {
  132. $modelo = $this->modelClass::findOne(["id" => $id]);
  133. }
  134. if ($modelo === null) {
  135. return (new Respuesta())
  136. ->esError()
  137. ->mensaje("Registro de solicitud no encontrado");
  138. }
  139. $modelo->eliminado = new Expression('now()');
  140. if (!$modelo->save()) {
  141. return (new Respuesta($modelo))
  142. ->mensaje("No se pudo eliminar el registro del solicitud");
  143. }
  144. return (new Respuesta())
  145. ->mensaje("Registro de solicitud eliminado");
  146. }
  147. public function actionNotificar() {
  148. $acuse = trim($this->req->getBodyParam('acuse', ''));
  149. $correos = $this->req->getBodyParam("correos", []);
  150. $acuseRegistro = null;
  151. if ($acuse !== "") {
  152. $acuseRegistro = SolicitudAcuse::findOne($acuse);
  153. }
  154. if ($acuseRegistro !== null) {
  155. $parametros = [
  156. "prioridad" => NotificacionCorreo::PRIORIDAD_2,
  157. "asunto" => "Notificacion de Acuse para Solicitud " . $acuse . " " . date('d/m/Y H:m a'),
  158. "cuerpo" => $this->render("@app/modules/mail/views/layouts/cuerpo", 'correo', ["modelo" => $acuseRegistro]),
  159. "receptores" => $correos,
  160. "adjuntos" => []
  161. ];
  162. $resultado = NotificacionCorreo::enviarMultiple($parametros);
  163. } else {
  164. return (new Respuesta())
  165. ->esError()
  166. ->mensaje("No se encontró el Acuse");
  167. }
  168. }
  169. public function actionConfirmarAcuse() {
  170. $token = trim($this->req->getBodyParam('token', ''));
  171. if ($token !== "") {
  172. $acusePersona = SolicitudAcusePersonas::find()->andWhere(['tokenRecepcion' => $token]);
  173. if ($acusePersona !== null) {
  174. $acusePersona->confirmado = new Expression('now()');
  175. if (!$acusePersona->save()) {
  176. return (new Respuesta())
  177. ->esError()
  178. ->mensaje('Hubo un problema al confirmar el Acuse');
  179. }
  180. }else{
  181. return (new Respuesta())
  182. ->esError()
  183. ->mensaje('Hubo un problema al confirmar el Acuse');
  184. }
  185. }
  186. }
  187. }