UNPKG

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
"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 };