From dd4d909b5d1df571fafdef22eae66efd2f801feb Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Wed, 14 Aug 2019 12:02:04 +0200 Subject: [PATCH] add plan name filter for discount --- constants/constants.js | 2 ++ environment.env | 1 + services/integration/invoiceIntegration.js | 22 +++++++++++++--------- services/officeRnD/memberships.js | 12 ++++++++++-- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/constants/constants.js b/constants/constants.js index 9eb47ab..1c9f12f 100644 --- a/constants/constants.js +++ b/constants/constants.js @@ -117,6 +117,7 @@ const discounts = { percentage: parseInt(process.env.DISCOUNT_LEVEL_2_PERCENTAGE) || 10, } }; +const DISCOUNT_PLANS = process.env.DISCOUNT_PLANS.split(',').map(planName => planName.trim()) || []; module.exports = { VALID_CSV_HEADERS, @@ -139,4 +140,5 @@ module.exports = { CHARGE_BOOKING_CHANGE_UNDER_TIME, ALLOWED_BOOKING_CANCELLATION_TIME, discounts, + DISCOUNT_PLANS, }; diff --git a/environment.env b/environment.env index cd1c2a7..a3e73a1 100644 --- a/environment.env +++ b/environment.env @@ -30,6 +30,7 @@ DISCOUNT_LEVEL_1_HOURS=Hours requred to apply DISCOUNT_LEVEL_1_PERCENTAGE discou DISCOUNT_LEVEL_1_PERCENTAGE=Discount to apply in percentage, if DISCOUNT_LEVEL_1_HOURS of billable hours is booked DISCOUNT_LEVEL_2_HOURS=Hours requred to apply DISCOUNT_LEVEL_2_PERCENTAGE discount DISCOUNT_LEVEL_2_PERCENTAGE=Discount to apply in percentage, if DISCOUNT_LEVEL_2_HOURS of billable hours is booked +DISCOUNT_PLANS=Plan names for which discount is available. 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) diff --git a/services/integration/invoiceIntegration.js b/services/integration/invoiceIntegration.js index b850291..0519ef5 100644 --- a/services/integration/invoiceIntegration.js +++ b/services/integration/invoiceIntegration.js @@ -10,7 +10,7 @@ const { getResourceMappings } = require('../officeRnD/resources'); const { fetchAllMembers } = require('../officeRnD/members'); const { fetchAllMembershipsAsMap } = require('../officeRnD/memberships'); const { getChargedCanceledReservations } = require('../integration/bookingChangeCharges'); -const { discounts } = require('../../constants/constants'); +const { discounts, DISCOUNT_PLANS } = require('../../constants/constants'); const createFeeFromIncident = (incident) => { const { @@ -226,17 +226,24 @@ const createFeeFromBooking = (booking, resourceMappings) => { }; const createNegativeFeeForDiscount = (memberData, dateRange) => { - const { bookingData, member, membershipFee } = memberData; + const { bookingData, member, membershipFees } = memberData; const { totalBookedHours, totalChargedHours, totalBookingChargedFee } = bookingData; const { memberId, officeId } = member; - let endDate = moment.utc().endOf('day').toISOString(); if (dateRange.endDate){ endDate = moment.utc(dateRange.endDate, DEFAULT_DATE_FORMAT).endOf('day').toISOString(); } - const totalChargeFee = membershipFee + totalBookingChargedFee; + let membershipFeeForDiscount = 0; + membershipFees.forEach((membershipFee) => { + const {name, price} = membershipFee; + if (DISCOUNT_PLANS.indexOf(name) !== -1){ + membershipFeeForDiscount = price; + } + }); + + const totalChargeFee = membershipFeeForDiscount + totalBookingChargedFee; let discount = 0; let discountPercentage = 0; @@ -248,11 +255,9 @@ const createNegativeFeeForDiscount = (memberData, dateRange) => { }else if (totalChargedHours >= discounts.LEVEL_1.hoursRequired){ discountPercentage = discounts.LEVEL_1.percentage; const discountRate = discountPercentage / 100; - console.log(discountRate); discount = totalChargeFee * discountRate; }else{ - discountPercentage = 0; - discount = 0; + return null; } const formattedName = `[Discount] Total booked : ${totalBookedHours.toFixed(2)} hrs, Total charged : ${totalChargedHours.toFixed(2)} hrs, Discount : ${discountPercentage} %`; @@ -267,7 +272,6 @@ const createNegativeFeeForDiscount = (memberData, dateRange) => { office: officeId, isPersonal: false, } - }; const getMembersFeesForDateRange = (dateRange, memberIds) => { @@ -293,7 +297,7 @@ const getMembersFeesForDateRange = (dateRange, memberIds) => { membersMap[member.memberId] = { member, bookingData: Object.assign({}, oneMemberObject), - membershipFee: membershipsMap[member.memberId] || 0, + membershipFees: membershipsMap[member.memberId], }; }); diff --git a/services/officeRnD/memberships.js b/services/officeRnD/memberships.js index 14c6d2b..43774f0 100644 --- a/services/officeRnD/memberships.js +++ b/services/officeRnD/memberships.js @@ -9,9 +9,17 @@ const fetchAllMembershipsAsMap = () => { const membershipsMap = {}; const memberships = result.data || []; memberships.forEach((membership) => { - const { price, member } = membership; + const { price, name, member } = membership; if (!membershipsMap[member]) { - membershipsMap[member] = price; + membershipsMap[member] = [{ + price, + name, + }]; + }else{ + membershipsMap[member].push({ + price, + name, + }); } }); resolve(membershipsMap);