Merge branch 'main' into feat/ot-new-features

This commit is contained in:
amazuecos
2025-05-01 06:15:26 +02:00
24 changed files with 1189 additions and 77 deletions

View File

@ -9,7 +9,7 @@ class EmailService
public function send(string $subject, string $body, $recipient): bool
{
$skEnv = env('sk_environment', 'production'); // fallback a producción si no está definido
$skEnv = env('SK_ENVIRONMENT', 'production'); // fallback a producción si no está definido
// Si no estamos en producción, forzar el destinatario a uno fijo
if ($skEnv !== 'production') {

View File

@ -58,7 +58,7 @@ class PresupuestoClienteService extends BaseService
if ($total_plana < 0 && $total_rotativa < 0)
return [];
else {
if ($total_plana > $total_rotativa)
if ($total_plana > $total_rotativa && $data['forzarRotativa'] == 0)
return $plana;
else
return [$rotativa];

View File

@ -1983,4 +1983,95 @@ class PresupuestoService extends BaseService
return $peso;
}
public static function ajustarPresupuesto($id, $precio_unidad = null, $unidades = null, $precio_total = null, $forzar_descuento = false){
$precio_total_asignado = 0;
$precio_unidad_asignado = $precio_unidad;
$warning = false;
$model = model('App\Models\Presupuestos\PresupuestoModel');
if($precio_unidad != null && $unidades != null){
$precio_total_asignado = round(floatval($precio_unidad) * intval($unidades), 2);
}
else{
$precio_total_asignado = floatval($precio_total);
}
$presupuesto = $model->find($id);
$costes = floatval($presupuesto->total_costes);
$envio_base = floatval($presupuesto->envio_base);
$total_descuento = 0;
$total_descuentoPercent = 0;
if($costes + $envio_base > $precio_total_asignado){
if($forzar_descuento){
$total_descuento = $costes + $envio_base - $precio_total_asignado;
$total_descuentoPercent = round($total_descuento / ($costes + $envio_base) * 100, 2);
}
else{
$precio_total_asignado = round($costes + $envio_base, 2);
$precio_unidad_asignado = round($precio_total_asignado / intval($unidades), 4);
}
$warning = true;
}
$total_margenes = $precio_total_asignado - $costes - $envio_base < 0 ?
0 :
$precio_total_asignado - $costes - $envio_base;
$sumForFactor = floatval($presupuesto->total_coste_papel) + floatval($presupuesto->total_coste_impresion);
$sumForFactorPonderado = $sumForFactor + floatval($presupuesto->total_coste_servicios);
$factor = ($precio_total_asignado - floatval($presupuesto->envio_base)
- floatval($presupuesto->total_coste_envios) - floatval($presupuesto->total_margen_envios)) / $sumForFactor;
$factorPonderado = ($precio_total_asignado - floatval($presupuesto->envio_base)
- floatval($presupuesto->total_coste_envios) - floatval($presupuesto->total_margen_envios)) / $sumForFactorPonderado;
if ($presupuesto) {
$presupuesto->total_margenes = $total_margenes;
$presupuesto->total_aceptado = $precio_total_asignado;
$presupuesto->total_aceptado_revisado = $precio_total_asignado;
$presupuesto->total_presupuesto = $precio_total_asignado;
$presupuesto->total_antes_descuento = $precio_total_asignado - $costes - $envio_base < 0 ?
$costes + $envio_base :
$precio_total_asignado;
$presupuesto->total_precio_unidad = $precio_unidad_asignado;
$presupuesto->total_descuento = $total_descuento;
$presupuesto->total_descuentoPercent = $total_descuentoPercent;
$presupuesto->total_factor = round($factor, 2);
$presupuesto->total_factor_ponderado = round($factorPonderado, 2);
$model->update($id, $presupuesto);
}
return [
"success" => true,
"warning" => $warning,
"new_total" => $precio_total_asignado,
"new_precio_unidad" => $precio_unidad_asignado,
];
}
public static function calcular_merma($tirada, $POD, $formas_lineas_interior = [])
{
$merma = 0;
if ($tirada > $POD) {
$merma = $tirada * 0.1;
} else {
$merma_lineas = [];
foreach ($formas_lineas_interior as $formas_linea) {
if ($formas_linea > $tirada)
array_push($merma_lineas, $formas_linea - $tirada);
else
array_push($merma_lineas, $tirada % $formas_linea);
}
if (count($merma_lineas) > 0)
$merma = max($merma_lineas);
}
return round($merma, 0);
}
}