Skip to content

Commit 334b38c

Browse files
authored
corrección de errores
- Cálculos de descuentos - Grabado de localStorage para cada cotización realizada - Botones y Modales de Sweet Alert funcionales - Correción de color de confirmButtonColor de las instancias if
1 parent 9dee802 commit 334b38c

File tree

1 file changed

+161
-144
lines changed

1 file changed

+161
-144
lines changed

js/index.js

Lines changed: 161 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
// 2) Operaciones de cálculo: Volumen, Volumen Total, Peso Total, Tarifa, Descuentos, Monto final.
77
// 3) Comunicación: Recolección, Validación, Tarifa, Descuentos, Monto final, Nueva cotización.
88

9+
/* Variables globales */
10+
let cotizacionesGuardadas = [];
11+
let contadorCotizaciones = 0;
12+
913
/* Datos del cotizador */
1014

1115
/* Recolección */
@@ -117,7 +121,7 @@ function calcularCotizacion(categoriaDimensionDescuento, categoriaPesoDescuento,
117121
totalDescuentos = descuentoDimensionAplicado;
118122
montoTotal = tarifa - totalDescuentos; // Si se cumple solo con descuento por Dimensión
119123
} else if (descuentoPeso) {
120-
totalDescuentos = categoriaDimensionDescuento;
124+
totalDescuentos = descuentoPesoAplicado; // CORRECCIÓN: Aquí estaba categoriaDimensionDescuento
121125
montoTotal = tarifa - totalDescuentos; // Si se cumple solo con descuento por Peso
122126
}
123127
// Mostrar los resultados
@@ -128,37 +132,39 @@ function calcularCotizacion(categoriaDimensionDescuento, categoriaPesoDescuento,
128132

129133
/* Comunicación Cotización exitosa */
130134

131-
function comunicarResultados(largo, ancho, alto, peso, tarifa, totalDescuentos, montoTotal, descPeso, descDimension, descuentos) {
135+
function comunicarResultados(largo, ancho, alto, peso, volumen, volumenTotal, pesoTotal, pesoFacturable, tarifa, descuentoDimensionAplicado, descuentoPesoAplicado, totalDescuentos, montoTotal, descDimension, descPeso) {
132136
const resultadosDiv = document.getElementById('cotizacionDiv');
133-
// Dimension
134-
const claseDimension = {
135-
'grande': 'Grande (≥30cm)',
136-
'medio': 'Medio (≥20cm)',
137-
'pequeño': 'Pequeño (≥10cm)',
138-
'muy pequeño': 'Muy Pequeño (<10cm)'
139-
};
140-
// Peso
141-
const clasePeso = {
142-
'pesado': 'Pesado (≥10kg)',
143-
'liviano': 'Liviano (≥1kg)',
144-
'muy liviano': 'Muy Liviano (<1kg)'
145-
};
146-
//Aplicar Descuentos
147-
let descuentosCotizacion = '';
148-
if (descDimension || descPeso) {
149-
descuentosCotizacion =`
150-
<div class="exito">
151-
<h6><b>¡Felicidades, aplicamos tus descuentos!</b></h6>
152-
<p>${descDimension ? '• Descuento por tener un tamaño muy pequeño: 5%' : ''}</p>
153-
<p>${descPeso ? '• Descuento por tener un peso muy liviano: 5%' : ''}</p>
154-
<p>• Total descuentos: USD$ ${descuentos.toFixed(2)}</p>
155-
</div>`;
137+
138+
// Evitar más de 5 cotizaciones
139+
if (contadorCotizaciones >= 5) {
140+
comunicarError("Has alcanzado el límite de 5 cotizaciones. Puedes enviar los datos por correo, borrar y seguir cotizando.");
141+
return;
156142
}
157-
/* Comunicar Resultados en el HTML */
158-
resultadosDiv.innerHTML = `
159-
<h5>Resumen de la Cotización:</h5>
160-
${descuentosCotizacion}
161-
<table class="resultado">
143+
144+
contadorCotizaciones++;
145+
146+
/* Guardar cotización en array */
147+
const cotizacion = {
148+
id: contadorCotizaciones,
149+
largo,
150+
ancho,
151+
alto,
152+
peso,
153+
tarifa,
154+
totalDescuentos,
155+
montoTotal,
156+
descDimension,
157+
descPeso
158+
};
159+
cotizacionesGuardadas.push(cotizacion);
160+
161+
// Guardar en localStorage
162+
transformarDatos(cotizacion);
163+
164+
// Crear o actualizar tabla
165+
let tableHTML = `
166+
<h5>Resumen de Cotizaciones:</h5>
167+
<table id="tabla" class="resultado">
162168
<thead>
163169
<tr>
164170
<th>Medidas</th>
@@ -168,93 +174,141 @@ function comunicarResultados(largo, ancho, alto, peso, tarifa, totalDescuentos,
168174
<th>Total a pagar</th>
169175
</tr>
170176
</thead>
171-
<tbody>
177+
<tbody>`;
178+
179+
cotizacionesGuardadas.forEach(cot => {
180+
tableHTML += `
172181
<tr>
173-
<td>${largo}x${ancho}x${alto} cms</td>
174-
<td>${peso}kg</td>
175-
<td>USD$ ${tarifa.toFixed(2)}</td>
176-
<td>USD$ ${descuentos.toFixed(2)}</td>
177-
<td>USD$ ${montoTotal.toFixed(2)}</td>
178-
</tr>
182+
<td>${cot.largo}x${cot.ancho}x${cot.alto} cms</td>
183+
<td>${cot.peso}kg</td>
184+
<td>USD$ ${cot.tarifa.toFixed(2)}</td>
185+
<td>USD$ ${cot.totalDescuentos.toFixed(2)}</td>
186+
<td>USD$ ${cot.montoTotal.toFixed(2)}</td>
187+
</tr>`;
188+
});
189+
190+
tableHTML += `
179191
</tbody>
180-
</table>
181-
<button id="guardar"> Guardar </button>
182-
<button id="borrar"> Borrar </button>
183-
<button id="enviar"> Enviar </button>`;
192+
</table>`;
193+
194+
/* Comunicar Descuentos, si aplican */
195+
let descuentosCotizacion = '';
196+
if (descDimension || descPeso) {
197+
descuentosCotizacion = `
198+
<div class="exito">
199+
<h6><b>¡Felicidades, aplicamos tus descuentos!</b></h6>
200+
<p>${descDimension ? '• Descuento por tener un tamaño muy pequeño: 5%' : ''}</p>
201+
<p>${descPeso ? '• Descuento por tener un peso muy liviano: 5%' : ''}</p>
202+
<p>• Total descuentos: USD$ ${totalDescuentos.toFixed(2)}</p>
203+
</div>`;
204+
}
205+
206+
resultadosDiv.innerHTML = descuentosCotizacion + tableHTML + `
207+
<div>
208+
<button id="enviar">Enviar</button>
209+
<button id="borrar">Borrar</button>
210+
</div>`;
211+
184212
resultadosDiv.classList.add('show');
185213
resultadosDiv.scrollIntoView({ behavior: 'smooth' });
186-
/* Crear Array */
187214

188-
/* Trabajando con Librería Sweet Alert */
189-
/* Guardar Array */
190-
document.getElementById("guardar")
191-
.addEventListener("click",()=>{
192-
Swal.fire({
193-
title: "¿Te gustaría guardar la cotización realizada?",
194-
html: `Puedes <b>Guardar</b> hasta 5 cotizaciones`,
195-
icon: "question",
196-
iconColor:"#4537AD",
197-
showCancelButton: true,
198-
confirmButtonColor: "#41AD37",
199-
cancelButtonColor: "#9B97B5",
200-
confirmButtonText: "Guardar y cotizar",
201-
denyButtonText: "Borrar"
202-
}).then((result) => {
203-
if (result.isConfirmed) {
204-
Swal.fire({
205-
title: "¡Datos Guardados!",
206-
text: "Tus cotizaciones realizadas han sido guardadas.",
207-
icon: "success",
208-
iconColor:"#41AD37"
209-
})
210-
;
211-
}
212-
});
213-
});
214-
/* Borrar Array */
215+
// Agregar eventos a los botones
216+
agregarEventosBotones();
217+
}
218+
219+
/* Transformar Datos y guardar en localStorage */
220+
221+
function transformarDatos(cotizacion) {
222+
// Recuperar cotizaciones previas del localStorage
223+
let cotizacionesAlmacenadas = [];
224+
const datosExistentes = localStorage.getItem('Cotizaciones');
225+
226+
if (datosExistentes) {
227+
cotizacionesAlmacenadas = JSON.parse(datosExistentes);
228+
}
229+
230+
// Agregar la nueva cotización
231+
cotizacionesAlmacenadas.push(cotizacion);
232+
233+
// Guardar en localStorage
234+
localStorage.setItem('Cotizaciones', JSON.stringify(cotizacionesAlmacenadas));
235+
236+
console.info(`Cotización guardada en localStorage:`, cotizacion);
237+
console.info(`Total de cotizaciones almacenadas:`, cotizacionesAlmacenadas.length);
238+
}
239+
240+
/* Agregar eventos a los botones */
241+
242+
function agregarEventosBotones() {
243+
// Borrar Datos Cotizados
215244
document.getElementById("borrar")
216-
.addEventListener("click",()=>{
245+
.addEventListener("click", () => {
217246
Swal.fire({
218-
title: "¿Te gustaría borrar toda la información?",
219-
html: `Vas a <b>Borrar</b> todo lo cotizado.`,
220-
icon: "warning",
221-
iconColor:"#AD4537",
222-
showCancelButton: true,
223-
confirmButtonColor: "#AD4537",
224-
cancelButtonColor: "#9B97B5",
225-
confirmButtonText: "Borrar",
247+
title: "¿Te gustaría borrar toda la información?",
248+
html: `Vas a <b>Borrar</b> todo lo cotizado.`,
249+
icon: "warning",
250+
iconColor: "#AD4537",
251+
showCancelButton: true,
252+
confirmButtonColor: "#AD4537",
253+
cancelButtonColor: "#9B97B5",
254+
confirmButtonText: "Borrar",
226255
}).then((result) => {
227256
if (result.isConfirmed) {
228-
Swal.fire({
229-
title: "¡Datos Borrados!",
230-
text: "Tus cotizaciones realizadas han sido borradas.",
231-
icon: "warning",
232-
iconColor:"#AD4537"
233-
});
257+
Swal.fire({
258+
title: "¡Datos Borrados!",
259+
text: "Tus cotizaciones realizadas han sido borradas.",
260+
icon: "warning",
261+
iconColor: "#AD4537",
262+
confirmButtonColor: "#4537AD"
263+
});
264+
// Lógica borrar
265+
procesoBorrado();
234266
}
235-
});
267+
});
236268
});
237-
/* Enviar Array */
269+
270+
// Enviar Array
238271
document.getElementById("enviar")
239272
.addEventListener("click", async () => {
240273
const { value: email } = await Swal.fire({
241-
title: "¿Te gustaría enviar la cotización realizada?",
242-
html: `Puedes <b>Enviar</b> lo cotizado hasta ahora`,
243-
icon: "info",
244-
iconColor:"#4537AD",
245-
input: "email",
246-
inputLabel: "Escribe tu dirección de correo",
247-
inputValue: "[email protected]",
248-
showCancelButton: true,
249-
confirmButtonColor: "#4537AD",
250-
cancelButtonColor: "#9B97B5",
251-
confirmButtonText: "Enviar"
252-
});if (email) {
253-
Swal.fire(`Entered email: ${email}`);
274+
title: "¿Te gustaría enviar la cotización realizada?",
275+
html: `Puedes <b>Enviar</b> lo cotizado hasta ahora`,
276+
icon: "info",
277+
iconColor: "#4537AD",
278+
input: "email",
279+
inputLabel: "Escribe tu dirección de correo",
280+
inputValue: "[email protected]",
281+
showCancelButton: true,
282+
confirmButtonColor: "#4537AD",
283+
cancelButtonColor: "#9B97B5",
284+
confirmButtonText: "Enviar"
285+
});
286+
287+
if (email) {
288+
// Aquí iría la lógica para enviar el email
289+
// Por ahora solo confirmamos
290+
Swal.fire({
291+
title:`Email enviado a: ${email}`,
292+
confirmButtonColor:"#4537AD"
293+
});
294+
console.log('Cotizaciones a enviar:', cotizacionesGuardadas);
254295
}
255296
});
256297
}
257298

299+
/* Función para borrar */
300+
301+
function procesoBorrado() {
302+
const resultadosDiv = document.getElementById('cotizacionDiv');
303+
resultadosDiv.innerHTML = '';
304+
resultadosDiv.classList.remove('show');
305+
cotizacionesGuardadas = [];
306+
contadorCotizaciones = 0;
307+
localStorage.removeItem('Cotizaciones');
308+
// Limpiar también el formulario
309+
document.getElementById('cotizacionForm').reset();
310+
}
311+
258312
/* Comunicación Cotización Rechazada */
259313

260314
function comunicarRechazo(dimensionMaxima, peso) {
@@ -275,53 +329,16 @@ function comunicarRechazo(dimensionMaxima, peso) {
275329
/* Comunicar Error en el HTML */
276330

277331
function comunicarError(mensaje) {
278-
const resultadosDiv = document.getElementById('cotizacionDiv');
279-
resultadosDiv.innerHTML = `
280-
<div class="error">
281-
${mensaje}
282-
</div>`;
283-
resultadosDiv.classList.add('show');
284-
resultadosDiv.scrollIntoView({ behavior: 'smooth' });
285-
}
286-
287-
288-
289-
// Limpiar los resultados cuando el usuario modifica un input
290-
document.querySelectorAll('input[type="number"]').forEach(input => {
291-
input.addEventListener('input', function borrarDatos() {
292-
document.getElementById('cotizacionDiv').classList.remove('show');
293-
});
294-
});
295-
296-
297-
298-
/* Transformar Datos */
299-
300-
function transformarDatos (largo, ancho, alto, peso, montoTotal){
301-
const procesandoDatos = {
302-
medidas: [{
303-
largo: `${largo}`,
304-
ancho: `${ancho}`,
305-
alto: `${alto}`,
306-
peso: `${peso}`,
307-
peso: `${montoTotal.toFixed(2)}`
308-
}]
309-
};
310-
// Convertimos el objeto carrito en una cadena JSON y lo almacenamos
311-
localStorage.setItem('Cotizacion', JSON.stringify(procesandoDatos));
312-
313-
// Recuperamos la cadena JSON del almacenamiento y la convertimos de nuevo a un objeto JavaScript
314-
const cotizacionAlmacenada = JSON.parse(localStorage.getItem('Cotizacion'));
315-
316-
// Ahora podemos acceder y manipular los datos del carrito como un objeto JavaScript
317-
console.log(`Esta es la información almacenada:`, cotizacionAlmacenada);
318-
319-
console.info(`Estamos procesando la cotización:`);
320-
console.info(`Medidas: ${largo} x ${ancho} x ${alto} cms`);
321-
console.info(`Peso: ${peso} kg`);
332+
Swal.fire({
333+
icon: "error",
334+
iconColor: "#AD4537",
335+
title: "¡Llegaste al límite!",
336+
text: mensaje,
337+
footer: '<p>Sigue usando nuestro cotizador</p>',
338+
confirmButtonColor: "#4537AD"
339+
});
322340
}
323341

324-
325342
/* Remoción de Nodos */
326343
//elementos que aún no se incorporan al cotizador
327344

0 commit comments

Comments
 (0)