añadido checkeo de lomo en presupuesto admin

This commit is contained in:
2025-06-23 18:33:46 +02:00
parent da0ca27c8c
commit 819f297e90
8 changed files with 189 additions and 48 deletions

View File

@ -17,6 +17,8 @@ $routes->group('presupuestoadmin', ['namespace' => 'App\Controllers\Presupuestos
$routes->post('allmenuitems', 'Presupuestoadmin::allItemsSelect', ['as' => 'select2ItemsOfPresupuestoAdmin']); $routes->post('allmenuitems', 'Presupuestoadmin::allItemsSelect', ['as' => 'select2ItemsOfPresupuestoAdmin']);
$routes->post('menuitems', 'Presupuestoadmin::menuItems', ['as' => 'menuItemsOfPresupuestoAdmin']); $routes->post('menuitems', 'Presupuestoadmin::menuItems', ['as' => 'menuItemsOfPresupuestoAdmin']);
$routes->get('checklomointerior', 'Presupuestoadmin::checkLomo');
$routes->get('cargar/(:any)', 'Presupuestoadmin::cargar/$1'); $routes->get('cargar/(:any)', 'Presupuestoadmin::cargar/$1');
$routes->post('comparadorinterior', 'Presupuestoadmin::obtenerComparadorInterior'); $routes->post('comparadorinterior', 'Presupuestoadmin::obtenerComparadorInterior');
$routes->post('comparadorexteriores', 'Presupuestoadmin::obtenerComparadorExteriores'); $routes->post('comparadorexteriores', 'Presupuestoadmin::obtenerComparadorExteriores');

View File

@ -1841,6 +1841,18 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
} }
} }
public function checkLomo()
{
if ($this->request->isAJAX()) {
$tipo_impresion_id = $this->request->getGet('tipo_impresion_id');
$lomo = $this->request->getGet('lomo') ?? 0;
$response = PresupuestoService::check_lomo_interior($tipo_impresion_id, $lomo);
return $this->respond($response);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function reprintPresupuesto() public function reprintPresupuesto()
{ {

View File

@ -459,9 +459,9 @@ return [
'errorPresupuesto' => 'Se ha producido un error al calcular el presupuesto. Póngase en contacto con el administrador', 'errorPresupuesto' => 'Se ha producido un error al calcular el presupuesto. Póngase en contacto con el administrador',
'error_sobrecubierta_sin_solapas' => 'Debe seleccionar "sobrecubierta" en los datos del libro para introducir el ancho de solapa', 'error_sobrecubierta_sin_solapas' => 'Debe seleccionar "sobrecubierta" en los datos del libro para introducir el ancho de solapa',
'error_faja_sin_solapas' => 'Debe seleccionar "faja" en los datos del libro para introducir el ancho de solapa', 'error_faja_sin_solapas' => 'Debe seleccionar "faja" en los datos del libro para introducir el ancho de solapa',
'error_lomo_maximo' => "No se pueden encuadernar libros {0} con un lomo superior a {1} mm. El lomo actual es de {2} mm. <br> 'error_lomo_maximo' => "No se pueden encuadernar libros {0} con un lomo interior superior a {1} mm. El lomo actual es de {2} mm. <br>
Por favor, disminuya el número de páginas o el gramaje del papel para que sea encuadernable.", Por favor, disminuya el número de páginas o el gramaje del papel para que sea encuadernable.",
'error_lomo_minimo' => "No se pueden encuadernar libros {0} con un lomo inferior a {1} mm. El lomo actual es de {2} mm. <br> 'error_lomo_minimo' => "No se pueden encuadernar libros {0} con un lomo interior inferior a {1} mm. El lomo actual es de {2} mm. <br>
Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable.", Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable.",
], ],
'resize_preview' => 'Refrescar vista esquema' 'resize_preview' => 'Refrescar vista esquema'

View File

@ -2079,15 +2079,14 @@ class PresupuestoService extends BaseService
if ($tirada == 1) { if ($tirada == 1) {
$merma = 0; $merma = 0;
} } else if ($tirada > intval($POD)) {
else if ($tirada > intval($POD)) {
$merma = $tirada * 0.1; $merma = $tirada * 0.1;
} else { } else {
$merma_lineas = []; $merma_lineas = [];
foreach ($formas_lineas_interior as $formas_linea) { foreach ($formas_lineas_interior as $formas_linea) {
if ($formas_linea > $tirada) if ($formas_linea > $tirada)
array_push($merma_lineas, $formas_linea - $tirada); array_push($merma_lineas, $formas_linea - $tirada);
else{ else {
$total_pliegos = ceil($tirada / $formas_linea); $total_pliegos = ceil($tirada / $formas_linea);
$total_formas = $total_pliegos * $formas_linea; $total_formas = $total_pliegos * $formas_linea;
array_push($merma_lineas, $total_formas - $tirada); array_push($merma_lineas, $total_formas - $tirada);
@ -2127,27 +2126,25 @@ class PresupuestoService extends BaseService
$presupuesto->titulo = $presupuesto->titulo . ' - ' . lang('Presupuestos.duplicado'); $presupuesto->titulo = $presupuesto->titulo . ' - ' . lang('Presupuestos.duplicado');
$presupuesto->is_duplicado = 1; $presupuesto->is_duplicado = 1;
$presupuesto->estado_id = 1; $presupuesto->estado_id = 1;
if($is_reimpresion && boolval($copy_files)){ if ($is_reimpresion && boolval($copy_files)) {
$presupuesto->inc_rei = "reimpresion"; $presupuesto->inc_rei = "reimpresion";
$modelPedidoLinea = model('App\Models\Pedidos\PedidoLineaModel'); $modelPedidoLinea = model('App\Models\Pedidos\PedidoLineaModel');
$pedido_linea = $modelPedidoLinea->where('presupuesto_id', $id)->first(); $pedido_linea = $modelPedidoLinea->where('presupuesto_id', $id)->first();
if($pedido_linea){ if ($pedido_linea) {
$text = "REIMPRESION [" . date('Y-m-d H:i:s') . "] - PEDIDO: " . $pedido_linea->pedido_id . $text = "REIMPRESION [" . date('Y-m-d H:i:s') . "] - PEDIDO: " . $pedido_linea->pedido_id .
"\n================================================\n";
$presupuesto->comentarios_safekat = $text . $presupuesto->comentarios_safekat ;
}
}
else if($is_reimpresion){
$presupuesto->inc_rei = null;
$modelPedidoLinea = model('App\Models\Pedidos\PedidoLineaModel');
$pedido_linea = $modelPedidoLinea->where('presupuesto_id', $id)->first();
if($pedido_linea){
$text = "DUPLICADO [" . date('Y-m-d H:i:s') . "] - PEDIDO: " . $pedido_linea->pedido_id .
"\n================================================\n"; "\n================================================\n";
$presupuesto->comentarios_safekat = $text . $presupuesto->comentarios_safekat; $presupuesto->comentarios_safekat = $text . $presupuesto->comentarios_safekat;
} }
} } else if ($is_reimpresion) {
else{ $presupuesto->inc_rei = null;
$modelPedidoLinea = model('App\Models\Pedidos\PedidoLineaModel');
$pedido_linea = $modelPedidoLinea->where('presupuesto_id', $id)->first();
if ($pedido_linea) {
$text = "DUPLICADO [" . date('Y-m-d H:i:s') . "] - PEDIDO: " . $pedido_linea->pedido_id .
"\n================================================\n";
$presupuesto->comentarios_safekat = $text . $presupuesto->comentarios_safekat;
}
} else {
$presupuesto->inc_rei = null; $presupuesto->inc_rei = null;
} }
$new_id = $modelPresupuesto->insert($presupuesto); $new_id = $modelPresupuesto->insert($presupuesto);
@ -2192,7 +2189,7 @@ class PresupuestoService extends BaseService
$presupuestoLineaModel->duplicateLineasPresupuesto($presupuesto->id, $new_id); $presupuestoLineaModel->duplicateLineasPresupuesto($presupuesto->id, $new_id);
if (boolval($copy_files)== true) { if (boolval($copy_files) == true) {
$presupuestoFilesModel = model('App\Models\Presupuestos\PresupuestoFicheroModel'); $presupuestoFilesModel = model('App\Models\Presupuestos\PresupuestoFicheroModel');
$presupuestoFilesModel->copyFiles($presupuesto->id, $new_id); $presupuestoFilesModel->copyFiles($presupuesto->id, $new_id);
} }
@ -2200,7 +2197,7 @@ class PresupuestoService extends BaseService
return [ return [
'success' => true, 'success' => true,
'id' => $new_id, 'id' => $new_id,
'message' => lang('Presupuestos.presupuestoGenerado'), 'message' => lang('Presupuestos.presupuestoGenerado'),
]; ];
} catch (\Exception $e) { } catch (\Exception $e) {
@ -2210,4 +2207,96 @@ class PresupuestoService extends BaseService
]; ];
} }
} }
public static function check_lomo_interior($tipo_impresion_id, $lomo = 0)
{
$lomo_maximo = 0;
$lomo_minimo = 0;
if ($lomo == 0) {
return [
'status' => true,
'message' => 'Lomo interior 0'
];
}
switch ($tipo_impresion_id) {
case 1: // Fresado
case 2:
case 3: // Cosido
case 4:
$lomo_minimo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value);
$lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_fresado_cosido')->value);
if ($lomo != 0 && $lomo < $lomo_minimo) {
return [
'status' => false,
'message' => lang(
'Presupuestos.errores.error_lomo_minimo',
[
lang('Presupuestos.cosido') . "/" . lang('Presupuestos.fresado'),
$lomo_minimo,
$lomo,
]
)
];
} else if ($lomo != 0 && $lomo > $lomo_maximo) {
return [
'status' => false,
'message' => lang(
'Presupuestos.errores.error_lomo_maximo',
[
lang('Presupuestos.cosido') . "/" . lang('Presupuestos.fresado'),
$lomo_maximo,
$lomo,
]
)
];
}
break;
case 5: // Espiral
case 6:
$lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_espiral')->value);
if ($lomo != 0 && $lomo > $lomo_maximo) {
return [
'status' => false,
'message' => lang(
'Presupuestos.errores.error_lomo_maximo',
[
lang('Presupuestos.espiral'),
$lomo_maximo,
$lomo,
]
)
];
}
break;
case 7: // Wire-O
case 8:
$lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_wireo')->value);
$lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_espiral')->value);
if ($lomo != 0 && $lomo > $lomo_maximo) {
return [
'status' => false,
'message' => lang(
'Presupuestos.errores.error_lomo_maximo',
[
lang('Presupuestos.wireo'),
$lomo_maximo,
$lomo,
]
)
];
}
break;
default:
return [
'status' => true,
'message' => 'Lomo valido'
];
}
return [
'status' => true,
'message' => 'Lomo valido'
];
}
} }

