From eeba76b124014472f78835c8bc36e660deb33094 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Jim=C3=A9nez?= Date: Tue, 6 May 2025 12:28:03 +0200 Subject: [PATCH] arreglado servicios de encuadernacion --- .../PresupuestoEncuadernacionesModel.php | 93 +++++++++++++++---- .../Tarifas/TarifaEncuadernacionModel.php | 4 +- .../presupuestoAdmin/sections/resumen.js | 4 +- .../presupuestoAdmin/sections/servicios.js | 6 +- 4 files changed, 83 insertions(+), 24 deletions(-) diff --git a/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php b/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php index 44614da1..8f5d52cb 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php @@ -86,6 +86,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel 'tarifa_nombre' => $tarifa_proveedor->tarifa_enc_nombre, 'nombre' => $tarifa_proveedor->tarifa_enc_nombre, 'precio_unidad' => $result_data[0], + 'importe_fijo' => $tarifa_proveedor->importe_fijo, 'tiempo' => $tiempo, 'total' => $result_data[1], 'precio_total' => $result_data[1], @@ -124,6 +125,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel 'nombre' => $tarifa['tarifa_nombre'], 'proveedor' => lang('Presupuestos.no_disponible'), 'precio_unidad' => 0, + 'importe_fijo' => 0, 'tiempo' => null, 'total' => 0, 'precio_total' => 0, @@ -143,6 +145,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel 'tarifa_nombre' => $tarifa_proveedor->tarifa_enc_nombre, 'nombre' => $tarifa_proveedor->tarifa_enc_nombre, 'precio_unidad' => $result_data[0], + 'importe_fijo' => $tarifa_proveedor->importe_fijo, 'tiempo' => null, 'total' => $result_data[1], 'precio_total' => $result_data[1], @@ -170,6 +173,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel 'nombre' => $tarifa['tarifa_nombre'], 'proveedor' => lang('Presupuestos.no_disponible'), 'precio_unidad' => 0, + 'importe_fijo' => 0, 'tiempo' => null, 'total' => 0, 'precio_total' => 0, @@ -228,6 +232,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel array_push($ret_array, (object) [ 'tarifa_id' => $tarifa->tarifa_enc_id, 'tarifa_nombre' => $tarifa->tarifa_enc_nombre, + 'importe_fijo' => $tarifa->importe_fijo, 'nombre' => $tarifa->tarifa_enc_nombre, 'precio_unidad' => $result_data[0], 'tiempo' => null, @@ -254,6 +259,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel 'nombre' => $modelTarifa->getNombreTarifaEncuadernacion($tarifa_encuadernacion_id)[0]->nombre, 'proveedor' => lang('Presupuestos.no_disponible'), 'precio_unidad' => 0, + 'importe_fijo' => 0, 'tiempo' => null, 'total' => 0, 'precio_total' => 0, @@ -309,6 +315,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel 'precio_unidad' => $result_data[0], 'tiempo' => $tiempo, 'paginas_por_cuadernillo' => $paginas_cuadernillo, + 'importe_fijo' => $tarifa_proveedor->importe_fijo, 'precio_total' => $result_data[1], 'total' => $result_data[1], 'margen' => $result_data[2], @@ -334,6 +341,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel 'nombre' => $modelTarifa->getNombreTarifaEncuadernacion($tarifa_encuadernacion_id)[0]->nombre, 'proveedor' => lang('Presupuestos.no_disponible'), 'precio_unidad' => 0, + 'importe_fijo' => 0, 'tiempo' => null, 'paginas_por_cuadernillo' => null, 'total' => 0, @@ -351,16 +359,17 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel $precio_unidad = floatval($tarifa->precio_max) - (floatval($tarifa->precio_max) - floatval($tarifa->precio_min)) / ($tarifa->paginas_max - $tarifa->paginas_min) * ($paginas - $tarifa->paginas_min); if ($paginas > $tarifa->paginas_max) $precio_unidad = $tarifa->precio_max; - $precio_unidad = $precio_unidad * (1 + floatval($tarifa->margen) / 100.0); - - if (!$is_POD) { - $precio_unidad += floatval($tarifa->tarifa_importe_fijo) / floatval($ejemplares); - } + $precio_unidad = $precio_unidad * (1 + floatval($tarifa->margen)/100.0); $precio_unidad = round($precio_unidad, 2); $total = $precio_unidad * $ejemplares; $margen = floatval($tarifa->margen); + if (!$is_POD) { + $total += floatval($tarifa->tarifa_importe_fijo) ; + $precio_unidad = round(floatval($total / $ejemplares), 2); + } + $tarifa_precio_min = floatval($tarifa->tarifa_precio_min); if ($tarifa_precio_min > $total) { @@ -459,18 +468,66 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel */ public function getResource($presupuesto_id = -1) { - $builder = $this->db - ->table($this->table . " t1") - ->select( - "t1.id AS id, t1.tarifa_encuadernado_id AS tarifa_encuadernado_id, t1.precio_unidad AS precio_unidad, t1.tiempo AS tiempo, - t1.precio_total AS precio_total, t1.margen AS margen, t2.nombre AS nombre, t1.proveedor_id AS proveedor_id, t3.nombre AS proveedor, - t1.paginas_por_cuadernillo AS paginas_por_cuadernillo" - ); - - $builder->where('t1.presupuesto_id', $presupuesto_id); - $builder->join("tarifa_encuadernacion t2", "t1.tarifa_encuadernado_id = t2.id", "left"); - $builder->join("lg_proveedores t3", "t1.proveedor_id = t3.id", "left"); - + + $builder = $this->db->table('presupuesto_encuadernaciones t1') + ->select(" + t1.id AS id, + t1.tarifa_encuadernado_id AS tarifa_encuadernado_id, + t1.precio_unidad AS precio_unidad, + t1.tiempo AS tiempo, + t1.precio_total AS precio_total, + t1.margen AS margen, + t2.nombre AS nombre, + t1.proveedor_id AS proveedor_id, + t3.nombre AS proveedor, + t1.paginas_por_cuadernillo AS paginas_por_cuadernillo, + presupuestos.tirada AS tirada, + CASE + WHEN t2.por_horas = 0 THEN ( + SELECT t2_sub.importe_fijo + FROM tarifa_encuadernacion_tiradas t2_sub + JOIN tarifa_encuadernacion_lineas t3_sub ON t2_sub.id = t3_sub.tirada_encuadernacion_id + JOIN tarifa_encuadernacion_dimensiones t4_sub ON t3_sub.dimensiones_id = t4_sub.id + WHERE t2_sub.tarifa_encuadernacion_id = t1.tarifa_encuadernado_id + AND t2_sub.tirada_min <= presupuestos.tirada + AND t2_sub.tirada_max >= presupuestos.tirada + AND t3_sub.paginas_libro_min <= presupuestos.paginas + AND t3_sub.paginas_libro_max >= presupuestos.paginas + AND t4_sub.ancho_min <= + CASE WHEN presupuestos.papel_formato_personalizado = 1 THEN LEAST(presupuestos.papel_formato_ancho, presupuestos.papel_formato_alto) + ELSE LEAST(lg_papel_formato.ancho, lg_papel_formato.alto) END + AND t4_sub.ancho_max > + CASE WHEN presupuestos.papel_formato_personalizado = 1 THEN LEAST(presupuestos.papel_formato_ancho, presupuestos.papel_formato_alto) + ELSE LEAST(lg_papel_formato.ancho, lg_papel_formato.alto) END + AND t4_sub.alto_min <= + CASE WHEN presupuestos.papel_formato_personalizado = 1 THEN GREATEST(presupuestos.papel_formato_ancho, presupuestos.papel_formato_alto) + ELSE GREATEST(lg_papel_formato.ancho, lg_papel_formato.alto) END + AND t4_sub.alto_max >= + CASE WHEN presupuestos.papel_formato_personalizado = 1 THEN GREATEST(presupuestos.papel_formato_ancho, presupuestos.papel_formato_alto) + ELSE GREATEST(lg_papel_formato.ancho, lg_papel_formato.alto) END + AND t2_sub.proveedor_id = t1.proveedor_id + LIMIT 1 + ) + WHEN t2.por_horas = 1 THEN ( + SELECT t2_sub.importe_fijo + FROM tarifa_encuadernacion_tiradas t2_sub + JOIN tarifa_encuadernacion_lineas_horas t3_sub ON t2_sub.id = t3_sub.tirada_encuadernacion_id + WHERE t2_sub.tarifa_encuadernacion_id = t1.tarifa_encuadernado_id + AND t2_sub.tirada_min <= presupuestos.tirada + AND t2_sub.tirada_max > presupuestos.tirada + AND t3_sub.tiempo_min <= t1.tiempo + AND t3_sub.tiempo_max > t1.tiempo + AND t2_sub.proveedor_id = t1.proveedor_id + LIMIT 1 + ) + ELSE NULL + END AS importe_fijo + ") + ->join("tarifa_encuadernacion t2", "t1.tarifa_encuadernado_id = t2.id", "left") + ->join("lg_proveedores t3", "t1.proveedor_id = t3.id", "left") + ->join("presupuestos", "presupuestos.id = t1.presupuesto_id", "left") + ->join("lg_papel_formato", "lg_papel_formato.id = presupuestos.papel_formato_id", "left") + ->where("t1.presupuesto_id", $presupuesto_id); return $builder; } @@ -486,7 +543,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel return 0.01; else return $temp; - + } private function calcularTiempoCosido($maquina_id, $paginas, $tirada, $cuadernillos_por_pagina = 32) diff --git a/ci4/app/Models/Tarifas/TarifaEncuadernacionModel.php b/ci4/app/Models/Tarifas/TarifaEncuadernacionModel.php index 9cf03991..8680d628 100755 --- a/ci4/app/Models/Tarifas/TarifaEncuadernacionModel.php +++ b/ci4/app/Models/Tarifas/TarifaEncuadernacionModel.php @@ -127,7 +127,7 @@ class TarifaEncuadernacionModel extends \App\Models\BaseModel $builder = $this->db ->table($this->table . " t1") ->select( - "t1.id AS tarifa_enc_id, t1.nombre AS tarifa_enc_nombre, t3.total_min AS tarifa_precio_min, t2.importe_fijo AS tarifa_importe_fijo, + "t1.id AS tarifa_enc_id, t1.nombre AS tarifa_enc_nombre, t3.total_min AS tarifa_precio_min, t2.importe_fijo AS tarifa_importe_fijo, t2.importe_fijo AS importe_fijo, t2.id AS tarifa_tirada_id, t2.proveedor_id AS proveedor_id, t5.nombre AS proveedor_nombre, t2.tirada_min AS tirada_min, t2.tirada_max AS tirada_max, t3.id AS tarifa_linea_id, t3.paginas_libro_min AS paginas_min, t3.paginas_libro_max AS paginas_max, t3.precio_min AS precio_min, t3.precio_max AS precio_max, t3.margen AS margen, t4.ancho_min AS ancho_min, t4.ancho_max AS ancho_max, t4.alto_min AS alto_min, t4.alto_max AS alto_max" @@ -166,7 +166,7 @@ class TarifaEncuadernacionModel extends \App\Models\BaseModel $builder = $this->db ->table($this->table . " t1") ->select( - "t1.id AS tarifa_enc_id, t1.nombre AS tarifa_enc_nombre, t3.total_min AS tarifa_precio_min, t2.importe_fijo AS tarifa_importe_fijo, + "t1.id AS tarifa_enc_id, t1.nombre AS tarifa_enc_nombre, t3.total_min AS tarifa_precio_min, t2.importe_fijo AS tarifa_importe_fijo, t2.importe_fijo AS importe_fijo, t2.id AS tarifa_tirada_id, t2.proveedor_id AS proveedor_id, t5.nombre AS proveedor_nombre, t2.tirada_min AS tirada_min, t2.tirada_max AS tirada_max, t3.id AS tarifa_linea_id, t3.tiempo_min AS tiempo_min, t3.tiempo_max AS tiempo_max, t3.precio_hora AS precio_hora, t3.margen AS margen" ) diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js index 2bf7c8c5..cf35b450 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js @@ -212,9 +212,9 @@ class Resumen { let rowData = this.data(); let total_servicio = self.roundToTwoDecimals(parseFloat(rowData.precio_total)); let margen_servicio = parseFloat(rowData.margen); + let importe_fijo = parseFloat(rowData.importe_fijo); totalServicios += total_servicio - let base = self.roundToTwoDecimals(total_servicio / (1 + margen_servicio / 100.0)); - base = self.roundToTwoDecimals(base / total) * total; + 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/presupuestoAdmin/sections/servicios.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/servicios.js index e58b2d91..216a173b 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/servicios.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/servicios.js @@ -1026,7 +1026,8 @@ class ServiciosEncuadernacion { }, { data: 'precio_unidad', render: function (data, type, row) { - let precio_unidad_coste = (row.precio_unidad / (1 + row.margen / 100)).toFixed(2); + const precio_total_sin_fijo = (row.precio_unidad*parseInt($('#tirada').val()))-parseFloat(row.importe_fijo); + let precio_unidad_coste = ((precio_total_sin_fijo / parseInt($('#tirada').val())) / (1 + row.margen / 100)).toFixed(2); precio_unidad_coste = parseFloat(precio_unidad_coste).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); const precio_unidad = parseFloat(row.precio_unidad).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); return precio_unidad_coste + '/' + precio_unidad; @@ -1048,7 +1049,8 @@ class ServiciosEncuadernacion { `; } - } + }, + {data: 'importe_fijo', visible: false}, ], drawCallback: function (settings) {