diff --git a/constants/constants.js b/constants/constants.js index 9ccad10..03443e5 100644 --- a/constants/constants.js +++ b/constants/constants.js @@ -68,6 +68,7 @@ const incidentType = { UNSCHEDULED_INCIDENT_STANDALONE: 6, BOOKING_MOVED_TO_ANOTHER_DAY: 7, BOOKING_SHORTENED: 8, + BOOKING_CANCELED_LATE: 9, }; const UI_TIMEZONE = process.env.UI_TIMEZONE || 'America/Los_Angeles'; diff --git a/services/integration/bookingChangeCharges.js b/services/integration/bookingChangeCharges.js index 4b208e0..5163d74 100644 --- a/services/integration/bookingChangeCharges.js +++ b/services/integration/bookingChangeCharges.js @@ -35,7 +35,8 @@ const chargeBookingChanges = (changes) => { const newEnd = newReservation.end ? moment.utc(newReservation.end) : null; const reservationTimezone = newReservation.timezone ? newReservation.timezone : UI_TIMEZONE; - const reservationHourlyRate = newReservation.hourlyRate ? newReservation.hourlyRate : undefined; + const reservationHourlyRate = oldReservation.hourlyRate ? oldReservation.hourlyRate : undefined; + const canceled = newReservation.canceled; if (oldStart && oldEnd && newStart && newEnd && reservationHourlyRate){ const oldReservationLength = oldEnd.diff(oldStart, 'hours', true); @@ -43,60 +44,75 @@ const chargeBookingChanges = (changes) => { const differenceFromNow = oldStart.diff(moment.utc(), 'hours'); - if (differenceFromNow && (differenceFromNow < 24)){ + if (differenceFromNow < 24){ // Changed reservation that was within 24hrs from now + const { reservationId, memberId, resourceId } = newReservation; - // Check if new reservation is on same day - const sameDay = oldStart.tz(reservationTimezone).isSame(newStart.tz(reservationTimezone), 'day'); + if (!canceled) { + // Check if new reservation is on same day + const sameDay = oldStart.tz(reservationTimezone).isSame(newStart.tz(reservationTimezone), 'day'); - const { reservationId, memberId, resourceId, hourlyRate } = newReservation; + if (sameDay) { + // Reservation moved in same day + // Check if member shortened the reservation - if (sameDay){ - // Reservation moved in same day - // Check if member shortened the reservation + if (newReservationLength < oldReservationLength) { + const differenceInLength = oldReservationLength - newReservationLength; + const chargeFee = differenceInLength * reservationHourlyRate * BOOKING_CHANGE_PERCENTAGE_CHARGE / 100; - if (newReservationLength < oldReservationLength){ - const differenceInLength = oldReservationLength - newReservationLength; - const chargeFee = differenceInLength*hourlyRate*BOOKING_CHANGE_PERCENTAGE_CHARGE/100; + const incident = { + reservationId, + memberId, + oldResourceId: oldResourceId || resourceId, + newResourceId: resourceId, + oldBookingStart: oldReservation.start, + oldBookingEnd: oldReservation.end, + newBookingStart: newReservation.start, + newBookingEnd: newReservation.end, + incidentType: incidentType.BOOKING_SHORTENED, + chargeFee, + }; + + incidents.push(incident); + } + } else { + // Reservation moved to another day + // Add cancellation charge + const chargeFee = oldReservationLength * reservationHourlyRate * BOOKING_CHANGE_PERCENTAGE_CHARGE / 100; const incident = { reservationId, memberId, - oldResourceId: oldResourceId || newReservation.resourceId, - newResourceId: newReservation.resourceId, + oldResourceId: oldResourceId || resourceId, + newResourceId: resourceId, oldBookingStart: oldReservation.start, oldBookingEnd: oldReservation.end, newBookingStart: newReservation.start, newBookingEnd: newReservation.end, - incidentType: incidentType.BOOKING_SHORTENED, + incidentType: incidentType.BOOKING_MOVED_TO_ANOTHER_DAY, chargeFee, }; incidents.push(incident); } }else{ - // Reservation moved to another day - // Add cancellation charge - const chargeFee = oldReservationLength*hourlyRate*BOOKING_CHANGE_PERCENTAGE_CHARGE/100; - + const chargeFee = 2 * reservationHourlyRate * oldReservationLength * BOOKING_CHANGE_PERCENTAGE_CHARGE / 100; const incident = { reservationId, memberId, - oldResourceId: oldResourceId || newReservation.resourceId, - newResourceId: newReservation.resourceId, + oldResourceId: oldResourceId || resourceId, + newResourceId: null, oldBookingStart: oldReservation.start, oldBookingEnd: oldReservation.end, - newBookingStart: newReservation.start, - newBookingEnd: newReservation.end, - incidentType: incidentType.BOOKING_MOVED_TO_ANOTHER_DAY, + newBookingStart: null, + newBookingEnd: null, + incidentType: incidentType.BOOKING_CANCELED_LATE, chargeFee, }; incidents.push(incident); } } - }else{ - // New reservation or canceled, not an incident } } }); diff --git a/services/officeRnD/bookings.js b/services/officeRnD/bookings.js index d6c028c..d63d991 100644 --- a/services/officeRnD/bookings.js +++ b/services/officeRnD/bookings.js @@ -184,6 +184,8 @@ const bulkWriteReservationsWithChangesTracking = (reservations) => { } }); + instance.setDataValue('hourlyRate', previous.hourlyRate); + if (realChange){ changes.push({ oldReservation: previous,