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 @@