mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
Merge branch 'main' into 'dev/core_updates_3'
# Conflicts: # ci4/app/Views/themes/vuexy/main/menu_impresion.php
This commit is contained in:
@ -100,5 +100,16 @@ class Js_loader extends BaseController
|
||||
return view('themes/vuexy/form/presupuestos/cliente/disenioLibro.js');
|
||||
}
|
||||
|
||||
function presupuestoClienteDirecciones_js()
|
||||
{
|
||||
$this->response->setHeader('Content-Type', 'text/javascript');
|
||||
return view('themes/vuexy/form/presupuestos/cliente/direcciones.js');
|
||||
}
|
||||
|
||||
function presupuestoClienteResumen_js()
|
||||
{
|
||||
$this->response->setHeader('Content-Type', 'text/javascript');
|
||||
return view('themes/vuexy/form/presupuestos/cliente/resumen.js');
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,7 +17,7 @@ use App\Models\Presupuestos\PresupuestoServiciosExtraModel;
|
||||
use App\Services\PresupuestoClienteService;
|
||||
use Exception;
|
||||
|
||||
class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
class Presupuestocliente extends \App\Controllers\BaseResourceController
|
||||
{
|
||||
protected $modelName = "PresupuestoModel";
|
||||
protected $format = 'json';
|
||||
@ -139,7 +139,6 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
// Se obtiene el cliente ID a partir del usuario de la sesion
|
||||
$clienteId = 999; // Fijo hasta desarollar clientes usuarios
|
||||
|
||||
|
||||
$presupuestoEntity = isset($sanitizedData) ? new PresupuestoEntity($sanitizedData) : new PresupuestoEntity();
|
||||
$presupuestoEntity->clienteId = $clienteId;
|
||||
|
||||
@ -164,6 +163,8 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
|
||||
$this->viewData['formAction'] = route_to('crearPresupuestoCliente');
|
||||
|
||||
$this->viewData['paisList'] = $this->getPaisListItems();
|
||||
|
||||
$this->viewData['presupuestoEntity'] = $presupuestoEntity;
|
||||
$this->viewData['datosPresupuesto'] = $datosPresupuesto;
|
||||
|
||||
@ -600,15 +601,458 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
|
||||
public function presupuesto()
|
||||
{
|
||||
|
||||
|
||||
if ($this->request->isAJAX()) {
|
||||
$reqData = $this->request->getPost();
|
||||
|
||||
$resultado_lineas = $this->getLineasPresupuesto($reqData);
|
||||
$newTokenHash = csrf_hash();
|
||||
$csrfTokenName = csrf_token();
|
||||
|
||||
$error = (object)[
|
||||
'interior' => "",
|
||||
'cubierta' => "",
|
||||
'sobrecubierta' => "",
|
||||
'guardas' => "",
|
||||
'servicios' => "",
|
||||
'serviciosDefecto' => "",
|
||||
];
|
||||
$coste_servicios = 0.0;
|
||||
|
||||
$POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
|
||||
|
||||
|
||||
return $this->respond($resultado_lineas);
|
||||
$tirada = $reqData['tirada'] ?? 0;
|
||||
$tamanio = $reqData['tamanio'];
|
||||
$tipo_impresion_id = $this->getTipoImpresion($reqData['tipo'], $reqData['tapa']);
|
||||
$precio_u = [];
|
||||
$peso = [];
|
||||
|
||||
for ($t = 0; $t < count($tirada); $t++) {
|
||||
$tirada[$t] = intval($tirada[$t]);
|
||||
|
||||
$paginas_color = intval($reqData['paginasColor']) ?? 0;
|
||||
$is_cosido = (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id);
|
||||
|
||||
$datosPedido = (object)array(
|
||||
'paginas' => intval($reqData['paginas']) ?? 0,
|
||||
'tirada' => $tirada[$t],
|
||||
'merma' => $tirada[$t] > $POD ? $this->calcular_merma($tirada[$t], $POD) : 0,
|
||||
'ancho' => intval($tamanio['ancho']) ?? 100000,
|
||||
'alto' => intval($tamanio['alto']) ?? 100000,
|
||||
'isCosido' => $is_cosido,
|
||||
);
|
||||
|
||||
$papel_generico = [
|
||||
'id' => $reqData['papelInterior'] ?? 0,
|
||||
'nombre' => $reqData['papelInteriorNombre'] ?? "",
|
||||
];
|
||||
$gramaje = $reqData['gramajeInterior'] ?? 0;
|
||||
$cliente_id = $reqData['clienteId'] ?? -1;
|
||||
$excluirRotativa = $reqData['excluirRotativa'] ?? 0;
|
||||
|
||||
$input_data = array(
|
||||
'uso' => 'interior',
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'isColor' => intval($reqData['isColor']) ?? 0,
|
||||
'isHq' => intval($reqData['isHq']) ?? 0,
|
||||
'cliente_id' => $cliente_id,
|
||||
'paginas_color' => $paginas_color,
|
||||
'excluirRotativa' => $excluirRotativa,
|
||||
);
|
||||
|
||||
$interior = PresupuestoClienteService::obtenerInterior($input_data);
|
||||
|
||||
$costeInterior = 0.0;
|
||||
$peso_interior = 0.0;
|
||||
foreach ($interior as $linea) {
|
||||
if (count($linea) > 0) {
|
||||
$costeInterior += floatval($linea['total_impresion']);
|
||||
$peso_interior += floatval($linea['peso']);
|
||||
}
|
||||
}
|
||||
|
||||
if ($costeInterior <= 0) {
|
||||
$error->interior = lang('Presupuestos.errores.noInterior');
|
||||
}
|
||||
|
||||
// Si es POD hay que volver a calcular para incluir la merma correcta
|
||||
if ($tirada[$t] <= $POD) {
|
||||
$num_formas = [];
|
||||
foreach ($interior as $linea) {
|
||||
if (count($linea) > 0) {
|
||||
$formas_linea = $is_cosido ? intval($linea['num_formas']['value']) / 2 : intval($linea['num_formas']['value']);
|
||||
array_push($num_formas, $formas_linea);
|
||||
}
|
||||
}
|
||||
$input_data['datosPedido']->merma = $this->calcular_merma($tirada[$t], $POD, $num_formas);
|
||||
|
||||
$interior = PresupuestoClienteService::obtenerInterior($input_data);
|
||||
}
|
||||
|
||||
$costeInterior = 0.0;
|
||||
$peso_interior = 0.0;
|
||||
foreach ($interior as $linea) {
|
||||
if (count($linea) > 0) {
|
||||
$costeInterior += floatval($linea['total_impresion']);
|
||||
$peso_interior += floatval($linea['peso']);
|
||||
}
|
||||
}
|
||||
|
||||
if ($costeInterior <= 0)
|
||||
$error->interior = lang('Presupuestos.errores.noInterior');
|
||||
else
|
||||
$error->interior = "";
|
||||
|
||||
|
||||
// Cubierta
|
||||
$papel_generico = [
|
||||
'id' => $reqData['papelCubierta'] ?? 0,
|
||||
'nombre' => $reqData['papelCubiertaNombre'] ?? "",
|
||||
];
|
||||
$input_data['papel_generico'] = $papel_generico;
|
||||
$input_data['gramaje'] = $reqData['gramajeCubierta'] ?? 0;
|
||||
$input_data['datosPedido']->paginas = intval($reqData['carasCubierta'] ?? 0);
|
||||
$input_data['paginas_color'] = intval($reqData['carasCubierta'] ?? 0);
|
||||
$input_data['datosPedido']->solapas_ancho = intval($reqData['solapasCubierta'] ?? 0);
|
||||
$input_data['datosPedido']->solapas = $input_data['datosPedido']->solapas_ancho > 0 ? 1 : 0;
|
||||
$input_data['datosPedido']->lomo = $this->calcular_lomo($interior, 0);
|
||||
$input_data['isColor'] = 1;
|
||||
$input_data['isHq'] = 1;
|
||||
$input_data['uso'] = 'cubierta';
|
||||
|
||||
$cubierta = PresupuestoClienteService::obtenerCubierta($input_data);
|
||||
$coste_cubierta = 0.0;
|
||||
$peso_cubierta = 0.0;
|
||||
if (count($cubierta) > 0) {
|
||||
$coste_cubierta += floatval($cubierta['total_impresion']);
|
||||
$peso_cubierta += floatval($cubierta['peso']);
|
||||
}
|
||||
if ($coste_cubierta <= 0)
|
||||
$error->cubierta = lang('Presupuestos.errores.noCubiertaSobrecubierta');
|
||||
else
|
||||
$error->cubierta = "";
|
||||
|
||||
$tarifaAcabadoCubierta = intval($reqData['acabadoCubierta'] ?? 0);
|
||||
$acabadoCubierta = [];
|
||||
if ($tarifaAcabadoCubierta > 0) {
|
||||
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
|
||||
$acabadoCubierta = $model->getPrecioTarifa($tarifaAcabadoCubierta, $datosPedido->tirada, $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;
|
||||
$linea_sobrecubierta = [];
|
||||
$acabadoSobrecubierta = [];
|
||||
$sobreCubierta = $reqData["sobrecubierta"] ?? null;
|
||||
if (!is_null($sobreCubierta)) {
|
||||
|
||||
$papel_generico = [
|
||||
'id' => $sobreCubierta['papel'] ?? 0,
|
||||
'nombre' => $sobreCubierta['papel_nombre'] ?? "",
|
||||
];
|
||||
$input_data['papel_generico'] = $papel_generico;
|
||||
$input_data['gramaje'] = $sobreCubierta['gramaje'] ?? 0;
|
||||
$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']->lomo = $this->calcular_lomo([$cubierta], $input_data['datosPedido']->lomo);
|
||||
$input_data['isColor'] = 1;
|
||||
$input_data['isHq'] = 1;
|
||||
$input_data['uso'] = 'sobrecubierta';
|
||||
|
||||
$linea_sobrecubierta = PresupuestoClienteService::obtenerSobrecubierta($input_data);
|
||||
|
||||
if (count($linea_sobrecubierta) > 0) {
|
||||
$coste_sobrecubierta += floatval($linea_sobrecubierta['total_impresion']);
|
||||
$peso_sobrecubierta += floatval($linea_sobrecubierta['peso']);
|
||||
}
|
||||
if ($coste_sobrecubierta <= 0)
|
||||
$error->sobrecubierta = lang('Presupuestos.errores.noCubiertaSobrecubierta');
|
||||
else
|
||||
$error->sobrecubierta = "";
|
||||
|
||||
$tarifaAcabadoSobrecubierta = intval(strlen($sobreCubierta['acabado']) == 0 ? 0 : $sobreCubierta['acabado']);
|
||||
$acabadoSobrecubierta = [];
|
||||
if ($tarifaAcabadoSobrecubierta > 0) {
|
||||
$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);
|
||||
}
|
||||
}
|
||||
|
||||
//Guardas
|
||||
$guardas = [];
|
||||
$peso_guardas = 0.0;
|
||||
$coste_guardas = 0.0;
|
||||
if ($reqData['guardas'] ?? 0 > 0) {
|
||||
|
||||
$guardas = $reqData['guardas'];
|
||||
$papel_generico = [
|
||||
'id' => $guardas['papel'] ?? 0,
|
||||
'nombre' => $guardas['nombre'] ?? "",
|
||||
];
|
||||
$input_data['papel_generico'] = $papel_generico;
|
||||
$input_data['gramaje'] = $guardas['gramaje'] ?? 0;
|
||||
$input_data['datosPedido']->paginas = 8;
|
||||
$input_data['paginas_color'] = 8;
|
||||
$input_data['datosPedido']->paginas_impresion = $guardas['caras'] ?? 0;
|
||||
$input_data['datosPedido']->solapas_ancho = 0;
|
||||
$input_data['datosPedido']->solapas = 0;
|
||||
$input_data['isColor'] = 1;
|
||||
$input_data['isHq'] = 1;
|
||||
$input_data['uso'] = 'guardas';
|
||||
|
||||
// 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
|
||||
// o wire-o tapa dura, las guardas se imprimen como hojas sueltas
|
||||
if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) {
|
||||
$input_data['datosPedido']->isCosido = true;
|
||||
} else if ($tipo_impresion_id == 5 || $tipo_impresion_id == 7) {
|
||||
$input_data['datosPedido']->isCosido = false;
|
||||
}
|
||||
|
||||
$guardas = PresupuestoClienteService::obtenerGuardas($input_data);
|
||||
|
||||
if (count($guardas) > 0) {
|
||||
$coste_guardas += floatval($guardas['total_impresion']);
|
||||
$peso_guardas += floatval($guardas['peso']);
|
||||
}
|
||||
if ($coste_guardas <= 0)
|
||||
$error->guardas = lang('Presupuestos.errores.noGuardas');
|
||||
else
|
||||
$error->guardas = "";
|
||||
}
|
||||
|
||||
// Servicios defecto
|
||||
$servDefecto = PresupuestoCLienteService::getServiciosEncuadernacionDefault([
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'tirada' => $datosPedido->tirada,
|
||||
'paginas' => intval($reqData['paginas']) ?? 0,
|
||||
'ancho' => $datosPedido->ancho,
|
||||
'alto' => $datosPedido->alto,
|
||||
'POD' => $POD,
|
||||
'solapas' => intval($reqData['solapasCubierta'] ?? 0) > 0 ? 1 : 0,
|
||||
]);
|
||||
$costeServiciosDefecto = 0.0;
|
||||
foreach ($servDefecto as $servicio) {
|
||||
if ($servicio->total <= 0)
|
||||
$error->serviciosDefecto = lang('Presupuestos.errores.errorPresupuesto');
|
||||
|
||||
$costeServiciosDefecto += floatval($servicio->total);
|
||||
}
|
||||
|
||||
// Servicios
|
||||
$servicios = $reqData['servicios'] ?? [];
|
||||
if ($reqData['guardas'] ?? 0 > 0) {
|
||||
array_push($servicios, 62); // Plegado de guardas
|
||||
}
|
||||
/*
|
||||
'retractilado' => 3,
|
||||
'retractilado5' => 5,
|
||||
'ferro' => 24,
|
||||
'prototipo' => 9,
|
||||
'fajaColor' => 16,
|
||||
'plegadoGuardas' => 62,
|
||||
*/
|
||||
$serviciosAutomaticos = [];
|
||||
|
||||
foreach ($servicios as $servicio) {
|
||||
if (intval($servicio) == 3 || intval($servicio) == 5 || intval($servicio) == 16) {
|
||||
// Servicios acabado
|
||||
$resultado = PresupuestoCLienteService::getServiciosManipulado([
|
||||
'tarifa_id' => $servicio,
|
||||
'tirada' => $datosPedido->tirada,
|
||||
'POD' => $POD,
|
||||
]);
|
||||
array_push($serviciosAutomaticos, $resultado[0]);
|
||||
if ($resultado[0]->total <= 0)
|
||||
$error->servicios = lang('Presupuestos.errores.errorPresupuesto');
|
||||
|
||||
$coste_servicios += floatval($resultado[0]->total);
|
||||
} else if (intval($servicio) == 24 || intval($servicio) == 9) {
|
||||
// Servicios preimpresion
|
||||
$resultado = PresupuestoCLienteService::getServiciosExtra([
|
||||
'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);
|
||||
} else if (intval($servicio) == 62) {
|
||||
// Servicios manipulado
|
||||
$resultado = PresupuestoCLienteService::getServiciosManipulado([
|
||||
'tarifa_id' => $servicio,
|
||||
'tirada' => $datosPedido->tirada,
|
||||
'POD' => $POD,
|
||||
]);
|
||||
array_push($serviciosAutomaticos, $resultado[0]);
|
||||
if ($resultado[0]->total <= 0)
|
||||
$error->servicios = lang('Presupuestos.errores.errorPresupuesto');
|
||||
|
||||
$coste_servicios += floatval($resultado[0]->total);
|
||||
}
|
||||
}
|
||||
|
||||
array_push($precio_u, round(($costeInterior + $coste_cubierta + $coste_sobrecubierta + $costeServiciosDefecto + $coste_servicios) / $tirada[$t], 4));
|
||||
array_push($peso, round($peso_interior + $peso_cubierta + $peso_sobrecubierta + $peso_guardas, 2));
|
||||
foreach ($error as $err) {
|
||||
if ($err != "")
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$return_data = [
|
||||
'errors' => $error,
|
||||
'total_lp' => $costeInterior + $coste_cubierta + $coste_sobrecubierta,
|
||||
'acabadoCubierta' => $acabadoCubierta,
|
||||
'acabadoSobrecubierta' => $acabadoSobrecubierta,
|
||||
'total_servicios_defecto' => $costeServiciosDefecto,
|
||||
'total_servicios_automaticos' => $coste_servicios,
|
||||
'tiradas' => $tirada,
|
||||
'precio_u' => $precio_u,
|
||||
'peso' => $peso,
|
||||
|
||||
'interior' => $interior,
|
||||
'cubierta' => $cubierta,
|
||||
'sobrecubierta' => $linea_sobrecubierta,
|
||||
'guardas' => $guardas,
|
||||
'serviciosDefecto' => $servDefecto,
|
||||
'servicios_automaticos' => $serviciosAutomaticos,
|
||||
$csrfTokenName => $newTokenHash
|
||||
];
|
||||
|
||||
|
||||
return $this->respond($return_data);
|
||||
} else {
|
||||
return $this->failUnauthorized('Invalid request', 403);
|
||||
}
|
||||
}
|
||||
|
||||
public function getDireccionesCliente()
|
||||
{
|
||||
if ($this->request->isAJAX()) {
|
||||
|
||||
$newTokenHash = csrf_hash();
|
||||
$csrfTokenName = csrf_token();
|
||||
|
||||
$reqData = $this->request->getPost();
|
||||
$cliente_id = $reqData['id'] ?? 0;
|
||||
$model = model('App\Models\Clientes\ClienteDireccionesModel');
|
||||
$data = $model->getMenuDirecciones($cliente_id);
|
||||
array_unshift($data, ['id' => 0, 'text' => 'Agregar nueva dirección']);
|
||||
|
||||
return $this->respond([
|
||||
'menu' => $data,
|
||||
$csrfTokenName => $newTokenHash
|
||||
]);
|
||||
} else {
|
||||
return $this->failUnauthorized('Invalid request', 403);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
$model = model('App\Models\Clientes\ClienteDireccionesModel');
|
||||
$data = $model->getDireccion($direccionId);
|
||||
|
||||
$modelTarifaEnvio = model('App\Models\Tarifas\TarifaEnvioModel');
|
||||
$coste = 0;
|
||||
if ($data > 0) {
|
||||
$tarifas_envio = $modelTarifaEnvio->getTarifaEnvio($data[0]->pais_id, $peso, $unidades, 'cajas');
|
||||
for ($i = 0; $i < count($tarifas_envio); $i++) {
|
||||
if ($peso > $tarifas_envio[$i]->peso_max) {
|
||||
$tarifas_envio[$i]->precio = number_format($tarifas_envio[$i]->peso_min + ($peso - $data[$i]->peso_min) * $data[$i]->precio_adicional, 2);
|
||||
}
|
||||
// si no se calcula linealmente
|
||||
else {
|
||||
$m = (($tarifas_envio[$i]->precio_max - $tarifas_envio[$i]->precio_min) / ($tarifas_envio[$i]->peso_max - $tarifas_envio[$i]->peso_min));
|
||||
$b = $tarifas_envio[$i]->precio_max - $m * $tarifas_envio[$i]->peso_max;
|
||||
$tarifas_envio[$i]->precio = number_format($m * $peso + $b, 2);
|
||||
}
|
||||
$tarifas_envio[$i]->margen = $tarifas_envio[$i]->margen;
|
||||
}
|
||||
|
||||
if(count($tarifas_envio) > 1){
|
||||
$tarifa_final = array_reduce($tarifas_envio, function ($previous, $current) {
|
||||
return $current->precio < $previous->precio ? $current : $previous;
|
||||
});
|
||||
$coste = $tarifa_final->precio;
|
||||
}
|
||||
else{
|
||||
$coste = $tarifas_envio[0]->precio;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
$data[0]->coste = $coste;
|
||||
|
||||
return $this->respond([
|
||||
'data' => $data,
|
||||
$csrfTokenName => $newTokenHash
|
||||
]);
|
||||
} else {
|
||||
return $this->failUnauthorized('Invalid request', 403);
|
||||
}
|
||||
}
|
||||
|
||||
public function getNuevaDireccion()
|
||||
{
|
||||
|
||||
if ($this->request->isAJAX()) {
|
||||
|
||||
$newTokenHash = csrf_hash();
|
||||
$csrfTokenName = csrf_token();
|
||||
|
||||
$reqData = $this->request->getPost();
|
||||
|
||||
$data = [
|
||||
'cliente_id' => $reqData['cliente_id'] ?? 0,
|
||||
'alias' => $reqData['alias'] ?? "",
|
||||
'att' => $reqData['att'] ?? "",
|
||||
'email' => $reqData['email'] ?? "",
|
||||
'direccion' => $reqData['direccion'] ?? "",
|
||||
'pais_id' => $reqData['pais_id'] ?? 0,
|
||||
'municipio' => $reqData['municipio'] ?? "",
|
||||
'provincia' => $reqData['provincia'] ?? "",
|
||||
'cp' => $reqData['cp'] ?? "",
|
||||
'telefono' => $reqData['telefono'] ?? ""
|
||||
];
|
||||
|
||||
$model = model('App\Models\Clientes\ClienteDireccionesModel');
|
||||
$id = $model->nuevaDireccion($data);
|
||||
|
||||
$menu = $model->getMenuDirecciones($data['cliente_id']);
|
||||
|
||||
|
||||
return $this->respond([
|
||||
'data' => $menu,
|
||||
$csrfTokenName => $newTokenHash
|
||||
]);
|
||||
} else {
|
||||
return $this->failUnauthorized('Invalid request', 403);
|
||||
}
|
||||
@ -620,270 +1064,8 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
* Funciones auxiliares
|
||||
*
|
||||
**********************/
|
||||
protected function getLineasPresupuesto($reqData)
|
||||
protected function calcular_lomo($lineas, $lomo_inicial)
|
||||
{
|
||||
$error =(object)[
|
||||
'interior' => "",
|
||||
'cubierta' => "",
|
||||
'sobrecubierta' => "",
|
||||
'guardas' => "",
|
||||
'servicios' => "",
|
||||
'serviciosDefecto' => "",
|
||||
];
|
||||
$coste_servicios = 0.0;
|
||||
|
||||
$POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
|
||||
|
||||
|
||||
$tirada = $reqData['tirada'] ?? 0;
|
||||
$tamanio = $reqData['tamanio'];
|
||||
$tipo_impresion_id = $this->getTipoImpresion($reqData['tipo'], $reqData['tapa']);
|
||||
$precio_u = [];
|
||||
|
||||
for($t=0; $t<count($tirada); $t++){
|
||||
$tirada[$t] = intval($tirada[$t]);
|
||||
|
||||
$paginas_color = intval($reqData['paginasColor']) ?? 0;
|
||||
$is_cosido = (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id);
|
||||
|
||||
$datosPedido = (object)array(
|
||||
'paginas' => intval($reqData['paginas']) ?? 0,
|
||||
'tirada' => $tirada[$t],
|
||||
'merma' => $tirada[$t] > $POD ? $this->calcular_merma($tirada[$t], $POD) : 0,
|
||||
'ancho' => intval($tamanio['ancho']) ?? 100000,
|
||||
'alto' => intval($tamanio['alto']) ?? 100000,
|
||||
'isCosido' => $is_cosido,
|
||||
);
|
||||
|
||||
$papel_generico = [
|
||||
'id' => $reqData['papelInterior'] ?? 0,
|
||||
'nombre' => $reqData['papelInteriorNombre'] ?? "",
|
||||
];
|
||||
$gramaje = $reqData['gramajeInterior'] ?? 0;
|
||||
$cliente_id = $reqData['clienteId'] ?? -1;
|
||||
$excluirRotativa = $reqData['excluirRotativa'] ?? 0;
|
||||
|
||||
$input_data = array(
|
||||
'uso' => 'interior',
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'isColor' => intval($reqData['isColor']) ?? 0,
|
||||
'isHq' => intval($reqData['isHq']) ?? 0,
|
||||
'cliente_id' => $cliente_id,
|
||||
'paginas_color' => $paginas_color,
|
||||
'excluirRotativa' => $excluirRotativa,
|
||||
);
|
||||
|
||||
$interior = PresupuestoClienteService::obtenerInterior($input_data);
|
||||
|
||||
$costeInterior = 0.0;
|
||||
foreach ($interior as $linea) {
|
||||
if (count($linea) > 0) {
|
||||
$costeInterior += floatval($linea['total_impresion']);
|
||||
}
|
||||
}
|
||||
|
||||
if ($costeInterior <= 0) {
|
||||
$error->interior = lang('Presupuestos.errores.noInterior');
|
||||
}
|
||||
|
||||
// Si es POD hay que volver a calcular para incluir la merma correcta
|
||||
if ($tirada[$t] <= $POD) {
|
||||
$num_formas = [];
|
||||
foreach ($interior as $linea) {
|
||||
if (count($linea) > 0) {
|
||||
$formas_linea = $is_cosido ? intval($linea['num_formas']['value']) / 2 : intval($linea['num_formas']['value']);
|
||||
array_push($num_formas, $formas_linea);
|
||||
}
|
||||
}
|
||||
$input_data['datosPedido']->merma = $this->calcular_merma($tirada[$t], $POD, $num_formas);
|
||||
|
||||
$interior = PresupuestoClienteService::obtenerInterior($input_data);
|
||||
}
|
||||
|
||||
$costeInterior = 0.0;
|
||||
foreach ($interior as $linea) {
|
||||
if (count($linea) > 0) {
|
||||
$costeInterior += floatval($linea['total_impresion']);
|
||||
}
|
||||
}
|
||||
|
||||
if ($costeInterior <= 0)
|
||||
$error->interior = lang('Presupuestos.errores.noInterior');
|
||||
else
|
||||
$error->interior = "";
|
||||
|
||||
|
||||
// Cubierta
|
||||
$papel_generico = [
|
||||
'id' => $reqData['papelCubierta'] ?? 0,
|
||||
'nombre' => $reqData['papelCubiertaNombre'] ?? "",
|
||||
];
|
||||
$input_data['papel_generico'] = $papel_generico;
|
||||
$input_data['gramaje'] = $reqData['gramajeCubierta'] ?? 0;
|
||||
$input_data['datosPedido']->paginas = intval($reqData['carasCubierta'] ?? 0);
|
||||
$input_data['paginas_color'] = intval($reqData['carasCubierta'] ?? 0);
|
||||
$input_data['datosPedido']->solapas_ancho = intval($reqData['solapasCubierta'] ?? 0);
|
||||
$input_data['datosPedido']->solapas = $input_data['datosPedido']->solapas_ancho>0 ? 1 : 0;
|
||||
$input_data['datosPedido']->lomo = $this->calcular_lomo($interior, 0);
|
||||
$input_data['isColor'] = 1;
|
||||
$input_data['isHq'] = 1;
|
||||
$input_data['uso'] = 'cubierta';
|
||||
|
||||
$cubierta = PresupuestoClienteService::obtenerCubierta($input_data);
|
||||
$coste_cubierta = 0.0;
|
||||
if (count($cubierta) > 0) {
|
||||
$coste_cubierta += floatval($cubierta['total_impresion']);
|
||||
}
|
||||
if($coste_cubierta <= 0)
|
||||
$error->cubierta = lang('Presupuestos.errores.noCubiertaSobrecubierta');
|
||||
else
|
||||
$error->cubierta = "";
|
||||
|
||||
$tarifaAcabadoCubierta = intval($reqData['acabadoCubierta'] ?? 0);
|
||||
$acabadoCubierta = [];
|
||||
if($tarifaAcabadoCubierta > 0){
|
||||
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
|
||||
$acabadoCubierta = $model->getPrecioTarifa($tarifaAcabadoCubierta, $datosPedido->tirada, $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;
|
||||
$linea_sobrecubierta = [];
|
||||
$sobreCubierta = $reqData["sobrecubierta"] ?? null;
|
||||
if(!is_null($sobreCubierta)){
|
||||
|
||||
$papel_generico = [
|
||||
'id' => $sobreCubierta['papel'] ?? 0,
|
||||
'nombre' => $sobreCubierta['papel_nombre'] ?? "",
|
||||
];
|
||||
$input_data['papel_generico'] = $papel_generico;
|
||||
$input_data['gramaje'] = $sobreCubierta['gramaje'] ?? 0;
|
||||
$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']->lomo = $this->calcular_lomo([$cubierta], $input_data['datosPedido']->lomo);
|
||||
$input_data['isColor'] = 1;
|
||||
$input_data['isHq'] = 1;
|
||||
$input_data['uso'] = 'sobrecubierta';
|
||||
|
||||
$linea_sobrecubierta = PresupuestoClienteService::obtenerSobrecubierta($input_data);
|
||||
|
||||
if (count($linea_sobrecubierta) > 0) {
|
||||
$coste_sobrecubierta += floatval($linea_sobrecubierta['total_impresion']);
|
||||
}
|
||||
if($coste_sobrecubierta <= 0)
|
||||
$error->sobrecubierta = lang('Presupuestos.errores.noCubiertaSobrecubierta');
|
||||
else
|
||||
$error->sobrecubierta = "";
|
||||
|
||||
$tarifaAcabadoSobrecubierta = intval(strlen($sobreCubierta['acabado'])==0 ? 0:$sobreCubierta['acabado']);
|
||||
$acabadoSobrecubierta = [];
|
||||
if($tarifaAcabadoSobrecubierta > 0){
|
||||
$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);
|
||||
}
|
||||
}
|
||||
|
||||
//Guardas
|
||||
if($reqData['guardas'] ?? 0 > 0){
|
||||
|
||||
$guardas = $reqData['guardas'];
|
||||
$papel_generico = [
|
||||
'id' => $guardas['papel'] ?? 0,
|
||||
'nombre' => $guardas['nombre'] ?? "",
|
||||
];
|
||||
$input_data['papel_generico'] = $papel_generico;
|
||||
$input_data['gramaje'] = $guardas['gramaje'] ?? 0;
|
||||
$input_data['datosPedido']->paginas = 8;
|
||||
$input_data['paginas_color'] = 8;
|
||||
$input_data['datosPedido']->paginas_impresion = $guardas['caras'] ?? 0;
|
||||
$input_data['datosPedido']->solapas_ancho = 0;
|
||||
$input_data['datosPedido']->solapas = 0;
|
||||
$input_data['isColor'] = 1;
|
||||
$input_data['isHq'] = 1;
|
||||
$input_data['uso'] = 'guardas';
|
||||
|
||||
// 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
|
||||
// o wire-o tapa dura, las guardas se imprimen como hojas sueltas
|
||||
if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) {
|
||||
$input_data['datosPedido']->isCosido = true;
|
||||
} else if ($tipo_impresion_id == 5 || $tipo_impresion_id == 7) {
|
||||
$input_data['datosPedido']->isCosido = false;
|
||||
}
|
||||
|
||||
$guardas = PresupuestoClienteService::obtenerGuardas($input_data);
|
||||
$coste_guardas = 0.0;
|
||||
if (count($guardas) > 0) {
|
||||
$coste_guardas += floatval($guardas['total_impresion']);
|
||||
}
|
||||
if($coste_guardas <= 0)
|
||||
$error->guardas = lang('Presupuestos.errores.noGuardas');
|
||||
else
|
||||
$error->guardas = "";
|
||||
}
|
||||
|
||||
// Servicios defecto
|
||||
$servDefecto = PresupuestoCLienteService::getServiciosEncuadernacionDefault([
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'tirada' => $datosPedido->tirada,
|
||||
'paginas' => intval($reqData['paginas']) ?? 0,
|
||||
'ancho' => $datosPedido->ancho,
|
||||
'alto' => $datosPedido->alto,
|
||||
'POD' => $POD,
|
||||
'solapas' => intval($reqData['solapasCubierta'] ?? 0)>0?1:0,
|
||||
]);
|
||||
$costeServiciosDefecto = 0.0;
|
||||
foreach ($servDefecto as $servicio) {
|
||||
if($servicio->total <= 0 )
|
||||
$error->serviciosDefecto = lang('Presupuestos.errores.errorPresupuesto');
|
||||
|
||||
$costeServiciosDefecto += floatval($servicio->total);
|
||||
}
|
||||
|
||||
array_push($precio_u, round(($costeInterior + $coste_cubierta + $coste_sobrecubierta + $costeServiciosDefecto + $coste_servicios)/$tirada[$t], 4));
|
||||
foreach($error as $err){
|
||||
if($err != "")
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if($reqData['guardas'] ?? 0 > 0){
|
||||
}
|
||||
|
||||
return [
|
||||
'errors' => $error,
|
||||
'total_lp' => $costeInterior+$coste_cubierta+$coste_sobrecubierta,
|
||||
'acabadoCubierta' => $acabadoCubierta,
|
||||
'total_servicios_defecto' => $costeServiciosDefecto,
|
||||
'tiradas' => $tirada,
|
||||
'precio_u' => $precio_u,
|
||||
|
||||
'interior' => $interior,
|
||||
'cubierta' => $cubierta,
|
||||
'sobrecubierta' => $linea_sobrecubierta,
|
||||
'guardas' => $guardas,
|
||||
'serviciosDefecto' => $servDefecto,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected function calcular_lomo($lineas, $lomo_inicial){
|
||||
$lomo = $lomo_inicial;
|
||||
foreach ($lineas as $linea) {
|
||||
if (count($linea) > 0) {
|
||||
@ -991,4 +1173,13 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
|
||||
endif;
|
||||
return $data;
|
||||
}
|
||||
|
||||
protected function getPaisListItems()
|
||||
{
|
||||
$paisModel = model('App\Models\Configuracion\PaisModel');
|
||||
$onlyActiveOnes = true;
|
||||
$data = $paisModel->getAllForMenu('id, nombre', 'nombre', $onlyActiveOnes);
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user