trabajando en cuando no encuentra maquina o papel

This commit is contained in:
2024-03-27 13:52:29 +01:00
parent a35dfff298
commit 8fbf7cf9f1
3 changed files with 4173 additions and 267 deletions

View File

@ -22,6 +22,7 @@ use App\Models\Presupuestos\PresupuestoDireccionesModel;
use App\Models\Tarifas\TarifaEnvioModel;
class PresupuestoService extends BaseService
{
/**
@ -973,24 +974,91 @@ class PresupuestoService extends BaseService
public static function checkLineasPresupuesto($input_data, $array_lineas)
{
$data['tipo_impresion_id'] = ($input_data['presupuesto'])->tipo_impresion_id;
$data['tirada'] = ($input_data['presupuesto'])->tirada;
$data['merma'] = ($input_data['presupuesto'])->merma;
$data['papel_formato_id'] = ($input_data['presupuesto'])->papel_formato_id;
$data['papel_formato_personalizado'] = ($input_data['presupuesto'])->papel_formato_personalizado;
$data['papel_formato_ancho'] = ($input_data['presupuesto'])->papel_formato_ancho;
$data['papel_formato_alto'] = ($input_data['presupuesto'])->papel_formato_alto;
$data['cliente_id'] = ($input_data['presupuesto'])->cliente_id;
$data['solapas'] = ($input_data['presupuesto'])->solapas;
$data['solapas_ancho'] = ($input_data['presupuesto'])->solapas_ancho;
$data['solapas_sobrecubierta'] = ($input_data['presupuesto'])->solapas_sobrecubierta;
$data['solapas_ancho_sobrecubierta'] = ($input_data['presupuesto'])->solapas_ancho_sobrecubierta;
$data['lomo_cubierta'] = ($input_data['presupuesto'])->lomo_cubierta;
$data['lomo_sobrecubierta'] = ($input_data['presupuesto'])->lomo_sobrecubierta;
$cambios = false;
$lineas = [];
foreach ($array_lineas as $linea) {
if (!PresupuestoService::checkMaquina($linea->maquina_id) || !PresupuestoService::checkPapelImpresion($linea->papel_impresion_id)) {
if (PresupuestoService::checkMaquina($linea->maquina_id) || !PresupuestoService::checkPapelImpresion($linea->papel_impresion_id)) {
// Hay que ver si es rotativa o plana
if(str_contains($linea->tipo, '_rot_')){
if(($input_data['presupuesto'])->papel_formato_personalizado == 0){
$papel_formato = (new PapelFormatoModel())->find(($input_data['presupuesto'])->papel_formato_id);
$ancho = $papel_formato->ancho;
$alto = $papel_formato->alto;
}
else
{
$ancho = ($input_data['presupuesto'])->papel_formato_ancho;
$alto = ($input_data['presupuesto'])->papel_formato_alto;
}
$papel_generico = (new PapelGenericoModel)->find($linea->papel_id);
$papel_generico = [
'id' => $papel_generico->id,
'nombre' => $papel_generico->nombre,
];
$datos = [
'datosPedido' => (object)array(
'paginas' => ($input_data['presupuesto'])->paginas,
'tirada' => ($input_data['presupuesto'])->tirada,
'merma' => ($input_data['presupuesto'])->merma,
'ancho' => $ancho,
'alto' => $alto,
'a_favor_fibra' => $linea->rotativa_a_favor_fibra,
'isCosido' => (new TipoPresupuestoModel())->get_isCosido(($input_data['presupuesto'])->tipo_impresion_id),
),
'papel_generico' => $papel_generico,
'gramaje' => $linea->gramaje,
'paginas' => (object)array(
'negro' => ($input_data['presupuesto'])->paginas - $linea->rotativa_pag_color,
'color' => $linea->rotativa_pag_color,
),
'cliente_id' => ($input_data['presupuesto'])->cliente_id,
'datosTipolog' => [(object)array(
'negro' => $linea->rotativa_negro,
'cyan' => $linea->rotativa_cyan,
'magenta' => $linea->rotativa_magenta,
'amarillo' => $linea->rotativa_amarillo,
'cg' => $linea->rotativa_cg,
'gota_negro' => $linea->rotativa_gota_negro,
'gota_color' => $linea->rotativa_gota_color,
)]
];
$comp_data = PresupuestoService::obtenerComparadorRotativa($datos);
// se ordena $comp_data usando el campo ['fields]['total_impresion']
usort($comp_data, function($a, $b) {
return $a['fields']['total_impresion'] <=> $b['fields']['total_impresion'];
});
}
else{
}
}
else{
$nueva_linea = PresupuestoService::obtenerValorLineaPresupuesto($input_data, $linea);
$nueva_linea = PresupuestoService::obtenerValorLineaPresupuesto($data, $linea);
if(count($nueva_linea) >0){
if(round($nueva_linea['fields']['total_impresion'],2) != $linea->total_linea){
(new PresupuestoLineaModel())->updatePreciosLineasPresupuesto($linea->id, $nueva_linea);
@ -1009,6 +1077,8 @@ class PresupuestoService extends BaseService
return [$cambios, $lineas];
}
private static function obtenerValorLineaPresupuesto($input_data, $linea){
$tipo_impresion_id = $input_data['tipo_impresion_id'];
@ -1388,12 +1458,33 @@ class PresupuestoService extends BaseService
}
private static function obtenerLineasRotativa($input_data){
// Funcion que obtiene el coste para impresión en rotativa
// y devuelve un array con los datos de la lineas
// Parametros de entrada: $input_data es un array con los siguientes datos:
// - paginas: objeto con las paginas a imprimir en color y negro
// - datosPedido: un objeto que contiene los siguientes campos
// * paginas: numero total de páginas
// * tirada: numero de ejemplares a imprimir
// * merma: número de ejemplares extra a imprimir
// * ancho: ancho del libro
// * alto: alto del libro
// * a_favor_fibra: dirección de la impresión
// * isCosido: indica si el libro es cosido o no
// - papel_generico: objeto que contiene el id y el nombre del papel generico
// - gramaje: gramaje del papel seleccionado
// - cliente_id: id del cliente al que va destinado el presupuesto
// - datosTipolog: datos referentes a las tintas
public static function obtenerComparadorRotativa($input_data){
$uso = 'interior';
$paginas = $input_data['paginas'];
$datosPedido = $input_data['datosPedido'];
$gramaje = $input_data['gramaje'];
$papel_generico = $input_data['papel_generico'];
$cliente_id = $input_data['cliente_id'];
$datosTipolog = $input_data['datosTipolog'];
$tipo = $paginas->color > 0 ? 'color' : 'negro';
$uso = 'interior';
$parametrosRotativa = (object)array(
'a_favor_fibra' => $datosPedido->a_favor_fibra,
@ -1460,19 +1551,20 @@ class PresupuestoService extends BaseService
papel_impresion_id: $papel->id,
);
$data['uso'] = $uso;
$data['tipo'] = $tipo;
$data['datosPedido'] = $datosPedido;
$data['cliente_id'] = $cliente_id;
$data['papel'] = $papel;
$data['papel_generico'] = $papel_generico;
$data['parametrosRotativa'] = $parametrosRotativa;
$data['paginas'] = $paginas;
$data['gramaje'] = $gramaje;
// Se recorren las máquinas y se calcula el coste de linea por cada una
foreach ($maquinas as $maquina) {
$data['uso'] = $uso;
$data['tipo'] = $tipo;
$data['datosPedido'] = $datosPedido;
$data['cliente_id'] = $cliente_id;
$data['papel'] = $papel;
$data['maquina'] = $maquina;
$data['papel_generico'] = $papel_generico;
$data['parametrosRotativa'] = $parametrosRotativa;
$data['paginas'] = $paginas;
$data['gramaje'] = $gramaje;
$linea = PresupuestoService::getLineaPresupuestoRotativa($data);
@ -1486,6 +1578,100 @@ class PresupuestoService extends BaseService
}
// Funcion que obtiene el coste para impresión en plana
// y devuelve un array con los datos de la lineas
// Parametros de entrada: $input_data es un array con los siguientes datos:
// - uso: 'interior', 'guardas', 'cubierta' o 'sobrecubierta'
// - tipo_impresion_id: id del tipo de impresion
// - datosPedido: un objeto que contiene los siguientes campos
// * paginas: numero total de páginas
// * tirada: numero de ejemplares a imprimir
// * merma: número de ejemplares extra a imprimir
// * ancho: ancho del libro
// * alto: alto del libro
// * a_favor_fibra: dirección de la impresión
// * isCosido: indica si el libro es cosido o no
// * solapas: (solo cubierta y sobrecubierta) indica si hay o no solapas
// * solapas_ancho: (solo cubierta y sobrecubierta) indica el ancho de las solapas
// * lomo: (solo cubierta y sobrecubierta) ancho del lomo del libro (o libro mas cubierta)
// - papel_generico: objeto que contiene el id y el nombre del papel generico
// - gramaje: gramaje del papel seleccionado
// - cliente_id: id del cliente al que va destinado el presupuesto
// - datosTipolog: datos referentes a las tintas (opcional)
// - a_favor_fibra: dirección de la impresión
public static function obtenerComparadorPlana($input_data){
$uso = $input_data['uso'];
$tipo_impresion_id = $input_data['tipo_impresion_id'];
$datosPedido = $input_data['datosPedido'];
$papel_generico = $input_data['papel_generico'];
$gramaje = $input_data['gramaje'];
$isColor = $input_data['isColor'];
$isHq = $input_data['isHq'];
$cliente_id = $input_data['cliente_id'];
$datosTipolog = $input_data['datosTipolog'] ?? null;
$a_favor_fibra = $datosPedido->a_favor_fibra ?? false;
$tipo = $isColor ? ($isHq ? 'colorhq' : 'color') : ($isHq ? 'negrohq' : 'negro');
if ($uso == 'cubierta' || $uso == 'sobrecubierta') {
$datosPedido->anchoExteriores = PresupuestoService::getAnchoTotalExteriores($uso, $tipo_impresion_id, $datosPedido);
$datosPedido->altoExteriores = PresupuestoService::getAltoTotalExteriores($uso, $tipo_impresion_id, $datosPedido);
}
$opciones_papel = PresupuestoService::get_opciones_papel($uso, $isColor);
// Se obtienen los papeles disponibles
$papelimpresionmodel = new PapelImpresionModel();
$papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
papel_generico_id: $papel_generico['id'],
gramaje: $gramaje,
options: $opciones_papel
);
$lineas = array();
// Para cada papel, se obtienen las maquinas disponibles
foreach ($papeles as $papel) {
$maquinamodel = new MaquinaModel();
$maquinas = $maquinamodel->getMaquinaImpresionForPresupuesto(
is_rotativa: 0,
tarifa_tipo: $tipo,
uso_tarifa: ($uso == 'guardas') ? 'interior' : $uso,
tirada: $datosPedido->tirada + $datosPedido->merma,
papel_impresion_id: $papel->id,
);
// Se recorren las máquinas y se calcula el coste de linea por cada una
foreach ($maquinas as $maquina) {
$data['uso'] = $uso;
$data['tipo'] = $tipo;
$data['datosPedido'] = $datosPedido;
$data['cliente_id'] = $cliente_id;
$data['papel'] = $papel;
$data['opciones_papel'] = $opciones_papel;
$data['maquina'] = $maquina;
$data['papel_generico'] = $papel_generico;
$data['isColor'] = $isColor;
$data['a_favor_fibra'] = $a_favor_fibra;
$data['datosTipolog'] = $datosTipolog;
$data['gramaje'] = $gramaje;
$linea = PresupuestoService::getLineaPresupuestoPlana($data);
if(empty($linea))
continue;
array_push($lineas, $linea);
}
}
return $lineas;
}
// Funcion que comprueba si existe una maquina
private static function checkMaquina($maquina_id){