Files
old-crm-integration/services/integration/checkBookingChange.js

105 lines
5.1 KiB
JavaScript
Raw Normal View History

2019-07-25 06:53:32 +02:00
'use strict';
const { fetchAllBookings, bulkWriteReservationsWithChangesTracking } = require('../officeRnD/bookings');
2019-10-03 12:21:16 +02:00
const { fetchResources } = require('../officeRnD/resources');
const { fetchRates } = require('../officeRnD/rates');
const { deleteBookingsRemovedFromORD } = require('./bookings');
const { officeRnDAPIErrors } = require('../../constants/constants');
2019-08-26 05:03:16 +02:00
const {
getIncidentsFromChanges,
bulkWriteBookingChangeIncidents,
getReservationsIncidentsForRemoval,
deleteBookingChangeIncidents,
} = require('./bookingChangeCharges');
2019-07-25 06:53:32 +02:00
const { bulkWriteChanges } = require('./bookingChangeLog');
const checkBookingChanges = () => {
return new Promise((resolve, reject) => {
2019-10-03 12:21:16 +02:00
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 => {
2019-10-28 20:35:34 +01:00
const { rateId, price, weekendPrice } = rate;
ratesMap[rateId] = {
price,
weekendPrice
};
2019-10-03 12:21:16 +02:00
});
const resourcesMap = {};
resources.forEach(resource => {
const { resourceId, rate } = resource;
2019-10-28 20:35:34 +01:00
resource.price = ratesMap[rate] || {price: 0, weekendPrice: 0};
2019-10-03 12:21:16 +02:00
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);
2019-07-25 06:53:32 +02:00
bulkWriteChanges(changes)
.then(() => {
2019-08-26 05:03:16 +02:00
getIncidentsFromChanges(changes)
.then(({incidents, reservationsForAdditionalCheck}) => {
// console.log('=====INCIDENTS=====');
// console.log(incidents);
2019-08-26 05:03:16 +02:00
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);
});
2019-07-25 06:53:32 +02:00
})
.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);
2019-07-25 06:53:32 +02:00
});
});
};
module.exports = {
checkBookingChanges
};