add plan name filter for discount

This commit is contained in:
Bilal Catic
2019-08-14 12:02:04 +02:00
parent 3403b8e9c4
commit dd4d909b5d
4 changed files with 26 additions and 11 deletions

View File

@@ -117,6 +117,7 @@ const discounts = {
percentage: parseInt(process.env.DISCOUNT_LEVEL_2_PERCENTAGE) || 10, percentage: parseInt(process.env.DISCOUNT_LEVEL_2_PERCENTAGE) || 10,
} }
}; };
const DISCOUNT_PLANS = process.env.DISCOUNT_PLANS.split(',').map(planName => planName.trim()) || [];
module.exports = { module.exports = {
VALID_CSV_HEADERS, VALID_CSV_HEADERS,
@@ -139,4 +140,5 @@ module.exports = {
CHARGE_BOOKING_CHANGE_UNDER_TIME, CHARGE_BOOKING_CHANGE_UNDER_TIME,
ALLOWED_BOOKING_CANCELLATION_TIME, ALLOWED_BOOKING_CANCELLATION_TIME,
discounts, discounts,
DISCOUNT_PLANS,
}; };

View File

@@ -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_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_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_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 #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_MAX_CONNECTIONS=Maximum number of connection in pool (ex. 18)

View File

@@ -10,7 +10,7 @@ const { getResourceMappings } = require('../officeRnD/resources');
const { fetchAllMembers } = require('../officeRnD/members'); const { fetchAllMembers } = require('../officeRnD/members');
const { fetchAllMembershipsAsMap } = require('../officeRnD/memberships'); const { fetchAllMembershipsAsMap } = require('../officeRnD/memberships');
const { getChargedCanceledReservations } = require('../integration/bookingChangeCharges'); const { getChargedCanceledReservations } = require('../integration/bookingChangeCharges');
const { discounts } = require('../../constants/constants'); const { discounts, DISCOUNT_PLANS } = require('../../constants/constants');
const createFeeFromIncident = (incident) => { const createFeeFromIncident = (incident) => {
const { const {
@@ -226,17 +226,24 @@ const createFeeFromBooking = (booking, resourceMappings) => {
}; };
const createNegativeFeeForDiscount = (memberData, dateRange) => { const createNegativeFeeForDiscount = (memberData, dateRange) => {
const { bookingData, member, membershipFee } = memberData; const { bookingData, member, membershipFees } = memberData;
const { totalBookedHours, totalChargedHours, totalBookingChargedFee } = bookingData; const { totalBookedHours, totalChargedHours, totalBookingChargedFee } = bookingData;
const { memberId, officeId } = member; const { memberId, officeId } = member;
let endDate = moment.utc().endOf('day').toISOString(); let endDate = moment.utc().endOf('day').toISOString();
if (dateRange.endDate){ if (dateRange.endDate){
endDate = moment.utc(dateRange.endDate, DEFAULT_DATE_FORMAT).endOf('day').toISOString(); 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 discount = 0;
let discountPercentage = 0; let discountPercentage = 0;
@@ -248,11 +255,9 @@ const createNegativeFeeForDiscount = (memberData, dateRange) => {
}else if (totalChargedHours >= discounts.LEVEL_1.hoursRequired){ }else if (totalChargedHours >= discounts.LEVEL_1.hoursRequired){
discountPercentage = discounts.LEVEL_1.percentage; discountPercentage = discounts.LEVEL_1.percentage;
const discountRate = discountPercentage / 100; const discountRate = discountPercentage / 100;
console.log(discountRate);
discount = totalChargeFee * discountRate; discount = totalChargeFee * discountRate;
}else{ }else{
discountPercentage = 0; return null;
discount = 0;
} }
const formattedName = `[Discount] Total booked : ${totalBookedHours.toFixed(2)} hrs, Total charged : ${totalChargedHours.toFixed(2)} hrs, Discount : ${discountPercentage} %`; 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, office: officeId,
isPersonal: false, isPersonal: false,
} }
}; };
const getMembersFeesForDateRange = (dateRange, memberIds) => { const getMembersFeesForDateRange = (dateRange, memberIds) => {
@@ -293,7 +297,7 @@ const getMembersFeesForDateRange = (dateRange, memberIds) => {
membersMap[member.memberId] = { membersMap[member.memberId] = {
member, member,
bookingData: Object.assign({}, oneMemberObject), bookingData: Object.assign({}, oneMemberObject),
membershipFee: membershipsMap[member.memberId] || 0, membershipFees: membershipsMap[member.memberId],
}; };
}); });

View File

@@ -9,9 +9,17 @@ const fetchAllMembershipsAsMap = () => {
const membershipsMap = {}; const membershipsMap = {};
const memberships = result.data || []; const memberships = result.data || [];
memberships.forEach((membership) => { memberships.forEach((membership) => {
const { price, member } = membership; const { price, name, member } = membership;
if (!membershipsMap[member]) { if (!membershipsMap[member]) {
membershipsMap[member] = price; membershipsMap[member] = [{
price,
name,
}];
}else{
membershipsMap[member].push({
price,
name,
});
} }
}); });
resolve(membershipsMap); resolve(membershipsMap);