View File

@ -14,6 +14,7 @@
<?= csrf_field() ?> <?= csrf_field() ?>
<?= view("themes/_commonPartialsBs/_alertBoxes") ?> <?= view("themes/_commonPartialsBs/_alertBoxes") ?>
<div id="sk-alert-lomo"></div>
<?= view("themes/vuexy/form/presupuestos/cliente/loader") ?> <?= view("themes/vuexy/form/presupuestos/cliente/loader") ?>
<?= !empty($validation->getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?> <?= !empty($validation->getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?>

View File

@ -354,7 +354,7 @@ class PresupuestoAdminEdit {
// Ejecutar los pasos de forma secuencial si están habilitados // Ejecutar los pasos de forma secuencial si están habilitados
if (update_lineas) { if (update_lineas) {
$(document).trigger('update-lineas-presupuesto'); $(document).trigger('update-lineas-presupuesto');
await waitForEvent('update-lineas-presupuesto-completed'); await waitForEvent('update-lineas-presupuesto-completed');
} }
if (update_servicios) { if (update_servicios) {
@ -698,30 +698,30 @@ class PresupuestoAdminEdit {
buttonsStyling: false buttonsStyling: false
}).then((result) => { }).then((result) => {
if (result.isDenied || result.isConfirmed) { if (result.isDenied || result.isConfirmed) {
new Ajax('/presupuestoadmin/reprint', new Ajax('/presupuestoadmin/reprint',
{ id: id, duplicateFiles: result.isConfirmed ? 1 : 0 }, {}, { id: id, duplicateFiles: result.isConfirmed ? 1 : 0 }, {},
function (response) { function (response) {
if (response.success === true) { if (response.success === true) {
Swal.fire({ Swal.fire({
text: response.message, text: response.message,
icon: 'success', icon: 'success',
confirmButtonColor: '#3085d6', confirmButtonColor: '#3085d6',
confirmButtonText: 'Ok', confirmButtonText: 'Ok',
customClass: { customClass: {
confirmButton: 'btn btn-primary me-1', confirmButton: 'btn btn-primary me-1',
}, },
buttonsStyling: false buttonsStyling: false
}) })
window.open('/presupuestoadmin/edit/' + response.id, '_blank'); window.open('/presupuestoadmin/edit/' + response.id, '_blank');
} else { } else {
popErrorAlert(response.mensaje); popErrorAlert(response.mensaje);
}
},
function (error) {
popErrorAlert(error);
} }
}, ).post();
function (error) { }
popErrorAlert(error);
}
).post();
}
}); });
} }

