diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php
index ff28a98c..b4171b03 100644
--- a/ci4/app/Config/Routes.php
+++ b/ci4/app/Config/Routes.php
@@ -603,6 +603,7 @@ $routes->group('presupuestocliente', ['namespace' => 'App\Controllers\Presupuest
$routes->post('duplicarPresupuesto', 'Presupuestocliente::duplicarPresupuesto', ['as' => 'duplicarPresupuesto']);
$routes->post('calcular', 'Presupuestocliente::calcular', ['as' => 'calcularPresupuesto']);
$routes->post('calcularsolapas', 'Presupuestocliente::calcularMaxSolapas', ['as' => 'calcularSolapas']);
+ $routes->post('checklomo', 'Presupuestocliente::check_lomo_interior');
});
$routes->resource('presupuestocliente', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Presupuestocliente', 'except' => 'show,new,create,update']);
diff --git a/ci4/app/Controllers/Configuracion/Papelesgenericos.php b/ci4/app/Controllers/Configuracion/Papelesgenericos.php
index 391e5ee8..1792dd93 100755
--- a/ci4/app/Controllers/Configuracion/Papelesgenericos.php
+++ b/ci4/app/Controllers/Configuracion/Papelesgenericos.php
@@ -301,7 +301,7 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
$tirada = goSanitize($this->request->getGet('tirada'))[0] ?? null;
$POD = null;
if($tirada != null){
- $POD_value = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
+ $POD_value = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
if(intval($tirada) <= intval($POD_value)){
$POD = true;
}
@@ -339,7 +339,7 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
$tirada = goSanitize($this->request->getGet('tirada'))[0] ?? null;
$POD = null;
if($tirada != null){
- $POD_value = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
+ $POD_value = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
if(intval($tirada) <= intval($POD_value)){
$POD = true;
}
diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php
index d8f4ddad..5b3d4b82 100644
--- a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php
+++ b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php
@@ -1508,8 +1508,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
protected function getPOD()
{
- $model = model('App\Models\Configuracion\ConfiguracionSistemaModel');
- return $model->getPOD();
+ return model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
}
protected function getLineasPresupuesto($presupuestoEntity)
diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php
index e37f22d1..3effc193 100755
--- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php
+++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php
@@ -110,7 +110,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
}
- $POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
+ $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
$this->viewData['breadcrumb'] = [
['title' => lang("App.menu_presupuestos"), 'route' => site_url('presupuestocliente/list'), 'active' => false],
@@ -124,6 +124,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$this->viewData['paisList'] = model('App\Models\Configuracion\PaisModel')->getAllForMenu('id, nombre', 'nombre', true);
$this->viewData['clienteId'] = $clienteId;
$this->viewData['POD'] = $POD;
+ $this->viewData['lomo_maximo'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo')->value;
+ $this->viewData['lomo_minimo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value;
$this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . $this->viewData['pageTitle'] . ' ' . lang('Basic.global.addNewSuffix');
@@ -161,7 +163,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$this->viewData['paisList'] = $this->getPaisListItems();
$this->viewData['clienteId'] = $clienteId;
- $this->viewData['POD'] = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
+ $this->viewData['POD'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
+ $this->viewData['lomo_maximo'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo')->value;
+ $this->viewData['lomo_minimo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value;
// Si se ha llamado a esta funcion porque se ha duplicado el presupuesto
// se actualiza la bbdd para que sólo ejecute algunas funciones una vez
if ($presupuestoEntity->is_duplicado) {
@@ -218,8 +222,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
-
-
public function datatable()
{
if ($this->request->isAJAX()) {
@@ -263,6 +265,117 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
+ public function check_lomo_interior()
+ {
+ if ($this->request->isAJAX()) {
+
+ $reqData = $this->request->getPost();
+ $modelPapelGenerico = new PapelGenericoModel();
+
+ $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
+
+ $cliente_id = $reqData['clienteId'] ?? -1;
+
+ $tirada = $reqData['tirada'] ?? 0;
+ $tamanio = $reqData['tamanio'];
+ $paginas = $reqData['paginas'] ?? 0;
+ $paginas_color = $reqData['paginasColor'] ?? 0;
+ $papelInteriorDiferente = intval($reqData['papelInteriorDiferente']) ?? null;
+ $excluirRotativa = $reqData['excluirRotativa'] ?? 0;
+ $excluirRotativa = intval($excluirRotativa);
+
+ $tipo = $reqData['tipo'];
+ $tipoCubierta = 'blanda'; // solapas sólo tapa blanda y sobre cubierta
+
+ $isColor = intval($reqData['isColor']) ?? 0;
+ $isHq = intval($reqData['isHq']) ?? 0;
+
+ $tipo_impresion_id = $this->getTipoImpresion($tipo, $tipoCubierta);
+ $is_cosido = (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id);
+
+ $interior = $reqData['interior'] ?? [];
+
+ if ($papelInteriorDiferente) {
+ $papel['negro'] = $modelPapelGenerico->where('id', $interior['papelInterior']['negro'])->first()->toArray();
+ $papel['color'] = $modelPapelGenerico->where('id', $interior['papelInterior']['color'])->first()->toArray();
+ $gramaje['negro'] = intval($interior['gramajeInterior']['negro']);
+ $gramaje['color'] = intval($interior['gramajeInterior']['color']);
+ } else {
+ $papel = $modelPapelGenerico->where('id', $interior['papelInterior'])->first()->toArray();
+ $gramaje = intval($interior['gramajeInterior']);
+ }
+
+ $datosPedido = (object) array(
+ 'paginas' => $paginas,
+ 'tirada' => $tirada[0],
+ 'merma' => $tirada[0] > $POD ? $this->calcular_merma($tirada[0], $POD) : 0,
+ 'ancho' => intval($tamanio['ancho']) ?? 100000,
+ 'alto' => intval($tamanio['alto']) ?? 100000,
+ 'isCosido' => $is_cosido,
+ 'a_favor_fibra' => 1,
+ );
+
+ // Para POD siempre es HQ
+ if ($tirada[0] <= $POD) {
+ $isHq = true;
+ }
+
+ $input_data = array(
+ 'uso' => 'interior',
+ 'tipo_impresion_id' => $tipo_impresion_id,
+ 'datosPedido' => $datosPedido,
+ 'papel_generico' => $papel,
+ 'gramaje' => $gramaje,
+ 'isColor' => $isColor,
+ 'isHq' => $isHq,
+ 'cliente_id' => $cliente_id,
+ 'paginas_color' => $paginas_color,
+ 'excluirRotativa' => $excluirRotativa,
+ 'papelInteriorDiferente' => $papelInteriorDiferente
+ );
+
+ $interior = PresupuestoClienteService::obtenerInterior($input_data);
+ if ($interior == null) {
+ return $this->failServerError('Error al calcular el interior');
+ }
+
+ $lomo = 0.0;
+ foreach ($interior as $linea) {
+ if (count($linea) > 0) {
+ $lomo += floatval($linea['mano']);
+ }
+ }
+ $lomo = round($lomo, 2);
+ $errors = [
+ 'status' => 0,
+ 'value' => ""
+ ];
+ $lomo_minimo_fresado_cosido = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value);
+ $lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo')->value);
+
+ if ($tipo == 'cosido' || $tipo == 'fresado') {
+ if ($lomo < $lomo_minimo_fresado_cosido) {
+ $errors['status'] = 1;
+ $errors['value'] = 'No se pueden encuadernar libros cosidos o fresados con lomo inferior a '
+ . $lomo_minimo_fresado_cosido . ' mm. El lomo actual es de ' . $lomo . ' mm. ' .
+ "Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable.";
+ }
+ if ($lomo > $lomo_maximo) {
+ $errors['status'] = 1;
+ $errors['value'] = 'No se pueden encuadernar con un lomo superior a '
+ . $lomo_maximo . ' mm. El lomo actual es de ' . $lomo . ' mm. ' .
+ "Por favor, disminuya el número de páginas o el gramaje del papel para que sea encuadernable.";
+ }
+ }
+
+ $data = (object) array('lomo' => $lomo,
+ 'errors' => $errors);
+ return $this->respond($data);
+
+ } else {
+ return $this->failUnauthorized('Invalid request', 403);
+ }
+ }
public function calcular()
{
@@ -480,7 +593,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$reqData = $this->request->getPost();
$modelPapelGenerico = new PapelGenericoModel();
- $POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
+ $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
$cliente_id = $reqData['clienteId'] ?? -1;
@@ -719,7 +832,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$reqData = $this->request->getPost();
- $POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
+ $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
$id = $reqData['id'] ?? 0;
$id = intval($id);
@@ -1445,6 +1558,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$info = [
'merma' => 0,
+ 'lomo_interior' => 0.0,
'lomo_cubierta' => 0.0,
'lomo_sobrecubierta' => 0.0,
'user_id' => auth()->user()->id,
@@ -1486,7 +1600,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios = 0.0;
- $POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
+ $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
$precio_u = [];
$peso = [];
@@ -1571,6 +1685,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$costeInterior += floatval($linea['total_impresion']);
$peso_interior += floatval($linea['peso']);
$lomo += floatval($linea['mano']);
+ $info['lomo_interior'] += floatval($linea['mano']);
if ($extra_info) {
$this->calcular_coste_linea(
$linea,
@@ -1909,7 +2024,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'paginasCuadernillo' => $paginasCuadernillo,
]);
-
+
foreach ($servDefectoEnc as $servicio) {
if ($servicio->total <= 0) {
@@ -1944,7 +2059,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'solapas' => intval($solapasCubierta) > 0 ? 1 : 0,
]);
-
+
foreach ($servDefectoMan as $servicio) {
if ($servicio->total <= 0) {
@@ -2116,8 +2231,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$totalServicios -= $margenServicios;
if (($margenServicios + $totalServicios) > 0) {
$porcentajeMargenServicios = $margenServicios / ($margenServicios + $totalServicios) * 100;
- }
- else{
+ } else {
$porcentajeMargenServicios = 0;
}
$sumForFactorPonderado += $totalServicios;
diff --git a/ci4/app/Entities/Configuracion/ConfiguracionSistemaEntity.php b/ci4/app/Entities/Configuracion/ConfiguracionSistemaEntity.php
deleted file mode 100755
index a89d0483..00000000
--- a/ci4/app/Entities/Configuracion/ConfiguracionSistemaEntity.php
+++ /dev/null
@@ -1,17 +0,0 @@
- null,
- "var_name" => null,
- "value" => null,
- "datatype" => null,
-
- ];
- protected $casts = [
- ];
-}
diff --git a/ci4/app/Models/Configuracion/ConfigVariableModel.php b/ci4/app/Models/Configuracion/ConfigVariableModel.php
index 1399e45a..322d3e42 100644
--- a/ci4/app/Models/Configuracion/ConfigVariableModel.php
+++ b/ci4/app/Models/Configuracion/ConfigVariableModel.php
@@ -47,4 +47,13 @@ class ConfigVariableModel extends Model
protected $afterFind = [];
protected $beforeDelete = [];
protected $afterDelete = [];
+
+ public function getVariable($name)
+ {
+ $builder = $this->db
+ ->table($this->table . " t1")
+ ->where('name', $name);
+
+ return $builder->get()->getFirstRow();
+ }
}
diff --git a/ci4/app/Models/Configuracion/ConfiguracionSistemaModel.php b/ci4/app/Models/Configuracion/ConfiguracionSistemaModel.php
deleted file mode 100755
index 7793e8ad..00000000
--- a/ci4/app/Models/Configuracion/ConfiguracionSistemaModel.php
+++ /dev/null
@@ -1,37 +0,0 @@
-db
- ->table($this->table . " t1")
- ->select(
- '(SELECT CAST(t1.value AS INT)) AS POD', false)
- ->where('t1.var_name', 'POD');
-
- $POD = intval($builder->get()->getFirstRow()->POD);
- return $POD;
- }
-}
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php
index 2456bd2a..5b15cddd 100644
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php
+++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php
@@ -179,7 +179,7 @@
-
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/viewPresupuestoclienteForm.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/viewPresupuestoclienteForm.php
index a3126558..cdd7b7de 100644
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/viewPresupuestoclienteForm.php
+++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/viewPresupuestoclienteForm.php
@@ -25,6 +25,9 @@
+
+
+
diff --git a/httpdocs/assets/js/safekat/pages/presupuestoCliente/datosGenerales.js b/httpdocs/assets/js/safekat/pages/presupuestoCliente/datosGenerales.js
index a65a2863..7f4e6f5e 100644
--- a/httpdocs/assets/js/safekat/pages/presupuestoCliente/datosGenerales.js
+++ b/httpdocs/assets/js/safekat/pages/presupuestoCliente/datosGenerales.js
@@ -74,6 +74,8 @@ class DatosGenerales {
this.rl_retractilado = $("#rl_retractilado");
this.rl_retractilado5 = $("#rl_retractilado5");
+ this.cargando = false;
+
this.initValidation();
}
@@ -534,6 +536,8 @@ class DatosGenerales {
cargarDatos(datos) {
+ this.cargando = true;
+
this.titulo.val(datos.titulo);
this.autor.val(datos.autor);
this.isbn.val(datos.isbn);
@@ -600,6 +604,8 @@ class DatosGenerales {
this.retractilado5.prop('checked', datos.retractilado5);
this.ivaReducido.val(datos.ivaReducido ? 1 : 0).trigger('change');
+
+ this.cargando = false;
}
getCliente() {
@@ -736,8 +742,6 @@ class DatosGenerales {
this.checkPaginasMultiplo4();
// Para recalcular el presupuesto
- $('#divGramajeInterior').empty();
- $('#divGramajeInteriorColor').empty();
element.trigger('change');
}
@@ -782,6 +786,7 @@ class DatosGenerales {
this.formValidation.revalidateField('paginas');
// Se configura dependiento si hay color o no
+ const lastLayoutColor = $('#negroEstandar').hasClass('d-none');
if (paginasColor == 0) {
this.#handleInteriorLayout('negro');
@@ -789,6 +794,13 @@ class DatosGenerales {
this.divPosPaginasColor.addClass('d-none');
this.posPaginasColor.val("");
this.pagColorConsecutivas.prop('checked', false);
+
+ if(lastLayoutColor && !this.cargando){
+
+ $('#divPapelInterior').empty();
+ $('#divGramajeInterior').empty();
+ $('#negroEstandar').trigger('click');
+ }
}
else {
if (this.papelDiferente.is(":checked"))
@@ -797,8 +809,17 @@ class DatosGenerales {
this.#handleInteriorLayout('color');
this.divPaginasColorConsecutivas.removeClass('d-none');
this.divPosPaginasColor.removeClass('d-none');
+
+ if(!lastLayoutColor && !this.cargando){
+
+ $('#divPapelInterior').empty();
+ $('#divGramajeInterior').empty();
+ $('#colorEstandar').trigger('click');
+ }
}
+ $('.calcular-lomo').trigger('change');
+
this.checkPaginasMultiplo4();
}
diff --git a/httpdocs/assets/js/safekat/pages/presupuestoCliente/disenioInterior.js b/httpdocs/assets/js/safekat/pages/presupuestoCliente/disenioInterior.js
index dc37f0ae..c7af7bcf 100644
--- a/httpdocs/assets/js/safekat/pages/presupuestoCliente/disenioInterior.js
+++ b/httpdocs/assets/js/safekat/pages/presupuestoCliente/disenioInterior.js
@@ -105,8 +105,6 @@ class DisenioInterior {
}
-
-
updatePapeles(papeles = null) {
const context = this;
@@ -1034,6 +1032,7 @@ class DisenioInterior {
const gramaje = element[0].id;
this.presupuestoCliente.calcularSolapas(event);
+ this.presupuestoCliente.checkLomoInterior(event);
this.presupuestoCliente.checkForm(event);
});
diff --git a/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js b/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js
index 764e19eb..577190f2 100644
--- a/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js
+++ b/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js
@@ -113,6 +113,7 @@ class PresupuestoCliente {
$(".calcular-presupuesto").on('change', this.checkForm.bind(this));
$(".calcular-solapas").on('change', this.calcularSolapas.bind(this));
+ $(".calcular-lomo").on('change', this.checkLomoInterior.bind(this));
}
@@ -180,6 +181,31 @@ class PresupuestoCliente {
}
}
+ checkLomoInterior() {
+
+ /* Limites lomo */
+ this.#getDatos(false, true);
+ if (Object.values(this.datos).every(this.#isValidDataForm)) {
+ new Ajax('/presupuestocliente/checklomo',
+ this.datos,
+ {},
+ (response) => {
+ if (response === null || response === undefined || response === "") {
+ console.log("Error en el calculo del lomo interior.");
+ return;
+ }
+ if(response.errors.status == 1){
+ popErrorAlert('' + response.errors.value, "sk-alert", false);
+ }
+ else{
+ popAlert2Hide('sk-alert');
+ }
+ },
+ () => { }
+ ).post();
+ }
+ }
+
checkForm(event) {
this.#processResumenLateral();
@@ -526,9 +552,6 @@ class PresupuestoCliente {
}
}
- popAlert2Hide();
-
-
if (response.tiradas && response.tiradas.length) {
let tiradas = { ...response.tiradas };
@@ -536,6 +559,8 @@ class PresupuestoCliente {
tiradas.sort((a, b) => a - b);
this.divTiradasPrecios.empty();
+ popAlert2Hide();
+
for (let i = 0; i < tiradas.length; i++) {
new tarjetaTiradasPrecio(
this.divTiradasPrecios,
@@ -550,7 +575,7 @@ class PresupuestoCliente {
}
}
-
+
this.lc.val(parseFloat(response.info.lomo_cubierta).toFixed(2));
this.lsc.val(parseFloat(response.info.lomo_sobrecubierta).toFixed(2));
setTimeout(() => {