105 lines
5.1 KiB
JavaScript
105 lines
5.1 KiB
JavaScript
'use strict';
|
|
|
|
const { fetchAllBookings, bulkWriteReservationsWithChangesTracking } = require('../officeRnD/bookings');
|
|
const { fetchResources } = require('../officeRnD/resources');
|
|
const { fetchRates } = require('../officeRnD/rates');
|
|
const { deleteBookingsRemovedFromORD } = require('./bookings');
|
|
const { officeRnDAPIErrors } = require('../../constants/constants');
|
|
const {
|
|
getIncidentsFromChanges,
|
|
bulkWriteBookingChangeIncidents,
|
|
getReservationsIncidentsForRemoval,
|
|
deleteBookingChangeIncidents,
|
|
} = require('./bookingChangeCharges');
|
|
const { bulkWriteChanges } = require('./bookingChangeLog');
|
|
|
|
const checkBookingChanges = () => {
|
|
return new Promise((resolve, reject) => {
|
|
const asyncFetchActions = [fetchAllBookings(), fetchResources(), fetchRates()];
|
|
Promise.all(asyncFetchActions)
|
|
.then((asyncData) => {
|
|
const reservations = asyncData[0];
|
|
const resources = asyncData[1];
|
|
const rates = asyncData[2];
|
|
|
|
const ratesMap = {};
|
|
rates.forEach(rate => {
|
|
const { rateId, price, weekendPrice } = rate;
|
|
ratesMap[rateId] = {
|
|
price,
|
|
weekendPrice
|
|
};
|
|
});
|
|
|
|
const resourcesMap = {};
|
|
resources.forEach(resource => {
|
|
const { resourceId, rate } = resource;
|
|
resource.price = ratesMap[rate] || {price: 0, weekendPrice: 0};
|
|
resourcesMap[resourceId] = resource;
|
|
});
|
|
|
|
const reservationsInORD = [];
|
|
reservations.forEach(reservation => {
|
|
const { reservationId } = reservation;
|
|
reservationsInORD.push(reservationId);
|
|
});
|
|
|
|
const asyncActions = [deleteBookingsRemovedFromORD(reservationsInORD), bulkWriteReservationsWithChangesTracking(reservations, resourcesMap)];
|
|
|
|
Promise.all(asyncActions)
|
|
.then((asyncActionResults) => {
|
|
const changes = asyncActionResults[1];
|
|
// console.log(changes);
|
|
bulkWriteChanges(changes)
|
|
.then(() => {
|
|
getIncidentsFromChanges(changes)
|
|
.then(({incidents, reservationsForAdditionalCheck}) => {
|
|
// console.log('=====INCIDENTS=====');
|
|
// console.log(incidents);
|
|
bulkWriteBookingChangeIncidents(incidents)
|
|
.then(() => {
|
|
getReservationsIncidentsForRemoval(reservationsForAdditionalCheck)
|
|
.then((incidentsToRemove) => {
|
|
deleteBookingChangeIncidents(incidentsToRemove)
|
|
.then(() => resolve(true))
|
|
.catch((error) => {
|
|
console.log('Error deleting incidents : ', error);
|
|
reject(error);
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
console.log('Failed to fetch reservations possible incidents for removal', error);
|
|
reject(error);
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
console.log('error', error);
|
|
reject(error);
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
console.log('Error creating charges ', error);
|
|
reject(error);
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
console.log('Error bulk write booking reservation change log :', error);
|
|
reject(error);
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
console.log('Error bulk write booking reservations :', error);
|
|
reject(error);
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
console.log('\t> [Check Booking Changes] Error fetching bookings, resources and rates from ORD ', error);
|
|
reject(officeRnDAPIErrors.FAILED_TO_FETCH_DATA);
|
|
});
|
|
});
|
|
};
|
|
|
|
module.exports = {
|
|
checkBookingChanges
|
|
};
|