RecursoRevisionController.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715
  1. <?php
  2. namespace v1\controllers;
  3. use app\models\Folio;
  4. use app\models\Permiso;
  5. use app\models\RecursoRevision;
  6. use app\models\Solicitud;
  7. use app\modules\mail\models\NotificacionCorreo;
  8. use common\data\Respuesta;
  9. use common\rest\AuthController;
  10. use v1\models\BitacoraEstatus;
  11. use v1\models\Estatus;
  12. use v1\models\Media;
  13. use v1\models\MediaBitacoraEstatus;
  14. use v1\models\RecursoManifestacion;
  15. use v1\models\RecursoManifestacionMedia;
  16. use v1\models\RecursoRevisionMedia;
  17. use v1\models\Solicitud as ModelsSolicitud;
  18. use v1\models\SujetoObligado;
  19. use v1\models\Usuario;
  20. use yii\db\Expression;
  21. class RecursoRevisionController extends AuthController {
  22. public $modelClass = "v1\models\RecursoRevision";
  23. public $permisos = [
  24. Permiso::RR_VER_DETALLE
  25. ];
  26. public function actionIndex() {
  27. $id = trim($this->req->get("id", ""));
  28. $idSolicitud = trim($this->req->get("idSolicitud", ""));
  29. $buscar = trim($this->req->get("q", ""));
  30. $usuario = $this->usuario;
  31. if (!$usuario->validarPerfilPermisos()) {
  32. return (new Respuesta())
  33. ->esError(403)
  34. ->mensaje('No cuentas con los permisos para consultar esta información.');
  35. }
  36. $query = $this->queryInicial;
  37. if ($id !== "") {
  38. $query->andWhere(["id" => $id]);
  39. }
  40. if (!$usuario->tienePermiso(Permiso::RR_VER_DETALLE)) {
  41. return (new Respuesta())
  42. ->esError(401)
  43. ->mensaje('No cuentas con los permisos para consultar esta información.');
  44. }
  45. if ($idSolicitud !== "") {
  46. $query->andWhere(["idSolicitud" => $idSolicitud]);
  47. }
  48. if ($buscar) {
  49. $query->andWhere([
  50. "OR",
  51. "f_unaccent([[nombre]]) ilike f_unaccent(:q)",
  52. ])->addParams([':q' => "%{$buscar}%"]);
  53. }
  54. return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
  55. }
  56. public function actionGuardar() {
  57. $id = trim($this->req->getBodyParam("id", ""));
  58. $idSolicitud = trim($this->req->getBodyParam("idSolicitud", ""));
  59. $archivos = $this->req->getBodyParam("archivos", []);
  60. $esNuevo = false;
  61. $modelo = null;
  62. if ($id !== "") {
  63. $modelo = $this->modelClass::findOne($id);
  64. }
  65. $tran = \Yii::$app->getDb()->beginTransaction();
  66. try {
  67. if ($modelo === null) {
  68. $esNuevo = true;
  69. $modelo = new $this->modelClass();
  70. $modelo->uuid();
  71. $modelo->creado = new Expression('now()');
  72. } else {
  73. $modelo->modificado = new Expression('now()');
  74. }
  75. $modelo->load($this->req->getBodyParams(), '');
  76. $solicitud = Solicitud::findOne($idSolicitud);
  77. if ($modelo->isNewRecord) {
  78. $modelo->diasTranscurridos = 0;
  79. $modelo->diasRestantes = 40;
  80. $modelo->diasAmpliacion = 0;
  81. $modelo->tipo = RecursoRevision::TIPO_CON_SOLICITUD;
  82. $folio = '';
  83. $folioRR = null;
  84. $ano = date('Y');
  85. $folioRR = Folio::find()
  86. ->andWhere(['tipo' => Folio::TIPO_RECURSO_REVISION])
  87. ->andWhere(['ano' => $ano])
  88. ->andWhere(['eliminado' => null])
  89. ->one();
  90. if ($folioRR === null) {
  91. $tran->rollBack();
  92. return (new Respuesta())
  93. ->esError()
  94. ->mensaje("Hubo un problema al guardar el recurso. Folio no encontrado");
  95. }
  96. $incremental = $folioRR->incremental;
  97. $folioPrefijo = $solicitud->folio;
  98. // $folio = $solicitud->folio . '' . $folioRR->letra . '-' . $incremental;
  99. $folio = Folio::obtenerSiguienteRR($folioPrefijo);
  100. $modelo->folio = $folio;
  101. $folioRR->incremental = $incremental + 1;
  102. if (!$folioRR->save()) {
  103. $tran->rollBack();
  104. return (new Respuesta($folioRR))
  105. ->mensaje("Hubo un problema al guardar el recurso");
  106. }
  107. $estatus = Estatus::find()
  108. ->andWhere(['nombre' => 'Nuevo'])
  109. ->andWhere(['tipo' => Estatus::TIPO_RECURSO_REVISION])
  110. ->andWhere(['eliminado' => null])
  111. ->one();
  112. $modelo->idEstatus = $estatus->id;
  113. $estatusBitacora = Estatus::find()
  114. ->andWhere(['nombre' => Estatus::ESTATUS_RR])
  115. ->andWhere(['eliminado' => null])
  116. ->one();
  117. $solicitud->idEstatus = $estatusBitacora->id;
  118. if (!$solicitud->save()) {
  119. $tran->rollBack();
  120. return (new Respuesta($solicitud))
  121. ->mensaje("Hubo un problema al guardar el recurso");
  122. }
  123. $bitacora = new BitacoraEstatus();
  124. $bitacora->uuid();
  125. $bitacora->idSolicitud = $idSolicitud;
  126. $bitacora->idUsuario = $this->usuario->id;
  127. $bitacora->estatusInicial = $solicitud->idEstatus;
  128. $bitacora->estatusFinal = $estatusBitacora->id;
  129. $bitacora->fechaCambio = new Expression('now()');
  130. $bitacora->idSujetoObligado = $solicitud->idSujetoObligado;
  131. $bitacora->creado = new Expression('now()');
  132. $bitacora->comentario = Estatus::ESTATUS_RR;
  133. if (!$bitacora->save()) {
  134. $tran->rollBack();
  135. return (new Respuesta($bitacora))
  136. ->mensaje("Hubo un problema al guardar el recurso");
  137. }
  138. foreach ($archivos as $archivo) {
  139. $media = new MediaBitacoraEstatus();
  140. $media->idMedia = $archivo['id'];
  141. $media->idBitacoraEstatus = $bitacora->id;
  142. $media->uuid();
  143. $media->creado = new Expression('now()');
  144. if (!$media->save()) {
  145. $tran->rollBack();
  146. return (new Respuesta($media))
  147. ->mensaje("Hubo un problema al guardar el registro de la solicitud");
  148. }
  149. }
  150. }
  151. if (!$modelo->save()) {
  152. $tran->rollBack();
  153. return (new Respuesta($modelo))
  154. ->mensaje("Hubo un problema al guardar el recurso");
  155. }
  156. $archivosAnteriores = RecursoRevisionMedia::find()
  157. ->where(["idRecursoRevision" => $modelo->id])
  158. ->all();
  159. foreach ($archivos as $archivo) {
  160. $archivoRecurso = null;
  161. $archivoRecurso = RecursoRevisionMedia::find()
  162. ->andWhere(["idRecursoRevision" => $modelo->id])
  163. ->andWhere(["idMedia" => $archivo['id']])
  164. ->one();
  165. if ($archivoRecurso === null) {
  166. $archivoRecurso = new RecursoRevisionMedia();
  167. $archivoRecurso->creado = new Expression('now()');
  168. } else {
  169. $archivoRecurso->modificado = new Expression('now()');
  170. if ($archivoRecurso->eliminado) {
  171. $archivoRecurso->eliminado = null;
  172. }
  173. }
  174. $archivoRecurso->uuid();
  175. $archivoRecurso->idRecursoRevision = $modelo->id;
  176. $archivoRecurso->idMedia = $archivo['id'];
  177. if (!$archivoRecurso->save()) {
  178. $tran->rollBack();
  179. return (new Respuesta($archivoRecurso))
  180. ->mensaje("Hubo un problema al guardar el archivo");
  181. }
  182. }
  183. foreach ($archivosAnteriores as $archivoAnterior) {
  184. if (!in_array($archivoAnterior->idMedia, $archivos)) {
  185. $archivoAnterior->eliminado = new Expression('now()');
  186. if (!$archivoAnterior->save()) {
  187. return (new Respuesta($archivoAnterior))
  188. ->mensaje("Hubo un problema al eliminar el archivo");
  189. }
  190. }
  191. }
  192. $modelo->refresh();
  193. if ($esNuevo) {
  194. $correos = [];
  195. $correos[] = $modelo->solicitud->correo;
  196. $sujetoObligado = SujetoObligado::findOne($modelo->solicitud->idSujetoObligado);
  197. $usuariosSujetoObligado = $sujetoObligado->usuarios;
  198. if (isset($sujetoObligado->correoInstitucional)) {
  199. $correos[] = $sujetoObligado->correoInstitucional;
  200. }
  201. foreach ($usuariosSujetoObligado as $usrSO) {
  202. if ($usrSO['verificarCorreo'] !== null) {
  203. $correos[] = $usrSO['correo'];
  204. }
  205. }
  206. $correosFiltrados = array_unique($correos);
  207. $fechaNotificacion = date('d/m/Y H:m:s');
  208. $parametros = [
  209. "prioridad" => NotificacionCorreo::PRIORIDAD_2,
  210. "asunto" => "Notificación SIISTAI Recurso Revisión: {$modelo->folio} {$fechaNotificacion}",
  211. "cuerpo" => $this->render("acuse", ["recurso" => $modelo, "usuario" => $modelo->solicitud->usuario]),
  212. "receptores" => $correosFiltrados,
  213. "adjuntos" => [],
  214. ];
  215. $resultado = NotificacionCorreo::enviarMultiple($parametros);
  216. }
  217. $tran->commit();
  218. $modelo->refresh();
  219. return (new Respuesta($modelo))
  220. ->mensaje("Recurso guardado con éxito.");
  221. } catch (\Exception $e) {
  222. $tran->rollBack();
  223. return (new Respuesta())
  224. ->esError()
  225. ->mensaje("Hubo un error en el servidor: " . $e->getMessage());
  226. }
  227. }
  228. public function actionEliminar() {
  229. $id = intval($this->req->getBodyParam("id", null));
  230. $modelo = null;
  231. if ($id !== "") {
  232. $modelo = $this->modelClass::findOne(["id" => $id]);
  233. }
  234. if ($modelo === null) {
  235. return (new Respuesta())
  236. ->esError()
  237. ->mensaje("Recurso no encontrado");
  238. }
  239. $modelo->eliminado = new Expression('now()');
  240. if (!$modelo->save()) {
  241. return (new Respuesta($modelo))
  242. ->mensaje("No se pudo eliminar el registro del Recurso");
  243. }
  244. return (new Respuesta())
  245. ->mensaje("Recurso de revisión eliminado");
  246. }
  247. public function actionActualizarEstatus() {
  248. $idSolicitud = trim($this->req->getBodyParam('id', ''));
  249. $idRecurso = trim($this->req->getBodyParam('idRecurso', ''));
  250. $tipo = trim($this->req->getBodyParam('tipo', ''));
  251. $mensaje = trim($this->req->getBodyParam('comentario', ''));
  252. $referenciasEstatus = $this->req->getBodyParam('referenciasEstatus', []);
  253. $idEstatus = trim($this->req->getBodyParam('idEstatus', ''));
  254. $idPonencia = trim($this->req->getBodyParam('idPonencia', ''));
  255. $modelo = null;
  256. $usuario = $this->usuario;
  257. $transaccion = \Yii::$app->db->beginTransaction();
  258. try {
  259. if ($idRecurso === '') {
  260. $transaccion->rollBack();
  261. return (new Respuesta())
  262. ->esError()
  263. ->mensaje('No se enconró el recurso.');
  264. }
  265. $modelo = $this->modelClass::findOne($idRecurso);
  266. if ($modelo === null) {
  267. $transaccion->rollBack();
  268. return (new Respuesta())
  269. ->esError()
  270. ->mensaje('No se enconró el recurso.');
  271. }
  272. $estatusActual = $modelo->idEstatus;
  273. if ($idEstatus !== '') {
  274. $modelo->idEstatus = $idEstatus;
  275. }
  276. if ($idPonencia !== '') {
  277. if ($modelo->idPonencia !== $idPonencia) {
  278. $usuarioPonencia = null;
  279. $usuarioPonencia = Usuario::find()
  280. ->andWhere(['idPonencia' => $idPonencia])
  281. ->andWhere(['is not', 'verificarCorreo', null])
  282. ->andWhere(['eliminado' => null])
  283. ->one();
  284. if ($usuarioPonencia !== null) {
  285. $fechaNotificacion = date('d/m/Y H:m:s');
  286. $correosFiltrados = [];
  287. $correosFiltrados[] = $usuarioPonencia->correo;
  288. $parametros = [
  289. "prioridad" => NotificacionCorreo::PRIORIDAD_2,
  290. "asunto" => "Notificación SIISTAI Recurso Revisión: {$modelo->folio} {$fechaNotificacion}",
  291. "cuerpo" => $this->render("acuse", ["recurso" => $modelo, "usuario" => $modelo->solicitud->usuario]),
  292. "receptores" => $correosFiltrados,
  293. "adjuntos" => [],
  294. ];
  295. $resultado = NotificacionCorreo::enviarMultiple($parametros);
  296. }
  297. // turnado de ponencia
  298. }
  299. $modelo->idPonencia = $idPonencia;
  300. }
  301. $modelo->save();
  302. $recursoManifestacion = new RecursoManifestacion();
  303. $recursoManifestacion->uuid();
  304. $recursoManifestacion->idEmisor = $usuario->id;
  305. $recursoManifestacion->idSolicitud = $idSolicitud;
  306. $recursoManifestacion->idRecurso = $idRecurso;
  307. $recursoManifestacion->tipo = $tipo;
  308. $recursoManifestacion->idEstatusActualRecurso = $estatusActual;
  309. if ($idPonencia !== '') {
  310. $recursoManifestacion->idPonencia = $idPonencia;
  311. }
  312. $recursoManifestacion->mensaje = $mensaje;
  313. if ($idEstatus !== '') {
  314. $recursoManifestacion->idEstatusNuevoRecurso = $idEstatus;
  315. } else {
  316. $recursoManifestacion->idEstatusNuevoRecurso = $estatusActual;
  317. }
  318. $recursoManifestacion->creado = new Expression('now()');
  319. if (!$recursoManifestacion->save()) {
  320. $transaccion->rollBack();
  321. return (new Respuesta($recursoManifestacion))
  322. ->mensaje("Hubo un problema al guardar el recurso de manifestación");
  323. }
  324. $recursoManifestacion->refresh();
  325. foreach ($referenciasEstatus as $archivo) {
  326. $media = new RecursoManifestacionMedia();
  327. $media->uuid();
  328. $media->idRecursoManifestacion = $recursoManifestacion->id;
  329. $media->idMedia = $archivo['id'];
  330. $media->creado = new Expression('now()');
  331. if (!$media->save()) {
  332. $transaccion->rollBack();
  333. return (new Respuesta($media))
  334. ->mensaje("Hubo un problema al guardar el recurso de manifestación");
  335. }
  336. }
  337. $correos = [];
  338. $correos[] = $modelo->solicitud->correo;
  339. $sujetoObligado = SujetoObligado::findOne($modelo->solicitud->idSujetoObligado);
  340. $usuariosSujetoObligado = $sujetoObligado->usuarios;
  341. if (isset($sujetoObligado->correoInstitucional)) {
  342. $correos[] = $sujetoObligado->correoInstitucional;
  343. }
  344. foreach ($usuariosSujetoObligado as $usrSO) {
  345. if ($usrSO['verificarCorreo'] !== null) {
  346. $correos[] = $usrSO['correo'];
  347. }
  348. }
  349. $correosFiltrados = array_unique($correos);
  350. $fechaNotificacion = date('d/m/Y H:m:s');
  351. $parametros = [
  352. "prioridad" => NotificacionCorreo::PRIORIDAD_2,
  353. "asunto" => "Notificación SIISTAI Recurso Revisión: {$modelo->folio} {$fechaNotificacion}",
  354. "cuerpo" => $this->render("acuse", ["recurso" => $modelo, "usuario" => $modelo->solicitud->usuario]),
  355. "receptores" => $correosFiltrados,
  356. "adjuntos" => [],
  357. ];
  358. $resultado = NotificacionCorreo::enviarMultiple($parametros);
  359. $transaccion->commit();
  360. $recursoManifestacion->refresh();
  361. return (new Respuesta($recursoManifestacion))
  362. ->mensaje("Recurso manifestación guardado con éxito.");
  363. } catch (\Exception $e) {
  364. $transaccion->rollBack();
  365. return (new Respuesta())
  366. ->esError($e)
  367. ->mensaje("Hubo un error en el servidor");
  368. }
  369. }
  370. public function actionAmpliacion() {
  371. $id = trim($this->req->getBodyParam('id', ''));
  372. $modelo = null;
  373. if ($id !== '') {
  374. $modelo = $this->modelClass::findOne($id);
  375. }
  376. if ($modelo === null) {
  377. return (new Respuesta())
  378. ->esError()
  379. ->mensaje('No se encontró el recurso.');
  380. }
  381. $modelo->diasAmpliacion = 20;
  382. $modelo->fechaAmpliacion = new Expression('now()');
  383. if (!$modelo->save()) {
  384. return (new Respuesta($modelo))
  385. ->mensaje("Hubo un problema al guardar el recurso");
  386. }
  387. $modelo->refresh();
  388. return (new Respuesta($modelo))
  389. ->mensaje("Recurso guardado con éxito.");
  390. }
  391. public function actionExpediente() {
  392. $idRecurso = trim($this->req->get("idRecurso", ""));
  393. if ($idRecurso === "") {
  394. return (new Respuesta())
  395. ->esError()
  396. ->mensaje("Es necesario proporcionar un identificador de recurso de revisión");
  397. }
  398. $recursoManifestacion = RecursoManifestacion::find()
  399. ->andWhere(['{{RecursoManifestacion}}.[[idRecurso]]' => $idRecurso]);
  400. $detalle = [];
  401. foreach ($recursoManifestacion->each() as $rm) {
  402. if (!isset($rm->media)) {
  403. continue;
  404. }
  405. $estatusAnterior = Estatus::find()
  406. ->andWhere(['id' => $rm->idEstatusActualRecurso])
  407. ->one();
  408. $estatusNuevo = Estatus::find()
  409. ->andWhere(['id' => $rm->idEstatusNuevoRecurso])
  410. ->one();
  411. foreach ($rm->media as $archivo) {
  412. $nombreUsuario = '';
  413. $usuario = Usuario::findOne($archivo->idUsuario);
  414. $nombreUsuario = $usuario->nombre;
  415. }
  416. $detalle[] = [
  417. 'nombreUsuario' => $nombreUsuario,
  418. 'estatusAnterior' => $estatusAnterior->nombre,
  419. 'estatusNuevo' => $estatusNuevo->nombre,
  420. 'mensaje' => $rm->mensaje,
  421. 'media' => $archivo
  422. ];
  423. }
  424. return (new Respuesta())
  425. ->detalle($detalle);
  426. }
  427. public function actionSolicitud() {
  428. $fechaSolicitud = trim($this->req->getBodyParam('fechaSSolicitud', ''));
  429. $correo = trim(($this->req->getBodyParam('correo', '')));
  430. $descripcion = trim(($this->req->getBodyParam('descripcion', '')));
  431. $idModalidadEntrega = intval(($this->req->getBodyParam('idModalidadEntrega', '')));
  432. $idSujetoObligado = intval(($this->req->getBodyParam('idSujetoObligado', '')));
  433. $telefono = trim(($this->req->getBodyParam('telefono', '')));
  434. // $telefonoMovil = trim(($this->req->getBodyParam('telefonoMovil', '')));
  435. $tipoSolicitud = intval($this->req->getBodyParam('tipoSolicitud', ''));
  436. $razonesMotivos = trim($this->req->getBodyParam('razonesMotivos', ''));
  437. $idMotivoIncoformidad = trim($this->req->getBodyParam('idMotivoIncoformidad', ''));
  438. $documentoAnexo = trim($this->req->getBodyParam('documentoAnexo', ''));
  439. $documentoAnexoOtro = trim($this->req->getBodyParam('documentoAnexoOtro', ''));
  440. $archivos = $this->req->getBodyParam('archivos', []);
  441. $usuario = $this->usuario;
  442. $modeloSolicitud = null;
  443. $modeloRecurso = null;
  444. $transaccion = \Yii::$app->getDb()->beginTransaction();
  445. try {
  446. $modeloSolicitud = new ModelsSolicitud();
  447. $modeloSolicitud->uuid();
  448. $modeloSolicitud->creado = new Expression('now()');
  449. $modeloSolicitud->recepcion = $fechaSolicitud;
  450. $modeloSolicitud->recepcionSistema = new Expression('now()');
  451. $modeloSolicitud->idUsuario = $usuario->id;
  452. $modeloSolicitud->idSujetoObligado = $idSujetoObligado;
  453. $modeloSolicitud->correo = $correo;
  454. $modeloSolicitud->descripcion = $descripcion;
  455. $modeloSolicitud->idModalidadEntrega = $idModalidadEntrega;
  456. $modeloSolicitud->telefono = $telefono;
  457. // $modeloSolicitud->telefonoMovil = $telefonoMovil;
  458. $modeloSolicitud->tipoSolicitud = $tipoSolicitud;
  459. $folioSolicitud = '';
  460. $modeloFolioSolicitud = Folio::find()
  461. ->andWhere(['tipo' => 'Solicitud'])
  462. ->one();
  463. $estatusSolicitud = Estatus::findOne(['nombre' => Estatus::ESTATUS_RR]);
  464. $modeloSolicitud->idEstatus = $estatusSolicitud->id;
  465. $modeloSolicitud->idSujetoObligadoInicial = $idSujetoObligado;
  466. $tipo = '';
  467. if ($tipoSolicitud === 1) {
  468. $tipo = 'IP';
  469. }
  470. $sujetoObligado = SujetoObligado::findOne($idSujetoObligado);
  471. $ano = date('y');
  472. $claveEstado = '';
  473. $claveSujetoObligado = '';
  474. if (isset($sujetoObligado->estado->clave)) {
  475. $claveEstado = $sujetoObligado->estado->clave;
  476. }
  477. if (isset($sujetoObligado->clave)) {
  478. $claveSujetoObligado = $sujetoObligado->clave;
  479. }
  480. if ($sujetoObligado->secuencialSolicitud === null) {
  481. $sujetoObligado->secuencialSolicitud = 1;
  482. $sujetoObligado->save();
  483. }
  484. $folio = $claveEstado . '' . $claveSujetoObligado . '' . $ano . '' . str_pad($sujetoObligado->secuencialSolicitud, 6, '0', 0);
  485. $modeloSolicitud->folio = $folio;
  486. $sujetoObligado->secuencialSolicitud = $sujetoObligado->secuencialSolicitud + 1;
  487. $sujetoObligado->save();
  488. if (!$modeloSolicitud->save()) {
  489. $transaccion->rollBack();
  490. return (new Respuesta($modeloSolicitud))
  491. ->mensaje("Hubo un problema al guardar el registro de la solicitud");
  492. }
  493. $bitacora = new BitacoraEstatus();
  494. $bitacora->uuid();
  495. $bitacora->idSolicitud = $modeloSolicitud->id;
  496. $bitacora->idUsuario = $usuario->id;
  497. $bitacora->estatusFinal = $estatusSolicitud->id;
  498. $bitacora->fechaCambio = $modeloSolicitud->creado;
  499. $bitacora->idSujetoObligado = $modeloSolicitud->idSujetoObligado;
  500. $bitacora->creado = new Expression('now()');
  501. $bitacora->comentario = 'Recurso de revisión con solicitud existente';
  502. if (!$bitacora->save()) {
  503. $transaccion->rollBack();
  504. return (new Respuesta($bitacora))
  505. ->mensaje("Hubo un problema al guardar el folio del registro de la solicitud");
  506. }
  507. $modeloSolicitud->refresh();
  508. $modeloRecurso = new $this->modelClass();
  509. $modeloRecurso->uuid();
  510. $modeloRecurso->creado = new Expression('now()');
  511. $modeloRecurso->tipo = RecursoRevision::TIPO_SIN_SOLICITUD;
  512. $modeloRecurso->idSolicitud = $modeloSolicitud->id;
  513. $modeloRecurso->actoImpugnado = $descripcion;
  514. $modeloRecurso->razonesMotivos = $razonesMotivos;
  515. $modeloRecurso->idMotivoIncoformidad = $idMotivoIncoformidad;
  516. $prefijoFolioRR = $modeloSolicitud->folio;
  517. $folioRecurso = Folio::obtenerSiguienteRR($prefijoFolioRR);
  518. $modeloRecurso->folio = $folioRecurso;
  519. $estatusRR = Estatus::find()
  520. ->andWhere(['nombre' => 'Nuevo'])
  521. ->andWhere(['tipo' => Estatus::TIPO_RECURSO_REVISION])
  522. ->andWhere(['eliminado' => null])
  523. ->one();
  524. $modeloRecurso->idEstatus = $estatusRR->id;
  525. $modeloRecurso->documentoAnexo = $documentoAnexo;
  526. if ($documentoAnexo === 'Otro') {
  527. $modeloRecurso->documentoAnexoOtro = $documentoAnexoOtro;
  528. }
  529. if (!$modeloRecurso->save()) {
  530. $transaccion->rollBack();
  531. return (new Respuesta($modeloRecurso))
  532. ->mensaje("Hubo un problema al guardar el recurso");
  533. }
  534. $modeloRecurso->refresh();
  535. foreach ($archivos as $archivo) {
  536. $archivoRecurso = new RecursoRevisionMedia();
  537. $archivoRecurso->creado = new Expression('now()');
  538. $archivoRecurso->uuid();
  539. $archivoRecurso->idRecursoRevision = $modeloRecurso->id;
  540. $archivoRecurso->idMedia = $archivo['id'];
  541. if (!$archivoRecurso->save()) {
  542. $transaccion->rollBack();
  543. return (new Respuesta($archivoRecurso))
  544. ->mensaje("Hubo un problema al guardar el archivo");
  545. }
  546. //**************************
  547. $mediaBitacora = new MediaBitacoraEstatus();
  548. $mediaBitacora->idMedia = $archivo['id'];
  549. $mediaBitacora->idBitacoraEstatus = $bitacora->id;
  550. $mediaBitacora->uuid();
  551. $mediaBitacora->creado = new Expression('now()');
  552. if (!$mediaBitacora->save()) {
  553. $transaccion->rollBack();
  554. return (new Respuesta($mediaBitacora))
  555. ->mensaje("Hubo un problema al guardar el registro de la solicitud");
  556. }
  557. }
  558. $correos = [];
  559. $correos[] = $correo;
  560. $sujetoObligado = SujetoObligado::findOne($idSujetoObligado);
  561. $usuariosSujetoObligado = $sujetoObligado->usuarios;
  562. if (isset($sujetoObligado->correoInstitucional)) {
  563. $correos[] = $sujetoObligado->correoInstitucional;
  564. }
  565. foreach ($usuariosSujetoObligado as $usrSO) {
  566. if ($usrSO['verificarCorreo'] !== null) {
  567. $correos[] = $usrSO['correo'];
  568. }
  569. }
  570. $correosFiltrados = array_unique($correos);
  571. $fechaNotificacion = date('d/m/Y H:m:s');
  572. $parametros = [
  573. "prioridad" => NotificacionCorreo::PRIORIDAD_2,
  574. "asunto" => "Notificación SIISTAI Recurso Revisión: {$modeloRecurso->folio} {$fechaNotificacion}",
  575. "cuerpo" => $this->render("acuse", ["recurso" => $modeloRecurso, "usuario" => $modeloSolicitud->usuario]),
  576. "receptores" => $correosFiltrados,
  577. "adjuntos" => [],
  578. ];
  579. $resultado = NotificacionCorreo::enviarMultiple($parametros);
  580. $transaccion->commit();
  581. $modeloRecurso->refresh();
  582. return (new Respuesta($modeloRecurso))
  583. ->mensaje("Recurso guardado con éxito.");
  584. } catch (\Exception $e) {
  585. $transaccion->rollBack();
  586. return (new Respuesta())
  587. ->esError()
  588. ->mensaje("Hubo un error en el servidor: " . $e->getMessage());
  589. }
  590. }
  591. }