diff --git a/Practicas/Practicas JS/DOM Alquiler Coche V2/index.html b/Practicas/Practicas JS/DOM Alquiler Coche V2/index.html index dae0827..4d5926c 100644 --- a/Practicas/Practicas JS/DOM Alquiler Coche V2/index.html +++ b/Practicas/Practicas JS/DOM Alquiler Coche V2/index.html @@ -4,24 +4,89 @@ + + + + Alquiler de coche -
-
-
-
+
+ +
+
-
- +
+
-
+
- -

Elementos Opcionales

+ +
+

Elementos Opcionales

+
+ + +
+
+ + +
+
+ +
+

Seguro

+

*** El seguro a terceros es obligatorio y tiene un coste de 10 €/dia + sin + IVA

+
+ + +
+
+ + +
+
+ -
- - -
- -
- - -
- -

Seguro

-

*** El seguro a terceros es obligatorio y tiene un coste de 10 €/dia sin IVA

-
- - -
- -
- - -
- -
- -
- -
- - - -
+ +
+
- - + +
+ + + +
+ +
diff --git a/Practicas/Practicas JS/DOM Alquiler Coche V2/index_con_js.html b/Practicas/Practicas JS/DOM Alquiler Coche V2/index_con_js.html new file mode 100644 index 0000000..4de7abb --- /dev/null +++ b/Practicas/Practicas JS/DOM Alquiler Coche V2/index_con_js.html @@ -0,0 +1,230 @@ + + + + + + + + + + + Alquiler de coche + + + +
+

Alquiler de vehículo

+
+
+
+ +
+
+ +
+
+
+ + +
+ +
+

Elementos Opcionales

+
+ + +
+
+ + +
+
+ +
+

Seguro

+

*** El seguro a terceros es obligatorio y tiene un coste de 10 €/dia sin IVA

