/**
* @module modes/iha_services
* @description This module manages IHA (iHealth Assist) Mode services functionality.
*/
define([
],
function ()
{
// ---------------------------------------------------------------
//
// CUSTOM IHA SERVICES HANDLING
//
// ---------------------------------------------------------------
var IhaServices = function ()
{
window.tEvent.eventStr.EVENT_EMAIL_SUBMIT_DONE = "EVENT_EMAIL_SUBMIT_DONE";
window.tEvent.eventStr.EVENT_EMAIL_SUBMIT_FAIL = "EVENT_EMAIL_SUBMIT_FAIL";
window.tEvent.eventStr.EVENT_SMS_SUBMIT_DONE = "EVENT_SMS_SUBMIT_DONE";
window.tEvent.eventStr.EVENT_SMS_SUBMIT_FAIL = "EVENT_SMS_SUBMIT_FAIL";
this.def = {
STATUS_OK : "ok",
STATUS_ERROR : "error"
};
this.jConfig = "";
this.manifest = -1;
this.testMode = -1;
this.init();
};
IhaServices.prototype =
{
// ______________________________________________________________
// init
/**
* init
* @description Initializes class
* @fires assignListeners()
* @memberOf module:modes/iha_services
* @instance
*/
init: function()
{
var self = this;
console.log(" * <iha-services>");
if (typeof window.oModel === "undefined" || window.oModel.jConfig === -1){
window.tEvent.addListener("EVENT_MODEL_READY", function(evt, data)
{
self.jConfig = window.oModel.jConfig.services;
self.testMode = window.oModel.testMode;
self.assignListeners();
});
} else {
self.jConfig = window.oModel.jConfig.services;
self.testMode = window.oModel.testMode;
self.assignListeners();
}
},
// ______________________________________________________________
// assignListeners
/**
* assignListeners
* @description Assigns listeners to events used in this class.
* @listens EVENT_TEST_MODE_STATE_CHANGE
* @listens EVENT_ADMIN_GOT_MANIFEST
* @memberOf module:modes/iha_services
* @instance
*/
assignListeners: function()
{
var self = this;
window.tEvent.addListener(window.tEvent.eventStr.EVENT_TEST_MODE_STATE_CHANGE, function(evt, data) {
self.testMode = data;
});
// manifest load
window.tEvent.addListener("EVENT_ADMIN_GOT_MANIFEST", function(evt, data){
self.onGotManifest(data);
});
},
// --------------------------------------------------------------
// HELPERS
// --------------------------------------------------------------
// ______________________________________________________________
// getReturnObj
/**
* getReturnObj
* @description Returns generic return object
* @returns {Object}
* @example
* {
* "status": "ok",
* "data": -1
* }
* @memberOf module:modes/iha_services
* @instance
*/
getReturnObj: function() {
return({
status: this.def.STATUS_OK,
data: -1
});
},
// ______________________________________________________________
// sendEmail
/**
* sendEmail
* @description Sends an email using JSON services node configuration
* @param {Object} emailData - Email data
* @param {Boolean} fromAdmin - From admin allows for using test mode state variables/overrides
* @example
* emailData = {
* subjectText : "",
* fromEmail : "",
* sendToEmail : "",
* bodyText : "",
* cc : [],
* bcc : [],
* timeout : 600000
* }
* @fires EVENT_EMAIL_SUBMIT_DONE
* @fires EVENT_EMAIL_SUBMIT_FAIL
* @memberOf module:modes/iha_services
* @instance
*/
sendEmail: function(emailData, fromAdmin) {
var emailConfig = this.jConfig.emailService;
var wsUrl = this.jConfig.webserviceUrl + emailConfig.wsPath;
// test mode?
if ( (typeof fromAdmin !== "undefined" && fromAdmin !== true) && this.testMode.isActive ){
emailData.sendToEmail = this.testMode.emailTo;
}
// default data
var submitData = {
subjectText : "",
fromEmail : "",
sendToEmail : "",
bodyText : "",
cc : [],
bcc : [],
timeout : 600000
};
// replace defaults
for (var prop in emailData) {
if (typeof submitData[prop] !== "undefined"){
submitData[prop] = emailData[prop];
}
}
var request = {
"SubjectLine" : submitData.subjectText,
"From" : submitData.fromEmail,
"Text" : submitData.bodyText,
"To" : submitData.sendToEmail,
"CarbonCopyEmails" : submitData.cc,
"BlindCarbonCopyEmails" : submitData.bcc,
"OperationTimeout" : submitData.timeout
};
console.log(" * <iha-services.sendEmail> request", request);
$.ajax({
url: wsUrl,
beforeSend: function(xhrObj){
// Request headers
xhrObj.setRequestHeader("x-nureality-api-key", emailConfig.key);
},
type: "POST",
data: request,
dataType: 'json'
}).done(function(data) {
console.log(" * <iha-services.sendEmail> done", data);
if (typeof emailData.doneCallback !== "undefined") {
emailData.doneCallback(data);
}
window.tEvent.fire(window.tEvent.eventStr.EVENT_EMAIL_SUBMIT_DONE, emailData.id);
}).fail(function(data) {
console.log(" * <iha-services.sendEmail> fail", data);
if (typeof emailData.failCallback !== "undefined") {
emailData.failCallback(data);
}
window.tEvent.fire(window.tEvent.eventStr.EVENT_EMAIL_SUBMIT_FAIL, emailData.id);
});
},
// ______________________________________________________________
// sendSms
/**
* sendSms
* @description Sends an SMS (text) using JSON services node configuration
* @param {Object} smsData - SMS data
* @param {Boolean} fromAdmin - From admin allows for using test mode state variables/overrides
* @example
* smsData = {
* accountId : smsConfig.accountId,
* smsTo : "",
* bodyText : "",
* timeout : 45000
* }
* @fires EVENT_SMS_SUBMIT_DONE
* @fires EVENT_SMS_SUBMIT_FAIL
* @memberOf module:modes/iha_services
* @instance
*/
sendSms: function(smsData, fromAdmin) {
var smsConfig = this.jConfig.smsService;
var wsUrl = this.jConfig.webserviceUrl + smsConfig.wsPath + "?";
// test mode?
if ( (typeof fromAdmin !== "undefined" && fromAdmin !== true) && this.testMode.isActive ){
smsData.smsTo = this.testMode.smsTo;
}
// default data
var submitData = {
accountId : smsConfig.accountId,
smsTo : "",
bodyText : "",
timeout : 45000
};
// replace defaults
for (var prop in smsData) {
if (typeof submitData[prop] !== "undefined"){
submitData[prop] = smsData[prop];
}
}
var request = {
"Account" : submitData.accountId,
"RecipientNumber" : submitData.smsTo,
"Text" : submitData.bodyText
};
console.log(" * <iha-services.sendSms> request", request);
$.ajax({
url: wsUrl,
beforeSend: function(xhrObj){
// Request headers
xhrObj.setRequestHeader("x-nureality-api-key", smsConfig.key);
},
type: "POST",
timeout: submitData.timeout,
data: request
}).done(function(data) {
console.log(" * <iha-services.sendSms> done", data);
if (typeof smsData.doneCallback !== "undefined") {
smsData.doneCallback(data);
}
window.tEvent.fire(window.tEvent.eventStr.EVENT_SMS_SUBMIT_DONE, smsData.id);
}).fail(function(data) {
console.log(" * <iha-services.sendSms> fail", data);
if (typeof smsData.failCallback !== "undefined") {
smsData.failCallback(data);
}
window.tEvent.fire(window.tEvent.eventStr.EVENT_SMS_SUBMIT_FAIL, smsData.id);
});
},
// --------------------------------------------------------------
// EVENTS
// --------------------------------------------------------------
// ______________________________________________________________
// onGotManifest
/**
* onGotManifest
* @description Stores received manifest data
* @param {Object} data - Manifest data
* @memberOf module:common/services
* @instance
*/
onGotManifest: function(data){
this.manifest = data;
}
};
var oIhaServices = new IhaServices();
return (oIhaServices);
});