Dia 35
This commit is contained in:
@@ -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 !
|
||||
59
Practicas/Practicas JS/DOM Alquiler Coche/index.html
Normal file
59
Practicas/Practicas JS/DOM Alquiler Coche/index.html
Normal 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>
|
||||
88
Practicas/Practicas JS/DOM Alquiler Coche/js/main.js
Normal file
88
Practicas/Practicas JS/DOM Alquiler Coche/js/main.js
Normal 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}`;
|
||||
}
|
||||
Reference in New Issue
Block a user