View File

@ -577,6 +577,8 @@ class DatosLibro {
update_tiradas_alternativas: true update_tiradas_alternativas: true
}); });
this.actualizarLimitesPaginas();
} }
} }
@ -775,7 +777,7 @@ class DatosLibro {
case 6: case 6:
case 7: // Wire-O case 7: // Wire-O
case 8: case 8:
min = 1; min = 20;
max = null; // Sin límite superior max = null; // Sin límite superior
break; break;
case 21: // Grapado case 21: // Grapado

View File

@ -485,7 +485,9 @@ class LineasPresupuesto {
if (lp.tipo == 'lp_guardas') if (lp.tipo == 'lp_guardas')
lp['paginas_impresion'] = lp.paginas_impresion; lp['paginas_impresion'] = lp.paginas_impresion;
}); })
this.checkLomo();
} }
async guardarLineasPresupuesto() { async guardarLineasPresupuesto() {
@ -1723,6 +1725,39 @@ class LineasPresupuesto {
this.table.columns.adjust(); this.table.columns.adjust();
this.checkLomo();
}
checkLomo() {
let lomo = 0.0;
for (let i = 0; i < this.table.rows().count(); i++) {
var rowData = this.table.row(i).data();
if (rowData.row_id !== 'lp_cubierta' && rowData.row_id !== 'lp_sobrecubierta' && rowData.row_id !== 'lp_guardas' && rowData.row_id !== 'lp_faja') {
if (rowData.lomo && rowData.lomo !== null && rowData.lomo !== '') {
lomo += parseFloat(rowData.lomo);
}
}
}
new Ajax('/presupuestoadmin/checklomointerior',
{ tipo_impresion_id: $("#tipo_impresion_id").val(), lomo: lomo}, {},
function (response) {
if (response.status !== true) {
popErrorAlert(response.message, 'sk-alert-lomo', false);
$(window).scrollTop(0);
}
else{
popAlert2Hide('sk-alert-lomo');
}
},
function (error) {
popErrorAlert(error.statusText? error.statusText : error);
}
).get();
} }