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
66 lines (55 loc) • 1.75 kB
JavaScript
;
var _require = require('../utility/errorHandling'),
errorDisc = _require.errorDisc;
var _require2 = require('../constants'),
EXECUTING_RULE_INSERTION = _require2.EXECUTING_RULE_INSERTION,
EXECUTION_REJECTED = _require2.EXECUTION_REJECTED;
var modulateCycleUp = function modulateCycleUp(rule) {
var newCycle = rule.cycle % rule.modulus + 1;
rule.cycle = newCycle;
};
var modulateCycleDown = function modulateCycleDown(rule) {
var newCycle = rule.cycle - 1;
if (newCycle === 0) newCycle = rule.modulus;
rule.cycle = newCycle;
};
var isCycleAtModulus = function isCycleAtModulus(rule) {
if (rule.cycle === rule.modulus) {
return true; // eslint-disable-next-line no-else-return
} else {
return false;
}
};
var modulusPhase = function modulusPhase(_ref) {
var rule = _ref.rule,
processPhase = _ref.processPhase;
var transientProcessPhase;
try {
// if there are modulus/cycle attributes, then execute them
transientProcessPhase = processPhase || '';
if (rule.modulus) {
if (transientProcessPhase !== EXECUTION_REJECTED && isCycleAtModulus(rule)) {
transientProcessPhase = EXECUTING_RULE_INSERTION;
}
modulateCycleUp(rule);
} else if (transientProcessPhase !== EXECUTION_REJECTED) {
transientProcessPhase = EXECUTING_RULE_INSERTION;
}
return transientProcessPhase;
} catch (err) {
throw errorDisc({
err: err,
data: {
rule: rule,
processPhase: processPhase,
transientProcessPhase: transientProcessPhase
}
});
}
};
module.exports = {
modulateCycleUp: modulateCycleUp,
modulateCycleDown: modulateCycleDown,
isCycleAtModulus: isCycleAtModulus,
modulusPhase: modulusPhase
};