citModule.controller('citPreviewOutputInvoiceController', ['$scope', '$log', '$translate', '$timeout', 'SweetAlert', '$q', 'uiGridConstants', '$interval', 'vatPreviewService', 'vatSessionService', 'citSessionService', 'browserService', 'enums', 'region', 'vatExportService', function ($scope, $log, $translate, $timeout, SweetAlert, $q, uiGridConstants, $interval, vatPreviewService, vatSessionService, citSessionService, browserService, enums, region, vatExportService) { 'use strict'; $scope.startDate = new Date(vatSessionService.project.year, 0, 1); $scope.endDate = new Date(vatSessionService.project.year, 11, 31); $scope.dateFormat = $translate.instant('dateFormat4YearMonthDay'); $scope.curPageItemCount = 0; var startMonth = new Date().getMonth(); var endMonth = new Date().getMonth(); var minDate = [1, vatSessionService.project.year]; var maxDate = [12, vatSessionService.project.year]; var setDate = [ [citSessionService.month, vatSessionService.project.year], [citSessionService.month, vatSessionService.project.year]]; //发票类型 var invoiceTypeEnum = { Normal: $translate.instant('Normal'), Special: $translate.instant('Special') }; //区间 $scope.monthList = [$translate.instant('Month01'), $translate.instant('Month02'), $translate.instant('Month03'), $translate.instant('Month04'), $translate.instant('Month05'), $translate.instant('Month06'), $translate.instant('Month07'), $translate.instant('Month08'), $translate.instant('Month09'), $translate.instant('Month10'), $translate.instant('Month11'), $translate.instant('Month12') ]; //发票类型 $scope.invoiceTypeList = [ { id: 999, name: $translate.instant('AllTheItems') }, { id: enums.outputInvoiceType.Normal, name: $translate.instant('Normal') }, { id: enums.outputInvoiceType.Special, name: $translate.instant('Special') }, ]; $scope.PeriodStart = {}; $scope.PeriodEnd = {}; $scope.InvoiceType = {}; //初始化期间 var initPeriods = function () { $scope.queryParams = { pageInfo: {}, periodStart: '', periodEnd: '', invoiceDateStart: null, invoiceDateEnd: null, classCode: '', invoiceNumber: '', buyerName: '', productName:'', amountStart: null, amountEnd: null, invoiceType: null, taxAmountStart: null, taxAmountEnd: null }; $scope.queryParams.periodStart = citSessionService.month; $scope.queryParams.periodEnd = citSessionService.month; }; //从数据库中load数据 var loadOutputInvoiceDataFromDB = function (pageIndex) { initOutputInvoicePagination(); $scope.curOutputInvoiceItemPage = pageIndex; //初始化查询信息 $scope.queryParams.pageInfo = { totalCount: $scope.queryOutputInvoiceResult.pageInfo.totalCount, pageIndex: pageIndex, pageSize: $scope.queryOutputInvoiceResult.pageInfo.pageSize, totalPage: 0, } vatPreviewService.queryOutputInvoiceList($scope.queryParams).success(function (data) { if (data) { var index = 1; data.list.forEach(function (v) { v.index = index++; v.amount = PWC.round(v.amount, 2); v.taxAmount = PWC.round(v.taxAmount, 2); }); $scope.gridOptions.data = data.list; $scope.queryOutputInvoiceResult.pageInfo = data.pageInfo; computeOutputInvoiceItemPage(); } }).error(function () { SweetAlert.error($translate.instant('PleaseContactAdministrator')); }); } //点击任意一页加载数据事件 var loadOutputInvoiceDataByPage = function (pageIndex) { loadOutputInvoiceDataFromDB(pageIndex); }; //计算页数,创建分页栏 var computeOutputInvoiceItemPage = function () { if ($scope.queryOutputInvoiceResult.pageInfo && $scope.queryOutputInvoiceResult.pageInfo.totalCount > 0) { var totalPage = parseInt($scope.queryOutputInvoiceResult.pageInfo.totalCount / $scope.queryOutputInvoiceResult.pageInfo.pageSize); totalPage = $scope.queryOutputInvoiceResult.pageInfo.totalCount % $scope.queryOutputInvoiceResult.pageInfo.pageSize == 0 ? totalPage : totalPage + 1; if ($scope.queryOutputInvoiceResult.pageInfo.pageIndex === totalPage) { $scope.curPageItemCount = $scope.queryOutputInvoiceResult.pageInfo.totalCount % $scope.queryOutputInvoiceResult.pageInfo.pageSize; } else { $scope.curPageItemCount = $scope.queryOutputInvoiceResult.pageInfo.pageSize; } $scope.queryOutputInvoiceResult.pageInfo.totalPage = totalPage; var createPage = $("#totalInvoicePage").createPage({ pageCount: totalPage, current: $scope.curOutputInvoiceItemPage, backFn: function (p) { //单击回调方法,p是当前页码 loadOutputInvoiceDataByPage(p); } }); $('#totalInvoicePage').css('display', 'inline-block'); } else { var createPage = $("#totalInvoicePage").createPage({ pageCount: 0, current: $scope.curOutputInvoiceItemPage, backFn: function (p) { //单击回调方法,p是当前页码 loadOutputInvoiceDataByPage(p); } }); $('#totalInvoicePage').css('display', 'inline-block'); } }; //初始化分页信息 var initOutputInvoicePagination = function () { $scope.queryOutputInvoiceResult = { list: [], pageInfo: { totalCount: 0, pageIndex: 1, pageSize: 100, totalPage: 0, } } $scope.curOutputInvoiceItemPage = 1; }; //发票类型转换 $scope.typeToString = function (strType) { var type = invoiceTypeEnum.Normal; switch (strType) { case 0: type = invoiceTypeEnum.Normal; break; case 1: type = invoiceTypeEnum.Special; break; default: type = ""; } return type; } //将选择了的查询条件显示在grid上方 var doDataFilter = function (removeData) { //设置起止期间 if ($scope.queryParams.periodStart > $scope.queryParams.periodEnd) { $scope.queryParams.periodEnd = $scope.queryParams.periodStart; } //设置需要去掉的查询条件的值为空 if (!PWC.isNullOrEmpty(removeData)) { var removeItem = removeData.split("|"); removeItem.forEach(function (v) { $scope.queryParams[v] = null; if ($scope.queryParams.invoiceType === null) { $scope.InvoiceType.selected = undefined; } }); } //设置发票类型和认证结果 if ($scope.InvoiceType.selected !== undefined) $scope.queryParams.invoiceType = $scope.InvoiceType.selected.id; else $scope.queryParams.invoiceType = null; // 将查询条件加入到grid上方 var crits = $scope.queryParams; //定义查询条件数组用于存放已选的查询条件 $scope.criteriaList = []; var crit = []; //日期 if (!PWC.isNullOrEmpty(crits.invoiceDateStart) && !PWC.isNullOrEmpty(crits.invoiceDateEnd)) { if (new Date(crits.invoiceDateStart.replace(/[\.-]/g, '/')) > new Date(crits.invoiceDateEnd.replace(/[\.-]/g, '/'))) { $scope.criteriaList = []; SweetAlert.warning($translate.instant('InvoiceDateQueryError')); return; } crit = new Object; crit.name = $translate.instant('InvoiceDate')+":" + crits.invoiceDateStart + "-" + crits.invoiceDateEnd; crit.valueFrom = crits.invoiceDateStart; crit.valueTo = crits.invoiceDateEnd; crit.propertyName = "invoiceDateStart|invoiceDateEnd"; $scope.criteriaList.push(crit); } else if (!PWC.isNullOrEmpty(crits.invoiceDateStart) && PWC.isNullOrEmpty(crits.invoiceDateEnd)) { crit = new Object; crit.name = $translate.instant('InvoiceDate') + ":" + crits.invoiceDateStart + $translate.instant('After'); crit.valueFrom = crits.invoiceDateStart; crit.valueTo = crits.invoiceDateEnd; crit.propertyName = "invoiceDateStart|invoiceDateEnd"; $scope.criteriaList.push(crit); } else if (PWC.isNullOrEmpty(crits.invoiceDateStart) && !PWC.isNullOrEmpty(crits.invoiceDateEnd)) { crit = new Object; crit.name = $translate.instant('InvoiceDate') + ":" + crits.invoiceDateEnd + $translate.instant('Before'); crit.valueFrom = crits.invoiceDateStart; crit.valueTo = crits.invoiceDateEnd; crit.propertyName = "invoiceDateStart|invoiceDateEnd"; $scope.criteriaList.push(crit); } //发票代码 if (!PWC.isNullOrEmpty(crits.classCode)) { crit = new Object; crit.name = $translate.instant('ClassCode') + ":" + PWC.limitString(crits.classCode, 10); crit.valueFrom = crits.classCode; crit.propertyName = "classCode"; $scope.criteriaList.push(crit); } //发票号码 if (!PWC.isNullOrEmpty(crits.invoiceNumber)) { crit = new Object; crit.name = $translate.instant('InvoiceNumber') + ":" + PWC.limitString(crits.invoiceNumber, 10); crit.valueFrom = crits.invoiceNumber; crit.propertyName = "invoiceNumber"; $scope.criteriaList.push(crit); } //购方名称 if (!PWC.isNullOrEmpty(crits.buyerName)) { crit = new Object; crit.name = $translate.instant('BuyerName') + ":" + PWC.limitString(crits.buyerName, 10); crit.valueFrom = crits.buyerName; crit.propertyName = "buyerName"; $scope.criteriaList.push(crit); } //产品名称 if (!PWC.isNullOrEmpty(crits.productName)) { crit = new Object; crit.name = $translate.instant('ProductName') + ":" + PWC.limitString(crits.productName, 10); crit.valueFrom = crits.productName; crit.propertyName = "productName"; $scope.criteriaList.push(crit); } //发票类型 if (!PWC.isNullOrEmpty(crits.invoiceType)) { crit = new Object; crit.valueFrom = _.find($scope.invoiceTypeList, function (v) { return v.id === crits.invoiceType; }).name; crit.name = $translate.instant('InvoiceType') + ":" + crit.valueFrom; crit.propertyName = "invoiceType"; $scope.criteriaList.push(crit); } //金额 if (!PWC.isNullOrEmpty(crits.amountStart) && !PWC.isNullOrEmpty(crits.amountEnd)) { if (Number(crits.amountStart) > Number(crits.amountEnd)) { $scope.criteriaList = []; SweetAlert.warning($translate.instant('AmountQueryError')); return; } crit = new Object; crit.name = $translate.instant('Amount') + ":" + PWC.limitString(crits.amountStart, 5) + "-" + PWC.limitString(crits.amountEnd, 5); crit.valueFrom = crits.amountStart; crit.valueTo = crits.amountEnd; crit.propertyName = "amountStart|amountEnd"; $scope.criteriaList.push(crit); } else if (!PWC.isNullOrEmpty(crits.amountStart) && PWC.isNullOrEmpty(crits.amountEnd)) { crit = new Object; crit.name = $translate.instant('Amount') + ":" + PWC.limitString(crits.amountStart, 5) + $translate.instant('MoreThan'); crit.valueFrom = crits.amountStart; crit.valueTo = crits.amountEnd; crit.propertyName = "amountStart|amountEnd"; $scope.criteriaList.push(crit); } else if (PWC.isNullOrEmpty(crits.amountStart) && !PWC.isNullOrEmpty(crits.amountEnd)) { crit = new Object; crit.name = $translate.instant('Amount') + ":" + PWC.limitString(crits.amountEnd, 5) + $translate.instant('LessThan'); crit.valueFrom = crits.amountStart; crit.valueTo = crits.amountEnd; crit.propertyName = "amountStart|amountEnd"; $scope.criteriaList.push(crit); } //税额 if (!PWC.isNullOrEmpty(crits.taxAmountStart) && !PWC.isNullOrEmpty(crits.taxAmountEnd)) { if (Number(crits.taxAmountStart) > Number(crits.taxAmountEnd)) { $scope.criteriaList = []; SweetAlert.warning($translate.instant('TaxAmountQueryError')); return; } crit = new Object; crit.name = $translate.instant('TaxAmount') + ":" + PWC.limitString(crits.taxAmountStart, 5) + "-" + PWC.limitString(crits.taxAmountEnd, 5); crit.valueFrom = crits.taxAmountStart; crit.valueTo = crits.taxAmountEnd; crit.propertyName = "taxAmountStart|taxAmountEnd"; $scope.criteriaList.push(crit); } else if (!PWC.isNullOrEmpty(crits.taxAmountStart) && PWC.isNullOrEmpty(crits.taxAmountEnd)) { crit = new Object; crit.name = $translate.instant('TaxAmount') + ":" + PWC.limitString(crits.taxAmountStart, 5) + $translate.instant('MoreThan'); crit.valueFrom = crits.taxAmountStart; crit.valueTo = crits.taxAmountEnd; crit.propertyName = "taxAmountStart|taxAmountEnd"; $scope.criteriaList.push(crit); } else if (!PWC.isNullOrEmpty(crits.taxAmountStart) && PWC.isNullOrEmpty(crits.taxAmountEnd)) { crit = new Object; crit.name = $translate.instant('TaxAmount') + ":" + PWC.limitString(crits.taxAmountEnd, 5) + $translate.instant('LessThan'); crit.valueFrom = crits.taxAmountStart; crit.valueTo = crits.taxAmountEnd; crit.propertyName = "taxAmountStart|taxAmountEnd"; $scope.criteriaList.push(crit); } // add to Criteria List for display on top of the grid: //******************************************************************************** var criteria = JSON.stringify($scope.queryParams); if (browserService.isIE() || browserService.isEdge()) criteria = encodeURIComponent(criteria); loadOutputInvoiceDataFromDB(1); $('.filter-button').popover("hide"); }; //去掉所有的查询条件,重新load数据 var doDataFilterReset = function () { $scope.queryParams = { pageInfo: {}, periodStart: '', periodEnd: '', invoiceDateStart: null, invoiceDateEnd: null, classCode: '', invoiceNumber: '', buyerName: '', productName: '', amountStart: null, amountEnd: null, invoiceType: null, taxAmountStart: null, taxAmountEnd: null }; $scope.criteriaList = []; $scope.queryParams.periodStart = startMonth; $scope.queryParams.periodEnd = endMonth; loadOutputInvoiceDataFromDB(1); $('.filter-button').popover("hide"); }; //在popover打开时执行事件 var showPopover = function () { $timeout(function () { initDatePickers(); }, 500); }; //初始化时间控件 var initDatePickers = function () { //开票开始时间 var ele1 = $("#invoiceDateStart"); ele1.datepicker({ startDate: $scope.startDate, endDate: $scope.endDate, language: region, autoclose: true,//选中之后自动隐藏日期选择框 clearBtn: true,//清除按钮 todayBtn: false,//今日按钮 format: $scope.dateFormat//日期格式,详见 http://bootstrap-datepicker.readthedocs.org/en/release/options.html#format }); ele1.datepicker("setDate", $scope.queryParams.invoiceDateStart); //开票结束时间 var ele2 = $("#invoiceDateEnd"); ele2.datepicker({ startDate: $scope.startDate, endDate: $scope.endDate, language: region, autoclose: true,//选中之后自动隐藏日期选择框 clearBtn: true,//清除按钮 todayBtn: false,//今日按钮 format: $scope.dateFormat//日期格式,详见 http://bootstrap-datepicker.readthedocs.org/en/release/options.html#format }) ele2.datepicker("setDate", $scope.queryParams.invoiceDateEnd); //初始化已选择的发票类型和认证结果 $scope.InvoiceType.selected = _.find($scope.invoiceTypeList, function (v) { return v.id == $scope.queryParams.invoiceType; }) }; //转换百分比 $scope.decimalToPercent = function (data) { return (data * 100).toFixed(0) + "%"; } //导出 var doExport = function () { vatPreviewService.getExportOutputInvoiceList($scope.queryParams).success(function (data, status, headers) { vatExportService.exportToExcel(data, status, headers, '销项发票信息'); }).error(function () { SweetAlert.error($translate.instant('PleaseContactAdministrator')); }); } //$scope.$on('ngRepeatFinished', function (ngRepeatFinishedEvent) { // export_table_to_excel('exportTable', 'OutputInvoice', 'xlsx', ''); //}); $scope.gridOptionsColumnDefs = [ { name: $translate.instant('ImportErrorPopUpNoCol'), width: '5%', cellTemplate: '<div class="ui-grid-cell-contents" ><span>{{row.entity.index}}<span></div>' }, { name: $translate.instant('PeriodId'), width: '5%', cellTemplate: '<div class="ui-grid-cell-contents" title="{{row.entity.periodID}}"><span>{{row.entity.periodID}}<span></div>' }, { name: $translate.instant('InvoiceDate'), width: '10%', cellTemplate: '<div class="ui-grid-cell-contents" ><span>{{row.entity.invoiceDate | date:"yyyy-MM-dd"}}</span></div>' }, { name: $translate.instant('InvoiceType'), width: '10%', cellTemplate: '<div class="ui-grid-cell-contents" title="{{grid.appScope.typeToString(row.entity.invoiceType)}}"><span>{{grid.appScope.typeToString(row.entity.invoiceType)}}<span></div>' }, { name: $translate.instant('ClassCode'), width: '10%', cellTemplate: '<div class="ui-grid-cell-contents" title="{{row.entity.classCode}}"><span>{{row.entity.classCode}}<span></div>' }, { name: $translate.instant('InvoiceNumber'), width: '10%', cellTemplate: '<div class="ui-grid-cell-contents" title="{{row.entity.invoiceNumber}}"><span>{{row.entity.invoiceNumber}}</span></div>' }, { name: $translate.instant('BuyerName'), width: '15%', cellTemplate: '<div class="ui-grid-cell-contents" title="{{row.entity.buyerName}}"><span>{{row.entity.buyerName}}</span></div>' }, { name: $translate.instant('BuyerTaxNumber'), width: '15%', cellTemplate: '<div class="ui-grid-cell-contents" title="{{row.entity.buyerTaxNumber}}"><span>{{row.entity.buyerTaxNumber}}</span></div>' }, //{ // name: $translate.instant('BankAccount'), width: '10%', // cellTemplate: '<div class="ui-grid-cell-contents" title="{{row.entity.bankAccount}}"><span>{{row.entity.bankAccount}}</span></div>' //}, //{ // name: $translate.instant('PhoneNum'), width: '8%', // cellTemplate: '<div class="ui-grid-cell-contents" title="{{row.entity.phoneNum}}"><span>{{row.entity.phoneNum}}</span></div>' //}, { name: $translate.instant('Amount'), width: '8%', headerCellClass: 'right', cellTemplate: '<div class="ui-grid-cell-contents right" title="{{row.entity.amount}}"><span>{{row.entity.amount}}</span></div>' }, { name: $translate.instant('TaxAmount'), width: '8%', headerCellClass: 'right', cellTemplate: '<div class="ui-grid-cell-contents right" title="{{row.entity.taxAmount}}"><span>{{row.entity.taxAmount}}</span></div>' } ]; $scope.subGridOptionsColumnDefs = [ { name: $translate.instant('ImportErrorPopUpNoCol'), width: '5%', cellTemplate: '<div class="ui-grid-cell-contents"><span>{{row.entity.seqNo}}</span></div>' }, { name: $translate.instant('ProductName'), cellTemplate: '<div class="ui-grid-cell-contents" title="{{row.entity.productName}}"><span>{{row.entity.productName}}</span></div>' }, { name: $translate.instant('Quantity'), headerCellClass: 'right', cellTemplate: '<div class="ui-grid-cell-contents right" title="{{row.entity.quantity}}"><span>{{row.entity.quantity}}</span></div>' }, { name: $translate.instant('UnitPrice'), headerCellClass: 'right', cellTemplate: '<div class="ui-grid-cell-contents right" title="{{row.entity.unitPrice}}"><span>{{row.entity.unitPrice}}</span></div>' }, { name: $translate.instant('Amount'), headerCellClass: 'right', cellTemplate: '<div class="ui-grid-cell-contents right" title="{{row.entity.amount}}"><span>{{row.entity.amount}}</span></div>' }, { name: $translate.instant('TaxRate'), headerCellClass: 'right', cellTemplate: '<div class="ui-grid-cell-contents right" title="{{row.entity.taxRate}}"><span>{{((row.entity.taxRate) * 100).toFixed(0) + "%"}}</span></div>' }, { name: $translate.instant('TaxAmount'), headerCellClass: 'right', cellTemplate: '<div class="ui-grid-cell-contents right" title="{{row.entity.taxAmount}}"><span>{{row.entity.taxAmount}}</span></div>' }, //{ // name: $translate.instant('CodeVersion'), width: '8%', // cellTemplate: '<div class="ui-grid-cell-contents" title="{{row.entity.codeVersion}}"><span>{{row.entity.codeVersion}}</span></div>' //}, //{ // name: $translate.instant('DocumentNum'), width: '8%', // cellTemplate: '<div class="ui-grid-cell-contents" title="{{row.entity.documentNum}}"><span>{{row.entity.documentNum}}</span></div>' //}, //{ // name: $translate.instant('ProductStandar'), width: '8%', // cellTemplate: '<div class="ui-grid-cell-contents" title="{{row.entity.productStandar}}"><span>{{row.entity.productStandar}}</span></div>' //}, //{ // name: $translate.instant('Unit'), width: '8%', // cellTemplate: '<div class="ui-grid-cell-contents" title="{{row.entity.unit}}"><span>{{row.entity.unit}}</span></div>' //}, //{ // name: $translate.instant('TaxClassCode'), width: '15%', // cellTemplate: '<div class="ui-grid-cell-contents" title="{{row.entity.taxClassCode}}"><span>{{row.entity.taxClassCode}}</span></div>' //} ]; (function initialize() { $log.debug('citPreviewOutputInvoiceController.ctor()...'); $scope.periodId = citSessionService.month; //初始化month-picker $('#output-invoice-period-picker').rangePicker({ minDate: minDate, maxDate: maxDate, setDate: setDate, months: $scope.monthList, ConfirmBtnText: $translate.instant('Confirm'), CancelBtnText: $translate.instant('ButtonCancel') }) .on('datePicker.done', function (e, result) { //开始月份 startMonth = result[0][0]; //结束月份 endMonth = result[1][0]; $scope.queryParams.periodStart = startMonth; $scope.queryParams.periodEnd = endMonth; loadOutputInvoiceDataFromDB(1); }); $scope.gridOptions = { rowHeight: constant.UIGrid.rowHeight, selectionRowHeaderWidth: constant.UIGrid.rowHeight, expandableRowTemplate: '<div ui-grid="row.entity.subGridOptions" style="height:150px;"></div>', virtualizationThreshold: 50,//默认加载50条数据,避免在数据展示时,只显示前面4条 enableSorting: false, enableColumnMenus: false, columnDefs: $scope.gridOptionsColumnDefs, onRegisterApi: function (gridApi) { $scope.gridApi = gridApi; //定义子table属性 gridApi.expandable.on.rowExpandedStateChanged($scope, function (row) { if (row.isExpanded) { row.entity.subGridOptions = { rowHeight: constant.UIGrid.rowHeight, selectionRowHeaderWidth: constant.UIGrid.rowHeight, virtualizationThreshold: 50,//默认加载50条数据,避免在数据展示时,只显示前面4条 enableSorting: false, enableColumnMenus: false, columnDefs: $scope.subGridOptionsColumnDefs, }; //获取子table数据 vatPreviewService.queryOutputInvoiceItemList(row.entity.invoiceID).success(function (data) { if (data) { data.forEach(function (v) { v.unitPrice = PWC.round(v.unitPrice, 2); v.amount = PWC.round(v.amount, 2); v.taxRate = PWC.round(v.taxRate, 2); v.taxAmount = PWC.round(v.taxAmount, 2); }); row.entity.subGridOptions.data = data; } }); } }); $interval(function () { $scope.gridApi.core.handleWindowResize(); }, 500, 60 * 60 * 8); } }; $scope.doDataFilter = doDataFilter; $scope.doDataFilterReset = doDataFilterReset; $scope.doExport = doExport; $scope.showPopover = showPopover; initPeriods(); initOutputInvoicePagination(); loadOutputInvoiceDataFromDB(1); })(); } ]);