mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
trabajando en cuando no encuentra maquina o papel
This commit is contained in:
@ -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){
|
||||
|
||||
|
||||
Reference in New Issue
Block a user