systemConfigurationModule.factory('ruleEngineOp', ['ruleEngineService', function (ruleEngineService) { var operations = {}; operations.taxRuleSettingOperations = []; operations.taxPayerReportRuleOperations = []; function add(obj, prop, op) { var addOperation = {}; addOperation.action = 'Add'; addOperation[prop] = op; operations[obj].push(addOperation); console.log(operations[obj]); } function update(obj, prop,op) { var ret = operations[obj].filter(function (operation) { return operation[prop].editKey === op.editKey; }); if (ret.length !== 0) { return; } updateOperation = {}; updateOperation.action = 'Update'; updateOperation[prop] = op; operations[obj].push(updateOperation); console.log(operations[obj]); } function del(obj, prop, op) { var isAlreadyInList = operations[obj].filter(function (operation) { return operation[prop].editKey === op.editKey; }).length !== 0; if (isAlreadyInList === true) { operations[obj] = operations[obj].filter(function (operation) { return operation[prop].editKey !== op.editKey; }); } if (op.isNotPersistent !== true) { var deleteOperation = {}; deleteOperation.action = 'Delete'; deleteOperation[prop] = op; operations[obj].push(deleteOperation); } console.log(operations[obj]); }; function validationBeforCommit() { //start to validation //first find the blank row //second check validation count // console.log(operations.taxRuleSettingOperations); //console.log(operations.taxPayerReportRuleOperations); var isValid = true; operations.taxRuleSettingOperations.every(function (taxRuleSettingOperation) { if (taxRuleSettingOperation.action === 'Add' || taxRuleSettingOperation.action === 'Update') { var taxRuleSetting = taxRuleSettingOperation.taxRuleSetting; if (!(angular.isArray(taxRuleSetting.orgs) && taxRuleSetting.orgs.length > 0) && taxRuleSetting.isDefault === 0 ) { isValid = false; } else if (!(angular.isString(taxRuleSetting.taxBase) || taxRuleSetting.taxBase.trim() === '')) { isValid = false; } else if (!angular.isNumber(taxRuleSetting.taxRate)) { isValid = false; } if (isValid === false) { return false; } return true; } }); operations.taxPayerReportRuleOperations.every(function (taxPayerReportRuleOperation) { if (taxPayerReportRuleOperation.action === 'Add' || taxPayerReportRuleOperation.action === 'Update') { var taxPayerReportRule = taxPayerReportRuleOperation.taxPayerReportRule; if (!(angular.isArray(taxPayerReportRule.orgs) && taxPayerReportRule.orgs.length > 0) && taxPayerReportRule.isDefault === 0) { isValid = false; } else if (!angular.isNumber(taxPayerReportRule.taxPayerType)) { isValid = false; } else if (!angular.isString(taxPayerReportRule.templateGroupID)) { isValid = false; } if (isValid === false) { return false; } return true; } }); return isValid; }; return { addTaxRuleSettingOperation: function (taxRuleSetting) { add('taxRuleSettingOperations', 'taxRuleSetting', taxRuleSetting); }, updateTaxRuleSettingOperation: function (taxRuleSetting) { update('taxRuleSettingOperations', 'taxRuleSetting', taxRuleSetting); }, deleteTaxRuleSettingOperation: function (taxRuleSetting) { del('taxRuleSettingOperations', 'taxRuleSetting', taxRuleSetting); }, addTaxPayerReportRuleOperation: function (taxPayerReportRule) { add('taxPayerReportRuleOperations', 'taxPayerReportRule', taxPayerReportRule); }, updateTaxPayerReportRuleOperation: function (taxPayerReportRule) { update('taxPayerReportRuleOperations', 'taxPayerReportRule', taxPayerReportRule); }, deleteTaxPayerReportRuleOperation: function (taxPayerReportRule) { del('taxPayerReportRuleOperations', 'taxPayerReportRule', taxPayerReportRule); }, clearOperations:function() { operations.taxRuleSettingOperations = []; operations.taxPayerReportRuleOperations = []; }, commit: function (successCallback) { if (validationBeforCommit()) { var batchUpdateTaxRuleDto = { taxRuleSettingOperations: operations.taxRuleSettingOperations, taxPayerReportRuleOperations: operations.taxPayerReportRuleOperations }; //console.log(batchUpdateTaxRuleDto); ruleEngineService.saveTaxRuleSettings(batchUpdateTaxRuleDto).success(function () { operations.taxRuleSettingOperations = []; operations.taxPayerReportRuleOperations = []; successCallback(); }); } else { //sweet alert swal('有未填写项'); } } } }]);