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

@ -540,6 +540,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
$item->ws_externo_json_data = character_limiter($item->ws_externo_json_data, 100);
endif;
endforeach;
} else {
$isColor = $reqData['color'] ?? false;
@ -564,7 +565,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
$cliente_id = $reqData['cliente_id'] ?? -1;
$resourceData = [];
if ($type == 'interior' || $type == 'guardas') {
@ -584,6 +585,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
}
if ($type == 'guardas') {
$datosPedido->paginas_impresion = intval($reqData['paginas_impresion']) ?? 0;
// Para el caso de Fresado y Cosido tapa dura, las guardas son un diptico
// y hay que imprimirlas como "cosido" (dos hojas pegadas). En el caso de espiral
@ -597,16 +599,21 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
$a_favor_fibra = $reqData['a_favor_fibra'] ?? false;
$resourceData = $this->getCompIntData($type, $datosPedido, $papel_generico, $gramaje, $isColor, $isHq, $cliente_id, $datosTipolog, $a_favor_fibra);
$input_data = array(
'uso' => $type,
'tipo_impresion_id' => $tipo_impresion_id,
'datosPedido' => $datosPedido,
'papel_generico' => $papel_generico,
'gramaje' => $gramaje,
'isColor' => $isColor,
'isHq' => $isHq,
'cliente_id' => $cliente_id,
'datosTipolog' => $datosTipolog,
'a_favor_fibra' => $a_favor_fibra
);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'lineas' => $resourceData,
$csrfTokenName => $newTokenHash
];
$resourceData = PresupuestoService::obtenerComparadorPlana($input_data);
return $this->respond($data);
} else if ($type == 'interior_rot') {
$paginas = (object)array(
@ -628,36 +635,45 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
array_push($datosTipolog, $data);
}
$resourceData = $this->getCompIntRotData($datosPedido, $papel_generico, $gramaje, $paginas, $cliente_id, $datosTipolog);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'lineas' => $resourceData,
$csrfTokenName => $newTokenHash
$input_data = [
'datosPedido' => $datosPedido,
'papel_generico' => $papel_generico,
'gramaje' => $gramaje,
'paginas' => $paginas,
'cliente_id' => $cliente_id,
'datosTipolog' => $datosTipolog
];
$resourceData = PresupuestoService::obtenerComparadorRotativa($input_data);
return $this->respond($data);
} else if ($type == 'cubierta' || $type == 'sobrecubierta') {
$datosPedido->solapas = $reqData['solapas'];
$datosPedido->solapas_ancho = $reqData['solapas_ancho'];
$datosPedido->lomo = $reqData['lomo'];
$datosPedido->anchoExteriores = PresupuestoService::getAnchoTotalExteriores($type, $tipo_impresion_id, $datosPedido);
$datosPedido->altoExteriores = PresupuestoService::getAltoTotalExteriores($type, $tipo_impresion_id, $datosPedido);
// Cubierta y sobrecubierta siempre color HQ
$resourceData = $this->getCompIntData($type, $datosPedido, $papel_generico, $gramaje, $isColor, 1, $cliente_id);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'lineas' => $resourceData,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
$input_data = array(
'uso' => $type,
'tipo_impresion_id' => $tipo_impresion_id,
'datosPedido' => $datosPedido,
'papel_generico' => $papel_generico,
'gramaje' => $gramaje,
'isColor' => 1, // Cubierta y sobrecubierta siempre color HQ
'isHq' => 1,
'cliente_id' => $cliente_id,
);
$resourceData = PresupuestoService::obtenerComparadorPlana($input_data);
}
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'lineas' => $resourceData,
$csrfTokenName => $newTokenHash
];
return $this->respond($data);
}
return $this->respond(Collection::datatable(
@ -785,216 +801,75 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
return $viewData;
}
private function getCompIntData($uso, $datosPedido, $papel_generico, $gramaje, $isColor, $isHq, $cliente_id, $datosTipolog = null, $a_favor_fibra = false)
{
$tipo = $isColor ? ($isHq ? 'colorhq' : 'color') : ($isHq ? 'negrohq' : 'negro');
$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;
}
/**
* Duplica un presupuesto dado por su ID.
*
* Esta función duplica un presupuesto y todas sus entidades relacionadas como acabados, encuadernaciones, manipulados,
* preimpresiones, direcciones y lineas. El presupuesto duplicado se marca como tal y a su título se le añade
* una cadena 'duplicado'. La función devuelve un array con un estado de éxito y el ID del nuevo presupuesto.
*
* @param int $id El ID del presupuesto a duplicar.
* @return array Un array asociativo que contiene una clave 'success' que indica el estado de éxito de la operación,
* y una clave 'id' que contiene el ID del nuevo presupuesto si la operación fue exitosa.
* Si ocurre una excepción, la clave 'success' será false y una clave 'message' contendrá el mensaje de la excepción.
* @throws \Exception Si ocurre un error durante la operación.
*/
private function duplicarPresupuesto($id){
try{
$presupuesto = $this->model->find($id);
$presupuesto->titulo = $presupuesto->titulo .' - ' . lang('Presupuestos.duplicado');
$presupuesto->is_duplicado = 1;
$new_id = $this->model->insert($presupuesto);
$presupuestoAcabadosModel = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
foreach ($presupuestoAcabadosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $acabado) {
$acabado->presupuesto_id = $new_id;
$presupuestoAcabadosModel->insert($acabado);
}
$presupuestoEncuadernacionesModel = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel');
foreach ($presupuestoEncuadernacionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $encuadernacion) {
$encuadernacion->presupuesto_id = $new_id;
$presupuestoEncuadernacionesModel->insert($encuadernacion);
}
$presupuestoManipuladosModel = model('App\Models\Presupuestos\PresupuestoManipuladosModel');
foreach ($presupuestoManipuladosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $manipulado) {
$manipulado->presupuesto_id = $new_id;
$presupuestoManipuladosModel->insert($manipulado);
}
$presupuestoPreimpresionesModel = model('App\Models\Presupuestos\PresupuestoPreimpresionesModel');
foreach ($presupuestoPreimpresionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $preimpresion) {
$preimpresion->presupuesto_id = $new_id;
$presupuestoPreimpresionesModel->insert($preimpresion);
}
$presupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel');
foreach ($presupuestoDireccionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $direccion) {
$direccion->presupuesto_id = $new_id;
$presupuestoDireccionesModel->insert($direccion);
}
$presupuestoLineaModel = model('App\Models\Presupuestos\PresupuestoLineaModel');
$presupuestoLineaModel->duplicateLineasPresupuesto($presupuesto->id, $new_id);
return [
'success' => true,
'id' => $new_id
];
}catch(\Exception $e){
return [
'success' => false,
'message' => $e->getMessage()
];
}
}
private function getCompIntRotData($datosPedido, $papel_generico, $gramaje, $paginas, $cliente_id, $datosTipolog = null)
{
$uso = 'interior';
$tipo = $paginas->color > 0 ? 'color' : 'negro';
$parametrosRotativa = (object)array(
'a_favor_fibra' => $datosPedido->a_favor_fibra,
'bnPages' => $paginas->negro,
'colorPages' => $paginas->color,
'rotativa_gota_negro' => 0,
'rotativa_gota_color' => 0,
);
$opciones_papel = array(
'rotativa' => 1,
);
$tipo = array();
if ($paginas->color > 0) {
$tipo = 'color';
$opciones_papel['color'] = 1;
}
else {
$opciones_papel['bn'] = 1;
$tipo = 'negro';
}
// 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) {
$papelImpresionTipologiaModel = new \App\Models\Configuracion\PapelImpresionTipologiaModel();
if (is_null($datosTipolog)) {
$datosTipologias = $papelImpresionTipologiaModel
->findTipologiasForPapelImpresion($papel->id, $parametrosRotativa->colorPages > 0 ? 'color' : 'negro')
->get()->getResultObject();
if (count($datosTipologias) == 0) {
continue;
}
} else {
$datosTipologias = $datosTipolog;
}
$parametrosRotativa->rotativa_gota_negro = $datosTipologias[0]->gota_negro;
$parametrosRotativa->rotativa_gota_color = $datosTipologias[0]->gota_color;
$parametrosRotativa->rotativa_negro = $datosTipologias[0]->negro;
$parametrosRotativa->rotativa_cyan = $datosTipologias[0]->cyan;
$parametrosRotativa->rotativa_magenta = $datosTipologias[0]->magenta;
$parametrosRotativa->rotativa_amarillo = $datosTipologias[0]->amarillo;
$maquinamodel = new MaquinaModel();
$maquinas = $maquinamodel->getMaquinaImpresionForPresupuesto(
is_rotativa: 1,
tarifa_tipo: $tipo,
uso_tarifa: $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['maquina'] = $maquina;
$data['papel_generico'] = $papel_generico;
$data['parametrosRotativa'] = $parametrosRotativa;
$data['paginas'] = $paginas;
$data['gramaje'] = $gramaje;
$linea = PresupuestoService::getLineaPresupuestoRotativa($data);
if(empty($linea))
continue;
array_push($lineas, $linea);
}
}
return $lineas;
}
try{
$presupuesto = $this->model->find($id);
$presupuesto->titulo = $presupuesto->titulo .' - ' . lang('Presupuestos.duplicado');
$presupuesto->is_duplicado = 1;
$new_id = $this->model->insert($presupuesto);
$presupuestoAcabadosModel = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
foreach ($presupuestoAcabadosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $acabado) {
$acabado->presupuesto_id = $new_id;
$presupuestoAcabadosModel->insert($acabado);
}
$presupuestoEncuadernacionesModel = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel');
foreach ($presupuestoEncuadernacionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $encuadernacion) {
$encuadernacion->presupuesto_id = $new_id;
$presupuestoEncuadernacionesModel->insert($encuadernacion);
}
$presupuestoManipuladosModel = model('App\Models\Presupuestos\PresupuestoManipuladosModel');
foreach ($presupuestoManipuladosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $manipulado) {
$manipulado->presupuesto_id = $new_id;
$presupuestoManipuladosModel->insert($manipulado);
}
$presupuestoPreimpresionesModel = model('App\Models\Presupuestos\PresupuestoPreimpresionesModel');
foreach ($presupuestoPreimpresionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $preimpresion) {
$preimpresion->presupuesto_id = $new_id;
$presupuestoPreimpresionesModel->insert($preimpresion);
}
$presupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel');
foreach ($presupuestoDireccionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $direccion) {
$direccion->presupuesto_id = $new_id;
$presupuestoDireccionesModel->insert($direccion);
}
$presupuestoLineaModel = model('App\Models\Presupuestos\PresupuestoLineaModel');
$presupuestoLineaModel->duplicateLineasPresupuesto($presupuesto->id, $new_id);
return [
'success' => true,
'id' => $new_id
];
}catch(\Exception $e){
return [
'success' => false,
'message' => $e->getMessage()
];
}
}
public function allItemsSelect()
{
@ -1163,8 +1038,6 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
}
protected function getPapelGenericoRotativaNegro()
{
$model = model('App\Models\Configuracion\PapelGenericoModel');
@ -1319,20 +1192,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
$lineas = (new PresupuestoLineaModel())->getLineasPresupuesto($presupuestoEntity->id);
$input_data = [];
$input_data['tipo_impresion_id'] = $presupuestoEntity->tipo_impresion_id;
$input_data['tirada'] = $presupuestoEntity->tirada;
$input_data['merma'] = $presupuestoEntity->merma;
$input_data['papel_formato_id'] = $presupuestoEntity->papel_formato_id;
$input_data['papel_formato_personalizado'] = $presupuestoEntity->papel_formato_personalizado;
$input_data['papel_formato_ancho'] = $presupuestoEntity->papel_formato_ancho;
$input_data['papel_formato_alto'] = $presupuestoEntity->papel_formato_alto;
$input_data['cliente_id'] = $presupuestoEntity->cliente_id;
$input_data['solapas'] = $presupuestoEntity->solapas;
$input_data['solapas_ancho'] = $presupuestoEntity->solapas_ancho;
$input_data['solapas_sobrecubierta'] = $presupuestoEntity->solapas_sobrecubierta;
$input_data['solapas_ancho_sobrecubierta'] = $presupuestoEntity->solapas_ancho_sobrecubierta;
$input_data['lomo_cubierta'] = $presupuestoEntity->lomo_cubierta;
$input_data['lomo_sobrecubierta'] = $presupuestoEntity->lomo_sobrecubierta;
$input_data['presupuesto'] = $presupuestoEntity;
return PresupuestoService::checkLineasPresupuesto($input_data, $lineas);
}

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

3860
xdebug.log

File diff suppressed because one or more lines are too long