daniel-san
Version:
a node-based budget-projection engine that helps your routines and finances find balance. The program features aggregates, terminal and file-based reporting output, multi-currency conversion capability and multi-frequency accounting triggers, including: o
165 lines (134 loc) • 5.05 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _require = require('../utility/errorHandling'),
errorDisc = _require.errorDisc;
var _require2 = require('../timeZone'),
createTimeZone = _require2.createTimeZone;
var _require3 = require('../core/dateUtility'),
getRelevantDateSegmentByFrequency = _require3.getRelevantDateSegmentByFrequency;
var _require4 = require('../constants'),
MONTHLY = _require4.MONTHLY,
ANNUALLY = _require4.ANNUALLY,
ONCE = _require4.ONCE,
DATE_DELIMITER = _require4.DATE_DELIMITER;
var getRelevantDateStringFor28DayCondition = function getRelevantDateStringFor28DayCondition(_ref) {
var frequency = _ref.frequency,
processDate = _ref.processDate,
date = _ref.date;
var parsedDate = 0; // will autofail the test if 0 is not reassigned, since 0 can never be greater than 28
var fullCurrentYearString = getRelevantDateSegmentByFrequency({
frequency: ONCE,
date: date
});
var _fullCurrentYearStrin = fullCurrentYearString.split(DATE_DELIMITER),
_fullCurrentYearStrin2 = (0, _slicedToArray2["default"])(_fullCurrentYearStrin, 3),
year = _fullCurrentYearStrin2[0],
month = _fullCurrentYearStrin2[1],
day = _fullCurrentYearStrin2[2];
switch (frequency) {
case MONTHLY:
parsedDate = processDate;
break;
case ANNUALLY:
var _processDate$split = processDate.split(DATE_DELIMITER),
_processDate$split2 = (0, _slicedToArray2["default"])(_processDate$split, 2),
eventMonthAnnually = _processDate$split2[0],
eventDayAnnually = _processDate$split2[1];
if (eventMonthAnnually === month) {
parsedDate = eventDayAnnually;
}
break;
case ONCE:
var _processDate$split3 = processDate.split(DATE_DELIMITER),
_processDate$split4 = (0, _slicedToArray2["default"])(_processDate$split3, 3),
eventYearOnce = _processDate$split4[0],
eventMonthOnce = _processDate$split4[1],
eventDayOnce = _processDate$split4[2];
if (eventYearOnce === year && eventMonthOnce === month) {
parsedDate = eventDayOnce;
}
break;
default:
parsedDate = processDate;
break;
}
return parsedDate;
};
var parseDateFor28DayCondition = function parseDateFor28DayCondition(_ref2) {
var frequency = _ref2.frequency,
processDate = _ref2.processDate;
var parsedDate;
switch (frequency) {
case MONTHLY:
parsedDate = parseInt(processDate, 10);
break;
case ANNUALLY:
parsedDate = parseInt(processDate.split(DATE_DELIMITER)[1], 10);
break;
case ONCE:
parsedDate = parseInt(processDate.split(DATE_DELIMITER)[2], 10);
break;
default:
parsedDate = 0; // if not one of the above cases, then the 28DayCondition definitely isn't valid and an assigned value of 0 will never be greater than 28 so it will autofail
break;
}
return parsedDate;
}; // eslint-disable-next-line max-len
// _28DayCondition checks if processDate (such as 30th) is greater than the last day of the month (for example, february has only 28 days)
// eslint-disable-next-line no-underscore-dangle
var _28DayCondition = function _28DayCondition(_ref3) {
var processDate = _ref3.processDate,
date = _ref3.date,
frequency = _ref3.frequency,
_ref3$timeZone = _ref3.timeZone,
timeZone = _ref3$timeZone === void 0 ? null : _ref3$timeZone,
_ref3$timeZoneType = _ref3.timeZoneType,
timeZoneType = _ref3$timeZoneType === void 0 ? null : _ref3$timeZoneType;
try {
if (parseDateFor28DayCondition({
frequency: frequency,
processDate: processDate
}) > 28) {
var dateString = getRelevantDateSegmentByFrequency({
frequency: MONTHLY,
// we are going to compare dates like this '31' >= '28'
date: date
});
var fullDateOfLastDayOfMonth = createTimeZone({
timeZone: timeZone,
timeZoneType: timeZoneType,
date: date
}).endOf('month');
var dateStringOfLastDayOfMonth = getRelevantDateSegmentByFrequency({
frequency: MONTHLY,
date: fullDateOfLastDayOfMonth
});
if (getRelevantDateStringFor28DayCondition({
frequency: frequency,
processDate: processDate,
date: date
}) >= dateStringOfLastDayOfMonth && dateString >= dateStringOfLastDayOfMonth) {
return true; // eslint-disable-next-line no-else-return
} else {
return false;
} // eslint-disable-next-line no-else-return
} else {
return false;
}
} catch (err) {
throw errorDisc({
err: err,
data: {
date: date,
frequency: frequency,
timeZone: timeZone,
timeZoneType: timeZoneType,
processDate: processDate
}
});
}
};
module.exports = {
_28DayCondition: _28DayCondition
};