From 5c5931f3ed8702e86fc2d1a9f2e9074a4d5674a1 Mon Sep 17 00:00:00 2001 From: Senad Uka Date: Thu, 3 Oct 2019 12:21:16 +0200 Subject: [PATCH] NaN bug fix --- .../components/SingleIncidentsTable.js | 2 +- services/integration/checkBookingChange.js | 28 ++++++++++++++++--- services/officeRnD/bookings.js | 16 +++++++++-- services/officeRnD/rates.js | 26 +++++++++++++++++ services/officeRnD/resources.js | 1 + 5 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 services/officeRnD/rates.js diff --git a/client/src/components/MemberIncidentsTables/components/SingleIncidentsTable.js b/client/src/components/MemberIncidentsTables/components/SingleIncidentsTable.js index 8ebef5d..7219cc1 100644 --- a/client/src/components/MemberIncidentsTables/components/SingleIncidentsTable.js +++ b/client/src/components/MemberIncidentsTables/components/SingleIncidentsTable.js @@ -118,7 +118,7 @@ const SingleIncidentsTable = props => { } break; case 'totalChargeFee': - const totalFee = props.value ? props.value : props.row['_original'].incidentPrice; + const totalFee = (props.row['_original'].incidentPrice || props.value) || 0; const totalFeeFormatted = parseFloat(totalFee).toFixed(2); cellValue = `$ ${totalFeeFormatted}`; columnContentsAlignment = columnAlignments.right; diff --git a/services/integration/checkBookingChange.js b/services/integration/checkBookingChange.js index 2bb1031..bd7fa95 100644 --- a/services/integration/checkBookingChange.js +++ b/services/integration/checkBookingChange.js @@ -1,6 +1,8 @@ 'use strict'; const { fetchAllBookings, bulkWriteReservationsWithChangesTracking } = require('../officeRnD/bookings'); +const { fetchResources } = require('../officeRnD/resources'); +const { fetchRates } = require('../officeRnD/rates'); const { getIncidentsFromChanges, @@ -12,9 +14,27 @@ const { bulkWriteChanges } = require('./bookingChangeLog'); const checkBookingChanges = () => { return new Promise((resolve, reject) => { - fetchAllBookings() - .then((reservations) => { - bulkWriteReservationsWithChangesTracking(reservations) + 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(() => { @@ -57,7 +77,7 @@ const checkBookingChanges = () => { }); }) .catch((error) => { - console.log('Error fetching bookings from ORD ', error); + console.log('Error fetching bookings, resources and rates from ORD ', error); reject(error); }); }); diff --git a/services/officeRnD/bookings.js b/services/officeRnD/bookings.js index c4ae11a..e38fb81 100644 --- a/services/officeRnD/bookings.js +++ b/services/officeRnD/bookings.js @@ -165,7 +165,7 @@ const writeBookingReservation = (bookingReservation) => { return db.bookingReservation.findOrCreate({where: {...bookingReservationForDB}, defaults: {...bookingReservationForDB}}); }; -const bulkWriteReservationsWithChangesTracking = (reservations) => { +const bulkWriteReservationsWithChangesTracking = (reservations, resourcesMap) => { return new Promise ((resolve, reject) => { const changes = []; const asyncJobs = []; @@ -184,8 +184,18 @@ const bulkWriteReservationsWithChangesTracking = (reservations) => { } }); - if (instance.hourlyRate === 0 && parseFloat(instance.previous('hourlyRate')) > 0){ - instance.setDataValue('hourlyRate', instance.previous('hourlyRate')); + const previousResourceId = instance.previous('resourceId'); + const currentResourceId = instance.resourceId; + + const resourceId = currentResourceId ? currentResourceId : previousResourceId; + + if (instance.hourlyRate === 0 || isNaN(instance.hourlyRate)){ + if (parseFloat(instance.previous('hourlyRate') > 0)) { + instance.setDataValue('hourlyRate', instance.previous('hourlyRate')); + }else{ + const hourlyRate = resourceId ? resourcesMap[resourceId].price : 0; + instance.setDataValue('hourlyRate', hourlyRate); + } } if (realChange){ diff --git a/services/officeRnD/rates.js b/services/officeRnD/rates.js new file mode 100644 index 0000000..e78b953 --- /dev/null +++ b/services/officeRnD/rates.js @@ -0,0 +1,26 @@ +'use strict'; +const { API } = require('../../helpers/api'); + +const fetchRates = () => { + return new Promise((resolve, reject) => { + API.get('/rates') + .then((result) => { + const rates = result.data || []; + const cleanedRates = []; + rates.forEach(rate => { + cleanedRates.push({ + rateId: rate['_id'], + price: rate.price, + }); + }); + resolve(cleanedRates); + }) + .catch((error) => { + reject(error); + }); + }); +}; + +module.exports = { + fetchRates +}; diff --git a/services/officeRnD/resources.js b/services/officeRnD/resources.js index 918bc68..6f6ed47 100644 --- a/services/officeRnD/resources.js +++ b/services/officeRnD/resources.js @@ -35,6 +35,7 @@ const fetchResources = () => { resourceId: resource['_id'], resourceName: resource.name, officeId: resource.office, + rate: resource.rate, }); }); resolve(cleanedResources);