From 12e94c30e87a8269b5293f66a21acde49ff465bf Mon Sep 17 00:00:00 2001 From: Senad Uka Date: Wed, 4 Sep 2019 18:32:32 +0200 Subject: [PATCH] Duplicate charging fix --- controllers/integration.js | 4 ++-- services/officeRnD/fees.js | 26 ++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/controllers/integration.js b/controllers/integration.js index 7cfee70..d882457 100644 --- a/controllers/integration.js +++ b/controllers/integration.js @@ -121,11 +121,11 @@ const addFees = (req, res) => { checkBookingChanges() .then(() => { deleteFeesFromORD(dateRange, memberIds) - .then(() => { + .then((invoicedFees) => { // TODO: Change this to parallel execution getMembersFeesForDateRange(dateRange, memberIds) .then(({allFees, memberships}) => { - addFeesToORD(allFees) + addFeesToORD(allFees, invoicedFees) .then((numberOfInsertedFees) => { reformatMembershipsName(memberships) .then(() => { diff --git a/services/officeRnD/fees.js b/services/officeRnD/fees.js index a55a109..049a7a1 100644 --- a/services/officeRnD/fees.js +++ b/services/officeRnD/fees.js @@ -12,6 +12,8 @@ const deleteFeesFromORD = (dateRange, memberIds) => { const asyncDataFetch = [API.get('fees'), API.get('plans')]; + const invoicedFees = []; + Promise.all(asyncDataFetch) .then((responses) => { const feesResponse = responses[0]; @@ -48,12 +50,14 @@ const deleteFeesFromORD = (dateRange, memberIds) => { if (memberFeesShouldBeDeleted && isDateInDateRange && (status === UNPAID_FEE_STATUS) && !manuallyAddedFee) { feeIdsToRemove.push(feeId); + }else{ + invoicedFees.push(fee); } }); API.delete('fees', { data: feeIdsToRemove }) .then(() => { - resolve(true); + resolve(invoicedFees); }) .catch((error) => { console.log('error : ', error); @@ -67,14 +71,28 @@ const deleteFeesFromORD = (dateRange, memberIds) => { }); }; -const addFeesToORD = (allFees) => { +const addFeesToORD = (allFees, invoicedFees) => { return new Promise((resolve, reject) => { - API.post('/fees', allFees) + const isFeeNonInvoiced = (fee) => { + const { name: feeName, member: feeMember, team: feeTeam, office: feeOffice } = fee; + + const invoicedFeeObject = invoicedFees.find((invoicedFee) => { + const { name, member, team, office } = invoicedFee; + + return (name === feeName && member === feeMember && team === feeTeam && office === feeOffice ); + }); + + return !invoicedFeeObject; + }; + + const nonInvoicedFees = allFees.filter(isFeeNonInvoiced); + + API.post('/fees', nonInvoicedFees) .catch((error) => { console.log('==== ERROR ===='); console.log(error); }); - resolve(allFees.length); + resolve(nonInvoicedFees.length); }); };