SolicitudController.php 24 KB

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