'use strict'; const moment = require('moment-timezone'); const { API } = require('../../helpers/api'); const { officeRnDAPIErrors, DEFAULT_DATE_FORMAT, UNPAID_FEE_STATUS } = require('../../constants/constants'); const deleteFeesFromORD = (dateRange, memberIds) => { return new Promise((resolve, reject) => { const startDate = moment.utc(dateRange.startDate, DEFAULT_DATE_FORMAT).startOf('day'); const endDate = moment.utc(dateRange.endDate, DEFAULT_DATE_FORMAT).endOf('day'); const asyncDataFetch = [API.get('fees'), API.get('plans')]; Promise.all(asyncDataFetch) .then((responses) => { const feesResponse = responses[0]; const plansResponse = responses[1]; const fetchedFees = feesResponse.data ? feesResponse.data : []; const fetchedPlans = plansResponse.data ? plansResponse.data : []; const manualFeeNames = []; fetchedPlans.forEach((plan) => { const { name } = plan; if (name && name.length > 0){ manualFeeNames.push(name); } }); const memberIdsMap = {}; memberIds.forEach((memberId) => { memberIdsMap[memberId] = true; }); const filterByMemberIds = memberIds.length > 0; const feeIdsToRemove = []; fetchedFees.forEach((fee) => { const { member, date, invoice, name } = fee; const { status } = invoice; const feeId = fee['_id']; const isDateInDateRange = startDate.isSameOrBefore(date) && endDate.isSameOrAfter(date); const manuallyAddedFee = manualFeeNames.indexOf(name) !== -1; const memberFeesShouldBeDeleted = filterByMemberIds ? memberIdsMap[member] : true; if (memberFeesShouldBeDeleted && isDateInDateRange && (status === UNPAID_FEE_STATUS) && !manuallyAddedFee) { feeIdsToRemove.push(feeId); } }); API.delete('fees', { data: feeIdsToRemove }) .then(() => { resolve(true); }) .catch((error) => { console.log('error : ', error); reject(error); }); }) .catch((error) => { console.log(error); reject(`${officeRnDAPIErrors.FAILED_TO_FETCH_FEES} or ${officeRnDAPIErrors.FAILED_TO_FETCH_PLANS}`); }); }); }; const addFeesToORD = (allFees) => { return new Promise((resolve, reject) => { API.post('/fees', allFees) .catch((error) => { console.log('==== ERROR ===='); console.log(error); }); resolve(allFees.length); }); }; module.exports = { deleteFeesFromORD, addFeesToORD };