acabando el tema de las direcciones

This commit is contained in:
2024-10-14 00:50:15 +02:00
parent 0eaac5af28
commit 7ad3133a15
7 changed files with 192 additions and 104 deletions

View File

@ -332,13 +332,15 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$excluirRotativa = $reqData['excluirRotativa'] ?? 0;
$ivaReducido = $reqData['ivaReducido'] ?? 0;
$direcciones = $reqData['direcciones'] ?? [];
$tipo_impresion_id = $this->getTipoImpresion($tipo, $cubierta['tipoCubierta']);
// Interior
$interior = [
'papel_generico' => $modelPapelGenerico->getIdFromCode($interior['papelInterior']),
'gramaje' => intval($interior['gramajeInterior']),
'excluirRotativa' => $excluirRotativa == "false" ? false: true,
'excluirRotativa' => $excluirRotativa == "false" ? false : true,
'paginas' => $paginas,
'paginas_color' => $paginas_color,
];
@ -361,8 +363,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'solapas' => intval($sobrecubierta['solapas'] ?? 0),
'acabados' => $sobrecubierta['plastificado'] ?? 0,
];
}
else
} else
$sobrecubierta = false;
// Guardas
@ -372,8 +373,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'gramaje' => intval($guardas['gramaje']),
'caras' => intval($guardas['guardasImpresas']),
];
}
else
} else
$datos_guardas = false;
$datos_presupuesto = array(
@ -389,10 +389,38 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'cubierta' => $cubierta,
'sobrecubierta' => $sobrecubierta,
'datos_guardas' => $datos_guardas,
'servicios' => $reqData['servicios'] ?? [],
);
$return_data = $this->calcular_presupuesto($datos_presupuesto, 0, false); //TRUE FOR DEBUG
if(count($direcciones) > 1){
for ($i=0; $i<count($tirada); $i++){
$coste_envio = 0.0;
foreach($direcciones as $direccion){
$coste_envio += $this->getCosteEnvio(
$direccion['id'],
$return_data['peso'][$i],
$direccion['unidades'],
$direccion['enPallets'] == 'true'?1:0)[0]->coste;
}
$return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio, 4);
}
}
else{
for ($i=0; $i<count($tirada); $i++){
$coste_envio = 0.0;
$coste_envio += $this->getCosteEnvio(null, $return_data['peso'][$i], $tirada[$i], false)[0]->coste;
$return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio, 4);
}
}
return $this->respond($return_data);
} catch (Exception $e) {
return $this->failServerError($e->getMessage());
@ -424,30 +452,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
}
public function getDatosDireccion()
{
if ($this->request->isAJAX()) {
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$reqData = $this->request->getPost();
$direccionId = $reqData['id'] ?? 0;
$peso = $reqData['peso'] ?? 0;
$unidades = $reqData['unidades'] ?? 0;
$entregaPieCalle = $reqData['entregaPieCalle'] ?? 0;
$data = $this->calcular_coste_envio($direccionId, $peso, $unidades, $entregaPieCalle);
return $this->respond([
'data' => $data,
$csrfTokenName => $newTokenHash
]);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
public function getNuevaDireccion()
{
@ -1026,11 +1031,21 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
protected function calcular_coste_envio($direccionId, $peso, $unidades, $entregaPieCalle)
protected function getCosteEnvio($direccionId = null, $peso, $unidades, $entregaPieCalle)
{
$model = model('App\Models\Clientes\ClienteDireccionesModel');
$data = $model->getDireccion($direccionId);
if($direccionId != null){
$model = model('App\Models\Clientes\ClienteDireccionesModel');
$data = $model->getDireccion($direccionId);
}
else{
$data = [];
array_push($data, (object)[
'pais_id' => 1, // españa
'cp' => 18000, // envio nacional
]);
}
$modelTarifaEnvio = model('App\Models\Tarifas\TarifaEnvioModel');
$coste = 0;
@ -1105,6 +1120,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$gramajeCubierta = $datos_entrada['cubierta']['gramajeCubierta'];
$carasCubierta = $datos_entrada['cubierta']['carasCubierta'];
$solapasCubierta = $datos_entrada['cubierta']['solapasCubierta'];
$acabadosCubierta = $datos_entrada['cubierta']['acabadosCubierta'] ?? [];
// Sobrecubierta
$sobreCubierta = $datos_entrada["sobrecubierta"] ?? null;
@ -1291,18 +1307,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
else
$error->cubierta = "";
$tarifaAcabadoCubierta = intval($datos_entrada['acabadoCubierta'] ?? 0);
// Acabados Cubierta
$tarifaAcabadoCubierta = $this->obtenerTarifasAcabado($acabadosCubierta);
$acabadoCubierta = [];
if ($tarifaAcabadoCubierta > 0) {
foreach ($tarifaAcabadoCubierta as $tarifa) {
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$acabadoCubierta = $model->getPrecioTarifa($tarifaAcabadoCubierta, $datosPedido->tirada, -1, $POD);
}
if (count($acabadoCubierta) > 0) {
if ($acabadoCubierta[0]->total <= 0)
$error->servicios = lang('Presupuestos.errores.errorPresupuesto');
$coste_servicios += floatval($acabadoCubierta[0]->total);
$acabadoCubierta = $model->getPrecioTarifa($tarifa, $datosPedido->tirada, -1, $POD);
if (count($acabadoCubierta) > 0) {
if ($acabadoCubierta[0]->total <= 0)
$error->servicios = lang('Presupuestos.errores.errorPresupuesto');
$coste_servicios += floatval($acabadoCubierta[0]->total);
}
}
// Sobrecubierta
$coste_sobrecubierta = 0.0;
$peso_sobrecubierta = 0.0;
@ -1316,7 +1336,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$input_data['datosPedido']->paginas = 4;
$input_data['paginas_color'] = 4;
$input_data['datosPedido']->solapas_ancho = intval($sobreCubierta['solapas'] ?? 0);
$input_data['datosPedido']->solapas = $input_data['datosPedido']->solapas_ancho > 0 ? 1 : 0;
$input_data['datosPedido']->solapas = $sobreCubierta['solapas'] > 0 ? 1 : 0;
$input_data['datosPedido']->lomo = $this->calcular_lomo([$cubierta], $input_data['datosPedido']->lomo);
$input_data['isColor'] = 1;
$input_data['isHq'] = 1;
@ -1346,17 +1366,18 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$lomo_sobrecubierta = $lomo + floatval($linea_sobrecubierta['mano']);
////////////////////////////////////JJJO
$tarifaAcabadoSobrecubierta = intval(strlen($sobreCubierta['acabados']) == 0 ? 0 : $sobreCubierta['acabados']);
$tarifaAcabadoSobrecubierta = $this->obtenerTarifasAcabado(['plastificado' => $sobreCubierta['acabados']]);
$acabadoSobrecubierta = [];
if ($tarifaAcabadoSobrecubierta > 0) {
foreach ($tarifaAcabadoSobrecubierta as $tarifa) {
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$acabadoSobrecubierta = $model->getPrecioTarifa($tarifaAcabadoSobrecubierta, $datosPedido->tirada, $POD);
}
if (count($acabadoSobrecubierta) > 0) {
if ($acabadoSobrecubierta[0]->total <= 0)
$error->servicios = lang('Presupuestos.errores.errorPresupuesto');
$coste_servicios += floatval($acabadoSobrecubierta[0]->total);
$acabadoSobrecubierta = $model->getPrecioTarifa($tarifa, $datosPedido->tirada, -1, $POD);
if (count($acabadoSobrecubierta) > 0) {
if ($acabadoSobrecubierta[0]->total <= 0)
$error->servicios = lang('Presupuestos.errores.errorPresupuesto');
$coste_servicios += floatval($acabadoSobrecubierta[0]->total);
}
}
}
@ -1460,16 +1481,16 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
/*
'retractilado' => 3,
'retractilado5' => 5,
'ferro' => 24,
'prototipo' => 9,
'fajaColor' => 16,
'plegadoGuardas' => 62,
*/
$serviciosAutomaticos = [];
$servicios = [];
if ($datos_entrada['cubierta']['acabadosCubierta']['retractilado'] === 'true')
array_push($servicios, 3);
if ($datos_entrada['servicios']['prototipo'])
array_push($servicios, 9);
foreach ($servicios as $servicio) {
if (intval($servicio) == 3 || intval($servicio) == 5 || intval($servicio) == 16) {
if (intval($servicio) == 3) {
// Servicios acabado
$resultado = PresupuestoCLienteService::getServiciosAcabados([
'tarifa_id' => $servicio,
@ -1485,22 +1506,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$totalServicios += floatval($resultado[0]->total);
$margenServicios += floatval($resultado[0]->total) * floatval($resultado[0]->margen) / 100.0;
}
} else if (intval($servicio) == 24) {
// Servicios preimpresion (Ferro)
$resultado = PresupuestoCLienteService::getServiciosPreimpresion([
'tarifa_id' => $servicio,
]);
array_push($serviciosAutomaticos, $resultado[0]);
if ($resultado[0]->precio <= 0)
$error->servicios = lang('Presupuestos.errores.errorPresupuesto');
$coste_servicios += floatval($resultado[0]->precio);
if ($extra_info) {
$totalServicios += floatval($resultado[0]->precio);
$margenServicios += floatval($resultado[0]->precio) * floatval($resultado[0]->margen) / 100.0;
}
}
if (intval($servicio) == 9) {
} else if (intval($servicio) == 9) {
// Servicios preimpresion
$resultado = PresupuestoCLienteService::getServiciosExtra([
'tarifa_id' => $servicio,
@ -1514,22 +1520,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$totalServicios += floatval($resultado[0]->precio);
$margenServicios += floatval($resultado[0]->precio) * floatval($resultado[0]->margen) / 100.0;
}
} else if (intval($servicio) == 62) {
// Servicios manipulado
$resultado = PresupuestoCLienteService::getServiciosManipulado([
'tarifa_id' => $servicio,
'tirada' => $tirada[$t],
'POD' => $POD,
]);
array_push($serviciosAutomaticos, $resultado[0]);
if ($resultado[0]->total <= 0)
$error->servicios = lang('Presupuestos.errores.errorPresupuesto');
$coste_servicios += floatval($resultado[0]->total);
if ($extra_info) {
$totalServicios += floatval($resultado[0]->total);
$margenServicios += floatval($resultado[0]->total) * floatval($resultado[0]->margen) / 100.0;
}
}
}
@ -2020,4 +2010,69 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
return 32; // valor por defecto
}
protected function obtenerTarifasAcabado($acabados)
{
$tarifas = [];
foreach ($acabados as $acabado => $value) {
if ($acabado == 'plastificado') {
if ($value !== 'NONE') {
switch ($value) {
case 'BRIL':
array_push($tarifas, 1);
break;
case 'MATE':
array_push($tarifas, 2);
break;
case 'ANTI':
array_push($tarifas, 28);
break;
case 'SAND':
array_push($tarifas, 94);
break;
default:
break;
}
}
} else if ($acabado == 'barniz') {
if ($value !== 'NONE') {
switch ($value) {
case 'R2D':
array_push($tarifas, 102);
break;
case 'R3D':
array_push($tarifas, 8);
break;
default:
break;
}
}
} else if ($acabado == 'estampado') {
if ($value !== 'NONE') {
switch ($value) {
case 'GOLD':
array_push($tarifas, 103);
break;
case 'SILV':
array_push($tarifas, 104);
break;
case 'COPP':
array_push($tarifas, 105);
break;
case 'BRON':
array_push($tarifas, 106);
break;
default:
break;
}
}
}
}
return $tarifas;
}
}