importPackage(Packages.de.elo.ix.client);

//@include lib_Class.js
//@include lib_sol.common.Config.js
//@include lib_sol.common.Template.js
//@include lib_sol.common.WfUtils.js
//@include lib_sol.common.FileUtils.js
//@include lib_sol.common.JsonUtils.js
//@include lib_sol.common.ExceptionUtils.js
//@include lib_sol.common.Mail.js
//@include lib_sol.common.ix.RfUtils.js
//@include lib_sol.common.ix.FunctionBase.js

var logger = sol.create("sol.Logger", { scope: "sol.common.ix.functions.Notify" });

/**
 * Sends an email
 *
 * # As workflow node
 *
 *     {
 *       "from": "elo@contelo.com",
 *       "to": "solutions@elo.com",
 *       "subject": "Neue Aufgabe",
 *       "body": {
 *       "type": "html",
 *       "tplObjId": "ARCPATH:/Administration/Business Solutions Custom/notify/Configuration/Mail templates/Example",
 *       "data": {
 *         "person": {
 *         "salutation": "Mr",
 *           "firstName": "Peter",
 *           "lastName": "Smith"
 *         }
 *       }
 *    }
 *
 * # As IX function call
 *
 * In addition to the workflow node configuration the objId must be passed.
 *
 *     sol.common.IxUtils.execute("RF_sol_function_Notify", {
 *       objId: "4711",
 *       mode: "run",
 *       from: "elo@contelo.com",
 *       to: {
 *         type: "CURRENT"
 *       },
 *       subject: "Neue Aufgabe",
 *       body: {
 *         type: "html",
 *         tplObjId: "ARCPATH:/Administration/Business Solutions Custom/contract/Configuration/Mail templates/Notification"
 *       },
 *       data: {
 *         person": {
 *           salutation: "Mr",
 *           firstName: "Peter",
 *           lastName: "Smith"
 *         }
 *       }
 *     }
 *
 * For more details see {@link sol.common.as.functions.SendMail}
 *
 * @author ELO Digital Office GmbH
 * @version 1.0
 *
 * @eloix
 * @requires sol.common.Config
 * @requires sol.common.Template
 * @requires sol.common.WfUtils
 * @requires sol.common.ix.RfUtils
 * @requires sol.common.ix.FunctionBase
 */
sol.define("sol.common.ix.functions.Notify", {
  extend: "sol.common.ix.FunctionBase",

  /**
   * @cfg {String} type
   * Notification type. Default is "e-mail"
   */

  /**
   * @cfg {Object} config
   * Configuration object for the notification
   * see {@link sol.common.Mail}
   */

  initialize: function (config) {
    var me = this;
    me.$super("sol.common.ix.FunctionBase", "initialize", [config]);
  },

  process: function () {
    var me = this;

    mail = sol.create("sol.common.Mail", me.params);
    mail.send();
  }
});

/**
 * @member sol.common.ix.functions.Notify
 * @static
 * @inheritdoc sol.common.ix.FunctionBase#onEnterNode
 */
function onEnterNode(clInfo, userId, wfDiagram, nodeId) {
  var module, params;

  logger.enter("onEnterNode_Notify", { flowId: wfDiagram.id, nodeId: nodeId });
  params = sol.common.WfUtils.parseAndCheckParams(wfDiagram, nodeId);

  params.wfDiagram = wfDiagram;
  params.objId = wfDiagram.objId;
  params.flowId = wfDiagram.id;
  params.nodeId = nodeId;

  sol.common.WfUtils.checkMainAdminWf(wfDiagram);

  module = sol.create("sol.common.ix.functions.Notify", { params: params });
  module.process();

  logger.exit("onEnterNode_Notify");
}

/**
 * @member sol.common.ix.functions.Notify
 * @static
 * @inheritdoc sol.common.ix.FunctionBase#onExitNode
 */
function onExitNode(ci, userId, wfDiagram, nodeId) {
  var module, params;

  logger.enter("onExitNode_Notify", { flowId: wfDiagram.id, nodeId: nodeId });
  params = sol.common.WfUtils.parseAndCheckParams(wfDiagram, nodeId);

  params.wfDiagram = wfDiagram;
  params.objId = wfDiagram.objId;
  params.flowId = wfDiagram.id;
  params.nodeId = nodeId;

  sol.common.WfUtils.checkMainAdminWf(wfDiagram);

  module = sol.create("sol.common.ix.functions.Notify", { params: params });
  module.process();

  logger.exit("onExitNode_Notify");
}

/**
 * @member sol.common.ix.functions.Notify
 * @method RF_sol_function_Notify
 * @static
 * @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName
 */
function RF_sol_function_Notify(ec, configAny) {
  var module, params, result;

  logger.enter("RF_sol_function_Notify", configAny);
  params = sol.common.ix.RfUtils.parseAndCheckParams(ec, arguments.callee.name, configAny);

  sol.common.ix.RfUtils.checkMainAdminRights(ec.user, params);

  module = sol.create("sol.common.ix.functions.Notify", { params: params });
  result = module.process();

  logger.exit("RF_sol_function_Notify");

  return result;
}