copiada la rama presu_cliente_v2 en esta para poder hacer el merge al main

This commit is contained in:
2024-11-07 19:20:12 +01:00
parent aeb5f9106f
commit a880355012
84 changed files with 2983 additions and 1785 deletions

View File

@ -15,37 +15,44 @@ class PresupuestoClienteService extends BaseService
{
$rotativa = [];
$plana = PresupuestoClienteService::obtenerPresupuestoClienteInterior($data);
$plana = [];
// no se busca en plana cuando es estándar (no Premium)
if ($data['isHq'])
$plana = PresupuestoClienteService::obtenerPresupuestoClienteInterior($data);
if (!$data['excluirRotativa'] && !$data['isHq'])
$rotativa = PresupuestoClienteService::obtenerPresupuestoClienteInteriorRotativa($data);
$total_plana = -1;
$hay_plana = false;
if($data['isColor']){
if ($data['datosPedido']->paginas == $data['paginas_color'])
$total_plana += floatval($plana[1]['total_impresion']);
elseif(count($plana[0]) > 2 && count($plana[1]) > 2) {
$total_plana = 0.0;
foreach ($plana as $linea) {
if (count($linea) > 0)
$total_plana += floatval($linea['total_impresion']);
if ($data['isColor']) {
if ($data['datosPedido']->paginas == $data['paginas_color']){
if(count($plana[1]) > 2)
$total_plana += floatval($plana[1]['total_impresion']);
else
return -1;
}
elseif (count($plana) > 0) {
if (count($plana[0]) > 2 && count($plana[1]) > 2) {
$total_plana = 0.0;
foreach ($plana as $linea) {
if (count($linea) > 0)
$total_plana += floatval($linea['total_impresion']);
}
}
}
}
else{
} else {
foreach ($plana as $linea) {
if (count($linea) > 0)
if($linea['tipo_linea'] == 'lp_bn' || $linea['tipo_linea'] == 'lp_bnhq'){
if ($linea['tipo_linea'] == 'lp_bn' || $linea['tipo_linea'] == 'lp_bnhq') {
$total_plana = 0.0;
$total_plana = floatval($linea['total_impresion']);
}
}
}
$total_rotativa = -1;
if (!$data['excluirRotativa'] && count($rotativa) > 0 && $rotativa['num_formas']['posicion_formas'] != 'n/a') {
if (!$data['excluirRotativa'] && count($rotativa) > 0 && $rotativa['num_formas']['posicion_formas'] != 'n/a') {
$total_rotativa = floatval($rotativa['total_impresion']);
}
if ($total_plana < 0 && $total_rotativa < 0)
@ -70,9 +77,10 @@ class PresupuestoClienteService extends BaseService
$isHq = $data['isHq'];
$cliente_id = $data['cliente_id'];
$paginas_color = $data['paginas_color'];
$lomoRedondo = $data['lomoRedondo'];
$lineas_cubierta = [];
for ($i = 0; $i < 2; $i++) {
$lineas = PresupuestoService::obtenerComparadorPlana([
@ -84,7 +92,8 @@ class PresupuestoClienteService extends BaseService
'isColor' => $isColor,
'isHq' => $isHq,
'cliente_id' => $cliente_id,
'a_favor_fibra' => $i
'a_favor_fibra' => $i,
'lomoRedondo' => $lomoRedondo
]);
if (count($lineas) > 0) {
@ -124,7 +133,7 @@ class PresupuestoClienteService extends BaseService
$paginas_color = $data['paginas_color'];
$lineas_sobrecubierta = [];
for ($i = 0; $i < 2; $i++) {
$lineas = PresupuestoService::obtenerComparadorPlana([
@ -175,7 +184,7 @@ class PresupuestoClienteService extends BaseService
$cliente_id = $data['cliente_id'];
$lineas_guardas = [];
for ($i = 0; $i < 2; $i++) {
$lineas = PresupuestoService::obtenerComparadorPlana([
@ -238,11 +247,21 @@ class PresupuestoClienteService extends BaseService
$uso = $data['uso'];
$tipo_impresion_id = $data['tipo_impresion_id'];
$datosPedido = $data['datosPedido'];
$papel_generico = $data['papel_generico'];
$gramaje = $data['gramaje'];
if ($data['papelInteriorDiferente'] == false)
$papel_generico = $data['papel_generico'];
else {
$papel_generico = $data['papel_generico']['negro'];
$papel_generico_color = $data['papel_generico']['color'];
}
if ($data['papelInteriorDiferente'] == false)
$gramaje = $data['gramaje'];
else {
$gramaje = $data['gramaje']['negro'];
$gramaje_color = $data['gramaje']['color'];
}
$isColor = $data['isColor'];
$isHq = $data['isHq'];
$cliente_id = $data['cliente_id'];
$cliente_id = $data['cliente_id'];
$paginas_color = $data['paginas_color'];
$paginas_negro = $datosPedido->paginas - $paginas_color;
@ -285,8 +304,6 @@ class PresupuestoClienteService extends BaseService
return $result;
}
);
$linea_negro_plana = $linea_negro_plana[0]['fields'];
$linea_negro_plana['tipo_linea'] = $isHq ? 'lp_bnhq' : 'lp_bn';
}
}
@ -296,6 +313,10 @@ class PresupuestoClienteService extends BaseService
$datosPedido->paginas = $paginas_color;
for ($i = 0; $i < 2; $i++) {
if ($data['papelInteriorDiferente'] == true) {
$papel_generico = $papel_generico_color;
$gramaje = $gramaje_color;
}
$lineas = PresupuestoService::obtenerComparadorPlana([
'uso' => $uso,
'tipo_impresion_id' => $tipo_impresion_id,
@ -325,14 +346,61 @@ class PresupuestoClienteService extends BaseService
return $result;
}
);
}
}
// Si hay negro y color, y se hace con el mismo papel, hay que buscar la combinación
// más económica con la misma máquna
if (
$paginas_negro > 0 && $paginas_color > 0 && $data['papelInteriorDiferente'] == 0 &&
count($linea_negro_plana) > 0 && count($linea_color_plana) > 0
) {
$mejor_combinacion = null;
$coste_menor = PHP_INT_MAX;
// Iteramos ambos arrays
foreach ($linea_color_plana as $color_item) {
foreach ($linea_negro_plana as $negro_item) {
// Comparar si tienen el mismo 'maquina_id'
if ($color_item['fields']['maquina_id'] == $negro_item['fields']['maquina_id']) {
// Sumar los 'total_impresion' de ambas líneas
$costo_total = $color_item['fields']['total_impresion'] + $negro_item['fields']['total_impresion'];
// Verificar si es la combinación más barata hasta ahora
if ($costo_total < $coste_menor) {
$coste_menor = $costo_total;
$mejor_combinacion = [
'maquina_id' => $color_item['fields']['maquina_id'],
'costo_total' => $costo_total,
'color_item' => $color_item,
'negro_item' => $negro_item,
];
}
}
}
// Retornar la mejor combinación encontrada
if ($mejor_combinacion !== null) {
return [$mejor_combinacion['negro_item']['fields'], $mejor_combinacion['color_item']['fields']];
} else {
return [];
}
}
} else {
if (count($linea_negro_plana) > 0) {
$linea_negro_plana = $linea_negro_plana[0]['fields'];
$linea_negro_plana['tipo_linea'] = $isHq ? 'lp_bnhq' : 'lp_bn';
}
if (count($linea_color_plana) > 0) {
$linea_color_plana = $linea_color_plana[0]['fields'];
$linea_color_plana['tipo_linea'] = $isHq ? 'lp_colorhq' : 'lp_color';
}
}
return [$linea_negro_plana, $linea_color_plana];
}
public static function getServiciosEncuadernacionDefault($data){
public static function getServiciosEncuadernacionDefault($data)
{
$tipo_impresion_id = $data['tipo_impresion_id'] ?? -1;
$tirada = $data['tirada'] ?? -1;
@ -348,42 +416,46 @@ class PresupuestoClienteService extends BaseService
return $values;
}
public static function getServiciosManipulado($data){
public static function getServiciosManipulado($data)
{
$tarifa_id = $data['tarifa_id'] ?? -1;
$tirada = $data['tirada'] ?? -1;
$POD = $data['POD'] ?? -1;
$model = model('App\Models\Presupuestos\PresupuestoManipuladosModel');
$values = $model->getPrecioTarifa($tarifa_id, $tirada, $POD);
return $values;
}
public static function getServiciosPreimpresion($data){
public static function getServiciosPreimpresion($data)
{
$tarifa_id = $data['tarifa_id'] ?? -1;
$model = model('App\Models\Presupuestos\PresupuestoPreimpresionesModel');
$values = $model->getPrecioTarifa($tarifa_id);
return $values;
}
public static function getServiciosExtra($data){
public static function getServiciosExtra($data)
{
$tarifa_id = $data['tarifa_id'] ?? -1;
$model = model('App\Models\Presupuestos\PresupuestoServiciosExtraModel');
$values = $model->getPrecioTarifa($tarifa_id);
return $values;
}
public static function getServiciosAcabados($data){
public static function getServiciosAcabados($data)
{
$tarifa_id = $data['tarifa_id'] ?? -1;
$tirada = $data['tirada'] ?? -1;
$POD = $data['POD'] ?? -1;
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$values = $model->getPrecioTarifa($tarifa_id, $tirada, -1, $POD); // proveedor más barato
return $values;