courtbot-engine
Version:
An engine for courtbot-like functionality to be included in city/county services sites.
76 lines (55 loc) • 3.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (opt) {
var options = (0, _defaultOptions2.default)(opt);
var registrationSource = (0, _sources.registrationSourceFn)(options.dbUrl);
return registrationSource.getRegistrationsByState(_registrationState2.default.REMINDING).then(function (registrations) {
if (registrations.length == 0) {
log.info("No records to process.");
return;
}
return Promise.all(registrations.map(function (r) {
return (0, _events.getCasePartyEvents)(r.case_number, r.name).then(function (events) {
return events.filter(function (x) {
var theDate = isNaN((0, _momentTimezone2.default)(x.date)) ? (0, _momentTimezone2.default)(x.date.replace(" at ", " "), "dddd, MMMM D, YYYY h:mm A") : (0, _momentTimezone2.default)(x.date).tz(options.timeZoneName || "America/Chicago");
var theDiff = theDate.diff((0, _momentTimezone2.default)(), 'days', true);
x.date = theDate.format("LLL");
var isInReminderPeriod = theDiff < options.reminderDaysOut && theDiff >= 0;
log.debug("Event at " + theDiff + " days out, which " + (isInReminderPeriod ? "is" : "is not") + " in the reminder period of " + options.reminderDaysOut + ".");
return isInReminderPeriod;
});
}).then(function (events) {
return Promise.all(events.map(function (e) {
return registrationSource.getSentMessage(r.contact, r.communication_type, r.name, e.date, e.description, r.case_number).then(function (d) {
if (d.length == 0) {
var message = _messaging2.default.reminder(r, e);
return (0, _events.sendNonReplyMessage)(r.contact, message, r.communication_type).then(function () {
return registrationSource.createSentMessage(r.contact, r.communication_type, r.name, e.date, e.description, r.case_number);
});
} else {
log.info("already sent ", _messaging2.default.reminder(r, e), "to", r.phone);
}
});
}));
}).catch(function (err) {
return log.error("Error sending reminders for " + r.casenumber + ": " + err.toString());
});
}));
});
};
var _momentTimezone = require("moment-timezone");
var _momentTimezone2 = _interopRequireDefault(_momentTimezone);
var _events = require("./events");
var _defaultOptions = require("./defaultOptions");
var _defaultOptions2 = _interopRequireDefault(_defaultOptions);
var _sources = require("./sources");
var _registrationState = require("./registrationState");
var _registrationState2 = _interopRequireDefault(_registrationState);
var _log4js = require("log4js");
var _log4js2 = _interopRequireDefault(_log4js);
var _messaging = require("./messaging");
var _messaging2 = _interopRequireDefault(_messaging);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var log = _log4js2.default.getLogger("send-due-reminders");