//@include lib_Class.js
//@include lib_sol.common.JsonUtils.js
//@include lib_sol.common.RepoUtils.js
//@include lib_sol.common.SordUtils.js
//@include lib_sol.common.CounterUtils.js
//@include lib_sol.common.Template.js
//@include lib_sol.common.WfUtils.js
//@include lib_sol.common.ix.RfUtils.js
//@include lib_sol.common.ix.FunctionBase.js
//@include lib_sol.contact.ix.functions.GenerateFilingStruct.js
//@include lib_sol.contact.Utils.js

var logger = sol.create("sol.Logger", { scope: "sol.contact.ix.functions.generators.GenerateCompanyFilingStruct" });

/**
 * Generates an filing structure for a company by template
 *
 * @author JHR, ELO Digital Office GmbH
 * @version 1.0
 *
 * @eloix
 *
 * @requires sol.common.JsonUtils
 * @requires sol.common.RepoUtils
 * @requires sol.common.SordUtils
 * @requires sol.common.CounterUtils
 * @requires sol.common.Template
 * @requires sol.common.WfUtils
 * @requires sol.common.ix.RfUtils
 * @requires sol.common.ix.FunctionBase
 * @requires sol.contact.ix.functions.GenerateFilingStruct
 * @requires sol.contact.Utils
 */
sol.define("sol.contact.ix.functions.generators.GenerateCompanyFilingStruct", {
  extend: "sol.contact.ix.functions.GenerateFilingStruct",

  requiredConfig: ["objId"],
  
  /** 
   * @cfg {String} objId (required)
   */

  initialize: function (config) {
    var me = this;
    sol.ns("sol.contact");
    sol.contact.Config = sol.create("sol.common.Config", { compose: "/contact/Configuration/contact.config" }).config;
    sol.contact.Utils.loadConfig();
    me.$super("sol.Base", "initialize", [config]);
  },

  /**
   * @inheritdoc sol.contact.ix.functions.GenerateFilingStruct#getTemplateId
   */
  getTemplateId: function () {
    var me = this,
        objId = me.objId,
        sordContactList = sol.contact.Utils.getParentContactList(objId);
    if (sordContactList) {
      return me.getFilingStructTemplateId(sordContactList, sol.contact.Config.contactlist.companyFilingStructTemplateField, sol.contact.Config.generators.templateFolderIds.companyFilingStruct);
    }
    return null;
  }
});

/**
 * @member sol.contact.ix.functions.generators.GenerateCompanyFilingStruct
 * @static
 * @inheritdoc sol.common.ix.FunctionBase#onEnterNode
 */
function onEnterNode(clInfo, userId, wFDiagram, nodeId) {
  var params, module;
  logger.enter("onEnterNode_GenerateCompanyFilingStruct", { flowId: wFDiagram.id, nodeId: nodeId });
    
  params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId);
  
  params.objId = wFDiagram.objId;
  module = sol.create("sol.contact.ix.functions.generators.GenerateCompanyFilingStruct", params);

  module.process();

  logger.exit("onEnterNode_GenerateCompanyFilingStruct");
}

/**
 * @member sol.contact.ix.functions.generators.GenerateCompanyFilingStruct
 * @static
 * @inheritdoc sol.common.ix.FunctionBase#onExitNode
 */
function onExitNode(clInfo, userId, wFDiagram, nodeId) {
  var params, module;
  logger.enter("onExitNode_GenerateCompanyFilingStruct", { flowId: wFDiagram.id, nodeId: nodeId });
  params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId);
  
  params.objId = wFDiagram.objId;
  module = sol.create("sol.contact.ix.functions.generators.GenerateCompanyFilingStruct", params);

  module.process();

  logger.exit("onExitNode_GenerateCompanyFilingStruct");
}

/**
 * @member sol.contact.ix.functions.generators.GenerateCompanyFilingStruct
 * @method RF_sol_contact_function_GenerateCompanyFilingStruct
 * @static
 * @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName
 */
function RF_sol_contact_function_GenerateCompanyFilingStruct(iXSEContext, args) {
  var params, module, result;
  logger.enter("RF_sol_contact_function_GenerateCompanyFilingStruct", args);
  params = sol.common.ix.RfUtils.parseAndCheckParams(iXSEContext, arguments.callee.name, args, "objId");
  module = sol.create("sol.contact.ix.functions.generators.GenerateCompanyFilingStruct", params);
  result = module.process();
  logger.exit("RF_sol_contact_function_GenerateCompanyFilingStruct");
  return result;
}