'use strict'; const { fetchAllBookings, bulkWriteReservationsWithChangesTracking } = require('../officeRnD/bookings'); const { fetchResources } = require('../officeRnD/resources'); const { fetchRates } = require('../officeRnD/rates'); 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 } = rate; ratesMap[rateId] = price; }); const resourcesMap = {}; resources.forEach(resource => { const { resourceId, rate } = resource; resource.price = ratesMap[rate] || 0; resourcesMap[resourceId] = resource; }); bulkWriteReservationsWithChangesTracking(reservations, resourcesMap) .then((changes) => { bulkWriteChanges(changes) .then(() => { getIncidentsFromChanges(changes) .then(({incidents, reservationsForAdditionalCheck}) => { 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 };