haciendo el comparador del backend

This commit is contained in:
jaimejimenezortega
2024-03-26 21:26:42 +01:00
parent 848bf90a6e
commit a35dfff298
6 changed files with 74564 additions and 38 deletions

View File

@ -18,6 +18,7 @@ use App\Models\Presupuestos\PresupuestoAcabadosModel;
use App\Models\Presupuestos\PresupuestoManipuladosModel;
use App\Models\Presupuestos\PresupuestoEncuadernacionesModel;
use App\Models\Presupuestos\PresupuestoDireccionesModel;
use App\Models\Tarifas\TarifaEnvioModel;
@ -230,6 +231,9 @@ class PresupuestoService extends BaseService
// precio del pliego de impresion
$linea['fields'] = PresupuestoService::getCostesLineaRotativa($maquina, $papel, $datosPedido, $parametrosRotativa);
if(count($linea['fields']) == 0){
return [];
}
[$precio_pliego_impresion, $margen_pliego_impresion] = PresupuestoService::getPrecioPliego($maquina, $papel, $datosPedido->paginas);
@ -461,6 +465,10 @@ class PresupuestoService extends BaseService
$factor_altura = round($maquina->alto_impresion / ($data['alto'] + self::MARGEN_PAGINAS_ROTATIVA), 2);
$factor_altura_click = round($maquina->alto_click / ($data['alto'] + self::MARGEN_PAGINAS_ROTATIVA), 2);
if(floor($factor_anchura) == 0){
return [];
}
$multiplicador_pliego = $datosPedido->isCosido ? 4 : 2;
$paginas_por_pliego = round(floor($factor_anchura) * $factor_altura * $multiplicador_pliego, 2);
$pliegos_libro = round($paginas_por_pliego ? $datosPedido->paginas / $paginas_por_pliego : 0, 2);
@ -966,24 +974,39 @@ class PresupuestoService extends BaseService
public static function checkLineasPresupuesto($input_data, $array_lineas)
{
$cambios = false;
$lineas = [];
foreach ($array_lineas as $linea) {
if (!PresupuestoService::checkMaquina($linea->maquina_id) || !PresupuestoService::checkPapelImpresion($linea->papel_impresion_id)) {
// Generar linea con comparador
// Hay que ver si es rotativa o plana
if(str_contains($linea->tipo, '_rot_')){
}
else{
}
}
else{
$nueva_linea = PresupuestoService::obtenerValorLineaPresupuesto($input_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);
$linea_to_save = (new PresupuestoLineaModel())->find($linea->id);
$cambios = true;
array_push($lineas, $linea_to_save);
}
else{
array_push($lineas, $linea);
}
}
}
}
return [$cambios, $array_lineas];
return [$cambios, $lineas];
}
private static function obtenerValorLineaPresupuesto($input_data, $linea){
@ -1108,7 +1131,7 @@ class PresupuestoService extends BaseService
case 'lp_cubierta':
case 'lp_sobrecubierta':
$data['uso'] = ($linea->tipo == 'lp cubierta')? 'cubierta':'sobrecubierta';
$data['uso'] = ($linea->tipo == 'lp_cubierta')? 'cubierta':'sobrecubierta';
$data['tipo'] = 'colorhq';
$data['isColor'] = true;
$data['datosPedido']->solapas = ($linea->tipo == 'lp cubierta')? $solapas : $solapas_sobrecubierta;
@ -1321,6 +1344,7 @@ class PresupuestoService extends BaseService
if(count($envios)>0){
$model = new TarifaEnvioModel();
foreach ($envios as $envio) {
$paisId = $envio->pais_id;
$cp= $envio->cp;
@ -1329,7 +1353,6 @@ class PresupuestoService extends BaseService
$nueva_tarifa = $model->getTarifaEnvio($paisId, $cp, $peso, $tipo_envio);
//$nueva_tarifa = $model->getPrecioTarifa($envio->tarifa_envio_id, $input_data['tirada'], $input_data['POD']);
if($nueva_tarifa && count($nueva_tarifa)>0){
$coste = 0;
$margen = 0;
@ -1345,14 +1368,17 @@ class PresupuestoService extends BaseService
$margen += $coste*floatval($nueva_tarifa[0]->margen)/100.0;
if(round($coste, 2) != $envio->precio ||
$margen != $envio->margen){
$margen != $envio->margen || $nueva_tarifa[0]->id != $envio->tarifa_id){
$envio->precio = round($coste, 2);
$envio->margen = $margen;
$envio->tarifa_id = $nueva_tarifa[0]->id;
$cambio = true;
$presupuestoDirecciones = new PresupuestoDireccionesModel();
$presupuestoDirecciones->updateLineaEnvio($envio);
}
//$model->updateTarifas($input_data['presupuesto_id'], array($envio_temp));
}
}
@ -1362,6 +1388,102 @@ class PresupuestoService extends BaseService
}
private static function obtenerLineasRotativa($input_data){
$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;
}
// Funcion que comprueba si existe una maquina