SISTEMA RESERVACIONES DE HOTEL
unknown
javascript
2 years ago
5.2 kB
4
Indexable
function hotelSystem(rooms) { let reservations = []; function reformatDateMMDD(value){ //CONVERTIRMOS A FORMATO DE FECHA QUE JAVASCRIPT PUEDA LEER (MM/DD/YYYY) ******** value.split(""); let dd = value[0]+value[1]; let mm = value[3]+value[4]; value=mm+"/"+dd+"/2023"; return value; } function reformatDateDDMM(value){ //CONVERTIRMOS A FORMATO DE FECHA (DD/MM) *************************************** value.split(""); let mm = value[0]+value[1]; let dd = value[3]+value[4]; value=dd+"/"+mm; return value; } function addReservation(reservation) { // FUNCIÓN PARA AGREGAR RESERVACIÓN ***************************************** if (reservation.roomNumber > rooms || reservation.roomNumber <= 0) { //VERIFICAMOS QUE EL ROOM SOLICITADO EXISTA throw Error("El numero de cuarto no existe"); } if (reservations.some(element => { return element.id === reservation.id})){ //VERIFICAR EL ID throw Error("El id esta repetido"); } if (reservations.length === 0){ //SI EL ARRAY DE RESERVACIONES ESTA VACIO SE REGISTRA SIN CONSULTAS reservations.push(reservation); }else{ //SI EL ARRAY TIENE RESERVACIONES VERIFICAMOS QUE LA FECHA NO CHOQUE let checkIn = reformatDateMMDD(reservation.checkIn); let checkOut = reformatDateMMDD(reservation.checkOut); let roomAvailable = reservations.some(element => { return element.roomNumber === reservation.roomNumber //VERIFICAMOS SI EL CUARTO SOLICITADO ESTA RESERVADO (EN OTRA FECHA) }); if (roomAvailable){ //SI EL CUARTO ESTA RESERVADO VERIFICAMOS QUE LA FECHA NO CHOQUE CON LA NUEVA RESERVACION if (available = reservations.some(element => { let checkInReservated = reformatDateMMDD(element.checkIn); let checkOutReservated = reformatDateMMDD(element.checkOut); return (checkOutReservated < checkIn || checkInReservated > checkOut); //VERIFICAMOS SI CHOCA LA FECHA SOLICITADA CON OTRA })){ reservations.push(reservation); //SI LA FECHA SOLICITADA NO CHOCA SE REGISTRA LA RESERVACION }else{ throw new Error("La habitación no está disponible"); //SI LA HABITACION CHOCA CON OTRA RESERVACION SE LANZA UN ERROR } }else{ reservations.push(reservation) //SI EL CUARTO AUN NO HA SIDO RESERVADO LO REGISTRA } } } function searchReservation(id){ // FUNCIÓN PARA BUSCAR RESERVACIÓN *************************************************** let status = reservations.findIndex(element => { return element.id === id; }); if (status >= 0){ return reservations[status]} else {throw Error("La reservación no fue encontrada")} } function getSortReservations(){ // FUNCIÓN PARA ORDERNAR RESERVACIONES DE MANERA ASC ********************************* let orderReservations = reservations.map(element => element); orderReservations.forEach(element => element.checkIn = reformatDateMMDD(element.checkIn)); orderReservations.sort((a,b) => new Date(a.checkIn) - new Date(b.checkIn)); orderReservations.forEach(element => element.checkIn = reformatDateDDMM(element.checkIn)); return console.log(orderReservations); } function removeReservation(id){ // FUNCIÓN PARA ELIMINAR UNA RESERVACION ********************************************* let status = reservations.findIndex(element => { return element.id === id; }); let deleted = reservations[status]; if (status >= 0){reservations.splice(status)} else {throw Error("La reservación que se busca remover no existe")} return deleted; } function getReservations(){ // FUNCIÓN PARA VER LAS RESERVACIONES **************************************************** return reservations; } function getAvailableRooms(checkIn, checkOut){ // FUNCIÓN PARA VER LAS HABITACIONES DISPONIBLES EN UN RANGO DE FECHAS * checkIn = reformatDateMMDD(checkIn); checkOut = reformatDateMMDD(checkOut); let availablesRooms=[]; for (let i = 0; i<rooms; i++){ availablesRooms[i]=i+1; } reservations.forEach(element => { let checkInReservated = reformatDateMMDD(element.checkIn); let checkOutReservated = reformatDateMMDD(element.checkOut); if (!(checkOutReservated < checkIn || checkInReservated > checkOut)){ let status = availablesRooms.findIndex(room => { return room === element.roomNumber; }); console.log("Eliminar index: "+status); if (status>=0){ availablesRooms.splice(status,1); } } }); return availablesRooms; } return {addReservation, searchReservation, getSortReservations, removeReservation, getReservations, getAvailableRooms}; }
Editor is loading...