diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index 99f809a6..542ace49 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -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); } diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/comparador.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/comparador.js index fcf3c562..6bed090c 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/comparador.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/comparador.js @@ -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; diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/previewFormasAdmin.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/previewFormasAdmin.js index 35bb8d0b..58c11b8f 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/previewFormasAdmin.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/previewFormasAdmin.js @@ -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); }); diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js index 3999c4ce..855f9bd1 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js @@ -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));*/ }); } diff --git a/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js b/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js index f36042f2..816baa6e 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js @@ -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);