importPackage(Packages.de.elo.ix.client); //@include lib_Class.js //@include lib_sol.common.Config.js //@include lib_sol.common.ObjectUtils.js //@include lib_sol.common.StringUtils.js //@include lib_sol.common.DateUtils.js //@include lib_sol.common.SordUtils.js //@include lib_sol.common.RepoUtils.js //@include lib_sol.common.Map.js //@include lib_sol.common.ObjectFormatter.js //@include lib_sol.common.ix.ServiceBase.js //@include lib_sol.contract.ix.ContractUtils.js var logger = sol.create("sol.Logger", { scope: "sol.contract.ix.services.PaymentPlanCollector" }); /** * Returns the payment plan items * * @author MW, ELO Digital Office GmbH * @version 1.03.002 * * @eloix * * @requires sol.common.Config * @requires sol.common.ObjectUtils * @requires sol.common.StringUtils * @requires sol.common.DateUtils * @requires sol.common.SordUtils * @requires sol.common.RepoUtils * @requires sol.common.Map * @requires sol.common.ObjectFormatter * @requires sol.common.ix.ServiceBase * @requires sol.contract.ix.ContractUtils */ sol.define("sol.contract.ix.services.PaymentPlanCollector", { extend: "sol.common.ix.ServiceBase", requiredConfig: ["parentId"], /** * @cfg {String} parentId (required) */ initialize: function (config) { var me = this; me.$super("sol.common.ix.ServiceBase", "initialize", [config]); me.contractConfig = sol.contract.ix.ContractUtils.loadConfig(); }, process: function () { var me = this, solTypeFieldName, solTypes, objKeysObj, sord, sords, i; me.items = []; solTypeFieldName = me.contractConfig.fields.objType || "SOL_TYPE"; solTypes = me.contractConfig.objectTypes || ["CONTRACT"]; objKeysObj = {}; objKeysObj[solTypeFieldName] = sol.common.RepoUtils.buildOrValuesSearchString(solTypes); // Single contract sord = sol.common.RepoUtils.getSord(me.parentId); if (solTypes.indexOf(sol.common.SordUtils.getObjKeyValue(sord, solTypeFieldName) + "") > -1) { sords = [sord]; } else { sords = sol.common.RepoUtils.findChildren(me.parentId, { includeFolders: true, includeDocuments: false, includeReferences: true, objKeysObj: objKeysObj, recursive: true, level: 32, sordZ: SordC.mbAllIndex }); } for (i = 0; i < sords.length; i++) { me.processContract(sords[i]); } return { sords: me.items }; }, /** * @private * @param {de.elo.ix.client.Sord} sord */ processContract: function (sord) { var me = this; me.sordMap = sol.create("sol.common.SordMap", { objId: sord.id }); me.sordMap.read(); me.sordMap.forEachRow(me.contractConfig.mapFields.contractCashflowRecurringUnit, function (i) { var singleAmount, description, endDateIso, startDate, endDate, unit, startDateIso; startDateIso = ""; singleAmount = me.sordMap.getNumValue(me.contractConfig.mapFields.contractCashflowSingle + i); if (singleAmount) { description = me.sordMap.getValue(me.contractConfig.mapFields.contractCashflowDesc + i); startDateIso = me.sordMap.getValue(me.contractConfig.mapFields.contractCashflowDate + i) || sol.common.SordUtils.getObjKeyValue(sord, me.contractConfig.fields.contractStart); endDateIso = me.sordMap.getValue(me.contractConfig.mapFields.contractCashflowTo + i) || sol.common.SordUtils.getObjKeyValue(sord, me.contractConfig.fields.contractEnd); startDate = startDateIso ? sol.common.DateUtils.isoToDate(startDateIso) : new Date(); endDate = endDateIso ? sol.common.DateUtils.isoToDate(endDateIso) : new Date(); unit = me.sordMap.getKwlKey(me.contractConfig.mapFields.contractCashflowRecurringUnit + i); do { startDateIso = sol.common.DateUtils.dateToIso(startDate); me.items.push(me.createLineTemplateSord(sord, me.sordMap.data, { description: description, amount: singleAmount, date: startDateIso })); if (unit == "O") { break; } startDate = sol.common.DateUtils.shift(startDate, 1, { unit: unit }); } while (startDate < endDate); } }, me); }, createLineTemplateSord: function (sord, mapEntries, calculatedProperties) { var me = this, tSord; tSord = sol.common.ObjectFormatter.format({ sord: { formatter: "sol.common.ObjectFormatter.TemplateSord", data: sord, config: { sordKeys: ["id", "guid", "maskName", "name", "desc", "IDateIso", "XDateIso", "ownerName"] } } }).sord; tSord.mapKeys = me.filterIndexedMapEntries(mapEntries); tSord.mapKeys.CONTRACT_CASHFLOW_DESC = calculatedProperties.description; tSord.mapKeys.CONTRACT_CASHFLOW_AMOUNT = calculatedProperties.amount; tSord.mapKeys.CONTRACT_CASHFLOW_DATE = calculatedProperties.date; return tSord; }, filterIndexedMapEntries: function (mapEntries) { var filteredEntries = {}, key; for (key in mapEntries) { if (mapEntries.hasOwnProperty(key) && !sol.common.StringUtils.getTrailingNumber(key)) { filteredEntries[key] = mapEntries[key]; } } return filteredEntries; } }); /** * @member sol.contract.ix.services.PaymentPlanCollector * @method RF_sol_contract_service_PaymentPlanCollector * @static * @inheritdoc sol.common.ix.ServiceBase#RF_ServiceBaseName */ function RF_sol_contract_service_PaymentPlanCollector(iXSEContext, args) { logger.enter("RF_sol_contract_service_PaymentPlanCollector", args); var config, service, result, resultString; config = sol.common.ix.RfUtils.parseAndCheckParams(iXSEContext, arguments.callee.name, args), service = sol.create("sol.contract.ix.services.PaymentPlanCollector", config); result = service.process(); resultString = sol.common.ix.RfUtils.stringify(result, { tabStop: 2 }); logger.exit("RF_sol_contract_service_PaymentPlanCollector", resultString); return resultString; }