EstatusController.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. namespace v1\controllers;
  3. use common\data\Respuesta;
  4. use common\rest\AuthController;
  5. use v1\models\Estatus;
  6. use v1\models\EstatusPermisoUsuario;
  7. use yii\db\Expression;
  8. use yii\db\Query;
  9. class EstatusController extends AuthController {
  10. public $modelClass = "v1\models\Estatus";
  11. public function actionIndex() {
  12. $id = trim($this->req->get("id", ""));
  13. $buscar = trim($this->req->get("q", ""));
  14. $notIn = trim($this->req->get("notIn", ""));
  15. $selector = intval($this->req->get("selector", ""));
  16. $esSubestatus = intval($this->req->get("esSubestatus", ""));
  17. $idEstatusPadre = trim($this->req->get("idEstatusPadre", ""));
  18. $declinado = trim($this->req->get("declinado", ""));
  19. $dt = intval($this->req->get("dt", ""));
  20. $tipo = trim($this->req->get("tipo", ""));
  21. $estatusActual = trim($this->req->get("estatusActual", ""));
  22. $usuario = $this->usuario;
  23. $estatusUsuario = (new Query())
  24. ->select(['[[idEstatus]]'])
  25. ->from('EstatusPermisoUsuario')
  26. ->andWhere(['[[idUsuario]]' => $usuario->id])
  27. ->andWhere(['eliminado' => null])
  28. ->all();
  29. $permisoEstatuUsuario = [];
  30. foreach($estatusUsuario as $eu) {
  31. $permisoEstatuUsuario[] = $eu['idEstatus'];
  32. }
  33. $query = $this->queryInicial;
  34. if ($id !== '') {
  35. $query->andWhere(["id" => $id]);
  36. }
  37. if ($tipo !== '') {
  38. if ($tipo === Estatus::TIPO_SOLICITUD) {
  39. $query->andWhere(['tipo' => Estatus::TIPO_SOLICITUD]);
  40. }
  41. if ($tipo === Estatus::TIPO_RECURSO_REVISION) {
  42. $query->andWhere(['tipo' => Estatus::TIPO_RECURSO_REVISION])
  43. ->andWhere(['!=', 'nombre', Estatus::ESTATUS_RR_NUEVO]);
  44. }
  45. }
  46. if ($selector > 0) {
  47. $query->andWhere(['id' => $permisoEstatuUsuario]);
  48. if ($tipo !== '' && $tipo === Estatus::TIPO_SOLICITUD) {
  49. if ($esSubestatus > 0) {
  50. $query->andWhere(["is not", "idEstatusPadre", null])
  51. ->andWhere(['!=', 'nombre', Estatus::ESTATUS_INICIAL]);
  52. } else {
  53. $query->andWhere(["idEstatusPadre" => null])
  54. ->andWhere(['!=', 'nombre', Estatus::ESTATUS_INICIAL])
  55. ->andWhere(['!=', 'nombre', Estatus::ESTATUS_RR])
  56. ->andWhere([">=", "dias", $dt]);
  57. if ($declinado !== '') {
  58. $query->andWhere(['!=', 'nombre', Estatus::ESTATUS_INCOMPETENCIA]);
  59. }
  60. }
  61. $query->andWhere(['tipo' => Estatus::TIPO_SOLICITUD]);
  62. } else if ($tipo !== '' && $tipo === Estatus::TIPO_RECURSO_REVISION) {
  63. $query->andWhere(['tipo' => Estatus::TIPO_RECURSO_REVISION])
  64. ->andWhere(['!=', 'nombre', Estatus::ESTATUS_RR_NUEVO])
  65. ->andWhere([">=", "dias", $dt]);
  66. $nombreEstatusActual = $this->modelClass::findOne($estatusActual);
  67. if ($nombreEstatusActual->nombre === Estatus::ESTATUS_RR_NUEVO) {
  68. $query->andWhere([
  69. 'OR',
  70. ['nombre' => Estatus::ESTATUS_RR_ADMISION],
  71. ['nombre' => Estatus::ESTATUS_RR_DESECHADO],
  72. ['nombre' => Estatus::ESTATUS_RR_PREVENCION]
  73. ]);
  74. }
  75. if ($nombreEstatusActual->nombre === Estatus::ESTATUS_RR_PREVENCION) {
  76. $query->andWhere([
  77. 'OR',
  78. ['nombre' => Estatus::ESTATUS_RR_PREVENCION_ATENDIDA],
  79. ['nombre' => Estatus::ESTATUS_RR_PREVENCION_NO_ATENDIDA]
  80. ]);
  81. }
  82. if (
  83. $nombreEstatusActual->nombre === Estatus::ESTATUS_RR_PREVENCION_ATENDIDA ||
  84. $nombreEstatusActual->nombre === Estatus::ESTATUS_RR_PREVENCION_NO_ATENDIDA
  85. ) {
  86. $query->andWhere([
  87. 'OR',
  88. ['nombre' => Estatus::ESTATUS_RR_ADMISION],
  89. ['nombre' => Estatus::ESTATUS_RR_DESECHADO]
  90. ]);
  91. }
  92. if ($nombreEstatusActual->nombre === Estatus::ESTATUS_RR_ADMISION) {
  93. $query->andWhere(['nombre' => Estatus::ESTATUS_RR_CIERRE_INSTRUCCION]);
  94. }
  95. if ($nombreEstatusActual->nombre === Estatus::ESTATUS_RR_CIERRE_INSTRUCCION) {
  96. $query->andWhere(['nombre' => Estatus::ESTATUS_RR_RESOLUCION]);
  97. }
  98. if ($nombreEstatusActual->nombre === Estatus::ESTATUS_RR_RESOLUCION) {
  99. $query->andWhere(['nombre' => Estatus::ESTATUS_RR_CIERRE_INSTRUCCION]);
  100. }
  101. }
  102. $query->andWhere(['!=', 'id', $estatusActual]);
  103. }
  104. if ($idEstatusPadre !== '') {
  105. $query->andWhere(["idEstatusPadre" => $idEstatusPadre]);
  106. }
  107. if (!empty($notIn)) {
  108. $explode = explode(",", $notIn);
  109. $query->andWhere(["NOT IN", "id", $explode]);
  110. }
  111. if ($buscar) {
  112. $query->andWhere([
  113. "OR",
  114. "f_unaccent([[nombre]]) ilike f_unaccent(:q)",
  115. ])->addParams([':q' => "%{$buscar}%"]);
  116. }
  117. // Devolver una respuesta con los resultados de la consulta
  118. return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
  119. }
  120. // Acción para guardar un calendario
  121. public function actionGuardar() {
  122. $id = trim($this->req->getBodyParam("id", ""));
  123. $modelo = null;
  124. if (!empty($id)) {
  125. $modelo = $this->modelClass::findOne($id);
  126. }
  127. if ($modelo === null) {
  128. $modelo = new $this->modelClass();
  129. $modelo->creado = new Expression('now()');
  130. $modelo->uuid();
  131. } else {
  132. $modelo->modificado = new Expression('now()');
  133. }
  134. $modelo->load($this->req->getBodyParams(), '');
  135. // Guardar el modelo en la base de datos
  136. if (!$modelo->save()) {
  137. return (new Respuesta($modelo))
  138. ->mensaje("Hubo un problema al guardar el registro del estatus");
  139. }
  140. $modelo->refresh();
  141. return (new Respuesta($modelo))
  142. ->mensaje("Registro de inconformidad guardado con éxito.");
  143. }
  144. public function actionEliminar() {
  145. $id = trim($this->req->getBodyParam("id", ""));
  146. $modelo = null;
  147. if ($id !== "") {
  148. $modelo = $this->modelClass::findOne(["id" => $id]);
  149. }
  150. if ($modelo === null) {
  151. return (new Respuesta())
  152. ->esError()
  153. ->mensaje("Registro de estatus no encontrado");
  154. }
  155. $modelo->eliminado = new Expression('now()');
  156. if (!$modelo->save()) {
  157. return (new Respuesta($modelo))
  158. ->mensaje("No se pudo eliminar el registro del estatus");
  159. }
  160. return (new Respuesta())
  161. ->mensaje("Registro de estatus eliminado");
  162. }
  163. }