+
+ + +
+
+ + +
+
+
+
+ +
+ +
+ + + +
+ +
+ + + \ No newline at end of file diff --git a/Practicas/Practicas JS/DOM Alquiler Coche V2/js/main.js b/Practicas/Practicas JS/DOM Alquiler Coche V2/js/main.js index 104bdc4..da769c8 100644 --- a/Practicas/Practicas JS/DOM Alquiler Coche V2/js/main.js +++ b/Practicas/Practicas JS/DOM Alquiler Coche V2/js/main.js @@ -1,76 +1,91 @@ -const diaInicio=document.getElementById("fechaInicio"); -const diaFin=document.getElementById("fechaFin"); -const gamaSeleccionada=document.getElementById("tipoVehiculo"); -const sillaInfantil=document.getElementById("sillainfantil"); -const gps=document.getElementById("gps"); -const seguroTr=document.getElementById("segurotr"); -const menor30=document.getElementById("menor30"); -const total=document.getElementById("total"); -const txtResumen= document.getElementById("resumen"); - - -const GAMAVEHICULOS=['basico','gama_media','lujo']; -const PVPALQUILERXDIA=[45,65,85]; -const PVPSEGUROTR=[15,25,35]; - -const IVA=1.21; - +const diaInicio = document.getElementById("fechaInicio"); +const diaFin = document.getElementById("fechaFin"); +const gamaSeleccionada = document.getElementById("tipoVehiculo"); +const sillaInfantil = document.getElementById("sillainfantil"); +const gps = document.getElementById("gps"); +const seguroTr = document.getElementById("segurotr"); +const menor30 = document.getElementById("menor30"); +const total = document.getElementById("total"); +const txtResumen = document.getElementById("resumen"); +const GAMAVEHICULOS = ["basico", "gama_media", "lujo"]; +const PVPALQUILERXDIA = [45, 65, 85]; +const PVPSEGUROTR = [15, 25, 35]; +const IVA = 1.21; function calculaAlquiler() { - let diasAlquiler=difFechasDias(diaInicio.value,diaFin.value) - let pvpAlquilerXGama = parseInt(valorXopcion(gamaSeleccionada.value,GAMAVEHICULOS,PVPALQUILERXDIA,0)*diasAlquiler) - let opcSillaInfantil = parseInt(totalXOpcion(sillaInfantil.checked,15,0)* diasAlquiler); - let opcGps = parseInt(totalXOpcion(gps.checked,5,0)* diasAlquiler); - let seguro = parseInt(totalXOpcion(seguroTr.checked,valorXopcion(gamaSeleccionada.value,GAMAVEHICULOS,PVPSEGUROTR,0),10)*diasAlquiler); + if (diaInicio.value === "" || diaFin.value === "") { + alert("Debe introducir una fecha en ambos campos"); + return; + } + const fechaInicio = new Date(diaInicio.value); + const fechaFin = new Date(diaFin.value); + if (fechaInicio.getTime() > fechaFin.getTime()) { + alert("La fecha de inicio debe ser anterior a la de fin"); + return; + } + + let diasAlquiler = difFechasDias(diaInicio.value, diaFin.value); + let pvpAlquilerXGama = parseInt(valorXopcion(gamaSeleccionada.value, GAMAVEHICULOS, PVPALQUILERXDIA, 0)*diasAlquiler); + let opcSillaInfantil = parseInt(totalXOpcion(sillaInfantil.checked, 15, 0)*diasAlquiler); + let opcGps = parseInt(totalXOpcion(gps.checked, 5, 0) * diasAlquiler); + let seguro = parseInt(totalXOpcion(seguroTr.checked,valorXopcion(gamaSeleccionada.value, GAMAVEHICULOS, PVPSEGUROTR, 0),10)*diasAlquiler); let pvpSinIva = diasAlquiler+pvpAlquilerXGama+opcSillaInfantil+opcGps+seguro; - let pvpConIva = parseFloat(pvpSinIva*IVA).toFixed(2); - if (menor30.checked){pvpConIva=(pvpConIva*1.30).toFixed(2)} - total.value=pvpConIva - - - - - diasEntrega= difFechasDias(new Date(),diaInicio.value) - generaResumen(diasEntrega, diaFin.value) - - - - + let pvpConIva = parseFloat(pvpSinIva * IVA); + if (menor30.checked) pvpConIva = pvpConIva * 1.3; + total.value = pvpConIva.toFixed(2); + generaResumen(pvpConIva); } -function generaResumen(diasEntrega, fechaEntrega, fechaAnulacion, costeAnulacion, extras){ - let mensaje=`Faltan ${diasEntrega} días para tu alquiler\nTu fecha de entrega del vehiculo es: ${fechaEntrega}` - txtResumen.value=mensaje +function generaResumen(pvpConIva) { + const diasEntrega = difFechasDias(new Date(), diaInicio.value); + const msgDiasEntrega = `Faltan ${diasEntrega} días para tu alquiler !\n`; + const msgFechaEntrega = "Tu fecha de entrega del vehiculo es: "+new Date(diaInicio.value).toLocaleString("es-ES", {day: "numeric",month: "numeric",year: "numeric",})+" !\n"; + const costeAnulacion = parseFloat(pvpConIva * 1.3).toFixed(2); + const msgAnulacion = diasEntrega >= 5 ? `El coste de la anulación será de ${costeAnulacion} euros !\n` : `No se puede anular al quedar solo ${diasEntrega} dias para la entega !\n`; + let msgExtras = "Tus extras son los siguientes: \n"; + if (sillaInfantil.checked) msgExtras += "Silla Infantil \n"; + if (gps.checked) msgExtras += "Gps \n"; + seguroTr.checked ? (msgExtras += "Has contratado seguro a todo riesgo ! \n") : (msgExtras += "Has contratado segurio basico !\n"); + if (menor30.checked) msgExtras += "Tienes recargo por ser menor de 30 años !\n"; + let mensaje = msgDiasEntrega + msgFechaEntrega + msgAnulacion + msgExtras; + txtResumen.value = mensaje; } - - -// ******************** // -// Funciones de Fechas // -// ******************** // /** * Devuelve la diferencia en dias entre fechas * @param {Date} fechaIni - Fecha inicial * @param {Date} fechaFin - Fecha final + * @returns number */ function difFechasDias(fechaIni, fechaFin) { - let dias = Math.ceil((new Date(fechaFin) - new Date(fechaIni)) / (1000 * 60 * 60 * 24)); + let dias = Math.ceil( + (new Date(fechaFin) - new Date(fechaIni)) / (1000 * 60 * 60 * 24) + ); return dias; } +/** + * Devuelve el valor del correspondiente a una opcion seleccionada + * valorXOpcion('d',['a','d','f'],[10,20,5],0) Devolveria 20 + * @param {*} opc - Opcion a bucar + * @param {*} opciones - Array de opciones + * @param {*} valores - Array de valores + * @param {*} valorDefecto - Valor defecto en caso de no encontrar la opcion + * @returns + */ -function valorXopcion(opc,opciones,valores,valorDefecto){ +function valorXopcion(opc, opciones, valores, valorDefecto) { const index = opciones.indexOf(opc); return index !== -1 ? valores[index] : valorDefecto; } - -function totalXOpcion(checked,valorChecked,valorUnchecked){ +function totalXOpcion(checked, valorChecked, valorUnchecked) { return checked ? valorChecked : valorUnchecked; } - - -function limpiarForm(){ +function submitForm() { + document.getElementById("formAlquiler").submit(); +} +function limpiarForm() { document.getElementById("formAlquiler").reset(); -} \ No newline at end of file +}