invoiceModule.controller('outputReconciliationConfigurationController', ['$log', '$scope', '$q', '$timeout',
    '$translate', 'outputReconciliationConfiguration', 'SweetAlert', 'outputCommonService', 'messagebox', '$state',
    function ($log, $scope, $q, $timeout, $translate, outputReconciliationConfiguration, SweetAlert, outputCommonService, messagebox, $state) {
        var tagRevertArray = _.invert(constant.TagRule);
        var purchaserSellerArray = _.invert(constant.purchaserSeller);
        var dateFormat = 'yyyy-MM-dd';


        var initGrid = function () {
            $scope.reconciliationGrid = {
                bindingOptions: {
                    height: 'gridTable',
                },
                dataSource: new DevExpress.data.CustomStore({
                    key: "id",
                    load: function (loadOptions) {
                        return outputReconciliationConfiguration.load()
                            .then(function (res) {


                                res.data.data.forEach(function (r) {
                                    r.rowCss = "dx-row dx-data-row dx-row-lines dx-column-lines ui-state-disabled";
                                    if (r.tag === 2) {

                                        if ($scope.hasReSortPermission) {
                                            r.tdCss = "index";
                                            r.rowCss = "dx-row dx-data-row dx-row-lines dx-column-lines sortRow";
                                        } else {
                                            r.rowCss = "dx-row dx-data-row dx-row-lines dx-column-lines";
                                        }
                                    }
                                });

                                if ($scope.hasReSortPermission) {
                                    $timeout(function () {
                                        setSortable();
                                    }, 1000);
                                }


                                return { data: res.data.data, totalCount: res.data.data.length };
                            }, function (response) {
                                return $q.reject($translate.instant("DataLoadingError"));
                            });
                    }
                }),
                noDataText: $translate.instant('NoDataText'),
                columnAutoWidth: true,
                showRowLines: true,
                showBorders: true,
                columnChooser: {
                    enabled: true
                },
                searchPanel: {
                    placeholder: $translate.instant("SearchHintText"),
                    visible: true,
                },
                loadPanel: {
                    enabled: false
                },
                onToolbarPreparing: function (e) {
                    var toolbarItems = e.toolbarOptions.items;
                    toolbarItems.unshift({
                        location: "before",
                        template: "add"
                    }, {
                        location: "before",
                        template: "delete"
                    }, {
                        location: "before",
                        template: "saveSort"
                    });
                },
                selection: {
                    mode: "single"
                },
                onSelectionChanged: function (e) {
                    $scope.selectedRows = e.selectedRowsData;
                },
                //rowTemplate: 'rowTemplateName',

                columns: [
                    {
                        dataField: 'ruleNO', caption: $translate.instant('RuleNo'),
                        cellTemplate: function (container, options) {

                            var data = options.data;

                            try {
                                if (data.tag === 2) {
                                    //$(container).addClass("index");

                                    if ($scope.hasReSortPermission) {
                                        $("<span class='rule-id' dataid=" + data.id + ">").text(data.ruleNO).appendTo(container);
                                        $(container).parent().addClass('sortRow');
                                    } else {
                                        $("<span>").text(data.ruleNO).appendTo(container);
                                    }

                                } else {
                                    $("<span>").text(data.ruleNO).appendTo(container);
                                    $(container).parent().addClass('ui-state-disabled');
                                }
                            } catch (e) {
                                $log.debug(e);
                            }
                        }
                    },
                    { dataField: 'category', caption: $translate.instant('Category') },
                    {
                        dataField: 'journalKeywords',
                        caption: $translate.instant('JournalKeywords'),
                        calculateDisplayValue: function (rowData) {
                            return rowData.journalKeywords;
                        }
                    },
                    {
                        dataField: 'preVoucherNumber',
                        caption: $translate.instant('PreVoucherNumber'),
                        calculateDisplayValue: function (rowData) {
                            return outputCommonService.transferReconciliationSpecial(rowData.preVoucherNumber).text;
                        }
                    },
                     {
                         dataField: 'vehicleNumber', caption: $translate.instant('VehicleNumber'),
                         calculateDisplayValue: function (rowData) {
                             return outputCommonService.transferReconciliationSpecial(rowData.vehicleNumber).text;
                         }
                     },
                    {
                        dataField: 'postedBy',
                        caption: $translate.instant('PostedBy'),
                        calculateDisplayValue: function (rowData) {
                            return outputCommonService.transferReconciliationSpecial(rowData.postedBy).text;
                        }
                    },
                    {
                        dataField: 'fapiaoKeywords',
                        caption: $translate.instant('FapiaoKeywords'),
                        calculateDisplayValue: function (rowData) {
                            return rowData.fapiaoKeywords;
                        }
                    },
                    {
                        dataField: 'taxRate',
                        caption: $translate.instant('TaxRate'),
                        calculateDisplayValue: function (rowData) {
                            // return rowData.taxRate.formatRate(0);
                            var num = (rowData.taxRate * 100).formatAmount(0);
                            return num + "%";
                        }
                    },
                    {
                        dataField: 'purchaserTesla',
                        caption: $translate.instant('PurchaserTesla'),
                        alignment: 'left',
                        calculateDisplayValue: function (rowData) {
                            return $translate.instant(purchaserSellerArray[rowData.purchaserTesla]);
                        }
                    },
                    {
                        dataField: 'sellerTesla',
                        caption: $translate.instant('SellerTesla'),
                        alignment: 'left',
                        calculateDisplayValue: function (rowData) {
                            return $translate.instant(purchaserSellerArray[rowData.sellerTesla]);
                        }
                    },
                    {
                        dataField: 'activeStartTime',
                        caption: $translate.instant('ActiveStartTime'),
                        dataType: 'date',
                        format: dateFormat,
                        visible: false
                    },
                    {
                        dataField: 'activeEndTime',
                        caption: $translate.instant('ActiveEndTime'),
                        dataType: 'date',
                        format: dateFormat,
                        visible: false
                    },
                    {
                        dataField: 'tag',
                        caption: $translate.instant('Tag'),
                        alignment: 'left',
                        calculateDisplayValue: function (rowData) {
                            return $translate.instant(tagRevertArray[rowData.tag]);
                        }
                    },
                    { dataField: 'status', caption: $translate.instant('RuleStatus') },
                    {
                        caption: $translate.instant('Action'),
                        cellTemplate: 'details'
                    }
                ]
            };
        };


        $scope.eventService = {
            refreshTable: function () {
                $('#reconciliation-grid').dxDataGrid('instance').refresh();
            },
            deleteRule: function () {
                if (!$scope.selectedRows || $scope.selectedRows.length < 1) {
                    SweetAlert.warning($translate.instant('SelectCheck'));
                    return;
                }

                var msg = $translate.instant('Confirm') + ' ' + $translate.instant('Delete') + '?';

                messagebox.confirm(msg, '', constant.teslaConfirmClassName).then(function (isConfirm) {
                    if (isConfirm) {
                        var id = $scope.selectedRows[0].id;
                        outputReconciliationConfiguration.deleteRule(id).success(function (response) {
                            if (response.result) {
                                $("#reconciliation-grid").dxDataGrid('instance').refresh();
                            }
                        }).error(function () {
                            SweetAlert.error($translate.instant('CommonFail'));
                        });
                    }
                });

            },
            addOutputReconciliationConfiguration: function () {
                $scope.editType = constant.Operation.Add;

                $scope.editModel = {};
            },
            showRule: function (rule) {
                $scope.editModel = rule;
                $scope.editType = constant.Operation.Query;
            },
            saveSort: function () {
                var ruleIdList = $('.rule-id');
                var list = [];
                $('.rule-id').each(function () {
                    var obj = this;
                    list.push($(obj).attr('dataid'));
                });

                outputReconciliationConfiguration.saveSort(list).success(function (data) {
                    if (data && data.result) {

                        messagebox.success('SaveSuccess');
                        $scope.eventService.refreshTable();
                    }
                });
            }
        };

        var setSortable = function () {
            var fixHelperModified = function (e, tr) {
                var $originals = tr.children();
                var $helper = tr.clone();
                $helper.children().each(function (index) {
                    $(this).width($originals.eq(index).width())
                });
                return $helper;
            };

            var updateIndex = function (e, ui) {

                var prefix = "RN";
                $('.rule-id', ui.item.parent()).each(function (i) {

                    var obj = this;
                    var no = i + 2;

                    $(obj).text(prefix + no);
                });
            };

            //#reconciliation-grid .dx-datagrid-rowsview tbody
            $('#reconciliation-grid .dx-datagrid-rowsview tbody').sortable({
                helper: fixHelperModified,
                stop: updateIndex,
                //cancel: ".ui-state-disabled"
                items: '.sortRow'
                //items: 'tr:not(.ui-state-disabled)',
            });

            $("#reconciliation-grid .sortRow").disableSelection();
        };

        //检查用户机构权限
        var checkUserOrganizationPermissionList = function () {
            var tempPermission = constant.vatPermission.outputInvoice.reconciliationConfig;
            var list = [];
            list.push(tempPermission.queryCode);
            list.push(tempPermission.deleteCode);
            list.push(tempPermission.addCode);
            list.push(tempPermission.editCode);

            list.push(tempPermission.reSortCode);

            $scope.hasDeletePermission = false;
            $scope.hasAddPermission = false;
            $scope.hasEditPermission = false;
            $scope.hasReSortPermission = false;

            $scope.$root.checkUserPermissionList(list).success(function (data) {
                var permissionMap = data;

                if (!data[tempPermission.queryCode]) {
                    $state.go('noPermissionPage');
                    return;
                }

                if (data[tempPermission.reSortCode]) {
                    $scope.hasReSortPermission = true;
                }

                if (data[tempPermission.deleteCode]) {
                    $scope.hasDeletePermission = true;
                }

                if (data[tempPermission.addCode]) {
                    $scope.hasAddPermission = true;
                }

                if (data[tempPermission.editCode]) {
                    $scope.hasEditPermission = true;
                }

                initGrid();

                //设置表格高度
                $timeout(function () {
                    $scope.setInvoiceGridHeight();
                }, 500);
            });
        };

        (function () {

            // 加权限
            checkUserOrganizationPermissionList();




        })();
    }
]);