Source: modes/iha_services.js

/**
 * @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);        
   
});