This commit is contained in:
Marcos Lopez
2024-01-25 13:45:32 +01:00
parent af55650a42
commit a32d41503d
7 changed files with 401 additions and 1 deletions

View File

@@ -0,0 +1,28 @@
Hacer una aplicación que calcule el coste de alquiler de un vehículo con las siguientes condiciones:
- Input para indicar los días de alquiler.
- Selector de fecha de inicio del alquiler.
- Tres tipos de vehículo
Básico (45 Euros por día de alquiler)
Gama media (65 Euros por día de alquiler)
Lujo (85 Euros por día de alquiler)
- Elementos opcionales
Silla Infantil(15 Euros por día de alquiler)
Gps(5 Euros por día de alquiler)
- Seguro a terceros (10 Euros día)(Obligatorio, se informa al cliente).
- Seguro a todo riesgo (Opcional)
Para Básico (15 Euros por día de alquiler)
Para Gama media (25 Euros por día de alquiler)
Para Lujo (35 Euros por día de alquiler)
- Conductor con menos de 30 años (recargo de 30% sobre el precio final con Iva)
Debemos dar el precio final con IVA
Y mediante alerta el siguiente mensaje:
Faltan 2 días para tu alquiler !
Tu fecha de de entrega del vehículo es el 27/1/2024 !

View File

@@ -0,0 +1,59 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="./js/main.js"></script>
<title>Alquiler de coche</title>
</head>
<body>
<div style="display: flex; flex-direction: column; min-width: max-content; gap: 4px;">
<div>
<label for="diasAlquiler">Dias de alquiler </label><input type="number" name="diasAlquiler" id="diasAlquiler">
</div>
<div>
<label for="fechaInicio">Fecha de inicio del alquiler </label><input type="date" name="fechaInicio"
id="fechaInicio">
</div>
<div style="display: flex; gap: 2px;">
<label for="tipoVehiculo">Tipo de vehiculo</label>
<select name="tipoVehiculo" id="tipoVehiculo">
<option value='basico' selected>Basico (45€ dia)</option>
<option value='gama_media'>Gama media (65€ dia)</option>
<option value='lujo'>Lujo (85 dia)</option>
</select>
</div>
<div>
<input type="checkbox" name="sillaInfantil" id="sillaInfantil">
<label for="sillaInfantil">Silla infantil (15€ dia)</label>
</div>
<div>
<input type="checkbox" name="gps" id="gps">
<label for="gps">GPS (5€ dia)</label>
</div>
<div>
<div>
<input type="radio" name="seguro" value="10" checked required> Seguro a terceros obligatorio si no se
contrata otro superior (10€ dia)
</div>
<input type="radio" name="seguro" value="0"> Todo riesgo (15€ para basico 25€ para gamam media 35€ para lujo)
</div>
<div>
<input type="checkbox" name="menor30" id="menor30" required>
<label for="menor30">Menor de 30 años (Recargo del 30% sobre el precio final)</label>
</div>
<div>
<button onclick="calculaAlquiler()">Calcula total</button>
</div>
<span id="resultado"></span>
</div>
</body>
</html>

View File

@@ -0,0 +1,88 @@
function calculaAlquiler() {
const IVA = 1.21;
const resultado = document.getElementById("resultado");
const diasAlquiler = parseInt(document.getElementById("diasAlquiler").value);
const fechaInicio = new Date(document.getElementById("fechaInicio").value);
const diasHastaRecojer = diasDiferencia(fechaInicio);
//prettier-ignore
const eurXVehiculo = parseInt(eurXTipo(document.getElementById("tipoVehiculo").value));
//prettier-ignore
const sillaInfantil = document.getElementById("sillaInfantil").checked ? 15 : 0;
const gps = document.getElementById("gps").checked ? 5 : 0;
let seguro = parseInt(
document.querySelector('input[name="seguro"]:checked').value
);
if (seguro === 0) {
seguro = parseInt(
eurXSeguro(document.getElementById("tipoVehiculo").value)
);
}
const menor30 = document.getElementById("menor30").checked;
let pvpSinIva =
eurXVehiculo * diasAlquiler +
sillaInfantil * diasAlquiler +
gps * diasAlquiler +
seguro * diasAlquiler;
let pvpConIva = 0;
if (menor30 === true) {
pvpConIva = pvpSinIva * IVA * 1.3;
} else {
pvpConIva = pvpSinIva * IVA;
}
resultado.textContent = `El total final es: ${pvpConIva.toFixed(2)}`;
alert(
`Faltan ${diasHastaRecojer} dias para tu alquiler! \n Tu fecha de entrega del vehículo es el ${formatFecha(
fechaInicio
)} `
);
}
function eurXTipo(tipoVehiculo) {
let valor = 0;
switch (tipoVehiculo) {
case "basico":
valor = 45;
break;
case "gama_media":
valor = 65;
break;
case "lujo":
valor = 85;
break;
}
return valor;
}
function eurXSeguro(tipoVehiculo) {
let valor = 0;
switch (tipoVehiculo) {
case "basico":
valor = 15;
break;
case "gama_media":
valor = 25;
break;
case "lujo":
valor = 35;
break;
}
return valor;
}
function diasDiferencia(fechaFinal) {
const fechaActual = new Date();
return Math.ceil((fechaFinal - fechaActual) / (1000 * 60 * 60 * 24));
}
function formatFecha(fecha) {
var dia = fecha.getDate();
var mes = fecha.getMonth() + 1;
var ano = fecha.getFullYear();
return `${dia}/${mes}/${ano}`;
}