Bugfix for fees / Oauth 2 implementation
This commit is contained in:
@@ -247,6 +247,10 @@ const createNegativeFeeForDiscount = (memberData, dateRange) => {
|
||||
}
|
||||
});
|
||||
|
||||
if (membershipFeeForDiscount === 0){
|
||||
return null; //This member's plan is not eligible for a discount
|
||||
}
|
||||
|
||||
const totalChargeFee = membershipFeeForDiscount + totalBookingChargedFee;
|
||||
|
||||
let discount = 0;
|
||||
@@ -261,7 +265,7 @@ const createNegativeFeeForDiscount = (memberData, dateRange) => {
|
||||
const discountRate = discountPercentage / 100;
|
||||
discount = totalChargeFee * discountRate;
|
||||
}else{
|
||||
return null;
|
||||
return null; //Not enough hours to earn a discount
|
||||
}
|
||||
|
||||
const formattedName = `[Discount] Total booked : ${totalBookedHours.toFixed(2)} hrs, Total charged : ${totalChargedHours.toFixed(2)} hrs, Discount : ${discountPercentage} %`;
|
||||
@@ -317,7 +321,7 @@ const getMembersFeesForDateRange = (dateRange, memberIds) => {
|
||||
membersMap[member.memberId] = {
|
||||
member,
|
||||
bookingData: Object.assign({}, oneMemberObject),
|
||||
membershipFees: membershipsMap[member.memberId],
|
||||
membershipFees: membershipsMap[member.memberId] || [],
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@ const deleteFeesFromORD = (dateRange, memberIds) => {
|
||||
memberIdsMap[memberId] = true;
|
||||
});
|
||||
|
||||
const filterByMemberIds = memberIds.length > 0;
|
||||
|
||||
const feeIdsToRemove = [];
|
||||
|
||||
fetchedFees.forEach((fee) => {
|
||||
@@ -42,7 +44,9 @@ const deleteFeesFromORD = (dateRange, memberIds) => {
|
||||
|
||||
const isDateInDateRange = startDate.isSameOrBefore(date) && endDate.isSameOrAfter(date);
|
||||
const manuallyAddedFee = manualFeeNames.indexOf(name) !== -1;
|
||||
if (memberIdsMap[member] && isDateInDateRange && (status === UNPAID_FEE_STATUS) && !manuallyAddedFee) {
|
||||
const memberFeesShouldBeDeleted = filterByMemberIds ? memberIdsMap[member] : true;
|
||||
|
||||
if (memberFeesShouldBeDeleted && isDateInDateRange && (status === UNPAID_FEE_STATUS) && !manuallyAddedFee) {
|
||||
feeIdsToRemove.push(feeId);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -10,14 +10,18 @@ const fetchAllMembershipsForMemberIds = (memberIds) => {
|
||||
const memberships = result.data || [];
|
||||
|
||||
if (Array.isArray(memberIds)){
|
||||
const filteredMemberships = [];
|
||||
memberships.forEach((membership) => {
|
||||
const { member } = membership;
|
||||
if (memberIds.indexOf(member) !== -1){
|
||||
filteredMemberships.push(membership);
|
||||
}
|
||||
});
|
||||
resolve(filteredMemberships);
|
||||
if (memberIds.length > 0){
|
||||
const filteredMemberships = [];
|
||||
memberships.forEach((membership) => {
|
||||
const { member } = membership;
|
||||
if (memberIds.indexOf(member) !== -1){
|
||||
filteredMemberships.push(membership);
|
||||
}
|
||||
});
|
||||
resolve(filteredMemberships);
|
||||
}else{
|
||||
resolve(memberships);
|
||||
}
|
||||
}else{
|
||||
reject(integrationServiceErrors.EXPECTED_MEMBER_IDS_ARRAY);
|
||||
}
|
||||
|
||||
109
services/officeRnD/oauth.js
Normal file
109
services/officeRnD/oauth.js
Normal file
@@ -0,0 +1,109 @@
|
||||
'use strict';
|
||||
require('dotenv').config();
|
||||
const moment = require('moment');
|
||||
const queryString = require('query-string');
|
||||
|
||||
const { OAuthAPI } = require('../../helpers/oauthApi');
|
||||
const db = require('../../models/index');
|
||||
const { officeRnDAPIErrors } = require('../../constants/constants');
|
||||
|
||||
const updateToken = (token, validUntil) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const values = {token, validUntil};
|
||||
db.accessToken.update(values, {where:{}})
|
||||
.then(([numberOfUpdatedRows]) => {
|
||||
if (numberOfUpdatedRows > 0){
|
||||
resolve(true);
|
||||
}else{
|
||||
db.accessToken.bulkCreate([{token, validUntil}])
|
||||
.then(() => {
|
||||
resolve(false);
|
||||
})
|
||||
.catch((error) => reject(error));
|
||||
}
|
||||
})
|
||||
.catch((error) => reject(error));
|
||||
});
|
||||
};
|
||||
|
||||
const getToken = (returnTokenOnly = false) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
db.accessToken.findAll()
|
||||
.then((results) => {
|
||||
if (results && results.length > 0){
|
||||
const token = results[0].getDataValue('token');
|
||||
const validUntil = results[0].getDataValue('validUntil');
|
||||
const validUntilMoment = moment(validUntil);
|
||||
if (validUntilMoment.isBefore(moment())){
|
||||
refreshOauthToken()
|
||||
.then((oauthResult) => {
|
||||
if (returnTokenOnly){
|
||||
resolve(oauthResult.token);
|
||||
}else{
|
||||
resolve(oauthResult);
|
||||
}
|
||||
})
|
||||
.catch((error) => reject(error));
|
||||
}else{
|
||||
if (returnTokenOnly){
|
||||
resolve(token);
|
||||
}else {
|
||||
resolve({token, validUntil});
|
||||
}
|
||||
}
|
||||
}else{
|
||||
refreshOauthToken()
|
||||
.then((oauthResult) => {
|
||||
if (returnTokenOnly){
|
||||
resolve(oauthResult.token);
|
||||
}else{
|
||||
resolve(oauthResult);
|
||||
}
|
||||
})
|
||||
.catch((error) => reject(error));
|
||||
}
|
||||
})
|
||||
.catch((error) => reject(error));
|
||||
});
|
||||
};
|
||||
|
||||
const refreshOauthToken = () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const clientID = process.env.ORD_OAUTH_CLIENT_ID;
|
||||
const clientSecret = process.env.ORD_OAUTH_CLIENT_SECRET;
|
||||
|
||||
const OAUTHRequestBody = {
|
||||
client_id: clientID,
|
||||
client_secret: clientSecret,
|
||||
grant_type: 'client_credentials',
|
||||
scope: 'officernd.api.read officernd.api.write',
|
||||
};
|
||||
|
||||
OAuthAPI.post('/', queryString.stringify(OAUTHRequestBody))
|
||||
.then((oauthResponse) => {
|
||||
const responseData = oauthResponse && oauthResponse.data ? oauthResponse.data : null;
|
||||
if (responseData){
|
||||
const { access_token: accessToken, expires_in: expiresIn } = responseData;
|
||||
if (accessToken && expiresIn){
|
||||
const validUntil = moment().add(expiresIn, 'seconds').toISOString();
|
||||
updateToken(accessToken, validUntil)
|
||||
.then(() => resolve({token: accessToken, validUntil}))
|
||||
.catch((error) => reject(error));
|
||||
}else{
|
||||
reject(officeRnDAPIErrors.OAUTH_FAILED);
|
||||
}
|
||||
}else{
|
||||
reject(officeRnDAPIErrors.OAUTH_FAILED);
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log('Error obtaining OAUTH token : ', error);
|
||||
reject();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
getToken,
|
||||
refreshOauthToken,
|
||||
};
|
||||
Reference in New Issue
Block a user