comprobando presupuestos

This commit is contained in:
2024-10-22 08:43:21 +02:00
parent 62a3706049
commit 2f83526d7e
20 changed files with 37035 additions and 223 deletions

View File

@ -101,6 +101,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$model_user = model('App\Models\Usuarios\UserModel');
$user = $model_user->find(auth()->user()->id);
$clienteId = $user->cliente_id;
$POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
$this->viewData['breadcrumb'] = [
@ -138,50 +139,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$user = $model_user->find(auth()->user()->id);
$clienteId = $user->cliente_id;
$datosPresupuesto = (object) array();
$datosPresupuesto->POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
$datosPresupuesto->paisList = model('App\Models\Configuracion\PaisModel')->getAllForMenu('id, nombre', 'nombre', true);
$datosPresupuesto->papelFormatoList = $this->getPapelFormatoListItems($presupuestoEntity->papel_formato_id ?? null);
$datosPresupuesto->papelInteriorNegro = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('negro', false, false, false, false, true);
$datosPresupuesto->papelInteriorNegroHq = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('negrohq', false, false, false, false, true);
$datosPresupuesto->papelInteriorColor = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('color', false, false, false, false, true);
$datosPresupuesto->papelInteriorColorHq = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, false, false, false, true);
$datosPresupuesto->papelCubierta = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', true, false, false, false, true);
$datosPresupuesto->papelSobrecubierta = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, true, false, false, true);
$datosPresupuesto->papelGuardas = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, false, false, true, false);
$datosPresupuesto->acabadosCubierta = $this->getAcabadosCubierta();
$datosPresupuesto->acabadosSobrecubierta = $this->getAcabadosSobrecubierta();
$datosPresupuesto->tipo_libro = $this->getTipoLibro($presupuestoEntity->tipo_impresion_id ?? null);
$datosPresupuesto->color_impresion =
$this->getTipoInterior($presupuestoEntity->id ?? null);
$datosPresupuesto->tapa = $this->getTapa($presupuestoEntity->tipo_impresion_id ?? null);
$datosPresupuesto->clienteList = $this->getClienteListItems($presupuestoEntity->cliente_id ?? null);
$this->obtenerTiradas($presupuestoEntity);
$this->obtenerDatosPapel($presupuestoEntity);
$this->obtenerPaginasColor($presupuestoEntity);
$this->obtenerDireccionesEnvio($presupuestoEntity);
// Si el presupuesto está confirmado, se generan los datos del resumen
if ($presupuestoEntity->estado_id == 2) {
$this->generarResumen($presupuestoEntity);
}
$datosPresupuesto->paginasCuadernillo = [32, 28, 24, 20, 16];
$presupuestoEntity->paginas_por_cuadernillo = $this->obtenerPaginasCuadernillo($presupuestoEntity);
$this->viewData['formAction'] = 'edit';
$this->viewData['paisList'] = $this->getPaisListItems();
$this->viewData['presupuestoEntity'] = $presupuestoEntity;
$this->viewData['datosPresupuesto'] = $datosPresupuesto;
$this->viewData['clienteId'] = $clienteId;
$this->viewData['POD'] = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
// Si se ha llamado a esta funcion porque se ha duplicado el presupuesto
@ -323,6 +285,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$direcciones = $reqData['direcciones'] ?? [];
$tipo_impresion_id = $this->getTipoImpresion($tipo, $cubierta['tipoCubierta']);
$lomoRedondo = $cubierta['lomoRedondo'] ?? 0;
if ($papelInteriorDiferente) {
$papel['negro'] = $modelPapelGenerico->getIdFromCode($interior['papelInterior']['negro']);
@ -351,6 +314,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'carasCubierta' => intval($cubierta['carasImpresion'] ?? 0),
'solapasCubierta' => intval($cubierta['solapas'] ?? 0),
'acabadosCubierta' => $cubierta['acabados'] ?? 0,
'lomoRedondo' => $lomoRedondo,
];
// Sobrecubierta
@ -369,7 +333,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$datos_guardas = [
'papel' => $modelPapelGenerico->getIdFromCode($guardas['papel']),
'gramaje' => intval($guardas['gramaje']),
'caras' => intval($guardas['guardasImpresas']),
'caras' => intval($guardas['caras']),
];
} else
$datos_guardas = false;
@ -393,6 +357,18 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
);
$return_data = $this->calcular_presupuesto($datos_presupuesto, 0, false); //TRUE FOR DEBUG
if(array_key_exists('errors', $return_data)){
if($return_data['errors']->status == 1){
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
return $return_data;
}
}
if (array_key_exists('exception', $return_data)) {
return $this->failServerError(
$return_data['exception'] . ' - ' .
@ -415,7 +391,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if (!property_exists($coste_direccion, 'coste')) {
$errorModel = new ErrorPresupuesto();
$data['direccion'] = $direccion;
$data['peso'] = $return_data['peso'][$i];
@ -432,7 +408,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
]),
];
return $return_data;
} else {
$coste_envio += $coste_direccion->coste;
}
@ -448,21 +424,21 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if (!property_exists($coste_direccion, 'coste')) {
$errorModel = new ErrorPresupuesto();
$data['direccion'] = 'Sin direccion';
$data['peso'] = $return_data['peso'][$i];
$data['palets'] = 'Sin direccion';
$errorModel->insertError(
$id,
auth()->user()->id,
'No se ha podido calcular el coste de envío',
$data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
return $return_data;
$data['direccion'] = 'Sin direccion';
$data['peso'] = $return_data['peso'][$i];
$data['palets'] = 'Sin direccion';
$errorModel->insertError(
$id,
auth()->user()->id,
'No se ha podido calcular el coste de envío',
$data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
return $return_data;
} else {
$coste_envio += $coste_direccion->coste;
}
@ -662,6 +638,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$isColor = intval($reqData['isColor']) ?? 0;
$isHq = intval($reqData['isHq']) ?? 0;
$prototipo = intval($reqData['prototipo']) ?? 0;
$interior = $reqData['interior'] ?? [];
$cubierta = $reqData['cubierta'] ?? [];
$sobrecubierta = $reqData['sobrecubierta'] ?? [];
@ -704,6 +682,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'carasCubierta' => intval($cubierta['carasImpresion'] ?? 0),
'solapasCubierta' => intval($cubierta['solapas'] ?? 0),
'acabadosCubierta' => $cubierta['acabados'] ?? 0,
'lomoRedondo' => $cubierta['lomoRedondo'] ?? 0,
'cabezada' => $cubierta['cabezada'] ?? 'WHI',
];
// Sobrecubierta
@ -722,7 +702,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$datos_guardas = [
'papel' => $modelPapelGenerico->getIdFromCode($guardas['papel']),
'gramaje' => intval($guardas['gramaje']),
'caras' => intval($guardas['guardasImpresas']),
'caras' => intval($guardas['caras']),
];
} else
$datos_guardas = false;
@ -735,7 +715,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'isColor' => $isColor,
'isHq' => $isHq,
'paginasCuadernillo' => $paginasCuadernillo,
'interior' => $interior,
'cubierta' => $cubierta,
'sobrecubierta' => $sobrecubierta,
@ -855,6 +835,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$datos_presupuesto['cubierta']['acabadosCubierta']['id'] = 0;
}
$datos_presupuesto['prototipo'] = $prototipo;
$id = $model_presupuesto->insertarPresupuestoCliente(
$id,
$selected_tirada,
@ -937,14 +919,15 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$presupuesto = $this->model->find($id);
$data = [];
if ($presupuesto) {
$data['lc'] = $presupuesto->lomo_cubierta;
$data['lsc'] = $presupuesto->lomo_sobrecubierta;
$data['datosGenerales']['titulo'] = $presupuesto->titulo;
$data['datosGenerales']['autor'] = $presupuesto->autor;
$data['datosGenerales']['isbn'] = $presupuesto->isbn;
$data['datosGenerales']['coleccion'] = $presupuesto->coleccion;
$data['datosGenerales']['referenciaCliente'] = $presupuesto->referencia_cliente;
$data['datosGenerales']['paginas'] = $presupuesto->paginas;
$data['datosGenerales']['posPaginasColor'] = $presupuesto->paginas_color;
$data['datosGenerales']['paginasCuadernillo'] = $presupuesto->paginas_cuadernillo;
$data['datosGenerales']['paginasCuadernillo'] = $presupuesto->paginasCuadernillo;
$data['datosGenerales']['tirada'] = $presupuesto->tirada;
$data['datosGenerales']['ivaReducido'] = $presupuesto->iva_reducido;
$data['datosGenerales']['excluirRotativa'] = $presupuesto->excluir_rotativa;
@ -958,29 +941,34 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$data['datosGenerales']['papelFormatoAncho'] = $presupuesto->papel_formato_ancho;
$data['datosGenerales']['papelFormatoAlto'] = $presupuesto->papel_formato_alto;
$data['datosGenerales']['posPaginasColor'] = $presupuesto->comp_pos_paginas_color;
$data['datosGenerales']['papelInteriorDiferente'] = $presupuesto->papel_interior_diferente;
$data['datosGenerales']['paginasColorConsecutivas'] = $presupuesto->paginas_color_consecutivas;
$data['tiradasPrecio'] = [
(object) [
'tirada' => $presupuesto->tirada,
'precio' => $presupuesto->total_confirmado,
'precio_u' => $presupuesto->total_precio_unidad,
]
];
$data['datosGenerales']['tipo'] = $this->getTipoLibro($presupuesto->tipo_impresion_id ?? null);
$data['datosGenerales']['prototipo'] = $presupuesto->prototipo;
$tiradas_alternativas = json_decode($presupuesto->tirada_alternativa_json_data);
for ($i = 0; $i < count($tiradas_alternativas); $i++) {
$tirada = $tiradas_alternativas[$i];
$data['datosGenerales']['tirada' . ($i + 2)] = $tirada->tirada;
array_push($data['tiradasPrecio'], (object) [
'tirada' => intval($tirada->tirada),
'precio' => $tirada->total_pedido,
'precio_u' => $tirada->precio_unidad,
]);
}
usort($data['tiradasPrecio'], function ($a, $b) {
return $a->tirada <=> $b->tirada;
});
$datos_papel = $this->obtenerDatosPapel($presupuesto->id);
$data['interior'] = $datos_papel['interior'] ? $datos_papel['interior'] : [];
$data['cubierta'] = $datos_papel['cubierta'] ? $datos_papel['cubierta'] : [];
$data['cubierta']['tapa'] = $this->obtenerTipoTapa($presupuesto->tipo_impresion_id ?? null);
$data['cubierta']['lomoRedondo'] = $presupuesto->lomo_redondo ? 1 : 0;
$data['cubierta']['solapas'] = $presupuesto->solapas ? 1 : 0;
$data['cubierta']['solapas_ancho'] = $presupuesto->solapas_ancho;
$data['cubierta']['cabezada'] = $presupuesto->cabezada;
$modelAcabado = model("App\Models\Tarifas\Acabados\TarifaAcabadoModel");
$data['cubierta']['plastificado'] = $modelAcabado->getCodeFromId($presupuesto->acabado_cubierta_id);
$data['cubierta']['barniz'] = $modelAcabado->getCodeFromId($presupuesto->barniz_cubierta_id);
$data['cubierta']['estampado'] = $modelAcabado->getCodeFromId($presupuesto->estampado_cubierta_id);
$data['cubierta']['retractilado'] = $presupuesto->retractilado ? 1 : 0;
$data['sobrecubierta'] = array_key_exists('sobrecubierta', $datos_papel) ? $datos_papel['sobrecubierta'] : [];
$data['sobrecubierta']['solapas'] = $presupuesto->solapas_sobrecubierta ? 1 : 0;
$data['sobrecubierta']['solapas_ancho'] = $presupuesto->solapas_ancho_sobrecubierta;
$data['sobrecubierta']['plastificado'] = $modelAcabado->getCodeFromId($presupuesto->acabado_sobrecubierta_id);
$data['guardas'] = array_key_exists('guardas', $datos_papel) ? $datos_papel['guardas'] : [];
$modelLinea = new PresupuestoLineaModel();
$lineas = $modelLinea->where('presupuesto_id', $id)->findAll();
@ -988,7 +976,15 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
[$data['datosGenerales']['paginasNegro'], $data['datosGenerales']['paginasColor']] =
$this->getPaginas($lineas);
$data['direcciones'] = $this->obtenerDireccionesEnvio($id, $presupuesto->cliente_id);
$tiradas_alternativas = json_decode($presupuesto->tirada_alternativa_json_data);
for ($i = 0; $i < count($tiradas_alternativas); $i++) {
$tirada = $tiradas_alternativas[$i];
$data['datosGenerales']['tirada' . ($i + 2)] = $tirada->tirada;
}
return $this->respond([
'status' => 1,
'data' => $data
@ -1382,6 +1378,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$carasCubierta = $datos_entrada['cubierta']['carasCubierta'];
$solapasCubierta = $datos_entrada['cubierta']['solapasCubierta'];
$acabadosCubierta = $datos_entrada['cubierta']['acabadosCubierta'] ?? [];
$lomoRedondo = $datos_entrada['cubierta']['lomoRedondo'];
// Sobrecubierta
$sobreCubierta = $datos_entrada["sobrecubierta"] ?? null;
@ -1576,6 +1573,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$input_data['isColor'] = 1;
$input_data['isHq'] = 1;
$input_data['uso'] = 'cubierta';
$input_data['lomoRedondo'] = $lomoRedondo;
$cubierta = PresupuestoClienteService::obtenerCubierta($input_data);
$coste_cubierta = 0.0;
@ -2168,6 +2166,19 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
} else
return '';
}
protected function obtenerTipoTapa($tipo_impresion_id)
{
$model = model('App\Models\Configuracion\TipoPresupuestoModel');
$data = $model->get_isTapaDura($tipo_impresion_id);
if ($data) {
return 'dura';
} else {
return 'blanda';
}
}
protected function getTipoInterior($presupuestoId)
{
@ -2250,18 +2261,18 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
}
protected function obtenerDireccionesEnvio($presupuestoEntity)
protected function obtenerDireccionesEnvio($id, $cliente_id)
{
$model = model('App\Models\Presupuestos\PresupuestoDireccionesModel');
$model_direcciones = model('App\Models\Clientes\ClienteDireccionesModel');
$model_pais = model('App\Models\Configuracion\PaisModel');
$direcciones = $model->where('presupuesto_id', $presupuestoEntity->id)->findAll();
$direcciones = $model->where('presupuesto_id', $id)->findAll();
$result = [];
$temp = [];
for ($i = 0; $i < count($direcciones); $i++) {
$direccion_id = $model_direcciones->getIdForPresupuestoCliente(
$presupuestoEntity->cliente_id,
$cliente_id,
$direcciones[$i]->att,
$direcciones[$i]->email,
$direcciones[$i]->direccion,
@ -2271,49 +2282,56 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
);
if (count($direccion_id) > 0) {
$temp = $direcciones[$i]->toArray();
$temp['pais'] = $model_pais->where('id', $direcciones[$i]->pais_id)->first()->nombre;
$temp['direccion_id'] = $direccion_id[0]->id;
array_push($result, $temp);
array_push($result, [
'id' => $temp['id'],
'unidades' => $temp['cantidad'],
'palets' => $temp['entregaPieCalle'],
]);
}
}
if (count($result) > 0)
$presupuestoEntity->direcciones_envio = $result;
return $result;
else
return [];
}
protected function obtenerDatosPapel($presupuestoEntity)
protected function obtenerDatosPapel($presupuesto_id)
{
$id = $presupuestoEntity->id;
$return_data = [];
$model = model('App\Models\Presupuestos\PresupuestoLineaModel');
$data = $model->where('presupuesto_id', $id)->findAll();
$data = $model->where('presupuesto_id', $presupuesto_id)->findAll();
$modelPapelGenerico = model('App\Models\Configuracion\PapelGenericoModel');
if (count($data) > 0) {
foreach ($data as $linea) {
// Se coje el primer papel que se encuentre para el interior
// para presupuestos del cliente sólo se escoje un papel para el interior
if (strpos($linea->tipo, "bn") !== false || strpos($linea->tipo, "color") !== false) {
$presupuestoEntity->papel_interior = $linea->papel_id;
$presupuestoEntity->gramaje_interior = $linea->gramaje;
}
// Si es cubierta
else if (strpos($linea->tipo, "cubierta") !== false && strpos($linea->tipo, "sobrecubierta") === false) {
$presupuestoEntity->papel_cubierta = $linea->papel_id;
$presupuestoEntity->gramaje_cubierta = $linea->gramaje;
$presupuestoEntity->paginas_cubierta = $linea->paginas;
}
// Si es sobrecubierta
else if (strpos($linea->tipo, "sobrecubierta") !== false) {
$presupuestoEntity->papel_sobrecubierta = $linea->papel_id;
$presupuestoEntity->gramaje_sobrecubierta = $linea->gramaje;
$presupuestoEntity->paginas_sobrecubierta = $linea->paginas;
}
// Si es guardas
else if (strpos($linea->tipo, "guardas") !== false) {
$presupuestoEntity->papel_guardas = $linea->papel_id;
$presupuestoEntity->paginas_guardas = $linea->paginas;
if ($linea->tipo == 'lp_bn' || $linea->tipo == 'lp_bnhq' || $linea->tipo == 'lp_rot_bn') {
$return_data['interior']['negro']['tipo'] = $linea->tipo == 'lp_bn' || $linea->tipo == 'lp_rot_bn' ? 'negroEstandar' : 'negroPremium';
$return_data['interior']['negro']['papel'] = $modelPapelGenerico->getCodeFromId($linea->papel_id);
$return_data['interior']['negro']['gramaje'] = $linea->gramaje;
} else if ($linea->tipo == 'lp_color' || $linea->tipo == 'lp_colorhq' || $linea->tipo == 'lp_rot_color') {
$return_data['interior']['color']['tipo'] = $linea->tipo == 'lp_color' || $linea->tipo == 'lp_rot_color' ? 'colorEstandar' : 'colorPremium';
$return_data['interior']['color']['papel'] = $modelPapelGenerico->getCodeFromId($linea->papel_id);
$return_data['interior']['color']['gramaje'] = $linea->gramaje;
} else if ($linea->tipo == 'lp_cubierta') {
$return_data['cubierta']['papel'] = $modelPapelGenerico->getCodeFromId($linea->papel_id);
$return_data['cubierta']['gramaje'] = $linea->gramaje;
$return_data['cubierta']['paginas'] = $linea->paginas;
} else if ($linea->tipo == 'lp_sobrecubierta') {
$return_data['sobrecubierta']['papel'] = $modelPapelGenerico->getCodeFromId($linea->papel_id);
$return_data['sobrecubierta']['gramaje'] = $linea->gramaje;
$return_data['sobrecubierta']['paginas'] = $linea->paginas;
} else if ($linea->tipo == 'lp_guardas') {
$return_data['guardas']['papel'] = $modelPapelGenerico->getCodeFromId($linea->papel_id);
$return_data['guardas']['gramaje'] = $linea->gramaje;
$return_data['guardas']['paginas'] = $linea->paginas;
}
}
}
return $return_data;
}
protected function generarResumen($presupuestoEntity)
@ -2469,4 +2487,5 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
return [$paginasNegro, $paginasColor];
}
}