invoiceModule.controller('outputReconciliationConfigurationEditController', ['$scope', '$log', 'uiGridConstants', 'SweetAlert', '$translate', 'stdAccountService', '$interval', 'orgService', '$timeout', '$q', 'commonWebService', 'loginContext', '$uibModal', 'outputReconciliationConfiguration', function($scope, $log, uiGridConstants, SweetAlert, $translate, stdAccountService, $interval, orgService, $timeout, $q, commonWebService, loginContext, $uibModal, outputReconciliationConfiguration) { 'use strict'; var Resources = { Aggregation: $translate.instant('Aggregation'), MonthlyTotal: $translate.instant('MonthlyTotal'), Auto: $translate.instant('Auto'), Manual: $translate.instant('Manual'), EndYearMonthValidateMsg: $translate.instant('EndYearMonthValidateMsg'), BeginYearMonthRequire: $translate.instant('BeginYearMonthRequire') }; var InputType = { NotAvailable: 2, OtherType: 1, NullInput: 0 }; var InputTypeValue = { NotAvailable: '#N/A#', NullInput: '#NULL#' }; var thisConstant = { semicolonEnglist: ';' }; var entityModule = { OrganizationList: [], allOrgs: $translate.instant('AllOrganization'), name: 'name', id: 'id', uiOrgID: 'ApplyingEntitesControls', orgText: $translate.instant('AllOrganization'), // 选中机构ID列表 selectOrgList: [], selectOrgMap: {}, // 有效的机构列表,包括所有机构,id,name,parentID,expanded orgList: [], main: function() { $scope.openEntityModal = function() { if ($scope.editModel.type === 'query' || $scope.editModel.type === 'edit' || $scope.editModel.type === 'copy') { entityModule.openEditModal($scope.editModel.applyEntities); } else { entityModule.openModal(); } } }, loadData: function() { orgService.getOrganizationFilterList().success(function(data) { entityModule.OrganizationList = data; entityModule.orgList = entityModule.getOrgDropDownList(); }); }, openModal: function() { var editModel = { }; $scope.editEntityModel = editModel; mainModule.initModalControls(); var parnet = $('#outputReconciliationConfigurationEditModalBody'); var modalInstance = $uibModal.open({ animation: true, backdrop: false, ariaLabelledBy: 'modal-title', ariaDescribedBy: 'modal-body', templateUrl: 'ApplyingEntitesDetailsModal.html', windowClass: 'edit-invoice-modal-wrapper', scope: $scope, size: 'entity-size', appendTo: parnet, resolve: { editModel: $scope.editModel } }); modalInstance.result.then(function(data) { // 确定关闭 }, function() { // 取消关闭 }); $scope.saveApplyingEntitesDetailsModal = function() { $scope.editModel.selectOrgList = entityModule.selectOrgList; modalInstance.close({}); }; $scope.cancelApplyingEntitesDetailsModal = function() { modalInstance.dismiss('cancel'); }; $timeout(function() { entityModule.drawOrgDropDownList(entityModule.orgList); }, 100); }, openEditModal: function(selectOrgList) { var orgIdList = _.pluck(selectOrgList, 'organizationID'); var data = angular.copy(entityModule.orgList); data.forEach(function(r) { if (orgIdList.indexOf(r.id) > -1) { r.selected = true; } else { r.selected = false; } if ($scope.editModel.isReadOnly) { r.disabled = true; } }); var editModel = { }; $scope.editEntityModel = editModel; mainModule.initModalControls(); var parnet = $('#outputReconciliationConfigurationEditModalBody'); var modalInstance = $uibModal.open({ animation: true, backdrop: false, ariaLabelledBy: 'modal-title', ariaDescribedBy: 'modal-body', templateUrl: 'ApplyingEntitesDetailsModal.html', windowClass: 'edit-invoice-modal-wrapper', scope: $scope, size: 'entity-size', appendTo: parnet, resolve: { editModel: $scope.editModel } }); modalInstance.result.then(function(data) { // 确定关闭 }, function() { // 取消关闭 }); $scope.saveApplyingEntitesDetailsModal = function() { $scope.editModel.selectOrgList = entityModule.selectOrgList; modalInstance.close({}); }; $scope.cancelApplyingEntitesDetailsModal = function() { modalInstance.dismiss('cancel'); }; $timeout(function() { entityModule.drawOrgDropDownList(data); }, 100); }, filterDropDownOrgList: function(orgList, selectIDList, idCol) { if (!orgList || orgList.length === 0) { return orgList; } // 什么都没有选 if (!selectIDList) { return orgList; } // 按照条件进行过滤 orgList = _.filter(orgList, function(row) { return selectIDList.indexOf(row[idCol]) > -1; }); return orgList; }, filterOrgs: function() { if (entityModule.OrganizationList && entityModule.OrganizationList.length > 0) { // 只要启用的和有权限的机构 var filter = _.filter(entityModule.OrganizationList, function(row) { return row.isActive; }); return filter; } else { return []; } }, // 获取机构drop down的list getOrgDropDownList: function() { var showList = entityModule.filterOrgs(); showList = angular.copy(showList); for (var i = 0; i < showList.length; i++) { var item = showList[i]; item.selected = false; item.expanded = true; if (item.parentID === null) { continue; } var parentNode = _.find(showList, function(num) { return num.id === item.parentID }); if (parentNode) { continue; } item.parentID = getParentID(item, entityModule.OrganizationList, showList); } var idList = _.pluck(showList, 'id'); $scope.selectedOrganizationList = idList; return showList; }, // 机构drop down list drawOrgDropDownList: function(data) { entityModule.selectOrgList = _.pluck(data, 'id'); $scope.onChanged({ model: entityModule.selectOrgList }); var syncTreeViewSelection = function(treeView, value, isReady) { if (isReady) { $scope.selectedOrganizationList = entityModule.selectOrgList; $scope.onChanged({ model: entityModule.selectOrgList }); } else { $scope.selectedOrganizationList = value; $scope.onChanged({ model: value }); } }; entityModule.orgDropDownInstantce = $("#" + entityModule.uiOrgID).dxDropDownBox({ value: '', showClearButton: false, contentTemplate: function(e) { var value = e.component.option("value"), $treeView = $("<div>").dxTreeView({ dataSource: data, dataStructure: "plain", keyExpr: "id", parentIdExpr: "parentIDStr", selectionMode: "multiple", displayExpr: "name", selectByClick: true, noDataText: '', height: 300, itemTemplate: function(itemData, itemIndex, itemElement) { var str = itemData.code + ' ' + itemData.name; itemElement.append("<span title='" + str + "'>" + str + "</span>"); }, onContentReady: function(args) {}, selectNodesRecursive: false, expandAllEnabled: true, showCheckBoxesMode: "selectAll", selectAllText: entityModule.allOrgs, onItemSelectionChanged: function(args) { }, onSelectionChanged: function(args) { var value = args.component.getSelectedNodesKeys(); var text = ''; if (value && value.length === data.length) { text = entityModule.allOrgs; } else { text = '选中' + value.length + '个机构'; } entityModule.selectOrgList = value; e.component.option("value", text); entityModule.orgText = text; syncTreeViewSelection(entityModule.orgTreeView, value, false); } }); entityModule.orgTreeView = $treeView.dxTreeView("instance"); entityModule.orgText = e.component.option("text"); return $treeView; } }); } }; var mainModule = { TagList: [ { id: constant.TagRule.Aggregation, name: Resources.Aggregation }, ], main: function() { // 设置一个默认 $scope.editModel = { preVoucherNumberType: 0 }; mainModule.watchCollection(); entityModule.main(); }, initModalControls: function() { $scope.modalControls = {}; $scope.editModel.TagList = mainModule.TagList; $scope.editModel.TaxRateList = ["17%", "6%"]; $scope.modalControls.dxOptions = { ruleNoOpt: { bindingOptions: { value: 'editModel.ruleNo', // readOnly: 'editModel.isReadOnly', }, readOnly: true, maxLength: 50 }, tagOpt: { bindingOptions: { 'value': 'editModel.tag', 'dataSource': 'editModel.TagList', readOnly: 'editModel.isReadOnly', }, onSelectionChanged: function(args) { }, displayExpr: 'name', valueExpr: 'id' }, categoryOpt: { bindingOptions: { value: 'editModel.category', readOnly: 'editModel.isReadOnly', }, maxLength: 50 }, preVoucherNumberOpt: { bindingOptions: { value: 'editModel.preVoucherNumberText', readOnly: 'editModel.voucherNumberTypeReadOnly', }, maxLength: 50 }, postedByOpt: { bindingOptions: { value: 'editModel.postedByText', readOnly: 'editModel.postedByTypeReadOnly', }, maxLength: 50 }, journalKeywordsOpt: { bindingOptions: { value: 'editModel.journalKeywordsText', readOnly: 'editModel.isReadOnly', }, disabled: true, maxLength: 250 }, vehicleNumberOpt: { bindingOptions: { value: 'editModel.vehicleNumberText', readOnly: 'editModel.vehicleNumberReadOnly', }, maxLength: 50 }, taxRateOpt: { bindingOptions: { 'value': 'editModel.taxRateValue', 'dataSource': 'editModel.TaxRateList', readOnly: 'editModel.isReadOnly', }, onSelectionChanged: function(args) { }, }, fapiaoTaxRateOpt: { bindingOptions: { 'value': 'editModel.fapiaoTaxRateValue', 'dataSource': 'editModel.TaxRateList', readOnly: 'editModel.isReadOnly', }, onSelectionChanged: function(args) { }, }, fapiaoKeywordsOpt: { bindingOptions: { value: 'editModel.fapiaoKeywordsText', readOnly: 'editModel.isReadOnly', }, maxLength: 250 }, beginYearMonthOptions: { type: 'date', width: 326, bindingOptions: { value: 'editModel.activeStartTime', readOnly: 'editModel.isReadOnly', }, placeholder: $scope.pleaseSelect, showClearButton: false, displayFormat: "yyyy-MM", maxZoomLevel: 'year' }, endYearMonthOptions: { type: 'date', width: 326, bindingOptions: { value: 'editModel.activeEndTime', readOnly: 'editModel.isReadOnly', min: 'editModel.activeStartTime' }, placeholder: $scope.pleaseSelect, showClearButton: true, displayFormat: "yyyy-MM", maxZoomLevel: 'year', dateOutOfRangeMessage: Resources.EndYearMonthValidateMsg, invalidDateMessage: Resources.EndYearMonthValidateMsg } }; $scope.modalControls.validateOption = { ruleNoOpt: { validationRules: [{ type: "required", message: $translate.instant('RuleNoRequire') }] }, categoryOpt: { validationRules: [{ type: "required", message: $translate.instant('CategoryRequire') }] }, beginYearMonthOptions: { validationRules: [{ type: "required", message: Resources.BeginYearMonthRequire }] } } // mainModule.generateKeywordsList('journalKeywords'); // mainModule.generateKeywordsList('fapiaoKeywords'); }, parseDBKeywords: function(list) { if (!list) { list = []; } var valueList = _.pluck(list, 'value'); var str = valueList.join(thisConstant.semicolonEnglist); return str; }, parseViewKeywords: function(str) { if (!str) { return []; } var array = str.split(/;/g); array = _.filter(array, function(row) { return row; }); var result = []; array.forEach(function(r) { result.push({ id: window.PWC.newGuid(), value: r, prefix: ';' }); }); if (result && result.length > 0) { result[0].prefix = ''; } return result; }, parseDBField: function(type, value) { if (value) { return value; } else { if (type === InputType.NotAvailable) { return InputTypeValue.NotAvailable; } else { return InputTypeValue.NullInput; } } }, parseViewField: function(value) { var obj = { type: InputType.NotAvailable, text: null }; if (value === InputTypeValue.NotAvailable) { obj.type = InputType.NotAvailable; } else if (value === InputTypeValue.NullInput) { obj.type = InputType.NullInput; } else { obj.type = InputType.OtherType; obj.text = value; } return obj; }, getPercent: function(value) { if (value) { var str = parseInt(value.replace('%', '')) / 100; return str; } }, parseDBModel: function(editModel) { editModel = angular.copy(editModel); editModel.preVoucherNumber = mainModule.parseDBField(editModel.preVoucherNumberType, editModel.preVoucherNumberText); editModel.postedBy = mainModule.parseDBField(editModel.postedByType, editModel.postedByText); editModel.vehicleNumber = mainModule.parseDBField(editModel.vehicleNumberType, editModel.vehicleNumberText); editModel.purchaserTesla = parseInt(editModel.purchaserTesla); editModel.sellerTesla = parseInt(editModel.sellerTesla); editModel.journalKeywords = mainModule.parseDBKeywords(editModel.journalKeywordsList); editModel.fapiaoKeywords = mainModule.parseDBKeywords(editModel.fapiaoKeywordsList); editModel.taxRate = mainModule.getPercent(editModel.taxRateValue); editModel.fapiaoTaxRate = mainModule.getPercent(editModel.fapiaoTaxRateValue); if (!editModel.applyEntities) { editModel.applyEntities = []; } editModel.dxOptions = null; editModel.validateOption = null; if (editModel.activeStartTime) { editModel.activeStartTime = editModel.activeStartTime.formatDateTime('yyyy-MM-dd'); } if (editModel.activeEndTime) { editModel.activeEndTime = editModel.activeEndTime.formatDateTime('yyyy-MM-dd'); } else { editModel.activeEndTime = null; } if (editModel.applyEntities && editModel.applyEntities.length > 0) { editModel.applyEntities.forEach(function(r) { r.outputReconciliationConfigurationID = $scope.editModel.id; }); } return editModel; }, parseViewModel: function(dbModel) { var viewModel = angular.copy(dbModel); viewModel.ruleNo = dbModel.ruleNO; var obj = mainModule.parseViewField(dbModel.preVoucherNumber); viewModel.preVoucherNumberType = obj.type; viewModel.preVoucherNumberText = obj.text; obj = mainModule.parseViewField(dbModel.postedBy); viewModel.postedByType = obj.type; viewModel.postedByText = obj.text; obj = mainModule.parseViewField(dbModel.vehicleNumber); viewModel.vehicleNumberType = obj.type; viewModel.vehicleNumberText = obj.text; viewModel.fapiaoKeywordsList = mainModule.parseViewKeywords(dbModel.fapiaoKeywords); viewModel.journalKeywordsList = mainModule.parseViewKeywords(dbModel.journalKeywords); viewModel.taxRateValue = dbModel.taxRate * 100 + '%'; viewModel.fapiaoTaxRateValue = dbModel.fapiaoTaxRate * 100 + '%'; viewModel.selectOrgList = _.pluck(dbModel.applyEntities, 'organizationID'); viewModel.activeStartTime = new Date(viewModel.activeStartTime); if (viewModel.activeEndTime) { viewModel.activeEndTime = new Date(viewModel.activeEndTime); } return viewModel; }, openEditModal: function() { var editModel = $scope.configModel; $scope.editModel = mainModule.parseViewModel(editModel); $scope.editModel.isReadOnly = true; $scope.editModel.postedByTypeReadOnly = true; $scope.editModel.voucherNumberTypeReadOnly = true; $scope.editModel.vehicleNumberReadOnly = true; $scope.editModel.type = 'query'; mainModule.initModalControls(); var modalInstance = $uibModal.open({ animation: true, backdrop: false, ariaLabelledBy: 'modal-title', ariaDescribedBy: 'modal-body', templateUrl: 'outputReconciliationConfigurationEdit.html', windowClass: 'edit-invoice-modal-wrapper', scope: $scope, size: 'output-reconciliation-configuration-edit', resolve: { editModel: $scope.editModel } }); modalInstance.result.then(function(data) { $scope.isUpdate = true; $scope.operateType = null; if ($scope.onChanged) { $scope.onChanged(); } }, function() { $scope.operateType = null; $log.info('Modal dismissed at: ' + new Date()); }); $scope.edit = function() { $scope.editModel.isReadOnly = false; $scope.editModel.type = "edit"; }; $scope.saveAs = function() { //var newModel = mainModule.parseViewModel($scope.configModel); //newModel.id = null; //newModel.category = null; //newModel.ruleNo = null; //newModel.type = "copy"; //newModel.isReadOnly = false; //$scope.editModel = newModel; outputReconciliationConfiguration.getNextRuleNo().success(function(data) { if (data && data.result) { $scope.editModel.id = null; $scope.editModel.category = null; $scope.editModel.ruleNo = data.data; $scope.editModel.type = "copy"; $scope.editModel.isReadOnly = false; } }); }; $scope.update = function() { var model = $scope.editModel; model = mainModule.parseDBModel(model); var dxResult = DevExpress.validationEngine.validateGroup($('#outputReconciliationConfigurationEditForm').dxValidationGroup("instance")).isValid; if (!dxResult) { return; } console.log(JSON.stringify(model)); outputReconciliationConfiguration.update(model).success(function(ret) { // console.log(JSON.stringify(ret)); // modalInstance.close({}); if (ret) { if (ret.result) { modalInstance.close({}); } else { SweetAlert.warning($translate.instant(ret.resultMsg)); } } }); }; $scope.cancel = function() { modalInstance.dismiss('cancel'); }; $scope.save = function() { var model = $scope.editModel; model = mainModule.parseDBModel(model); var dxResult = DevExpress.validationEngine.validateGroup($('#outputReconciliationConfigurationEditForm').dxValidationGroup("instance")).isValid; if (!dxResult) { return; } console.log(JSON.stringify(model)); outputReconciliationConfiguration.add(model).success(function(ret) { // console.log(JSON.stringify(ret)); // modalInstance.close({}); if (ret) { if (ret.result) { modalInstance.close({}); } else { SweetAlert.warning($translate.instant(ret.resultMsg)); } } }); }; entityModule.loadData(); }, openModal: function() { var editModel = { status: true, preVoucherNumberType: InputType.NotAvailable, postedByType: InputType.NotAvailable, ruleNo: mainModule.nexRuleNo, vehicleNumberType: InputType.NotAvailable, purchaserTesla: '2', sellerTesla: '2', journalKeywordsType: '2', journalKeywordsText: 'test', fapiaoKeywordsType: '2', taxRateValue: '17%', fapiaoTaxRateValue: '17%', tag: constant.TagRule.Aggregation, type: 'add', journalKeywordsList: [], fapiaoKeywordsList: [], voucherNumberTypeReadOnly: true, postedByTypeReadOnly: true }; $scope.editModel = editModel; mainModule.initModalControls(); var modalInstance = $uibModal.open({ animation: true, backdrop: false, ariaLabelledBy: 'modal-title', ariaDescribedBy: 'modal-body', templateUrl: 'outputReconciliationConfigurationEdit.html', windowClass: 'edit-invoice-modal-wrapper', scope: $scope, size: 'output-reconciliation-configuration-edit', resolve: { editModel: $scope.editModel } }); modalInstance.result.then(function(data) { $scope.isUpdate = true; $scope.operateType = null; if ($scope.onChanged) { $scope.onChanged(); } }, function() { $scope.operateType = null; $log.info('Modal dismissed at: ' + new Date()); }); $scope.save = function() { var model = $scope.editModel; model = mainModule.parseDBModel(model); var dxResult = DevExpress.validationEngine.validateGroup($('#outputReconciliationConfigurationEditForm').dxValidationGroup("instance")).isValid; if (!dxResult) { return; } console.log(JSON.stringify(model)); outputReconciliationConfiguration.add(model).success(function(ret) { console.log(JSON.stringify(ret)); if (ret) { if (ret.result) { modalInstance.close({}); } else { SweetAlert.warning($translate.instant(ret.resultMsg)); } } }); }; $scope.cancel = function() { modalInstance.dismiss('cancel'); }; $scope.addJournalKeywords = function() { mainModule.addKeywords('journalKeywords'); }; $scope.deleteJournalKeywords = mainModule.deleteJournalKeywords; entityModule.loadData(); }, watchCollection: function() { $scope.$watch('operateType', function(newValue, oldValue) { if (newValue) { if (newValue === constant.Operation.Add) { outputReconciliationConfiguration.getNextRuleNo().success(function(data) { if (data && data.result) { mainModule.nexRuleNo = data.data; mainModule.openModal(); } }); } else if (newValue === constant.Operation.Edit) { mainModule.openEditModal(); } else if (newValue === constant.Operation.Query) { mainModule.openEditModal(); } } }); // $scope.$watch('editModel.preVoucherNumberType', function(newValue, oldValue) { // if (newValue) { // if ($scope.editModel.preVoucherNumberType === 1 && !$scope.editModel.isReadOnly) { // $scope.editModel.voucherNumberTypeReadOnly = false; // } else { // $scope.editModel.voucherNumberTypeReadOnly = true; // } // } // }); $scope.preVoucherNumberTypeChange = function() { if (!$scope.editModel.isReadOnly) { if ($scope.editModel.preVoucherNumberType == 1) { $scope.editModel.voucherNumberTypeReadOnly = false; } else { $scope.editModel.voucherNumberTypeReadOnly = true; $scope.editModel.preVoucherNumberText = null; } } } $scope.postedByTypeChange = function() { if (!$scope.editModel.isReadOnly) { if ($scope.editModel.postedByType == 1) { $scope.editModel.postedByTypeReadOnly = false; } else { $scope.editModel.postedByTypeReadOnly = true; $scope.editModel.postedByText = null; } } } $scope.vehicleNumberTypeChange = function() { if (!$scope.editModel.isReadOnly) { if ($scope.editModel.vehicleNumberType == 1) { $scope.editModel.vehicleNumberReadOnly = false; } else { $scope.editModel.vehicleNumberReadOnly = true; $scope.editModel.vehicleNumberText = null; } } } } }; (function initializa() { mainModule.main(); $log.debug('outputReconciliationConfigurationEditController.ctor()...'); })(); } ]);