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

111 lines (96 loc) 3.58 kB
"use strict"; var _require = require('../timeZone'), createTimeZone = _require.createTimeZone; var _require2 = require('../timeStream'), streamForward = _require2.streamForward; var _require3 = require('./index.js'), modulateCycleUp = _require3.modulateCycleUp; var _require4 = require('../standardEvents'), buildStandardEvent = _require4.buildStandardEvent; var _require5 = require('../specialEvents'), nthWeekdaysOfMonth = _require5.nthWeekdaysOfMonth, weekdayOnDate = _require5.weekdayOnDate; var _require6 = require('../constants'), DATE_FORMAT_STRING = _require6.DATE_FORMAT_STRING, DAILY = _require6.DAILY, STANDARD_EVENT = _require6.STANDARD_EVENT, STANDARD_EVENT_REMINDER = _require6.STANDARD_EVENT_REMINDER, STANDARD_EVENT_ROUTINE = _require6.STANDARD_EVENT_ROUTINE, NTH_WEEKDAYS_OF_MONTH = _require6.NTH_WEEKDAYS_OF_MONTH, NTH_WEEKDAYS_OF_MONTH_REMINDER = _require6.NTH_WEEKDAYS_OF_MONTH_REMINDER, NTH_WEEKDAYS_OF_MONTH_ROUTINE = _require6.NTH_WEEKDAYS_OF_MONTH_ROUTINE, WEEKDAY_ON_DATE = _require6.WEEKDAY_ON_DATE, WEEKDAY_ON_DATE_REMINDER = _require6.WEEKDAY_ON_DATE_REMINDER, WEEKDAY_ON_DATE_ROUTINE = _require6.WEEKDAY_ON_DATE_ROUTINE; var modulateCycleUpToDate = function modulateCycleUpToDate(_ref) { var danielSan = _ref.danielSan, rule = _ref.rule, effectiveDateStartString = _ref.effectiveDateStartString, skipTimeTravel = _ref.skipTimeTravel; var looperDate = createTimeZone({ timeZone: rule.timeZone, timeZoneType: rule.timeZoneType, dateString: rule.anchorSyncDate }); var looperDateFormatted = looperDate.format(DATE_FORMAT_STRING); switch (rule.type) { case STANDARD_EVENT: case STANDARD_EVENT_ROUTINE: case STANDARD_EVENT_REMINDER: if (rule.frequency === DAILY) { while (looperDateFormatted < effectiveDateStartString) { modulateCycleUp(rule); looperDate = streamForward(looperDate); looperDateFormatted = looperDate.format(DATE_FORMAT_STRING); } } else { while (looperDateFormatted < effectiveDateStartString) { buildStandardEvent({ danielSan: danielSan, rule: rule, date: looperDate, skipTimeTravel: skipTimeTravel, eventGen: false }); looperDate = streamForward(looperDate); looperDateFormatted = looperDate.format(DATE_FORMAT_STRING); } } break; case NTH_WEEKDAYS_OF_MONTH: case NTH_WEEKDAYS_OF_MONTH_ROUTINE: case NTH_WEEKDAYS_OF_MONTH_REMINDER: while (looperDateFormatted < effectiveDateStartString) { nthWeekdaysOfMonth({ danielSan: danielSan, rule: rule, date: looperDate, skipTimeTravel: skipTimeTravel, eventGen: false }); looperDate = streamForward(looperDate); looperDateFormatted = looperDate.format(DATE_FORMAT_STRING); } break; case WEEKDAY_ON_DATE: case WEEKDAY_ON_DATE_ROUTINE: case WEEKDAY_ON_DATE_REMINDER: while (looperDateFormatted < effectiveDateStartString) { weekdayOnDate({ danielSan: danielSan, rule: rule, date: looperDate, skipTimeTravel: skipTimeTravel, eventGen: false }); looperDate = streamForward(looperDate); looperDateFormatted = looperDate.format(DATE_FORMAT_STRING); } break; default: break; } }; module.exports = { modulateCycleUpToDate: modulateCycleUpToDate };