primera version del calculo del lomo

This commit is contained in:
2024-12-26 18:29:32 +01:00
parent 93d3793ef9
commit a29df443bd
7 changed files with 155 additions and 13 deletions

View File

@ -597,6 +597,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']);

View File

@ -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');
@ -162,6 +164,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$this->viewData['clienteId'] = $clienteId;
$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()
{
@ -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,
@ -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;

View File

@ -179,7 +179,7 @@
<label for="paginas" class="form-label">
<?= lang('Presupuestos.totalPaginas') ?>
</label>
<input disabled class="form-control" id="paginas" name="paginas" step="1"
<input disabled class="form-control calcular-lomo" id="paginas" name="paginas" step="1"
value="32">
</div>
</div>

View File

@ -25,6 +25,9 @@
<input hidden id="lc" value=""></input>
<input hidden id="lsc" value=""></input>
<input readonly hidden id="pod" value="<?= $POD ?>"></input>
<input readonly hidden id="lomo_maximo" value="<?= $lomo_maximo ?>"></input>
<input readonly hidden id="lomo_minimo_fresado_cosido" value="<?= $lomo_minimo_fresado_cosido ?>"></input>
<input readonly hidden id="pod" value="<?= $POD ?>"></input>
<input readonly hidden id="c" value="<?= $clienteId ?>"></input>
<!-- Create Deal Wizard -->

View File

@ -799,6 +799,8 @@ class DatosGenerales {
this.divPosPaginasColor.removeClass('d-none');
}
$('.calcular-lomo').trigger('change');
this.checkPaginasMultiplo4();
}

View File

@ -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);
});

View File

@ -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,29 @@ 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);
}
console.log(response.errors);
},
() => { }
).post();
}
}
checkForm(event) {
this.#processResumenLateral();
@ -526,9 +550,6 @@ class PresupuestoCliente {
}
}
popAlert2Hide();
if (response.tiradas && response.tiradas.length) {
let tiradas = { ...response.tiradas };
@ -536,6 +557,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 +573,7 @@ class PresupuestoCliente {
}
}
this.lc.val(parseFloat(response.info.lomo_cubierta).toFixed(2));
this.lsc.val(parseFloat(response.info.lomo_sobrecubierta).toFixed(2));
setTimeout(() => {