CondicionantesController.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. namespace app\modules\publico\controllers;
  3. use common\data\Respuesta;
  4. use common\rest\JsonController;
  5. use v1\models\FinMovilizacion;
  6. use v1\models\Municipio;
  7. use v1\models\Producto;
  8. use yii\db\Query;
  9. class CondicionantesController extends JsonController {
  10. public function actionIndex() {
  11. $fin = intval($this->req->get("fin", "0"));
  12. $tipo = intval($this->req->get("tipo", "0"));
  13. $estado = intval($this->req->get("origen", 0));
  14. $ciudad = intval($this->req->get("ciudad", 0));
  15. $producto = intval($this->req->get("producto", 0));
  16. $q = trim($this->req->get("q", ""));
  17. $condicionante = (new Query())
  18. ->select("{{Condicionante}}.[[id]],{{Condicionante}}.[[titulo]],{{Condicionante}}.[[descripcion]]")
  19. ->from("Condicionante")
  20. ->andWhere(["{{Condicionante}}.[[eliminado]]" => null]);
  21. if ($producto > 0) {
  22. $query = (new Query)
  23. ->select("id")
  24. ->from("Producto")
  25. ->andWhere([
  26. "eliminado" => null,
  27. "idSagarhpa" => $producto
  28. ]);
  29. $productos = (clone $query)
  30. ->union((clone $query)->select("[[idPadre]] [[id]]"))
  31. ->column();
  32. $idProductos = (new Query)
  33. ->from("Producto")
  34. ->select("id")
  35. ->andWhere(["eliminado" => null])
  36. ->andWhere(["OR", ["id" => $productos], ["idPadre" => $productos]])
  37. ->column();
  38. $condicionante->andWhere(["idProducto" => $idProductos]);
  39. }
  40. /* # En el front no se pueden elegir ciudades*/
  41. if ($ciudad > 0) {
  42. $nivel = (new Query())
  43. ->select(["{{Nivel}}.[[clave]]"])
  44. ->from("Nivel")
  45. ->innerJoin("NivelMunicipio", "{{Nivel}}.id = {{NivelMunicipio}}.[[idNivel]]")
  46. ->innerJoin("Municipio", "{{Municipio}}.id = {{NivelMunicipio}}.[[idMunicipio]]")
  47. ->innerJoin("Estado", "{{Estado}}.id = {{Municipio}}.[[idEstado]]")
  48. ->andWhere([
  49. "{{Estado}}.[[clave]]" => $estado,
  50. "{{Municipio}}.[[clave]]" => $ciudad,
  51. ])
  52. ->column();
  53. $nivel[] = "TODOS";
  54. $condicionante->innerJoin("Nivel", "{{Nivel}}.id = {{Condicionante}}.[[idNivel]]")
  55. ->andWhere(["{{Nivel}}.[[clave]]" => $nivel]);
  56. }
  57. if ($fin > 0) {
  58. $idFin = FinMovilizacion::find()
  59. ->select("id")
  60. ->andWhere(["eliminado" => null])
  61. ->andWhere(new \yii\db\Expression("[[idSagarhpa]] @> ARRAY[(:fin)::INTEGER]"))
  62. ->addParams([":fin" => $fin])
  63. ->column();
  64. $condicionante
  65. ->leftJoin("CondicionanteFin", "{{CondicionanteFin}}.[[idCondicionante]] = {{Condicionante}}.[[id]]")
  66. ->andWhere(["{{CondicionanteFin}}.[[idFin]]" => $idFin]);
  67. }
  68. if ($tipo > 0) {
  69. $condicionante
  70. ->leftJoin("CondicionanteTipo", "{{CondicionanteTipo}}.[[idCondicionante]] = {{Condicionante}}.[[id]]")
  71. ->leftJoin("TipoMovilizacion", "{{CondicionanteTipo}}.[[idTipo]] = {{TipoMovilizacion}}.[[id]]")
  72. ->andWhere(["{{TipoMovilizacion}}.[[idSagarhpa]]" => $tipo, "{{TipoMovilizacion}}.[[eliminado]]" => null]);
  73. }
  74. if ($ciudad > 0) {
  75. // $condicionante->orderBy(["{{Municipio}}.[[nombre]]" => SORT_DESC]);
  76. }
  77. if($q !== "") {
  78. $condicionante->andWhere("f_unaccent([[titulo]]) ilike f_unaccent(:q)")
  79. ->addParams([':q' => "%{$q}%"]);
  80. }
  81. return (new Respuesta($condicionante));
  82. }
  83. public function actionNivelCiudad() {
  84. $idCiudad = intval($this->req->get("ciudad", 0));
  85. $idEstado = intval($this->req->get("estado", 0));
  86. if ($idCiudad <= 0) {
  87. return (new Respuesta())
  88. ->esError()
  89. ->mensaje("Identificador de la ciudad no proporcionado.");
  90. }
  91. $ciudad = (new Query())
  92. ->select("{{Municipio}}.[[nombre]] ||', '||{{Estado}}.[[nombre]]")
  93. ->from("Municipio")
  94. ->innerJoin("Estado", "{{Estado}}.[[id]] = {{Municipio}}.[[idEstado]]")
  95. ->andWhere(["{{Municipio}}.[[clave]]" => $idCiudad, "{{Estado}}.[[clave]]" => $idEstado])
  96. ->scalar();
  97. $niveles = (new Query())
  98. ->select("{{Nivel}}.[[nombre]],{{Municipio}}.[[nombre]] as [[ciudad]]")
  99. ->from("NivelMunicipio")
  100. ->innerJoin("Municipio", "{{Municipio}}.[[id]] = {{NivelMunicipio}}.[[idMunicipio]]")
  101. ->innerJoin("Estado", "{{Estado}}.[[id]] = {{Municipio}}.[[idEstado]]")
  102. ->innerJoin("Nivel", "{{NivelMunicipio}}.[[idNivel]] = {{Nivel}}.[[id]]")
  103. ->andWhere(["{{Municipio}}.[[clave]]" => $idCiudad, "{{Estado}}.[[clave]]" => $idEstado])
  104. ->column();
  105. return (new Respuesta($niveles))->detalle($ciudad);
  106. }
  107. }