a punto de guardar

This commit is contained in:
2024-10-19 14:32:49 +02:00
parent 09e5149090
commit 1914cb01fe
7 changed files with 2346 additions and 85 deletions

View File

@ -412,11 +412,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$direccion['unidades'],
$direccion['entregaPalets'] == 'true' ? 1 : 0
)[0];
if (!property_exists($coste_direccion, 'coste')) {
$return_data['errors']->envios = "No se ha podido calcular el coste de envío";
}else{
} else {
$coste_envio += $coste_direccion->coste;
}
}
@ -425,16 +425,16 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
} else {
for ($i = 0; $i < count($tirada); $i++) {
$coste_envio = 0.0;
$coste_direccion = $this->getCosteEnvio(null, $return_data['peso'][$i], $tirada[$i], false)[0];
if (!property_exists($coste_direccion, 'coste')) {
$return_data['errors']->envios = "No se ha podido calcular el coste de envío";
}else{
} else {
$coste_envio += $coste_direccion->coste;
}
$return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio / $tirada[$i], 4);
}
@ -616,11 +616,12 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$selected_tirada = $reqData['selectedTirada'] ?? 0;
$tamanio = $reqData['tamanio'];
$paginas = $reqData['paginas'] ?? 0;
$paginas_color = $reqData['paginasColor'] ?? 0;
$posPaginasColor = $reqData['posPaginasColor'] ?? "";
$paginasColorConsecutivas = $reqData['pagColorConsecutivas'] ?? 0;
$papelInteriorDiferente = $reqData['papelInteriorDiferente'] ?? 0;
$papelInteriorDiferente = $reqData['papelInteriorDiferente'] ?? 0;
$tipo = $reqData['tipo'];
$paginasCuadernillo = $reqData['paginasCuadernillo'] ?? null;
@ -655,11 +656,12 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$interior = [
'papel_generico' => $papel,
'gramaje' => $gramaje,
'excluirRotativa' => $excluirRotativa,
'excluirRotativa' => $excluirRotativa,
'paginas' => $paginas,
'paginasColor' => $paginas_color,
'pos_paginas_color' => $posPaginasColor,
'paginas_color_consecutivas' => $paginasColorConsecutivas,
'papel_interior_diferente' => $papelInteriorDiferente
'papelInteriorDiferente' => $papelInteriorDiferente
];
@ -916,7 +918,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$data['datosGenerales']['excluirRotativa'] = $presupuesto->excluir_rotativa;
$data['datosGenerales']['clienteId'] = $presupuesto->cliente_id;
$data['datosGenerales']['clienteNombre'] = $modelCliente->getNombre($presupuesto->cliente_id);
model('App\Models\Clientes\ClienteModel')
model('App\Models\Clientes\ClienteModel')
->find($presupuesto->cliente_id)->nombre;
$data['datosGenerales']['papelFormatoId'] = $presupuesto->papel_formato_id;
$data['datosGenerales']['papelFormatoNombre'] = $modelPapelFormato->getNombre($presupuesto->papel_formato_id);
@ -951,7 +953,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$modelLinea = new PresupuestoLineaModel();
$lineas = $modelLinea->where('presupuesto_id', $id)->findAll();
[$data['datosGenerales']['paginasNegro'], $data['datosGenerales']['paginasColor']] =
[$data['datosGenerales']['paginasNegro'], $data['datosGenerales']['paginasColor']] =
$this->getPaginas($lineas);
@ -1339,7 +1341,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$gramaje = $datos_entrada['interior']['gramaje'];
$excluirRotativa = $datos_entrada['interior']['excluirRotativa'];
$paginas = $datos_entrada['interior']['paginas'];
$paginas_color = $datos_entrada['interior']['paginas_color'];
$paginas_color = $datos_entrada['interior']['paginasColor'];
// Cubierta
@ -1358,15 +1360,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
// Servicios
$servicios = $datos_entrada['servicios'] ?? [];
$error = (object) [
'interior' => "",
'cubierta' => "",
'sobrecubierta' => "",
'guardas' => "",
'servicios' => "",
'serviciosDefecto' => "",
"envios" => "",
];
$coste_servicios = 0.0;
$POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
@ -1427,9 +1420,15 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if ($interior == -1) {
$errorModel = new ErrorPresupuesto();
$errorModel->insertError($datos_entrada['id'], auth()->user()->id, 'No se puede obtener el interior', $input_data);
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'
No se puede obtener el interior',
$input_data
);
$return_data = [
'errors' => (object)([
'errors' => (object) ([
'status' => 1
]),
];
@ -1455,8 +1454,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
}
// Si es POD hay que volver a calcular para incluir la merma correcta
if ($tirada[$t] <= $POD) {
$num_formas = [];
@ -1472,10 +1469,16 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
$interior = PresupuestoClienteService::obtenerInterior($input_data);
if ($interior == -1) {
$errorModel = new ErrorPresupuesto();
$errorModel->insertError($datos_entrada['id'], auth()->user()->id, 'No se puede obtener el interior', $input_data);
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener el interior',
$input_data
);
$return_data = [
'errors' => (object)([
'errors' => (object) ([
'status' => 1
]),
];
@ -1511,11 +1514,21 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
}
if ($costeInterior <= 0)
$error->interior = lang('Presupuestos.errores.noInterior');
else
$error->interior = "";
if ($costeInterior <= 0){
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener el interior',
$input_data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
}
// Cubierta
$input_data['papel_generico'] = $papel_generico_cubierta;
@ -1548,11 +1561,21 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
);
}
}
if ($coste_cubierta <= 0)
$error->cubierta = lang('Presupuestos.errores.noCubiertaSobrecubierta');
else
$error->cubierta = "";
if ($coste_cubierta <= 0) {
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener la cubierta',
$input_data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
}
// Acabados Cubierta
$tarifaAcabadoCubierta = $this->obtenerTarifasAcabado($acabadosCubierta);
$acabadoCubierta = [];
@ -1564,8 +1587,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$acabadoCubierta = $model->getPrecioTarifa($tarifa, $datosPedido->tirada, -1, $POD);
if (count($acabadoCubierta) > 0) {
if ($acabadoCubierta[0]->total <= 0)
$error->servicios = lang('Presupuestos.errores.errorPresupuesto');
if ($acabadoCubierta[0]->total <= 0) {
$input_data['tarifas_acabado_cubierta'] = $tarifaAcabadoCubierta;
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener acabados de cubierta',
$input_data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
}
$coste_servicios += floatval($acabadoCubierta[0]->total);
}
}
@ -1607,11 +1644,21 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
);
}
}
if ($coste_sobrecubierta <= 0)
$error->sobrecubierta = lang('Presupuestos.errores.noCubiertaSobrecubierta');
else
$error->sobrecubierta = "";
if ($coste_sobrecubierta <= 0) {
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener la sobrecubierta',
$input_data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
}
$lomo_sobrecubierta = $lomo + floatval($linea_sobrecubierta['mano']);
$tarifaAcabadoSobrecubierta = $this->obtenerTarifasAcabado(['plastificado' => $sobreCubierta['acabados']]);
@ -1619,14 +1666,30 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
foreach ($tarifaAcabadoSobrecubierta as $tarifa) {
// NONE
if($tarifaAcabadoSobrecubierta[0] == 0)
if ($tarifaAcabadoSobrecubierta[0] == 0)
continue;
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$acabadoSobrecubierta = $model->getPrecioTarifa($tarifa, $datosPedido->tirada, -1, $POD);
if (count($acabadoSobrecubierta) > 0) {
if ($acabadoSobrecubierta[0]->total <= 0)
$error->servicios = lang('Presupuestos.errores.errorPresupuesto');
if ($acabadoSobrecubierta[0]->total <= 0) {
$input_data['tarifas_acabado_sobrecubierta'] = $tarifaAcabadoSobrecubierta;
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener acabados de sobrecubierta',
$input_data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
}
$coste_servicios += floatval($acabadoSobrecubierta[0]->total);
}
}
@ -1677,10 +1740,20 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
);
}
}
if ($coste_guardas <= 0)
$error->guardas = lang('Presupuestos.errores.noGuardas');
else
$error->guardas = "";
if ($coste_guardas <= 0) {
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener las guardas',
$input_data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
}
}
}
if ($extra_info) {
@ -1704,8 +1777,23 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
]);
$costeServiciosDefecto = 0.0;
foreach ($servDefecto as $servicio) {
if ($servicio->total <= 0)
$error->serviciosDefecto = lang('Presupuestos.errores.errorPresupuesto');
if ($servicio->total <= 0) {
$input_data['servicios'] = $servDefecto;
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener servicios',
$input_data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
}
$costeServiciosDefecto += floatval($servicio->total);
if ($extra_info) {
@ -1741,6 +1829,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if ($datos_entrada['servicios']['prototipo'])
array_push($servicios, 9);
foreach ($servicios as $servicio) {
if (intval($servicio) == 3) {
// Servicios acabado
$resultado = PresupuestoCLienteService::getServiciosAcabados([
@ -1749,8 +1838,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'POD' => $POD,
]);
array_push($serviciosAutomaticos, $resultado[0]);
if ($resultado[0]->total <= 0)
$error->servicios = lang('Presupuestos.errores.errorPresupuesto');
if ($resultado[0]->total <= 0) {
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener servicio con id 3',
$input_data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
}
$coste_servicios += floatval($resultado[0]->total);
if ($extra_info) {
@ -1763,8 +1866,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'tarifa_id' => $servicio,
]);
array_push($serviciosAutomaticos, $resultado[0]);
if ($resultado[0]->precio <= 0)
$error->servicios = lang('Presupuestos.errores.errorPresupuesto');
if ($resultado[0]->precio <= 0){
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
auth()->user()->id,
'No se puede obtener servicio con id 9',
$input_data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
}
$coste_servicios += floatval($resultado[0]->precio);
if ($extra_info) {
@ -1776,11 +1893,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
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;
}
if ($extra_info) {
$totalServicios -= $margenServicios;
$porcentajeMargenServicios = $margenServicios / ($margenServicios + $totalServicios) * 100;
@ -1806,8 +1919,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
));
}
$info['lomo_cubierta'] = $lomo;
$info['lomo_sobrecubierta'] = $lomo_sobrecubierta;
$info['lomo_cubierta'] = round(floatval($lomo), 2);
$info['lomo_sobrecubierta'] = round(floatval($lomo_sobrecubierta), 2);
$return_data['info'] = $info;
@ -1823,7 +1936,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
$return_data += [
'errors' => $error,
'errors' => [],
//'total_lp' => $costeInterior + $coste_cubierta + $coste_sobrecubierta,
//'acabadoCubierta' => $acabadoCubierta,
//'acabadoSobrecubierta' => $acabadoSobrecubierta,
@ -1839,6 +1952,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
return $return_data;
} catch (Exception $e) {
return [
'exception' => $e->getMessage(),
@ -2285,11 +2399,12 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
private function getPaginas($lineas){
private function getPaginas($lineas)
{
$paginasNegro = 0;
$paginasColor = 0;
foreach ($lineas as $linea) {
if (strpos($linea->tipo, "lp_bn") !== false || strpos($linea->tipo, "lp_bnhq") !== false) {
$paginasNegro = $linea->paginas;
@ -2308,7 +2423,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$paginasNegro = $linea->paginas - $linea->rotativa_pag_color;
}
}
return [$paginasNegro, $paginasColor];
}
}

View File

@ -426,7 +426,7 @@ class PresupuestoModel extends \App\Models\BaseModel
'pos_paginas_color' => $data['interior']['pos_paginas_color'],
'paginas_color_consecutivas' => $data['interior']['paginas_color_consecutivas'],
'papel_interior_diferente' => $data['interior']['papel_interior_diferente'],
'papel_interior_diferente' => $data['interior']['papelInteriorDiferente'],
'lomo_cubierta' => $extra_info['lomo_cubierta'],
'lomo_sobrecubierta' => $extra_info['lomo_sobrecubierta'],
@ -495,27 +495,27 @@ class PresupuestoModel extends \App\Models\BaseModel
if (is_array($data)) {
// -- INTERIOR --
// Si hay negro
if ($data['interior']['paginas'] > $data['interior']['paginas_color']) {
if (intval($data['interior']['paginas']) > intval($data['interior']['paginasColor'])) {
if ($data['isHq'])
$key = 'bnhq';
else
$key = 'bn';
$values[$key] = array(
'paginas' => intval($data['interior']['paginas']) - intval($data['interior']['paginas_color']),
'paginas' => intval($data['interior']['paginas']) - intval(intval($data['interior']['paginasColor'])),
'papel_id' => intval($data['interior']['papel_generico']['id']),
'gramaje' => intval($data['interior']['gramaje']),
);
}
// Si hay color
if ($data['interior']['paginas_color'] > 0) {
if (intval($data['interior']['paginasColor']) > 0) {
if ($data['isHq'])
$key = 'colorhq';
else
$key = 'color';
$values[$key] = array(
'paginas' => intval($data['interior']['paginas_color']),
'paginas' => intval(intval($data['interior']['paginasColor'])),
'papel_id' => intval($data['interior']['papel_generico']['id']),
'gramaje' => intval($data['interior']['gramaje']),
);

View File

@ -127,7 +127,7 @@
<label for="cabezada" class="form-label">
<?= lang('Presupuestos.cabezada') ?>
</label>
<select class="form-select select2bs2 calcular-presupuesto" id="cabezada" name="cabezada">
<select class="form-select select2bs2" id="cabezada" name="cabezada">
<option value="WHI"><?= lang('Presupuestos.blanca') ?></option>
<option value="GRE"><?= lang('Presupuestos.verde') ?></option>
<option value="BLUE"><?= lang('Presupuestos.azul') ?></option>

View File

@ -386,6 +386,7 @@ class DisenioCubierta {
sobrecubierta.gramaje = papel.split(' ')[2];
sobrecubierta.solapas = this.domItem.find("#solapasSobrecubierta").val();
sobrecubierta.plastificado = 'Plastificado ' + this.domItem.find("#plastificadoSobrecubierta").children("option:selected").text();
return sobrecubierta;
}
else {
let sobrecubierta = {};

View File

@ -47,8 +47,6 @@ class PresupuestoCliente {
init() {
this.RELLENAR_PRESUPUESTO(false);
// Fuerza el foco en el campo de búsqueda de select2
$(document).on('select2:open', () => {
document.querySelector('.select2-search__field').focus();
@ -66,8 +64,6 @@ class PresupuestoCliente {
this.btnPrev.on('click', this.#prevtStep.bind(this));
this.btnSave.on('click', this.#savePresupuesto.bind(this));
//this.RELLENAR_PRESUPUESTO(true);
if (window.location.href.includes("edit")) {
$(".calcular-presupuesto").on('change', ()=>{});
this.#cargarPresupuesto();
@ -113,8 +109,9 @@ class PresupuestoCliente {
if (Object.values(datos_to_check).every(this.#isValidDataForm)) {
try {
$('#loader').modal('show');
$('#loader').modal('show');
setTimeout(function() {
$('#loader').modal('show');
}, 0);
// Si se está ejecutando la petición, abortar la petición anterior
this.ajax_calcular.abort();
@ -132,7 +129,7 @@ class PresupuestoCliente {
}
RELLENAR_PRESUPUESTO(finalizar) {
/*RELLENAR_PRESUPUESTO(finalizar) {
if (finalizar) {
@ -185,7 +182,7 @@ class PresupuestoCliente {
else {
$("#titulo").trigger('change');
}
}
}*/
stepperHandler() {
@ -243,8 +240,13 @@ class PresupuestoCliente {
$('#loader').modal('hide');
console.log(response);
if (this.datos["confirmar"] || window.location.href.includes("add")) {
sessionStorage.setItem('message', response.message);
window.location.href = response.url + '/' + response.status;
if(response.status){
sessionStorage.setItem('message', response.message);
window.location.href = response.url + '/' + response.status;
}
else{
popErrorAlert("No se ha podido guardar el presupuesto. Por favor, póngase en contacto con el departamento comercial.");
}
}
else {
popSuccessAlert(response.message);

View File

@ -57,7 +57,12 @@ class Resumen {
this.titulo.text(this.datosGenerales.titulo.val());
this.tipoLibro.text(this.#capitalizeFirstLetter(this.datosGenerales.tiposLibro.filter('.selected').attr('id')));
this.formato.text(this.datosGenerales.papelFormatoId.find('option:selected').text());
if (this.datosGenerales.checkFormatoPersonalizado.is(':checked'))
this.formato.text(this.datosGenerales.anchoPersonalizado.val() + ' x ' + this.datosGenerales.altoPersonalizado.val());
else
this.formato.text(this.datosGenerales.papelFormatoId.find('option:selected').text());
this.paginas.text(this.datosGenerales.paginas.val());
this.paginasColor.text(this.datosGenerales.paginasColor.val());
this.paginasNegro.text(this.datosGenerales.paginasNegro.val());
@ -93,7 +98,7 @@ class Resumen {
this.itemsCubiertaTapaBlanda.removeClass('d-none');
this.itemsCubiertaTapaDura.addClass('d-none');
const solapasCubierta = this.disenioCubierta.getSolapasCubierta();
this.solapasCubierta.text( solapasCubierta == false ? 'No' : solapasCubierta);
this.solapasCubierta.text(solapasCubierta == false ? 'No' : solapasCubierta);
}
else {
this.itemsCubiertaTapaDura.removeClass('d-none');

File diff suppressed because one or more lines are too long