Name in the fee / bugfixes

This commit is contained in:
Senad Uka
2019-08-27 09:43:37 +02:00
parent 2403b57060
commit ad75ea127c
4 changed files with 91 additions and 29 deletions

View File

@@ -60,6 +60,7 @@ const officeRnDAPIErrors = {
FAILED_TO_FETCH_FEES: 'Failed to fetch existing fees', FAILED_TO_FETCH_FEES: 'Failed to fetch existing fees',
FAILED_TO_DELETE_FEES: 'Failed to delete fees in ORD', FAILED_TO_DELETE_FEES: 'Failed to delete fees in ORD',
FAILED_TO_ADD_FEES: 'Failed to add fees in ORD', FAILED_TO_ADD_FEES: 'Failed to add fees in ORD',
MEMBERSHIPS_ARE_NOT_LOADED_CORRECTLY: 'Memberships are not loaded correctly',
}; };
const integrationServiceErrors = { const integrationServiceErrors = {
PROCESSING_TRY_AGAIN: 'Incident calculations are in progress. Please try again in a few minutes', PROCESSING_TRY_AGAIN: 'Incident calculations are in progress. Please try again in a few minutes',
@@ -70,6 +71,7 @@ const integrationServiceErrors = {
INVALID_DATE_RANGE: 'Dates in date range are invalid', INVALID_DATE_RANGE: 'Dates in date range are invalid',
FAILED_TO_GENERATE_MEMBER_PRACTICE_SUMMARY: 'Failed to generate Member Practice Summary', FAILED_TO_GENERATE_MEMBER_PRACTICE_SUMMARY: 'Failed to generate Member Practice Summary',
ERRORS_IN_MEMBER_PRACTICE_SUMMARY_REPORT: 'Member Practice Summary Report is generated but there were some errors and report may be incomplete', ERRORS_IN_MEMBER_PRACTICE_SUMMARY_REPORT: 'Member Practice Summary Report is generated but there were some errors and report may be incomplete',
EXPECTED_MEMBER_IDS_ARRAY: 'Expected array of member IDs',
}; };
const incidentType = { const incidentType = {

View File

@@ -6,6 +6,7 @@ const { getMappingsFromDatabase, fetchOffices, fetchResources, saveNewMappingToD
const { getAllIncidents, getMemberPracticeSummaryReport } = require('../services/integration/reports'); const { getAllIncidents, getMemberPracticeSummaryReport } = require('../services/integration/reports');
const { getMembersFeesForDateRange } = require('../services/integration/invoiceIntegration'); const { getMembersFeesForDateRange } = require('../services/integration/invoiceIntegration');
const { deleteFeesFromORD, addFeesToORD } = require('../services/officeRnD/fees'); const { deleteFeesFromORD, addFeesToORD } = require('../services/officeRnD/fees');
const { reformatMembershipsName } = require('../services/officeRnD/memberships');
const { checkBookingChanges } = require('../services/integration/checkBookingChange'); const { checkBookingChanges } = require('../services/integration/checkBookingChange');
const { checkIfProcessing } = require('../services/integration/processingStatus'); const { checkIfProcessing } = require('../services/integration/processingStatus');
@@ -85,13 +86,21 @@ const addFees = (req, res) => {
.then(() => { .then(() => {
// TODO: Change this to parallel execution // TODO: Change this to parallel execution
getMembersFeesForDateRange(dateRange, memberIds) getMembersFeesForDateRange(dateRange, memberIds)
.then((allFees) => { .then(({allFees, memberships}) => {
addFeesToORD(allFees) addFeesToORD(allFees)
.then((numberOfInsertedFees) => { .then((numberOfInsertedFees) => {
res.send({ reformatMembershipsName(memberships)
status: 'ok', .then(() => {
numberOfInsertedFees res.send({
}); status: 'ok',
numberOfInsertedFees
});
})
.catch((error) => {
console.log('Error reformatting memberships name');
console.log(error);
res.status(500).send(error);
})
}) })
.catch((error) => { .catch((error) => {
console.log('Error adding fees'); console.log('Error adding fees');

View File

@@ -8,7 +8,7 @@ const { getAllBookingsForMembersInDateRange } = require('./bookings');
const { DEFAULT_DATE_FORMAT, UI_TIMEZONE, incidentTypeExplanations, incidentType, unlockedIncidentLevelsPrices } = require('../../constants/constants'); const { DEFAULT_DATE_FORMAT, UI_TIMEZONE, incidentTypeExplanations, incidentType, unlockedIncidentLevelsPrices } = require('../../constants/constants');
const { getResourceMappings } = require('../officeRnD/resources'); const { getResourceMappings } = require('../officeRnD/resources');
const { fetchAllMembers } = require('../officeRnD/members'); const { fetchAllMembers } = require('../officeRnD/members');
const { fetchAllMembershipsAsMap } = require('../officeRnD/memberships'); const { fetchAllMembershipsForMemberIds } = require('../officeRnD/memberships');
const { discounts, DISCOUNT_PLANS } = require('../../constants/constants'); const { discounts, DISCOUNT_PLANS } = require('../../constants/constants');
const createFeeFromIncident = (incident) => { const createFeeFromIncident = (incident) => {
@@ -280,7 +280,7 @@ const createNegativeFeeForDiscount = (memberData, dateRange) => {
const getMembersFeesForDateRange = (dateRange, memberIds) => { const getMembersFeesForDateRange = (dateRange, memberIds) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const collectData = [getAllIncidents(dateRange, memberIds), getAllBookingsForMembersInDateRange(dateRange, memberIds), getResourceMappings(), fetchAllMembers(), fetchAllMembershipsAsMap()]; const collectData = [getAllIncidents(dateRange, memberIds), getAllBookingsForMembersInDateRange(dateRange, memberIds), getResourceMappings(), fetchAllMembers(), fetchAllMembershipsForMemberIds(memberIds)];
Promise.all(collectData) Promise.all(collectData)
.then((result) => { .then((result) => {
@@ -288,7 +288,23 @@ const getMembersFeesForDateRange = (dateRange, memberIds) => {
const allBookings = result[1]; const allBookings = result[1];
const resourceMappings = result[2]; const resourceMappings = result[2];
const membersList = result[3]; const membersList = result[3];
const membershipsMap = result[4]; const memberships = result[4];
const membershipsMap = {};
memberships.forEach((membership) => {
const { price, name, member } = membership;
if (!membershipsMap[member]) {
membershipsMap[member] = [{
price,
name,
}];
}else{
membershipsMap[member].push({
price,
name,
});
}
});
const membersMap = {}; const membersMap = {};
const oneMemberObject = { const oneMemberObject = {
@@ -428,10 +444,17 @@ const getMembersFeesForDateRange = (dateRange, memberIds) => {
}); });
allFees.forEach((fee) => { allFees.forEach((fee) => {
fee.team = memberIdTeamMappings[fee.member] || null; const { member } = fee;
const { teamId, name: memberName} = membersMap[member].member;
fee.team = memberIdTeamMappings[member] || null;
if (teamId){
//if member is part of the company, add name to the fee description/name
fee.name += `, ${memberName}`;
}
}); });
resolve(allFees); resolve({allFees, memberships});
}) })
.catch((error) => { .catch((error) => {

View File

@@ -1,28 +1,26 @@
'use strict'; 'use strict';
const { API } = require('../../helpers/api'); const { API } = require('../../helpers/api');
const { DISCOUNT_PLANS, officeRnDAPIErrors, integrationServiceErrors } = require('../../constants/constants');
const fetchAllMembershipsAsMap = () => { const fetchAllMembershipsForMemberIds = (memberIds) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
API.get('/memberships') API.get('/memberships')
.then((result) => { .then((result) => {
const membershipsMap = {};
const memberships = result.data || []; const memberships = result.data || [];
memberships.forEach((membership) => {
const { price, name, member } = membership; if (Array.isArray(memberIds)){
if (!membershipsMap[member]) { const filteredMemberships = [];
membershipsMap[member] = [{ memberships.forEach((membership) => {
price, const { member } = membership;
name, if (memberIds.indexOf(member) !== -1){
}]; filteredMemberships.push(membership);
}else{ }
membershipsMap[member].push({ });
price, resolve(filteredMemberships);
name, }else{
}); reject(integrationServiceErrors.EXPECTED_MEMBER_IDS_ARRAY);
} }
});
resolve(membershipsMap);
}) })
.catch((error) => { .catch((error) => {
reject(error); reject(error);
@@ -30,6 +28,36 @@ const fetchAllMembershipsAsMap = () => {
}); });
}; };
module.exports = { const reformatMembershipsName = (memberships) => {
fetchAllMembershipsAsMap, return new Promise((resolve, reject) => {
const asyncMembershipUpdates = [];
if (Array.isArray(memberships)){
memberships.forEach((membership) => {
const { name, _id } = membership;
if (name && name.length > 0 && name[0] !== '['){
DISCOUNT_PLANS.forEach((discountPlan) => {
if (name === discountPlan){
asyncMembershipUpdates.push(API.put(`memberships/${_id}`, {name: `[${name}]`}));
}
});
}
});
Promise.all(asyncMembershipUpdates)
.then(() => {
resolve(true);
})
.catch((error) => reject(error));
}else{
reject(officeRnDAPIErrors.MEMBERSHIPS_ARE_NOT_LOADED_CORRECTLY);
}
});
};
module.exports = {
fetchAllMembershipsForMemberIds,
reformatMembershipsName
}; };