arreglado servicios de encuadernacion

This commit is contained in:
2025-05-06 12:28:03 +02:00
parent aac8ab24be
commit eeba76b124
4 changed files with 83 additions and 24 deletions

View File

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

View File

@ -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"
)