corregidos varios problemas con los presupuestos (calculo envio base debido al peso de las guardas, resumen, etc)

This commit is contained in:
2025-06-16 20:19:39 +02:00
parent b2652fc277
commit 018119a3c3
5 changed files with 90 additions and 37 deletions

View File

@ -565,7 +565,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'servicios' => $reqData['servicios'] ?? [],
);
$return_data = $this->calcular_presupuesto($datos_presupuesto, 0, false); //TRUE FOR DEBUG
$develoment_mode = getenv('SK_ENVIRONMENT') !== 'production';
$return_data = $this->calcular_presupuesto($datos_presupuesto, 0, $develoment_mode); //TRUE FOR DEBUG
if (array_key_exists('errors', $return_data)) {
if ($return_data['errors']->status == 1) {
$return_data = [
@ -1200,12 +1201,14 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
// para el calculo del precio unidad, sólo se tiene en cuenta el envío base
for ($i = 0; $i < count($tirada); $i++) {
$coste_envio = 0.0;
$coste_envio += ($resultado_presupuesto['eb'][$i] / $tirada[$i]);
$resultado_presupuesto['info']['totales'][$i]['envio_base_margen'] =
floatval($resultado_presupuesto['eb'][$i]) * (floatval($resultado_presupuesto['eb_margen'][$i]) / 100.0);
$resultado_presupuesto['info']['totales'][$i]['envio_base_coste'] = $resultado_presupuesto['eb'][$i];
$coste_envio = round(round($resultado_presupuesto['info']['totales'][$i]['envio_base_margen'] +
$resultado_presupuesto['info']['totales'][$i]['envio_base_coste'], 2) / 50, 4);
$resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio, 4);
}
@ -2125,7 +2128,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
foreach ($interior as $linea) {
if (count($linea) > 0) {
$costeInterior += round(floatval($linea['total_impresion']), 2);
$peso_interior += floatval($linea['peso']);
$peso_interior += round(floatval($linea['peso']), 2);
$lomo += floatval($linea['mano']);
$info['lomo_interior'] += floatval($linea['mano']);
if ($extra_info) {
@ -2238,7 +2241,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$peso_cubierta = 0.0;
if (count($cubierta) > 0) {
$coste_cubierta += round(floatval($cubierta['total_impresion']), 2);
$peso_cubierta += floatval($cubierta['peso']);
$peso_cubierta += round(floatval($cubierta['peso']), 2);
$lomo += floatval($cubierta['mano']);
if ($extra_info) {
@ -2302,9 +2305,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
$coste_servicios += round(floatval($acabadoCubierta[0]->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($acabadoCubierta[0]->total), 2);
//$totalServicios += round(floatval($acabadoCubierta[0]->total), 2);
$base = round(floatval($acabadoCubierta[0]->total / (1 + $acabadoCubierta[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
$totalServicios += $base;
$margenServicios += round(floatval($acabadoCubierta[0]->total - $base), 2);
}
}
@ -2341,9 +2345,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
$coste_servicios += round(floatval($resultado[0]->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($resultado[0]->total), 2);
//$totalServicios += round(floatval($resultado[0]->total), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
$totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
@ -2374,7 +2379,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if (count($linea_sobrecubierta) > 0) {
$coste_sobrecubierta += round(floatval($linea_sobrecubierta['total_impresion']), 2);
$peso_sobrecubierta += floatval($linea_sobrecubierta['peso']);
$peso_sobrecubierta += round(floatval($linea_sobrecubierta['peso']), 2);
if ($extra_info) {
$this->calcular_coste_linea(
@ -2437,9 +2442,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
//$totalServicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
$base = round(floatval($acabadoSobrecubierta[0]->total / (1 + $acabadoSobrecubierta[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
$totalServicios += $base;
$margenServicios += round(floatval($acabadoSobrecubierta[0]->total - $base), 2);
}
}
@ -2479,7 +2485,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if (count($guardas) > 0) {
$coste_guardas += round(floatval($guardas['total_impresion']), 2);
$peso_guardas += floatval($guardas['peso']);
$peso_guardas += round(floatval($guardas['peso']), 2);
if ($extra_info) {
$this->calcular_coste_linea(
@ -2595,9 +2601,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($acabadoFaja[0]->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($acabadoFaja[0]->total), 2);
//$totalServicios += round(floatval($acabadoFaja[0]->total), 2);
$base = round(floatval($acabadoFaja[0]->total / (1 + $acabadoFaja[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
$totalServicios += $base;
$margenServicios += round(floatval($acabadoFaja[0]->total - $base), 2);
}
}
@ -2649,9 +2656,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$costeServiciosDefecto += round(floatval($servicio->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($servicio->total), 2);
//$totalServicios += round(floatval($servicio->total), 2);
$base = round(floatval($servicio->total / (1 + $servicio->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
$totalServicios += $base;
$margenServicios += round(floatval($servicio->total - $base), 2);
}
}
@ -2686,9 +2694,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$costeServiciosDefecto += round(floatval($servicio->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($servicio->total), 2);
//$totalServicios += round(floatval($servicio->total), 2);
$base = round(floatval($servicio->total / (1 + $servicio->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
$totalServicios += $base;
$margenServicios += round(floatval($servicio->total - $base), 2);
}
}
@ -2791,9 +2800,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($resultado[0]->total), 2);
//$totalServicios += round(floatval($resultado[0]->total), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
$totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
} else if ($servicio->nombre == "ferro" || $servicio->nombre == "prototipo") {
@ -2823,9 +2833,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->precio), 2);
if ($extra_info) {
$totalServicios += round(floatval($resultado[0]->precio), 2);
//$totalServicios += round(floatval($resultado[0]->precio), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
$totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
} else if ($servicio->nombre == 'solapas_cubierta' || $servicio->nombre == 'solapas_sobrecubierta' || $servicio->nombre == 'solapas_faja') {
@ -2857,9 +2868,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($resultado[0]->total), 2);
//$totalServicios += round(floatval($resultado[0]->total), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
$totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
}
@ -2898,9 +2910,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->precio), 2);
if ($extra_info) {
$totalServicios += round(floatval($resultado[0]->precio), 2);
//$totalServicios += round(floatval($resultado[0]->precio), 2);
$base = round(floatval($resultado[0]->precio / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
$totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->precio - $base), 2);
}
}
@ -2937,9 +2950,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($resultado[0]->total), 2);
//$totalServicios += round(floatval($resultado[0]->total), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
$totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
}
@ -2974,9 +2988,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($resultado[0]->total), 2);
//$totalServicios += round(floatval($resultado[0]->total), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
$totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
}
@ -3011,19 +3026,23 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->total), 2);
if ($extra_info) {
$totalServicios += round(floatval($resultado[0]->total), 2);
//$totalServicios += round(floatval($resultado[0]->total), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
$totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
}
$total_por_tirada = $costeInterior +
/*$total_por_tirada = $costeInterior +
$coste_cubierta +
$coste_sobrecubierta +
$coste_guardas +
$coste_faja +
$costeServiciosDefecto + $coste_servicios;
$costeServiciosDefecto + $coste_servicios;*/
$total_por_tirada = $totalPapel + $margenPapel +
$totalImpresion + $margenImpresion +
$totalServicios + $margenServicios;
array_push(
$precio_u,
round(($total_por_tirada) / $tirada[$t], 4)
@ -3031,7 +3050,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
array_push($peso, round($peso_interior + $peso_cubierta + $peso_sobrecubierta + $peso_guardas + $peso_faja, 2));
if ($extra_info) {
$totalServicios -= $margenServicios;
//$totalServicios -= $margenServicios;
if (($margenServicios + $totalServicios) > 0) {
$porcentajeMargenServicios = $margenServicios / ($totalServicios) * 100;
} else {
@ -3047,15 +3066,18 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'totalImpresion' => $totalImpresion,
'margenImpresion' => $margenImpresion,
'sumForFactor' => $sumForFactor,
'sumForFactorPonderado' => $sumForFactorPonderado,
'totalServicios' => $totalServicios,
'margenServicios' => $margenServicios,
'porcentajeMargenPapel' => $porcentajeMargenPapel,
'porcentajeMargenImpresion' => $porcentajeMargenImpresion,
'porcentajeMargenServicios' => $porcentajeMargenServicios
'porcentajeMargenPapel' => round($porcentajeMargenPapel, 0),
'porcentajeMargenImpresion' => round($porcentajeMargenImpresion, 0),
'porcentajeMargenServicios' => round($porcentajeMargenServicios, 0),
'sumForFactor' => $sumForFactor,
'sumForFactorPonderado' => $sumForFactorPonderado,
'total' => round($total_por_tirada, 2),
'precio_u' => round(($total_por_tirada) / $tirada[$t], 4),
));
}
@ -3112,12 +3134,14 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
return;
$totalPapel += round($linea['precio_pedido'], 2);
$totalPapel -= round($linea['margen_papel_pedido'], 2);
$totalPapel = round($totalPapel, 2);
$sumForFactor += round($linea['precio_pedido'], 2)
- round($linea['margen_papel_pedido'], 2);
$margenPapel += round($linea['margen_papel_pedido'], 2);
$totalImpresion += round($linea['precio_click_pedido'], 2);
$totalImpresion -= round($linea['margen_click_pedido'], 2);
$totalImpresion = round($totalImpresion, 2);
$sumForFactor += round($linea['precio_click_pedido'], 2)
- round($linea['margen_click_pedido'], 2);
@ -3132,6 +3156,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$margenImpresion += round($linea['precio_impresion_horas'], 2); // coste de maquina y magen son MARGEN, no COSTE
$margenImpresion += round($linea['margen_impresion_horas'], 2);
$margenImpresion += round($linea['margen_click_pedido'], 2);
$margenImpresion = round($margenImpresion, 2);
}

View File

@ -1213,7 +1213,7 @@ class Comparador {
}
const datosPedido = {
let datosPedido = {
paginas: paginas,
tirada: $('#tirada').val(),
merma: $('#merma').val(),
@ -1262,7 +1262,14 @@ class Comparador {
}
else if (uso == 'guardas') {
datos.datosPedido.isCosido = 1;
// Para el caso de Fresado y Cosido tapa dura, las guardas son un diptico
// y hay que imprimirlas como "cosido" (dos hojas pegadas). En el caso de espiral
// o wire-o tapa dura, las guardas se imprimen como hojas sueltas
if (this.tipo_impresion_id == 1 || this.tipo_impresion_id == 3) {
datos.datosPedido.isCosido = 1;
} else if (this.tipo_impresion_id == 5 || this.tipo_impresion_id == 7) {
datos.datosPedido.isCosido = 0;
}
datos.datosPedido.isHq = 1;
datos.paginas_color = datos.datosPedido.paginas;
datos.paginas_impresion = this.carasGuardas.val();
@ -1458,7 +1465,7 @@ class Comparador {
return;
}
if (this.tipo_impresion_id != 5 && this.tipo_impresion_id != 6 && this.tipo_impresion_id != 7 && this.tipo_impresion_id != 8 && this.tipo_impresion_id != 21) {
if (this.sobrecubierta.select2('data').length >0 && parseInt(this.sobrecubierta.select2('data')[0].id) == 1) {
if (this.sobrecubierta.select2('data').length > 0 && parseInt(this.sobrecubierta.select2('data')[0].id) == 1) {
datosComp.sobrecubierta = this.getDataForComp('sobrecubierta');
if (datosComp.sobrecubierta.error) {
return;

View File

@ -8,6 +8,9 @@ class PreviewFormasAdmin {
this.isCosido = $("#isCosido").val();
this.tipoTapa = tipoTapa;
this.tipo_impresion_id = parseInt($('#tipo_impresion_id').val());
// Container para el esquema de cubierta
this.preview = new preview($('#pv_ec_shape'), tipoLibro, tipoTapa, "fullImage", data);
}
@ -66,8 +69,18 @@ class PreviewFormasAdmin {
$('#tab-pv-guardas').on("click", function () {
let cosidoGuardas = false;
// Para el caso de Fresado y Cosido tapa dura, las guardas son un diptico
// y hay que imprimirlas como "cosido" (dos hojas pegadas). En el caso de espiral
// o wire-o tapa dura, las guardas se imprimen como hojas sueltas
if (self.tipo_impresion_id == 1 || self.tipo_impresion_id == 3) {
cosidoGuardas = true;
} /*else if (self.tipo_impresion_id == 5 || self.tipo_impresion_id == 7) {
cosidoGuardas = false;
}*/
self.preview.setData(self.data);
self.preview.previewInteriorPlana('guardas', self.isCosido, self.tipoTapa.includes("dura") ? 1 : 0);
self.preview.previewInteriorPlana('guardas', cosidoGuardas, self.tipoTapa.includes("dura") ? 1 : 0);
});

View File

@ -214,8 +214,14 @@ class Resumen {
let margen_servicio = parseFloat(rowData.margen);
let importe_fijo = parseFloat(rowData.importe_fijo);
totalServicios += total_servicio
let base = self.roundToTwoDecimals((total_servicio-importe_fijo) / (1 + margen_servicio / 100.0));
margenServicios += self.roundToTwoDecimals(parseFloat(total_servicio - base));
let calculoMargen = self.roundToTwoDecimals((total_servicio-importe_fijo) / parseInt($('#tirada').val()));
calculoMargen = self.roundToTwoDecimals(calculoMargen / (1 + margen_servicio / 100.0));
calculoMargen = total_servicio - self.roundToTwoDecimals(calculoMargen * parseInt($('#tirada').val()));
margenServicios += calculoMargen
/*let base = self.roundToTwoDecimals((total_servicio-importe_fijo) / (1 + margen_servicio / 100.0));
margenServicios += self.roundToTwoDecimals(parseFloat(total_servicio - base));*/
});
}

View File

@ -466,10 +466,10 @@ class PresupuestoCliente {
popErrorAlert("Presupuesto no válido, corrija los errores antes de guardar.");
}
else {
popSuccessAlert(response.message);
$('.is-invalid').removeClass('is-invalid');
const skAlert = document.getElementById('sk-alert');
skAlert.innerHTML = '';
popSuccessAlert(response.message);
}
}
@ -514,6 +514,8 @@ class PresupuestoCliente {
popAlert2Hide();
this.divTiradasPrecios.empty();
for (let i = 0; i < response.tiradas.length; i++) {
if (i == 0) {
$('#eb').val(response.eb[i]);
@ -555,7 +557,7 @@ class PresupuestoCliente {
$(window).scrollTop(0);
}
if (this.datos.cubierta.acabado)
if (this.datos.cubierta && this.datos.cubierta.acabado)
setTimeout(() => {
$(`#containerTiradasEnvios .tirada-envio input[tirada="${this.direcciones.tiradaSeleccionada}"]`).trigger('click');
}, 0);