invoiceModule.controller('invoiceManageMapController', ['InvoiceManageService', '$scope', '$log', '$timeout', 'SweetAlert', '$translate', 'uiGridConstants', 'apiInterceptor', '$interval', '$q',
        function (InvoiceManageService, $scope, $log, $timeout, SweetAlert, $translate, uiGridConstants, apiInterceptor, $interval, $q) {
            'use strict';
            //当前页面的常量
            //分页的设置
            $scope.pagingOptions = {
                pageIndex: 1,  //当前页码
                totalItems: 100,  //总数据
                totalPages: 10,//总页数
                maxSize: 10, //分页数字的限制。
                pageSize: constant.page.pageSizeArrary[1],  //每页多少条数据 
                pageSizeString: constant.page.pageSizeArrary[1].toString(),
            };

            $scope.translated = {
                NoData: $translate.instant('NoDataText'),
                pleaseSelect: $translate.instant("ChoosePlaceholder"),
                pleaseInput: $translate.instant('InputPlaceholder'),
            };
            $scope.relevanceType = -1;
            $scope.isFour = false;
            $scope.isShowModal = false;
            $scope.queryParam = {};
            $scope.selectedInvoice = null; //当前选中的发票
            var yeaOrNoSelectItem = [{ 'id': 1, 'value': '是' }, { 'id': 0, 'value': '否' }];

            var relevanceDataSource = new DevExpress.data.CustomStore({
                load: function (loadOptions) {
                    var pagingDto = { totalCount: null };
                    pagingDto.pageSize = $scope.pagingOptions.pageSize || 10;
                    pagingDto.pageIndex = $scope.pagingOptions.pageIndex;

                    //$scope.queryParam.isIncludedInTaxAmount = $scope.queryParam.isIncludedInTaxAmount === null ? null :
                    //    ($scope.queryParam.isIncludedInTaxAmount === 1 ? true : false);

                    var pagingQueryParams = {
                        QueryParam: $scope.queryParam,
                        PagingDto: $scope.pagingOptions,
                    };
                    var deferred = $q.defer();
                    InvoiceManageService.getInvoiceRelevanceDisplayList(pagingQueryParams).success(function (data) {
                        if (data) {
                            $scope.pagingOptions.totalItems = data.pageInfo && data.pageInfo.totalCount;
                            if (data.list && data.list.length > 0) {
                                //将重复的字段设置为空
                                var newOrderIdentifier = '';
                                var counter = 0;
                                newOrderIdentifier = data.list[0].orderIdentifier;
                                for (var i = 0; i < data.list.length; i++) {
                                    //将发票来源不是“原料”的订单数据设置为—————
                                    if (data.list[i].invoiceSourceType !== 1) {
                                        data.list[i].sellerName = '————';
                                        data.list[i].buyerName = '————';
                                        data.list[i].orderAmount = '————';
                                        data.list[i].orderDate = '————';
                                        data.list[i].acceptNO = '————';
                            }
                                    data.list[i].statusString = $translate.instant(data.list[i].statusString);
                                    data.list[i].invoiceSourceTypeString = $translate.instant(data.list[i].invoiceSourceTypeString);
                                    data.list[i].invoiceTypeString = $translate.instant(data.list[i].invoiceTypeString);
                                    data.list[i].productionTypeString = $translate.instant(data.list[i].productionTypeString);
                                    data.list[i].invoiceDate = moment(data.list[i].invoiceDate).format(constant.date.dateFormatUppercase);
                                    data.list[i].isIncludedInTaxAmountString = data.list[i].isIncludedInTaxAmount == null ? '' : (data.list[i].isIncludedInTaxAmount == 1 ? '是' : '否');

                                    if (i > 0) {
                                        if (newOrderIdentifier === data.list[i].orderIdentifier) {
                                            //如果最新行的订单识别号跟当前行比较,相等,则counter++,将发票主数据部分字段设置为空
                                            data.list[i].orderIdentifier = '';
                                            data.list[i].sellerName = '';
                                            data.list[i].buyerName = '';
                                            data.list[i].orderAmount = '';
                                            data.list[i].orderDate = '';

                                            if (data.list[i].invoiceSourceType != 1) {
                                                data.list[i].acceptNO = '';
                                            }

                                            counter++;
                                        }
                                        else {
                                            //如果最新行跟当前行比较,不相等,则重置counter为0
                                            counter = 0;
                                            newOrderIdentifier = data.list[i].orderIdentifier;
                                        }
                                    }

                                }

                            }
                            deferred.resolve(data.list);
                        }
                    })
                    .error(function () {
                        deferred.reject("Data Loading Error");
                    });
                    return deferred.promise;

                }
            });

            //页面中的DXGrid事件
            $scope.thisDXGridService = {
                //初始化DataGrid DX控件,查询结果
                initDXGridData: function () {
                    $("#invoiceManageMapList").dxDataGrid({
                        dataSource: {
                            store: relevanceDataSource
                        },
                        selection: {
                            mode: "single"
                        },
                        paging: {
                            enabled: false,
                        },
                        hoverStateEnabled: true,
                        //showRowLines: true,
                        //showColumnLines: true,
                        //rowAlternationEnabled: true,
                        showBorders: true,
                        allowColumnResizing: true,
                        columnResizingMode: "widget",
                        columnAutoWidth: true,
                        noDataText: $translate.instant('NoDataText'),
                        columns: [
                            { caption: $translate.instant('OrderIdentifier'), dataField: 'orderIdentifier' },
                            { caption: $translate.instant('VendorName'), dataField: "sellerName" },
                            { caption: $translate.instant('BuyerName'), dataField: "buyerName" },
                            { caption: $translate.instant('OrderAmount'), dataField: "orderAmount" },
                            { caption: $translate.instant('PurchaseDate'), dataField: "orderDate", dateType: "date" },
                            { caption: $translate.instant('AcceptNO'), dataField: "acceptNO" },
                            { caption: $translate.instant('invoiceCode'), dataField: "invoiceCode" },
                            { caption: $translate.instant('invoiceNumber'), dataField: "invoiceNumber" },
                            { caption: $translate.instant('FaceTaxAmount'), dataField: "amount" },
                            { caption: $translate.instant('InvoiceKPRQ'), dataField: "invoiceDate" },
                            { caption: $translate.instant('InvoiceFPLX'), dataField: "invoiceTypeString" },
                            { caption: $translate.instant('InvoiceStatus'), dataField: "statusString" },
                            { caption: $translate.instant('InvoiceSource'), dataField: "invoiceSourceTypeString" },
                            { caption: $translate.instant('ProductionType'), dataField: "productionTypeString" },
                            { caption: $translate.instant('VoucherNO'), dataField: "voucherNO" },
                            { caption: $translate.instant('IsIncludedInTaxAmount'), dataField: "isIncludedInTaxAmountString" }],
                        onSelectionChanged: function (selectedItems) {
                            if (selectedItems) {
                            $scope.selectedInvoice = selectedItems.selectedRowsData[0];
                            $scope.relevanceType = $scope.selectedInvoice.invoiceSourceType;
                                $scope.isFour = true;
                        }
                        }
                    });

                    $timeout(function () {
                        $scope.thisDXGridService.repaintInvoiceGrid();
                    }, 300);
                
                },
                //重绘发票dataGrid高度
                repaintInvoiceGrid: function () {
                    $timeout(function () {
                    $scope.setInvoiceGridHeight();
                    }, 100);
                  
                },
                //重新刷新dataGrid数据(在点击查询按钮或者点击页码的时候执行)
                refreshTable: function () {
                    var grid = $('#invoiceManageMapList').dxDataGrid('instance');
                    grid.clearSelection();
                    grid.refresh();
                    $scope.thisDXGridService.repaintInvoiceGrid();
                }
            };


            //当前页面的service
            var thisPageService = {
                //初始化查询条件DX控件
                initQueryCondition: function () {
                    var isShowClearButton = true;
                    var valueExpr = "id";
                    var displayExpr = "value";

                    $scope.searchEntityOptions = {
                        //订单识别号
                        txtOrderIdentifierOptions: {
                            bindingOptions: {
                                value: 'queryParam.OrderIdentifier',
                            },
                            placeholder: $translate.instant('PleaseInputOrderIdentifierTips')
                        },
                        //订单金额
                        txtStartOrderAmountOptions: {
                            bindingOptions: {
                                value: 'queryParam.orderAmountStart',
                            }
                        },
                        txtEndOrderAmountOptions: {
                            bindingOptions: {
                                value: 'queryParam.orderAmountEnd',
                            }
                        },
                        //供应商名称
                        txtVendorNameOptions: {
                            bindingOptions: {
                                value: 'queryParam.sellerName',
                            },
                            placeholder: $translate.instant('PleaseInputVendorNameTips'),
                        },
                        //采购日期
                        txtStartOrderDateOptions: {
                            bindingOptions: {
                                value: 'queryParam.orderDateStart',
                            }
                        },
                        txtEndOrderDateOptions: {
                            bindingOptions: {
                                value: 'queryParam.orderDateEnd',
                            },
                        },
                        //是否计入进项税额
                        selectboxIsIncludedInTaxAmountOptions: {
                            displayExpr: displayExpr,
                            valueExpr: valueExpr,
                            bindingOptions: {
                                value: 'queryParam.isIncludedInTaxAmount',
                                dataSource: 'searchFilterOptions.isIncludedInTaxAmountList'
                            },
                            placeholder: $scope.pleaseSelect,
                            showClearButton: isShowClearButton,
                            noDataText: $scope.translated.NoData
                        },
                        //收货单号
                        txtAcceptNOOptions: {
                            bindingOptions: {
                                value: 'queryParam.acceptNO',
                            },
                            placeholder: $translate.instant('PleaseInputAcceptNO'),
                        },
                        //票面金额(含税)
                        txtStartAmountOptions: {
                            bindingOptions: {
                                value: 'queryParam.totalPriceLowerCaseStart',
                            },
                            placeholder: "",
                        },
                        txtEndAmountOptions: {
                            bindingOptions: {
                                value: 'queryParam.totalPriceLowerCaseEnd',
                            },
                            placeholder: "",
                        },
                        //购方名称
                        txtBuyerNameOptions: {
                            bindingOptions: {
                                value: 'queryParam.buyerName',
                            },
                            placeholder: $translate.instant('PleaseInputBuyerName')
                        },
                        //开票日期
                        txtStartInvoiceDateOptions: {
                            bindingOptions: {
                                value: 'queryParam.invoiceDateStart',
                            },
                            placeholder: "",
                        },
                        txtEndInvoiceDateOptions: {
                            bindingOptions: {
                                value: 'queryParam.invoiceDateEnd',
                            },
                            placeholder: "",
                        },
                        //发票状态
                        selectboxInvoiceStatusOptions: {
                            displayExpr: displayExpr,
                            valueExpr: valueExpr,
                            bindingOptions: {
                                value: 'queryParam.invoiceStatus',
                                dataSource: 'searchFilterOptions.invoiceStatusList'
                            },
                            placeholder: $scope.pleaseSelect,
                            showClearButton: isShowClearButton,
                            noDataText: $scope.translated.NoData
                        },
                        //发票号码
                        txtInvoiceNumberOptions: {
                            bindingOptions: {
                                value: 'queryParam.invoiceNumber',
                            },
                            placeholder: $translate.instant('PleaseInputInvoiceNumber'),
                        },
                        //发票来源
                        selectboxInvoiceSourceOptions: {
                            displayExpr: displayExpr,
                            valueExpr: valueExpr,
                            bindingOptions: {
                                value: 'queryParam.invoiceSourceType',
                                dataSource: 'searchFilterOptions.invoiceSourceList'
                            },
                            placeholder: $scope.pleaseSelect,
                            showClearButton: isShowClearButton,
                            noDataText: $scope.translated.NoData
                        },
                        //发票类型
                        selectboxInvoiceTypeOptions: {
                            displayExpr: displayExpr,
                            valueExpr: valueExpr,
                            bindingOptions: {
                                value: 'queryParam.invoiceType',
                                dataSource: 'searchFilterOptions.invoiceTypeList'
                            },
                            placeholder: $scope.pleaseSelect,
                            showClearButton: isShowClearButton,
                            noDataText: $scope.translated.NoData
                        },
                        //商品种类
                        selectboxProductTypeOptions: {
                            displayExpr: displayExpr,
                            valueExpr: valueExpr,
                            bindingOptions: {
                                value: 'queryParam.productionType',
                                dataSource: 'searchFilterOptions.invoiceProductionTypeList'
                            },
                            placeholder: $scope.pleaseSelect,
                            showClearButton: isShowClearButton,
                            noDataText: $scope.translated.NoData
                        },
                        //凭证单号
                        txtVoucherNOOptions: {
                            bindingOptions: {
                                value: 'queryParam.voucherNO',
                            },
                            placeholder: $translate.instant('PleaseInputVoucherNO')
                        }
                    };
                },
                //打开关联管理模态框
                openRelevanceModal: function () {
                    if (!$scope.selectedInvoice) {
                        SweetAlert.swal('请先选择一条发票信息!');
                        return;
                    }

                    if ($scope.selectedInvoice.status !== 7) {
                        SweetAlert.swal('当前选择的发票不能进行票帐匹配,只能选择状态为[待匹配]的发票!');
                        return;
                    }

                    $scope.isShowModal = true;
                },
                //toggle查询条件显示区域
                toggleQueryCondition: function () {
                    $scope.expandAllQueryCondition = !$scope.expandAllQueryCondition;
                    $scope.thisDXGridService.repaintInvoiceGrid();
                },
                //获取关联数据列表
                loadRelevanceDataList: function () {
                    $scope.thisDXGridService.refreshTable();
                },
                //翻译查询的数据源
                translateEnumValue: function (data) {
                    if (!data || data.length == 0) return null;

                    data.forEach(function (item) {
                        item.value = $translate.instant(item.value);
                    });
                    return data;
                },
                //查询的数据源准备
                getInvoiceFilterBasicData: function () {
                    InvoiceManageService.getInvoiceFilterBasicData().success(function (data) {
                        if (data) {
                            if (!$scope.searchFilterOptions) {
                                $scope.searchFilterOptions = {};
                            }
                            $scope.searchFilterOptions = {
                                invoiceStatusList: thisPageService.translateEnumValue(data.invoiceStatusList),
                                invoiceTypeList: thisPageService.translateEnumValue(data.invoiceTypeList),
                                invoiceSourceList: thisPageService.translateEnumValue(data.invoiceSourceList),
                                invoiceProductionTypeList: thisPageService.translateEnumValue(data.invoiceProductionTypeList),
                                isIncludedInTaxAmountList: yeaOrNoSelectItem
                            };


                        }
                    });
                }
            };

            //分页里面的处理
            //$scope.pagingSercice = {
            //    setPage: function (pageNo) {
            //    },

            //    //分页下拉
            //    populatePagingSelection: function () {
            //        var pagingSelection = [];
            //        var pageArray = constant.page.pageSizeArrary;
            //        for (var i = 0 ; i < pageArray.length; i++) {
            //            var selection = { id: pageArray[i], value: pageArray[i] };
            //            pagingSelection.push(selection);
            //        }
            //        $scope.pagingOptions.pagingSelection = pagingSelection;
            //    },

            //    //分页的时候改变数字
            //    pageIndexChanging: function () {
            //        if ($scope.pagingOptions.pageIndex > $scope.pagingOptions.totalPages) {
            //            $scope.pagingOptions.pageIndex = $scope.pagingOptions.totalPages;
            //        }
            //        if ($scope.pagingOptions.pageIndex <= 0) {
            //            $scope.pagingOptions.pageIndex = 1;
            //        }

            //        $log.log('Page changed to: ' + $scope.pagingOptions.pageIndex);
            //        thisDXGridService.refreshTable();
            //    },

            //    //每页显示的数据下拉改变
            //    pageSizeSelectionChanged: function () {
            //        $scope.pagingOptions.pageSize = parseInt($scope.pagingOptions.pageSizeString);
            //        thisDXGridService.refreshTable();
            //    },
            //};

            //初始化页面
            var initPage = function () {
                thisPageService.initQueryCondition();
                $scope.thisDXGridService.initDXGridData();
                thisPageService.getInvoiceFilterBasicData();
             //   $scope.pagingSercice.populatePagingSelection();
            };

            (function initialize() {
                $scope.expandAllQueryCondition = false;

                $log.debug('invoiceManageMapController.ctor()...');

                initPage();

                $scope.showRevelanceModal = thisPageService.openRelevanceModal;

                $scope.toggleQueryCondition = thisPageService.toggleQueryCondition;

                $scope.queryRelevanceDataList = thisPageService.loadRelevanceDataList;

                $scope.thisDXGridService.repaintInvoiceGrid();
            })();
        }
]);