diff --git a/ci4/app/Controllers/Presupuestos/Presupuestodirecciones.php b/ci4/app/Controllers/Presupuestos/Presupuestodirecciones.php index ca2ba25e..5c4e8d90 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestodirecciones.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestodirecciones.php @@ -38,29 +38,43 @@ class Presupuestodirecciones extends \App\Controllers\GoBaseResourceController { if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); - if (!isset($reqData['draw']) || !isset($reqData['columns'])) { - $errstr = 'No data available in response to this specific request.'; - $response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr); - return $response; + + if( is_null($reqData['tipo']?? null)){ + if (!isset($reqData['draw']) || !isset($reqData['columns'])) { + $errstr = 'No data available in response to this specific request.'; + $response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr); + return $response; + } + $start = $reqData['start'] ?? 0; + $length = 30; + $search = $reqData['search']['value']; + $requestedOrder = $reqData['order']['0']['column'] ?? 1; + $order = PresupuestoDireccionesModel::SORTABLE[$requestedOrder >= 0 ? $requestedOrder : 1]; + $dir = $reqData['order']['0']['dir'] ?? 'asc'; + + $id_P = $reqData['presupuesto_id'] ?? -1; + + + $resourceData = $this->model->getResource($search, $id_P)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); + + + return $this->respond(Collection::datatable( + $resourceData, + $this->model->getResource()->countAllResults(), + $this->model->getResource("", $id_P)->countAllResults() + )); } - $start = $reqData['start'] ?? 0; - $length = 30; - $search = $reqData['search']['value']; - $requestedOrder = $reqData['order']['0']['column'] ?? 1; - $order = PresupuestoDireccionesModel::SORTABLE[$requestedOrder >= 0 ? $requestedOrder : 1]; - $dir = $reqData['order']['0']['dir'] ?? 'asc'; + else if($reqData['tipo']=='get_tarifa'){ + $peso = $reqData['peso'] ?? 0; + $paisId = $reqData['paisId'] ?? 0; + $cp = $reqData['cp'] ?? 0; + $tipo_envio = $reqData['tipo_envio'] ?? null; - $id_P = $reqData['presupuesto_id'] ?? -1; + $model = model('App\Models\Tarifas\TarifaEnvioModel'); + return $this->respond($model->getTarifaEnvio($paisId, $cp, $peso, $tipo_envio)); + } - $resourceData = $this->model->getResource($search, $id_P)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); - - - return $this->respond(Collection::datatable( - $resourceData, - $this->model->getResource()->countAllResults(), - $this->model->getResource("", $id_P)->countAllResults() - )); } else { return $this->failUnauthorized('Invalid request', 403); } diff --git a/ci4/app/Controllers/Tarifas/Tarifasenviosprecios.php b/ci4/app/Controllers/Tarifas/Tarifasenviosprecios.php index 0f88a868..9f02d6c4 100755 --- a/ci4/app/Controllers/Tarifas/Tarifasenviosprecios.php +++ b/ci4/app/Controllers/Tarifas/Tarifasenviosprecios.php @@ -239,7 +239,14 @@ class Tarifasenviosprecios extends \App\Controllers\GoBaseResourceController { ->validator('Validate::numeric', array( 'message' => lang('TarifasEnviosPrecios.validation.peso_max.decimal')) ), - Field::inst('precio') + Field::inst('precio_min') + ->validator('Validate::required', array( + 'message' => lang('TarifasEnviosPrecios.validation.precio.required')) + ) + ->validator('Validate::numeric', array( + 'message' => lang('TarifasEnviosPrecios.validation.precio.decimal')) + ), + Field::inst('precio_max') ->validator('Validate::required', array( 'message' => lang('TarifasEnviosPrecios.validation.precio.required')) ) diff --git a/ci4/app/Controllers/Test.php b/ci4/app/Controllers/Test.php index 8347aae8..e27c9841 100755 --- a/ci4/app/Controllers/Test.php +++ b/ci4/app/Controllers/Test.php @@ -17,9 +17,9 @@ class Test extends BaseController public function index() { - $model = model('App\Models\Clientes\ClienteDireccionesModel'); + $model = model('App\Models\Tarifas\TarifaEnvioPrecioModel'); echo '
';
-        var_dump($model->getDireccion(1));
+        var_dump($model->getEnvioPrecio(2, 1.5, "cajas"));
         echo '
'; } diff --git a/ci4/app/Entities/Tarifas/TarifaEnvioPrecioEntity.php b/ci4/app/Entities/Tarifas/TarifaEnvioPrecioEntity.php index 097d70bf..73a540ad 100755 --- a/ci4/app/Entities/Tarifas/TarifaEnvioPrecioEntity.php +++ b/ci4/app/Entities/Tarifas/TarifaEnvioPrecioEntity.php @@ -12,7 +12,8 @@ class TarifaEnvioPrecioEntity extends \CodeIgniter\Entity\Entity "tipo_envio" => null, "peso_min" => null, "peso_max" => null, - "precio" => null, + "precio_min" => null, + "precio_max" => null, "precio_adicional" => 0, "margen" => 0, "user_created_id" => 0, @@ -26,7 +27,8 @@ class TarifaEnvioPrecioEntity extends \CodeIgniter\Entity\Entity "proveedor_id" => "int", "peso_min" => "float", "peso_max" => "float", - "precio" => "float", + "precio_min" => "float", + "precio_max" => "float", "precio_adicional" => "float", "margen" => "float", "user_created_id" => "int", diff --git a/ci4/app/Language/es/PresupuestosDirecciones.php b/ci4/app/Language/es/PresupuestosDirecciones.php index 6785332b..740c9a19 100755 --- a/ci4/app/Language/es/PresupuestosDirecciones.php +++ b/ci4/app/Language/es/PresupuestosDirecciones.php @@ -18,6 +18,7 @@ return [ 'cantidad' => 'Cantidad', 'precio' => 'Precio', 'saveDirection' => 'Guardar en direcciones de cliente', + 'entregaPieCalle' => 'Entrega a pie de calle', 'validation' => [ 'max_length' => 'Max. valor caracteres alcanzado', 'required' => 'Campo obligatorio', diff --git a/ci4/app/Language/es/TarifasEnviosPrecios.php b/ci4/app/Language/es/TarifasEnviosPrecios.php index 737b6951..9b37f130 100755 --- a/ci4/app/Language/es/TarifasEnviosPrecios.php +++ b/ci4/app/Language/es/TarifasEnviosPrecios.php @@ -12,7 +12,9 @@ return [ 'palets' => 'Palets', 'pesoMax' => 'Peso Max', 'pesoMin' => 'Peso Min', - 'precio' => 'Precio peso mín.', + 'precio' => 'Precio', + 'precio_min' => 'Precio peso mín.', + 'precio_max' => 'Precio peso max.', 'precioAdicional' => 'Precio Kg Adicional', 'margen' => 'Margen', 'proveedorId' => 'Proveedor', diff --git a/ci4/app/Models/Tarifas/TarifaEnvioModel.php b/ci4/app/Models/Tarifas/TarifaEnvioModel.php index 0aeb1bce..4e1cfdce 100755 --- a/ci4/app/Models/Tarifas/TarifaEnvioModel.php +++ b/ci4/app/Models/Tarifas/TarifaEnvioModel.php @@ -90,4 +90,35 @@ class TarifaEnvioModel extends \App\Models\GoBaseModel ->orLike("t2.nombre", $search) ->groupEnd(); } + + public function getTarifaEnvio($paisId, string $cp, $peso, $tipo_envio){ + // Si el pais es españa se tienen que tener en cuenta los postales + // Se busca primero la tarifa a la que corresponde + $builder = $this->db->table($this->table . " t1") + ->select("t1.id AS tarifa_envio_id, t2.importe_fijo as importe_fijo") + ->join("tarifas_envios_zonas t2", "t1.id = t2.tarifa_envio_id") + ->where("t1.pais_id", $paisId) + ->where("t1.is_deleted", 0) + ->where("t2.is_deleted", 0); + + if($paisId == 1) {// España + $builder->where("CAST(t2.cp_inicial AS UNSIGNED)<=", intval($cp)) + ->where("CAST(t2.cp_final AS UNSIGNED) >=", intval($cp)); + } + $tarifas = $builder->get()->getResultObject(); + + $resultado = []; + + $model = model('App\Models\Tarifas\TarifaEnvioPrecioModel'); + foreach($tarifas as $tarifa){ + $precio_tarifas = $model->getEnvioPrecio($tarifa->tarifa_envio_id, $peso, $tipo_envio); + foreach($precio_tarifas as $precio_tarifa){ + $precio_tarifa->importe_fijo = $tarifa->importe_fijo; + array_push($resultado, $precio_tarifa); + } + } + + return $resultado; + + } } diff --git a/ci4/app/Models/Tarifas/TarifaEnvioPrecioModel.php b/ci4/app/Models/Tarifas/TarifaEnvioPrecioModel.php index 5f296493..0e63cc95 100755 --- a/ci4/app/Models/Tarifas/TarifaEnvioPrecioModel.php +++ b/ci4/app/Models/Tarifas/TarifaEnvioPrecioModel.php @@ -17,9 +17,10 @@ class TarifaEnvioPrecioModel extends \App\Models\GoBaseModel 1 => "t1.tipo_envio", 2 => "t1.peso_min", 3 => "t1.peso_max", - 4 => "t1.precio", - 5 => "t1.precio_adicional", - 5 => "t1.margen" + 4 => "t1.precio_min", + 5 => "t1.precio_max", + 6 => "t1.precio_adicional", + 7 => "t1.margen" ]; protected $allowedFields = [ @@ -28,7 +29,8 @@ class TarifaEnvioPrecioModel extends \App\Models\GoBaseModel "tipo_envio", "peso_min", "peso_max", - "precio", + "precio_min", + "precio_max", "precio_adicional", "margen", "deleted_at", @@ -54,7 +56,11 @@ class TarifaEnvioPrecioModel extends \App\Models\GoBaseModel "label" => "TarifasEnviosPrecios.pesoMin", "rules" => "required|decimal", ], - "precio" => [ + "precio_min" => [ + "label" => "TarifasEnviosPrecios.precio", + "rules" => "required|decimal", + ], + "precio_max" => [ "label" => "TarifasEnviosPrecios.precio", "rules" => "required|decimal", ], @@ -81,7 +87,11 @@ class TarifaEnvioPrecioModel extends \App\Models\GoBaseModel "decimal" => "TarifasEnviosPrecios.validation.peso_min.decimal", "required" => "TarifasEnviosPrecios.validation.peso_min.required", ], - "precio" => [ + "precio_min" => [ + "decimal" => "TarifasEnviosPrecios.validation.precio.decimal", + "required" => "TarifasEnviosPrecios.validation.precio.required", + ], + "precio_max" => [ "decimal" => "TarifasEnviosPrecios.validation.precio.decimal", "required" => "TarifasEnviosPrecios.validation.precio.required", ], @@ -131,7 +141,7 @@ class TarifaEnvioPrecioModel extends \App\Models\GoBaseModel $builder = $this->db ->table($this->table . " t1") ->select( - "t1.id AS id, t1.tipo_envio AS tipo_envio, t1.peso_min AS peso_min, t1.peso_max AS peso_max, t1.precio AS precio, + "t1.id AS id, t1.tipo_envio AS tipo_envio, t1.peso_min AS peso_min, t1.peso_max AS peso_max, t1.precio_min AS precio_min, t1.precio_max AS precio_max, t1.precio_adicional AS precio_adicional, t1.margen AS margen, t2.id AS tarifa_envio, t3.id AS proveedor_id, t3.nombre AS proveedor" ); $builder->join("tarifas_envios_zonas t2", "t1.tarifa_envio_id = t2.id", "left"); @@ -148,14 +158,16 @@ class TarifaEnvioPrecioModel extends \App\Models\GoBaseModel ->like("t1.tipo_envio", $search) ->orLike("t1.peso_min", $search) ->orLike("t1.peso_max", $search) - ->orLike("t1.precio", $search) + ->orLike("t1.precio_min", $search) + ->orLike("t1.precio_max", $search) ->orLike("t1.precio_adicional", $search) ->orLike("t1.margen", $search) ->orLike("t3.nombre", $search) ->orLike("t1.tipo_envio", $search) ->orLike("t1.peso_min", $search) ->orLike("t1.peso_max", $search) - ->orLike("t1.precio", $search) + ->orLike("t1.precio_min", $search) + ->orLike("t1.precio_max", $search) ->orLike("t1.precio_adicional", $search) ->orLike("t1.margen", $search) ->orLike("t3.nombre", $search) @@ -207,4 +219,42 @@ class TarifaEnvioPrecioModel extends \App\Models\GoBaseModel return $builder; } + + public function getEnvioPrecio($tarifa_envio_id, $peso, $tipo_envio){ + // primero se checkea que el peso no sea mayor + // que el valor mas grande + $builder = $this->db + ->table($this->table . " t1") + ->selectMax('t1.peso_max') + ->where('t1.tipo_envio', $tipo_envio) + ->where("t1.tarifa_envio_id", $tarifa_envio_id) + ->where('t1.is_deleted', 0); + $peso_maximo = $builder->get()->getResult(); + if(count($peso_maximo) > 0) + $peso_maximo = floatval($peso_maximo[0]->peso_max); + else // no hay resultados + return []; + + + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.id AS id, t1.tipo_envio AS tipo_envio, t1.peso_min AS peso_min, t1.peso_max AS peso_max, t1.precio_min AS precio_min, t1.precio_max AS precio_max, + t1.precio_adicional AS precio_adicional, t1.margen AS margen, t2.id AS proveedor_id, t2.nombre AS proveedor" + ); + $builder->join("lg_proveedores t2", "t1.proveedor_id = t2.id", "left"); + $builder->where("t1.tarifa_envio_id", $tarifa_envio_id); + $builder->where("t1.tipo_envio", $tipo_envio); + $builder->where('t1.is_deleted', 0); + + if($peso_maximo<$peso){ + $builder->where('t1.peso_max', $peso_maximo); + } + else{ + $builder->where('t1.peso_min <=', $peso); + $builder->where('t1.peso_max >=', $peso); + } + + return $builder->get()->getResultObject(); + } } diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.php index d9afca14..de30b5e6 100755 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.php +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.php @@ -423,8 +423,14 @@ .then(response => response.json()) .then(data => { data.lines.forEach((line) => { + $('#proveedor_enc_' + line[0].tarifa_id).off('change') - $('#proveedor_enc_' + line[0].tarifa_id).val(line[0].proveedor_id) + if(line[0].hasOwnProperty('proveedor_id')) + $('#proveedor_enc_' + line[0].tarifa_id).val(line[0].proveedor_id) + else{ + $('#proveedor_enc_' + line[0].tarifa_id).empty() + .append('') + } $('#precio_unidad_encuadernado_' + line[0].tarifa_id).text(parseFloat(line[0].precio_unidad).toFixed(2)) $('#precio_total_encuadernado_' + line[0].tarifa_id).val(parseFloat(line[0].total).toFixed(2)) $('#enc_margen_' + line[0].tarifa_id).val(parseFloat(line[0].margen).toFixed(2)) diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_presupuestoDireccionesForm.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_presupuestoDireccionesForm.php index c3820ade..7140cc33 100755 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_presupuestoDireccionesForm.php +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_presupuestoDireccionesForm.php @@ -2,7 +2,7 @@