acabado actualizar lineas presupuesto

This commit is contained in:
jaimejimenezortega
2024-03-23 11:56:02 +01:00
parent afce4b35e5
commit 6460b0e502
7 changed files with 282 additions and 25 deletions

View File

@ -11,8 +11,15 @@ use App\Models\Configuracion\PapelImpresionModel;
use App\Models\Configuracion\PapelGenericoModel;
use App\Models\Configuracion\TipoPresupuestoModel;
use App\Models\Configuracion\PapelFormatoModel;
use App\Models\Presupuestos\PresupuestoLineaModel;
use App\Models\Presupuestos\PresupuestoAcabadosModel;
use App\Models\Presupuestos\PresupuestoManipuladosModel;
use App\Models\Presupuestos\PresupuestoEncuadernacionesModel;
use App\Models\Tarifas\TarifaEncuadernacionModel;
class PresupuestoService extends BaseService
{
/**
@ -1119,6 +1126,192 @@ class PresupuestoService extends BaseService
return $output_data;
}
// Funcion que procesa los servicios y actualiza los precios en caso de cambio
public static function checkLineasServicios($input_data, $servicios){
$cambio_en_servicios = false;
$cambio = false;
if(count($servicios->serviciosAcabado)>0){
[$cambio, $servicios->serviciosAcabado] =
PresupuestoService::procesarServiciosAcabado($input_data, $servicios->serviciosAcabado);
$cambio_en_servicios = $cambio_en_servicios? $cambio_en_servicios: $cambio;
}
if(count($servicios->serviciosManipulado)>0){
[$cambio, $servicios->serviciosManipulado] =
PresupuestoService::procesarServiciosManipulado($input_data, $servicios->serviciosManipulado);
$cambio_en_servicios = $cambio_en_servicios? $cambio_en_servicios: $cambio;
}
if(count($servicios->serviciosEncuadernacion)>0){
[$cambio, $servicios->serviciosEncuadernacion] =
PresupuestoService::procesarServiciosEncuadernacion($input_data, $servicios->serviciosEncuadernacion);
$cambio_en_servicios = $cambio_en_servicios? $cambio_en_servicios: $cambio;
}
// Los servicios de preimpresion se dejan tal y como esten
return [$cambio_en_servicios, $servicios];
}
// Funcion que procesa los servicios de acabado del presupuesto
// y actualiza los precios en caso de cambio de valor en precio_unidad
private static function procesarServiciosAcabado($input_data, $servicios){
$serviciosUpdated = [];
$cambio = false;
$model = new PresupuestoAcabadosModel();
foreach ($servicios as $servicio) {
$count = 0;
$nueva_tarifa = $model->getPrecioTarifa($servicio->tarifa_acabado_id, $input_data['tirada'], $input_data['POD']);
if($nueva_tarifa && count($nueva_tarifa)>0){
if(round($nueva_tarifa[0]->precio_unidad, 2) != $servicio->precio_unidad ||
$nueva_tarifa[0]->margen != $servicio->margen){
$servicio->precio_unidad = round($nueva_tarifa[0]->precio_unidad, 2);
$servicio->precio_total = round($nueva_tarifa[0]->total, 2);
$servicio->margen = round($nueva_tarifa[0]->margen);
$cambio = true;
}
array_push($serviciosUpdated, $servicio);
$servicio_temp = $servicio;
$servicio_temp->tarifa_id = $servicio_temp->tarifa_acabado_id;
$model->updateTarifas($input_data['presupuesto_id'], array($servicio_temp));
}
}
return [$cambio, $serviciosUpdated];
}
// Funcion que procesa los servicios de manipulado del presupuesto
// y actualiza los precios en caso de cambio de valor en precio_unidad
private static function procesarServiciosManipulado($input_data, $servicios){
$serviciosUpdated = [];
$cambio = false;
$model = new PresupuestoManipuladosModel();
foreach ($servicios as $servicio) {
$count = 0;
$nueva_tarifa = $model->getPrecioTarifa($servicio->tarifa_manipulado_id, $input_data['tirada'], $input_data['POD']);
if($nueva_tarifa && count($nueva_tarifa)>0){
if(round($nueva_tarifa[0]->precio_unidad, 2) != $servicio->precio_unidad ||
$nueva_tarifa[0]->margen != $servicio->margen){
$servicio->precio_unidad = round($nueva_tarifa[0]->precio_unidad, 2);
$servicio->precio_total = round($nueva_tarifa[0]->total, 2);
$servicio->margen = round($nueva_tarifa[0]->margen);
$cambio = true;
}
array_push($serviciosUpdated, $servicio);
$servicio_temp = $servicio;
$servicio_temp->tarifa_id = $servicio_temp->tarifa_manipulado_id;
$model->updateTarifas($input_data['presupuesto_id'], array($servicio_temp));
}
}
return [$cambio, $serviciosUpdated];
}
// Funcion que procesa los servicios de encuadernacion del presupuesto
// y actualiza los precios en caso de cambio de valor en precio_unidad
private static function procesarServiciosEncuadernacion($input_data, $servicios){
$serviciosUpdated = [];
$cambio = false;
$model = new PresupuestoEncuadernacionesModel();
$tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel');
foreach ($servicios as $servicio) {
// Si es un presupuesto duplicado hay que buscar el proveedor más barato
if($input_data['is_duplicado']){
if($tarifaModel->isTarifaPorHoras($servicio->tarifa_encuadernado_id)){
$nueva_tarifa = $model->getPrecioTarifaHoras(
$servicio->tarifa_encuadernado_id,
$input_data['paginas'],
$input_data['tirada'],
-1,
$input_data['POD']);
}else{
$nueva_tarifa = $model->getPrecioTarifa(
$servicio->tarifa_encuadernado_id,
$input_data['paginas'],
$input_data['tirada'],
$input_data['ancho'],
$input_data['alto'],
-1,
$input_data['POD']);
}
}
// En caso de que el presupuesto no sea duplicado, recalcular la tarifa
// con el mismo proveedor
else{
if($tarifaModel->isTarifaPorHoras($servicio->tarifa_encuadernado_id)){
$nueva_tarifa = $model->getPrecioTarifaHoras(
$servicio->tarifa_encuadernado_id,
$input_data['paginas'],
$input_data['tirada'],
$servicio->proveedor_id,
$input_data['POD']);
}else{
$nueva_tarifa = $model->getPrecioTarifa(
$servicio->tarifa_encuadernado_id,
$input_data['paginas'],
$input_data['tirada'],
$input_data['ancho'],
$input_data['alto'],
$servicio->proveedor_id,
$input_data['POD']);
}
}
if($nueva_tarifa && count($nueva_tarifa)>0){
if(!isset($nueva_tarifa[0]->proveedor_id)){
$nueva_tarifa[0]->proveedor_id = null;
}
// Si el presupuesto no es duplicado, se comprueba que
// no ha cambiado el precio unidad
if(round($nueva_tarifa[0]->precio_unidad, 2) != $servicio->precio_unidad ||
$nueva_tarifa[0]->margen != $servicio->margen){
$servicio->precio_unidad = round($nueva_tarifa[0]->precio_unidad, 2);
$servicio->precio_total = round($nueva_tarifa[0]->total, 2);
$servicio->margen = round($nueva_tarifa[0]->margen);
$cambio = true;
}
else if($input_data['is_duplicado'] && $nueva_tarifa[0]->proveedor_id != $servicio->proveedor_id){
$servicio->precio_unidad = round($nueva_tarifa[0]->precio_unidad, 2);
$servicio->precio_total = round($nueva_tarifa[0]->total, 2);
$servicio->margen = round($nueva_tarifa[0]->margen);
$servicio->proveedor = $nueva_tarifa[0]->proveedor;
$servicio->proveedor_id = $nueva_tarifa[0]->proveedor_id;
$cambio = true;
}
array_push($serviciosUpdated, $servicio);
$servicio_temp = $servicio;
$servicio_temp->tarifa_id = $servicio_temp->tarifa_encuadernado_id;
$model->updateTarifas($input_data['presupuesto_id'], array($servicio_temp));
}
}
return [$cambio, $serviciosUpdated];
}
// Funcion que comprueba si existe una maquina
private static function checkMaquina($maquina_id){