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