From 63b8e644596ae480f90a9debe5103ce3fa4e366c Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Thu, 5 Sep 2019 09:31:35 +0200 Subject: [PATCH 1/3] add ENV variable and load to the system to use custom prefixes --- constants/constants.js | 3 +++ environment.env | 2 ++ 2 files changed, 5 insertions(+) diff --git a/constants/constants.js b/constants/constants.js index 222f0cd..3c9f7f2 100644 --- a/constants/constants.js +++ b/constants/constants.js @@ -123,6 +123,8 @@ const discounts = { }; const DISCOUNT_PLANS = process.env.DISCOUNT_PLANS.split(',').map(planName => planName.trim()) || []; +const CUSTOM_FEES_PREFIXES = process.env.CUSTOM_FEES_PREFIXES.split(',').map(prefix => prefix.trim()) || []; + const UNPAID_FEE_STATUS = 'not_paid'; module.exports = { @@ -148,4 +150,5 @@ module.exports = { discounts, DISCOUNT_PLANS, UNPAID_FEE_STATUS, + CUSTOM_FEES_PREFIXES, }; diff --git a/environment.env b/environment.env index d128134..826e022 100644 --- a/environment.env +++ b/environment.env @@ -37,6 +37,8 @@ ORD_OAUTH_CLIENT_ID=Client ID for this app, created in ORD; Used to obtain OAUTH ORD_OAUTH_CLIENT_SECRET=Client secret for this app; Used to obtain OAUTH token ORD_OAUTH_URL=https://identity.officernd.com/oauth/token +CUSTOM_FEES_PREFIXES=Array of prefixes to recognize manually added fees. Comma-separated + #More about pool option : http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html DB_POOL_MAX_CONNECTIONS=Maximum number of connection in pool (ex. 18) DB_POOL_ACQUIRE=The maximum time, in milliseconds, that pool will try to get connection before throwing error (ex. 120000) From 50cd3f56b0fd0a8267e29c9589acf7b898f7e6f5 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Thu, 5 Sep 2019 09:41:54 +0200 Subject: [PATCH 2/3] filter empty prefixes --- constants/constants.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/constants/constants.js b/constants/constants.js index 3c9f7f2..9ed4a5c 100644 --- a/constants/constants.js +++ b/constants/constants.js @@ -123,7 +123,9 @@ const discounts = { }; const DISCOUNT_PLANS = process.env.DISCOUNT_PLANS.split(',').map(planName => planName.trim()) || []; -const CUSTOM_FEES_PREFIXES = process.env.CUSTOM_FEES_PREFIXES.split(',').map(prefix => prefix.trim()) || []; +const CUSTOM_FEES_PREFIXES = process.env.CUSTOM_FEES_PREFIXES.split(',') + .map(prefix => prefix.trim()) + .filter(prefix => prefix && prefix.length ? prefix.length > 0 : false) || []; const UNPAID_FEE_STATUS = 'not_paid'; From a3a5e7c244b11eed9abb6329f5b4780f288cb2bf Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Thu, 5 Sep 2019 10:04:07 +0200 Subject: [PATCH 3/3] detect and skip fees with custom prefixes when deleting --- services/officeRnD/fees.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/services/officeRnD/fees.js b/services/officeRnD/fees.js index 049a7a1..6d421fe 100644 --- a/services/officeRnD/fees.js +++ b/services/officeRnD/fees.js @@ -3,7 +3,7 @@ const moment = require('moment-timezone'); const { API } = require('../../helpers/api'); -const { officeRnDAPIErrors, DEFAULT_DATE_FORMAT, UNPAID_FEE_STATUS } = require('../../constants/constants'); +const { officeRnDAPIErrors, DEFAULT_DATE_FORMAT, UNPAID_FEE_STATUS, CUSTOM_FEES_PREFIXES } = require('../../constants/constants'); const deleteFeesFromORD = (dateRange, memberIds) => { return new Promise((resolve, reject) => { @@ -12,7 +12,7 @@ const deleteFeesFromORD = (dateRange, memberIds) => { const asyncDataFetch = [API.get('fees'), API.get('plans')]; - const invoicedFees = []; + const feesToSkip = []; Promise.all(asyncDataFetch) .then((responses) => { @@ -45,19 +45,27 @@ const deleteFeesFromORD = (dateRange, memberIds) => { const feeId = fee['_id']; const isDateInDateRange = startDate.isSameOrBefore(date) && endDate.isSameOrAfter(date); - const manuallyAddedFee = manualFeeNames.indexOf(name) !== -1; + let manuallyAddedFee = false; + if (manualFeeNames.indexOf(name) === -1){ + if (name && name[0] && CUSTOM_FEES_PREFIXES.indexOf(name[0]) !== -1){ + manuallyAddedFee = true; + } + }else{ + manuallyAddedFee = true; + } + const memberFeesShouldBeDeleted = filterByMemberIds ? memberIdsMap[member] : true; if (memberFeesShouldBeDeleted && isDateInDateRange && (status === UNPAID_FEE_STATUS) && !manuallyAddedFee) { feeIdsToRemove.push(feeId); }else{ - invoicedFees.push(fee); + feesToSkip.push(fee); } }); API.delete('fees', { data: feeIdsToRemove }) .then(() => { - resolve(invoicedFees); + resolve(feesToSkip); }) .catch((error) => { console.log('error : ', error);