/**
 * Created by Administrator on 2019/3/1 0001.
 */
taxDocumentManageModule.controller('taxDocumentListController',
    ['$log', '$http', '$q', '$scope', '$translate', '$timeout',
        'SweetAlert', '$compile', 'taxDocumentListService', '$filter', 'apiInterceptor',
        function ($log, $http, $q, $scope, $translate, $timeout,
                  SweetAlert, $compile, taxDocumentListService, $filter, apiInterceptor) {

            $scope.queryFieldModel = {};
            $scope.editFieldModel = {};
            //分页的设置
            $scope.pagingOptions = {
                pageIndex: 1,  //当前页码
                totalItems: 0,  //总数据
                pageSize: 10,  //每页多少条数据
                pageSizeString: '10',
            };
            $scope.localData = null;
            $scope.loadMainData = function () {
                checkReminder();
                $scope.queryFieldModel.currentPage = $scope.pagingOptions.pageIndex;
                $scope.queryFieldModel.pageSize = $scope.pagingOptions.pageSize;

                var params = angular.copy($scope.queryFieldModel);
                params.fileBeginTime = getQueryDate(params.fileBeginTime, "-");
                params.fileEndTTime = getQueryDate(params.fileEndTTime, "-");
                // params.ownBeginTime = getQueryDate(params.ownBeginTime,"-");
                // params.ownEndTime = getQueryDate(params.ownEndTime,"-");
                params.effectiveBeginTime = getQueryDate(params.effectiveBeginTime, "-");
                params.effectiveEndTime = getQueryDate(params.effectiveEndTime, "-");
                params.uploadBeginTime = getQueryDate(params.uploadBeginTime, "-");
                params.uploadEndTime = getQueryDate(params.uploadEndTime, "-");

                function getQueryDate(time, mark) {
                    if (!time) return "";
                    var theDate = new Date(time);
                    var year = theDate.getFullYear();
                    var mm = theDate.getMonth() + 1;
                    var dd = theDate.getDate();
                    mm = (mm + "").length < 2 ? "0" + mm : mm;
                    dd = (dd + "").length < 2 ? "0" + dd : dd;
                    return year + mark + mm + mark + dd;
                }

                taxDocumentListService.fetchMainList(params).then(function (data, status, headers) {
                    if (status == 204) {
                        SweetAlert.warning($translate.instant("NoData"));
                        return;
                    }
                    // console.log("taxDocList:", data);
                    $scope.dataGridUpdate(data);

                })
            };

            function checkReminder() {
                var items=$scope.queryFieldModel;
                var message="";
                if (!PWC.isNullOrEmpty(items.fileBeginTime) && !PWC.isNullOrEmpty(items.fileEndTTime) &&
                    items.fileBeginTime > items.fileEndTTime)
                {
                    message+=$translate.instant('Effective_Date')+",";
                }
                if (!PWC.isNullOrEmpty(items.ownBeginTime) && !PWC.isNullOrEmpty(items.ownEndTime) &&
                    items.ownBeginTime > items.ownEndTime)
                {
                    message+=$translate.instant('Duration')+",";
                }
                if (!PWC.isNullOrEmpty(items.effectiveBeginTime) && !PWC.isNullOrEmpty(items.effectiveEndTime) &&
                    items.effectiveBeginTime > items.effectiveEndTime)
                {
                    message+=$translate.instant('Due Date')+",";
                }
                if (!PWC.isNullOrEmpty(items.uploadBeginTime) && !PWC.isNullOrEmpty(items.uploadEndTime) &&
                    items.uploadBeginTime > items.uploadEndTime)
                {
                    message+=$translate.instant('Upload Date')+",";
                }
                if(message){
                    message = (message.substring(message.length - 1) == ',') ? message.substring(0, message.length - 1) : message;
                    message+="-"+$translate.instant('DateWarningSearch');
                    window.swal(message);
                    return;
                }
            }

            $scope.dataGridUpdate = function (_data) {
                $scope.localData = _data.list;
                $scope.pagingOptions.pageIndex = _data.pageNo;
                $scope.pagingOptions.totalItems = _data.total;
                $scope.dataGridOptions = {
                    bindingOptions: {
                        dataSource: 'localData',
                    },
                    showBorders: true,
                    paging: {
                        enable: true,
                        pageIndex: 1,
                        pageSize: 100
                    },
                    pager: {
                        showInfo: false,
                        showNavigationButtons: false,
                        showPageSizeSelector: false,
                        visible: false,
                    },
                    sorting: {//排序
                        ascendingText: "Sort Ascending",
                        clearText: "Clear Sorting",
                        descendingText: "Sort Descending",
                        mode: "single"
                    },
                    // 'export': {
                    //     allowExportSelectedData: false,//允许选择导出
                    //     customizeExcelCell: null,
                    //     enabled: true,//允许导出
                    //     excelFilterEnabled: false,
                    //     excelWrapTextEnabled: false,
                    //     fileName: "taxDocList",//名字
                    //     ignoreExcelErrors: true,
                    //
                    // },
                    showRowLines: true,
                    columnAutoWidth: true,
                    allowColumnReordering: true,
                    columns: [
                        {
                            dataField: "",
                            caption: "",
                            width: 40,
                            cellTemplate: function (container, options) {
                                var target = $('<input name="dataGridCheckBox" type="checkbox" ' +
                                    'data-id="' + options.data.id + '" ' +
                                    'data-url="' + options.data.filePositionUrl + '"/>');
                                target.off('click').on('click', function () {
                                    $scope.sniffCheckbox();
                                });
                                container.append(target);
                                if($("input[name='dataGridCheckBoxALL']").length==0){
                                    var func = function () {
                                        var targetall = $('<input name="dataGridCheckBoxALL" type="checkbox" data-id=""data-url=""/>');
                                        targetall.off('click').on('click', function () {
                                            $scope.sniffCheckboxAll();
                                        });
                                        $("tr td:first[role='columnheader']").append(targetall);
                                        func= function(){};
                                    };
                                    func();
                                }
                            }
                        },
                        {
                            dataField: "id",
                            caption: "",
                            visible: false
                        },
                        {
                            dataField: "",
                            caption: $translate.instant('Operation'),

                            cellTemplate: function (container, options) {

                                var prevTarget = $('<a style="color:#506bf7;margin-right:1rem;" href="javascript:void(0)"><span>' + $translate.instant('Preview') + '</span></a>');
                                prevTarget.off('click').on('click', function () {
                                    $scope.viewRemoteFile(options.data.fileName, options.data.filePositionUrl);
                                });
                                var editTarget = $('<a style="color:#506bf7;" href="javascript:void(0)"><span>' + $translate.instant('Edit') + '</span></a>');
                                editTarget.off('click').on('click', function () {
                                    $scope.openSimpleUploadPop(options.data.id);
                                });

                                container.append(prevTarget).append(editTarget);
                            }

                        },
                        {
                            dataField: "fileAttr",
                            caption: $translate.instant('Document Attribute'),

                        },
                        {
                            dataField: "fileType",
                            caption: $translate.instant('Document Type'),

                        },
                        {
                            dataField: "fileName",
                            caption: $translate.instant('Document Name'),

                        },

                        {
                            dataField: "businessLine",
                            caption: $translate.instant('Business Line'),

                        },

                        {
                            dataField: "companyName",
                            caption: $translate.instant('Company Name'),

                        },
                        {
                            dataField: "taxType",
                            caption: $translate.instant('Tax Type'),
                        },
                        {
                            dataField: "fileTime",
                            caption: $translate.instant('Effective_Date'),

                            cellTemplate: function (container, options) {
                                try {
                                    if (options.data.fileTime) {
                                        options.data.fileTime = $filter('date')(options.data.fileTime, 'yyyy/MM/dd');
                                        $('<span>').text(options.data.fileTime).appendTo(container);
                                    } else {
                                        $('<span>').text('').appendTo(container);
                                    }
                                } catch (e) {
                                    $log.error(e);
                                }
                            }
                        },
                        {
                            dataField: "ownTime",
                            caption: $translate.instant('Period'),
                            cellTemplate: function (container, options) {
                                try {
                                    if (options.data.ownTime) {
                                        // 这是所属时间返回的是int类型
                                        // var ownTimeString = options.data.ownTime + "";
                                        // var year = ownTimeString.substr(0, 4);
                                        // var mon = ownTimeString.substr(4, 2);
                                        //
                                        // $scope.editFieldModel.ownTime = $scope.queryOwnTime(params.ownTime,"/");
                                        $('<span>').text($scope.queryOwnTime(options.data.ownTime, "/")).appendTo(container);
                                    } else {
                                        $('<span>').text('').appendTo(container);
                                    }
                                } catch (e) {
                                    $log.error(e);
                                }
                            }
                        },
                        {
                            dataField: "effectiveTime",
                            caption: $translate.instant('Due Date'),

                            cellTemplate: function (container, options) {
                                try {
                                    if (options.data.effectiveTime) {
                                        options.data.effectiveTime = $filter('date')(options.data.effectiveTime, 'yyyy/MM/dd');
                                        $('<span>').text(options.data.effectiveTime).appendTo(container);
                                    } else {
                                        $('<span>').text('').appendTo(container);
                                    }
                                } catch (e) {
                                    $log.error(e);
                                }
                            }
                        },
                        {
                            dataField: "auditStatus",
                            caption: $translate.instant('Approval Status'),
                            cellTemplate: function (container, options) {
                                try {
                                    var content = $scope.transformAuditStatusToView(options.data.auditStatus);
                                    $('<span>')
                                        .text(options.data.auditStatus = content)
                                        .appendTo(container);
                                } catch (e) {
                                    $log.error(e);
                                }
                            }
                        },
                        {
                            dataField: "physicalIndexNumber",
                            caption: $translate.instant('Storage Index'),

                        },
                        {
                            dataField: "storageArea",
                            caption: $translate.instant('Storage Location'),

                        },
                        {
                            dataField: "keeper",
                            caption: $translate.instant('Custodian'),

                        },
                        {
                            dataField: "uploadTime",
                            caption: $translate.instant('Upload Date'),
                            cellTemplate: function (container, options) {
                                try {
                                    if (options.data.uploadTime) {
                                        options.data.uploadTime = $filter('date')(options.data.uploadTime, 'yyyy/MM/dd');
                                        $('<span>').text(options.data.uploadTime).appendTo(container);
                                    } else {
                                        $('<span>').text('').appendTo(container);
                                    }
                                } catch (e) {
                                    $log.error(e);
                                }
                            }

                        },
                        {
                            dataField: "creator",
                            caption: $translate.instant('Creator'),

                        },
                        {
                            dataField: "remark",
                            caption: $translate.instant('Remarks'),

                        }
                    ],
                    onCellClick: function (e) {
                        //单元格点击— e.columnIndex=0 排除复选框列
                        if (e.columnIndex > 0 && e.data) {
                            $("input[name='dataGridCheckBox']").each(function (index, item) {
                                if ((item.dataset) && (item.dataset.id == e.data.id)) {
                                    if (item.checked) {
                                        item.checked = false;
                                    } else {
                                        item.checked = true;
                                    }
                                }
                            });
                        }
                    }
                };
                $scope.getTableHeight = function () {
                    var row_height = $("table").find("tr").height();
                    if (row_height) {
                        return {
                            height:(row_height*12+18)+"px"
                        }
                    }
                };
            };
            $scope.changeDateRangeError=function(flag){
                var items=$scope.queryFieldModel;
                if (!PWC.isNullOrEmpty(items.fileBeginTime) && !PWC.isNullOrEmpty(items.fileEndTTime) &&
                    items.fileBeginTime > items.fileEndTTime)
                {
                    SweetAlert.warning($translate.instant('DateWarningSearch'));
                    if(flag==1){
                        items.fileBeginTime="";
                    }else{
                        items.fileEndTTime="";
                    }
                }
                if (!PWC.isNullOrEmpty(items.ownBeginTime) && !PWC.isNullOrEmpty(items.ownEndTime) &&
                    items.ownBeginTime > items.ownEndTime)
                {
                    SweetAlert.warning($translate.instant('DateWarningSearch'));
                    if(flag==1){
                        items.ownBeginTime="";
                    }else{
                        items.ownEndTime="";
                    }
                }
                if (!PWC.isNullOrEmpty(items.effectiveBeginTime) && !PWC.isNullOrEmpty(items.effectiveEndTime) &&
                    items.effectiveBeginTime > items.effectiveEndTime)
                {
                    SweetAlert.warning($translate.instant('DateWarningSearch'));
                    if(flag==1){
                        items.effectiveBeginTime="";
                    }else{
                        items.effectiveEndTime="";
                    }
                }
                if (!PWC.isNullOrEmpty(items.uploadBeginTime) && !PWC.isNullOrEmpty(items.uploadEndTime) &&
                    items.uploadBeginTime > items.uploadEndTime)
                {
                    SweetAlert.warning($translate.instant('DateWarningSearch'));
                    if(flag==1){
                        items.uploadBeginTime="";
                    }else{
                        items.uploadEndTime="";
                    }
                }

            };
            $scope.changeFieldModel=function(flag){
                //新建记录
                var items=$scope.editFieldModel;
                if (!PWC.isNullOrEmpty(items.fileTime) && !PWC.isNullOrEmpty(items.effectiveTime) &&
                    items.fileTime > items.effectiveTime)
                {
                    SweetAlert.warning($translate.instant('FileTimeDateRangeError'));
                    if(flag==1){
                        items.fileTime="";
                    }else{
                        items.effectiveTime="";
                    }
                }
            };
            $scope.changeFieldItem = function (flag) {
                //批量上传
                if($scope.multiUploadErrorItems){
                    for (var i = 0; i < $scope.multiUploadErrorItems.length; i++) {
                        var modelItem = $scope.multiUploadErrorItems[i];
                        if (!PWC.isNullOrEmpty(modelItem.fileTime) && !PWC.isNullOrEmpty(modelItem.effectiveTime) &&
                            modelItem.fileTime > modelItem.effectiveTime) {
                            SweetAlert.warning($translate.instant("Document") + (i + 1) + "," +$translate.instant('FileTimeDateRangeError'));
                            if(flag==1){
                                modelItem.fileTime="";
                            }else{
                                modelItem.effectiveTime="";
                            }
                            break;
                        }
                    }
                }
            };
            //查询条件-根据文件属性来匹配出 文件类型
            $scope.queryFileAttr = function (curAttr) {
                if(curAttr){
                    $scope.fileTypeOptions.length=0;
                    Object.keys($scope.typeAndAttrMap).forEach(function (key) {
                        if (curAttr === $scope.typeAndAttrMap[key]) {
                            $scope.fileTypeOptions.push(key);
                        }
                    });
                }else{
                    Object.keys($scope.typeAndAttrMap).forEach(function (key) {
                        $scope.fileTypeOptions.push(key);
                    });
                }
                $scope.queryFieldModel.fileType="";
            };
            //弹出框
            $scope.isCreatePop = false;
            var openSimpleUploadPop = function (rowId) {
                //清空标红*
                if($scope.requiredField && $scope.requiredField.length>0){
                    for (var x in $scope.requiredField)
                    {
                        $scope.requiredField[x]="";
                    }
                }
                $scope.uploader.clearQueue();
                $("#uploadFilePlugin").val(null);
                // 带ID的就是编辑窗口
                if (rowId) {
                    $scope.isCreatePop = false;
                    $scope.simpleUploadSubmit = editDocFileRecord;
                    $scope.localData.forEach(function (item) {
                        if (item.id == rowId) {
                            $scope.editFieldModel = angular.copy(item);
                            // var ownTimeString = item.ownTime + "";
                            // var year = ownTimeString.substr(0, 4);
                            // var mon = ownTimeString.substr(4, 2);
                            // $scope.editFieldModel.ownTime =  year + "/" + mon;

                            $scope.editFieldModel.ownTime = $scope.queryOwnTime(item.ownTime, "-");
                            $scope.editFieldModel.fileTime = $scope.getQueryDate(item.fileTime, "-");
                            $scope.editFieldModel.effectiveTime = $scope.getQueryDate(item.effectiveTime, "-");
                            $scope.syncFileType($scope.editFieldModel.fileAttr);
                            $scope.matchFieldTypeId($scope.editFieldModel);
                        }
                    });
                } else {
                    $scope.curFileTypeOptions.length = 0;
                    $scope.isCreatePop = true;
                    $scope.simpleUploadSubmit = simpleUploadSubmit;
                    $scope.editFieldModel = {};
                }

                $('#simpleUploadPopDialog').modal('show');
            };

            $scope.isCoverOperation = false;
            //新建档案
            var simpleUploadSubmit = function () {
                $scope.matchCompanyId($scope.editFieldModel);
                var params = angular.copy($scope.editFieldModel);
                if (!PWC.isNullOrEmpty(params.fileTime) && !PWC.isNullOrEmpty(params.effectiveTime) &&
                    params.fileTime > params.effectiveTime) {
                    window.swal($translate.instant('FileTimeDateRangeError'));
                    return;
                }
                // params.ownTime = params.ownTime ? params.ownTime : "";
                // var splitMark = params.ownTime.indexOf("-") > -1 ? "-" : "/";
                // params.ownTime = parseInt(params.ownTime.split(splitMark).join(""));
                params.ownTime = $scope.queryOwnTime(params.ownTime, "int");
                params.fileTime = $scope.getQueryDate(params.fileTime, "-");
                params.effectiveTime = $scope.getQueryDate(params.effectiveTime, "-");
                params.filePositionUrl = encodeURIComponent(params.filePositionUrl);
                taxDocumentListService.verifyDuplicate(params).then(function (data) {

                    // 先设置上传参数
                    var uploadItem = $scope.uploader.queue[0];
                    var fileName = uploadItem._file ? uploadItem._file.name : uploadItem.name;
                    uploadItem.formData = [
                        {originFileName: fileName},
                    ];


                    Object.keys(params).forEach(function (key) {
                        var fields = {};
                        var curItemValue = params[key] ? params[key] : "";
                        if (/ownTime/.test(key)) {
                            // var splitMark = curItemValue.indexOf("-") > -1 ? "-" : "/";
                            // fields[key] = parseInt(curItemValue.split(splitMark).join(""));
                            fields[key] = $scope.queryOwnTime(curItemValue, "int");
                        } else {

                            if (/(createTime|updateTime|uploadTime|effectiveTime|fileTime)/.test(key)) {
                                fields[key] = $scope.getQueryDate(curItemValue, "-");
                            } else fields[key] = curItemValue;

                        }
                        uploadItem.formData.push(fields);
                    });

                    // data == true,代表可以直接上传,否则属于覆盖行为
                    //data.id===null|| data.id===undefined,代表可以直接上传,否则属于覆盖行为
                    if (data.id === null || data.id === undefined) {
                        $scope.uploader.queue[0].url = apiInterceptor.webApiHostUrl + "/taxDoc/add";
                        $scope.uploader.uploadItem(0);
                        $scope.isCoverOperation = false;

                        // $('#busy-indicator-container').show();
                        // addLogicAfterUploadFile($scope.editFieldModel,'simple');
                    } else {
                        //覆盖行为-需上传参数
                        uploadItem.formData.push({id: data.id});
                        SweetAlert.swal({
                                title: '提示',
                                text: $translate.instant("CoverConfirm"),
                                type: "warning",
                                showCancelButton: true,
                                confirmButtonColor: "#DD6B55",
                                confirmButtonText: $translate.instant('Confirm'),
                                cancelButtonText: $translate.instant('Cancel4Tax'),
                                closeOnConfirm: true,
                                closeOnCancel: true
                            },
                            function (isConfirm) {
                                if (isConfirm) {
                                    $scope.uploader.queue[0].url = apiInterceptor.webApiHostUrl + "/taxDoc/edit";
                                    $scope.uploader.uploadItem(0);
                                    $scope.isCoverOperation = true;
                                }
                            })
                    }
                });
            };

            var addLogicAfterUploadFile = function (editFieldModel, type) {
                $scope.matchCompanyId(editFieldModel);
                var params = angular.copy(editFieldModel);
                // params.ownTime = params.ownTime ? params.ownTime : "";
                // var splitMark = params.ownTime.indexOf("-") > -1 ? "-" : "/";
                // params.ownTime = parseInt(params.ownTime.split(splitMark).join(""));
                params.ownTime = $scope.queryOwnTime(params.ownTime, "int");
                taxDocumentListService.addNewRecord(params).then(function (data) {
                    if (data == true) {
                        if (type == 'simp') {
                            SweetAlert.swal({
                                    title: $translate.instant("Created"),
                                    type: "success",
                                    confirmButtonText: $translate.instant('Confirm'),
                                    closeOnConfirm: true
                                },
                                function (isConfirm) {
                                    if (isConfirm) $scope.loadMainData();
                                });
                        } else {
                            if ($scope.multiUploadSuccessItems.length == 0) {
                                SweetAlert.swal({
                                        title: $translate.instant("Uploaded"),
                                        type: "success",
                                        confirmButtonText: $translate.instant('Confirm'),
                                        closeOnConfirm: true
                                    },
                                    function (isConfirm) {
                                        if (isConfirm) $scope.loadMainData();
                                    });
                            }
                        }
                    } else {
                        SweetAlert.warning($translate.instant('SaveFail'));
                    }
                    $('#simpleUploadPopDialog').modal('hide');
                    $('#multiUploadPopDialog').modal('hide');
                });
            };

            var editDocFileRecord = function (fieldModel, type) {
                var params = angular.copy(fieldModel);
                delete params.auditStatus;
                params.ownTime = $scope.queryOwnTime(params.ownTime, "int");
                params.effectiveTime ? params.effectiveTime = $scope.getQueryDate(params.effectiveTime, "-") : delete params.effectiveTime;
                params.createTime ? params.createTime = $scope.getQueryDate(params.createTime, "-") : delete params.createTime;
                params.updateTime ? params.updateTime = $scope.getQueryDate(params.updateTime, "-") : delete params.updateTime;
                params.uploadTime ? params.uploadTime = $scope.getQueryDate(params.uploadTime, "-") : delete params.uploadTime;
                params.fileTime ? params.fileTime = $scope.getQueryDate(params.fileTime, "-") : delete params.fileTime;
                params.filePositionUrl = encodeURIComponent(params.filePositionUrl);
                taxDocumentListService.verifyDuplicate(params).then(function (result) {
                    // 例如 修改1为1 不用弹框 修改1本身就好 但是修改1为2 ,就要去掉1并修改2(保留2的id)
                    if ((result.id == null || result.id == undefined) || (result.id == fieldModel.id)) {
                        editRecord_Post(fieldModel, type);
                    } else {
                        var hisCellId = result.id;
                        var CellId = fieldModel.id;
                        SweetAlert.swal({
                                title: '提示',
                                text: $translate.instant("CoverConfirm"),
                                type: "warning",
                                showCancelButton: true,
                                confirmButtonColor: "#DD6B55",
                                confirmButtonText: $translate.instant('Confirm'),
                                cancelButtonText: $translate.instant('Cancel4Tax'),
                                closeOnConfirm: true,
                                closeOnCancel: true
                            },
                            function (isConfirm) {
                                if (isConfirm) {
                                    fieldModel.id = hisCellId;
                                    editRecord_Post(fieldModel, type);

                                    delHisRecord(CellId);
                                }
                            });
                    }
                });
                $('#simpleUploadPopDialog').modal('hide');
                $('#multiUploadPopDialog').modal('hide');
            };

            function editRecord_Post(fieldModel, type) {
                $scope.matchCompanyId(fieldModel);
                var params = angular.copy(fieldModel);
                // params.ownTime = params.ownTime ? params.ownTime : "";
                // var splitMark = params.ownTime.indexOf("-") > -1 ? "-" : "/";
                // params.ownTime = parseInt(params.ownTime.split(splitMark).join(""));
                Object.keys(params).forEach(function (key) {
                    if (params[key] === undefined || params[key] === null) params[key] = "";
                });
                params.ownTime = $scope.queryOwnTime(params.ownTime, "int");
                params.effectiveTime  ? params.effectiveTime = $scope.getQueryDate(params.effectiveTime, "-") : delete params.effectiveTime;
                params.fileTime  ?  params.fileTime = $scope.getQueryDate(params.fileTime, "-") : delete params.fileTime;
                params.createTime  ? params.createTime = $scope.getQueryDate(params.createTime, "-") : delete params.createTime;
                params.updateTime ? params.updateTime = $scope.getQueryDate(params.updateTime, "-") : delete params.updateTime;
                params.uploadTime  ? params.uploadTime = $scope.getQueryDate(params.uploadTime, "-") : delete params.uploadTime;
                params.filePositionUrl = encodeURIComponent(params.filePositionUrl);
                params.auditStatus = $scope.transformAuditStatusToServer(params.auditStatus);
                taxDocumentListService.editRecord(params).then(function (data) {
                    if (data == true) {
                        if (type == 'simple') {
                            SweetAlert.swal({
                                    title: $translate.instant("Edited"),
                                    type: "success",
                                    confirmButtonText: $translate.instant('Confirm'),
                                    closeOnConfirm: true
                                },
                                function (isConfirm) {
                                    if (isConfirm) $scope.loadMainData();
                                });
                        } else {
                            if ($scope.multiUploadSuccessItems.length == 0) {
                                SweetAlert.swal({
                                        title: $translate.instant("Uploaded"),
                                        type: "success",
                                        confirmButtonText: $translate.instant('Confirm'),
                                        closeOnConfirm: true
                                    },
                                    function (isConfirm) {
                                        if (isConfirm) $scope.loadMainData();
                                    });
                            }
                        }
                    } else {
                        SweetAlert.warning($translate.instant('SaveFail'));
                    }
                });
            }

            function delHisRecord(cellId) {
                var delIDs = [];
                delIDs.push(cellId);
                taxDocumentListService.delFileRecordItems({
                    "ids": delIDs
                }).then(function (data) {
                    if (data) {
                    }
                });
            };
            //取消
            var cancelDocFileType = function () {
                $scope.multiUploadSuccessItems.length = 0;
                $scope.multiUploader.clearQueue();
                $scope.uploader.clearQueue();
                $scope.multiUploadErrorItems.length = 0;
                $scope.editFieldModel = {};
            };

            var delRecord = function () {
                var delIDs = [];
                // delItems.ids = [];

                $("input[name='dataGridCheckBox']").each(function (index, tdCell) {
                    if (tdCell.checked) {
                        var cellId = $(tdCell).attr('data-id');
                        delIDs.push(cellId);
                    }
                });
                if (delIDs.length == 0) {
                    SweetAlert.warning($translate.instant("NeedChecked"));
                } else {
                    SweetAlert.swal({
                            title: $translate.instant("Warning"),
                            text: $translate.instant("Confirm delete"),
                            type: "warning",
                            showCancelButton: true,
                            confirmButtonColor: "#DD6B55",
                            confirmButtonText: $translate.instant('Confirm'),
                            cancelButtonText: $translate.instant('Cancel4Tax'),
                            closeOnConfirm: true,
                            closeOnCancel: true
                        },
                        function (isConfirm) {
                            if (isConfirm) {
                                taxDocumentListService.delFileRecordItems({
                                    "ids": delIDs
                                }).then(function (data) {
                                    if (data) {
                                        SweetAlert.swal({
                                                title: $translate.instant("Deleted"),
                                                type: "success",
                                                confirmButtonText: $translate.instant('Confirm'),
                                                closeOnConfirm: true
                                            },
                                            function (isConfirm) {
                                                if (isConfirm) $scope.loadMainData();
                                            });
                                    }
                                });
                            }
                        })
                }
            };

            $(document).ready(function (e) {
                var counter = 0;
                if (window.history && window.history.pushState) {
                    window.onpopstate = function () {
                        window.history.pushState('forward', null, '#');
                        window.history.forward(1);
                        location.replace(document.referrer);//刷新
                    };
                }
                //在IE中必须得有这两行
                window.history.pushState('forward', null, '#');
                window.history.forward(1);
            });
            (function initialize() {
                $scope.editFieldModel = {};
                $scope.uploader = {};
                $scope.loadMainData();
                //注册方法
                $scope.openSimpleUploadPop = openSimpleUploadPop;
                $scope.delRecord = delRecord;
                $scope.addLogicAfterUploadFile = addLogicAfterUploadFile;
                $scope.simpleUploadSubmit = simpleUploadSubmit;
                $scope.coverDocFileRecord = editDocFileRecord;
                $scope.cancelDocFileType = cancelDocFileType;

            })();
        }]);

taxDocumentManageModule.directive('dateTimePicker', function () {
    return {
        restrict: 'EA',
        replace: true,
        controller: ['$scope', '$element', '$attrs', 'region', function ($scope, $element, $attrs, region) {

            // 鼠标down的时候动态创建
            var year = new Date().getFullYear();

            // viewMode:0-days 1-mons 2-years
            // minViewMode:0-days 1-mons 2-years
            $element.off('mousedown').on('mousedown', function (e) {
                $element.datepicker({
                    startDate: new Date(year - 20, 1, 1),
                    endDate: new Date(year + 20, 1, 1),
                    viewMode: $attrs["viewMode"] ? parseInt($attrs["viewMode"]) : 0,
                    minViewMode: $attrs["minViewMode"] ? parseInt($attrs["minViewMode"]) : 0,
                    autoclose: true,
                    language: region,
                    todayBtn: 'linked',
                    clearBtn: true //清除按钮
                }).off("changeDate").on('changeDate', function (ev) {
                    runCallback(ev);
                }).off("hide").on("hide", function () {
                    killPlugin();
                })
            });

            function resetValue() {
                $element.val("");
            }

            function killPlugin() {
                // 当选择完毕的时候,就摧毁控件,腾出内存
                $element.datepicker('remove');
            }

            function runCallback(ev) {
                // changeDate的操作主要是为了,视图上被合并单元格之后,数据需要同步到被合并的单元格上
                // 这样做需要满足两个接口:
                // @rowName : 当行的数据模型的名字,
                // @itemIndex : 当前数据模型在行数据模型中的下标,
                // @callback : 回调,返回两个值,一个是选择的日期,一个是当前单元格的数据模型
                var saafTable = $scope[$attrs["table"]];
                var callback = saafTable ? saafTable.getData : $scope[$attrs["callback"]];
                var peerRow = $scope[$attrs["rowName"]];
                var itemIndex = $attrs["itemIndex"];
                if (callback) callback(ev.currentTarget.value, peerRow[itemIndex]);
            }

            function setDateRang() {
                // 当启动焦点事件的时候,才判断设置时间范围
                $element.datepicker("setStartDate", $attrs.startdate ? $attrs.startdate : new Date(year - 20, 1, 1));
                $element.datepicker("setEndDate", $attrs.enddate ? $attrs.enddate : new Date(year + 20, 1, 1));
            }

            function getLayout(e) {
                var result = "bottom-left";
                var $ = angular.element;
                var target = $(e.currentTarget);
                var targetTop = target.offset().top;

                var targetHeight = target.height();

                var winHeight = document.body.clientHeight;

                // 300为插件的默认高度(固定值)
                // 取固定值是因为,【设置显示位置】的API只能在创建时使用
                if (targetTop + 300 + targetHeight > winHeight) {
                    result = "top-left";
                }

                return result;
            }

        }]
    }
});
taxDocumentManageModule.directive('fileUploader', function () {
    return {
        restrict: "EA",
        controller: ['$scope', 'FileUploader', 'apiInterceptor', 'taxDocumentListService', '$translate', 'SweetAlert', '$compile',
            function ($scope, FileUploader, apiInterceptor, taxDocumentListService, $translate, SweetAlert, $compile) {
                $scope.uploadFile = function () {
                    $("#uploadFilePlugin").click();
                };
                $scope.uploader = new FileUploader({
                    url: apiInterceptor.webApiHostUrl + "/taxDoc/add",
                    // autoUpload: true,//添加后,自动上传
                    headers: {"Authorization": apiInterceptor.tokenType + ' ' + apiInterceptor.apiToken()},
                    // removeAfterUpload: true,
                });
                $scope.uploader.filters.push({//xls限制
                    name: 'fileTypeFilter',
                    fn: function (item, options) {

                        var fileNativePath = $("#uploadFilePlugin")[0].value || "";
                        fileNativePath = fileNativePath.replace(/fakepath/img, "******");
                        fileNativePath = fileNativePath.replace(item.name, "");
                        // var splitMark = /\//.test(fileNativePath) ? "/" : "\\";
                        // var prevPath = fileNativePath.split(splitMark);
                        // prevPath.pop();
                        // fileNativePath = prevPath.join(splitMark) + splitMark;
                        $scope.editFieldModel.fileNativePath = fileNativePath;
                        $scope.editFieldModel.fileName = item.name;
                        // $scope.autoMatchAttrAndType(item.name, $scope.editFieldModel);
                        return true;
                    }
                });
                $scope.uploader.onAfterAddingFile = function (item) {
                    console.info("is added!", item);
                };
                $scope.uploader.onErrorItem = function (fileItem, response, status, headers) {
                    SweetAlert.warning($translate.instant('FailUpload'));
                    $scope.editFieldModel = {};
                };
                // $scope.uploader.onCancelItem = function(fileItem, response, status, headers) {
                //     console.info('onCancelItem', fileItem, response, status, headers);
                // };
                $scope.uploader.onSuccessItem = function (fileItem, response, status, headers) {

                    var title = $translate.instant("Uploaded");
                    if ($scope.isCoverOperation) {
                        title = $translate.instant("Edited");
                    } else {
                        title = $translate.instant("Uploaded");
                    }

                    SweetAlert.swal({
                            title: title,
                            type: "success",
                            confirmButtonText: $translate.instant('Confirm'),
                            closeOnConfirm: true
                        },
                        function (isConfirm) {
                            if (isConfirm) $scope.loadMainData();
                        });
                    $('#simpleUploadPopDialog').modal('hide');
                };
            }]
    }
});

taxDocumentManageModule.directive('multiFileUploader', function () {
    return {
        restrict: "EA",
        controller: ['$scope', 'FileUploader', 'apiInterceptor', 'taxDocumentListService', '$translate', 'SweetAlert', '$compile',
            function ($scope, FileUploader, apiInterceptor, taxDocumentListService, $translate, SweetAlert, $compile) {

                $scope.multiUploadErrorItems = [];
                $scope.multiUploadSuccessItems = [];
                $scope.multiUploader = {};
                $scope.FileItem = {isSuccess: false};
                $scope.abandonFileCache = [];
                $scope.uploadResultSuccessList = [];
                $scope.activeTab = function (activeIndex) {
                    $scope.multiUploadErrorItems.forEach(function (item) {
                        item.iShow = false;
                    });
                    $scope.multiUploadErrorItems[activeIndex].iShow = true;
                };

                $scope.openMultiUploadPop = function () {
                    clearCache();//清空缓存
                    $("#multiUploadFilePlugin").click();
                    $scope.multiUploader.clearQueue();
                    $("#multiUploadFilePlugin").val(null);  //这一步主要防止第二次选择相同文件的时候无响应
                };

                $scope.multiUploader = new FileUploader({
                    // autoUpload: true,//添加后,自动上传
                    headers: {"Authorization": apiInterceptor.tokenType + ' ' + apiInterceptor.apiToken()},
                    removeAfterUpload: true,
                });

                // $scope.multiUploader.filters.push({//xls限制
                //     name: 'fileTypeFilter',
                //     fn: function (fileItem, options) {
                // var result = true;

                // if(!result)$scope.unVerifyFileCache.push(fileItem);
                // return result;
                //     }
                // });

                $scope.multiUploader.onAfterAddingFile = function (fileItem) {
                    createFieldModel(fileItem);
                };

                function createFieldModel(fileItem) {
                    var fileNativePath = $("#multiUploadFilePlugin")[0].value || "";
                    fileNativePath = fileNativePath.replace(/fakepath/img, "******");
                    fileNativePath = fileNativePath.replace(fileItem.file.name, "");
                    var thisModel = {
                        fileNativePath: fileNativePath,
                        fileName: fileItem.file.name,
                        iShow: false,
                        abandon: false,
                    };
                    $scope.autoMatchAttrAndType(fileItem.file.name, thisModel);
                    $scope.isAbandonFileItem(thisModel);
                    if (thisModel.abandon) {
                        $scope.multiUploadErrorItems.push(thisModel);
                    } else {
                        $scope.multiUploadSuccessItems.push(thisModel);
                    }
                }

                //验证输入值是否都正确填充
                //逻辑为:判断当前表单的必填值是否都已填充
                //验证失败就推出到失败队列,首先展示失败窗口,再把失败队列显示到编辑窗口
                $scope.isAbandonFileItem = function (fieldModel) {
                    // 验证必填字段的值
                    if (!fieldModel.companyName && fieldModel.companyName != 0
                        || !fieldModel.fileType && fieldModel.fileType != 0
                        || !fieldModel.taxType && fieldModel.taxType != 0
                        || !fieldModel.ownTime && fieldModel.ownTime != 0
                        || !fieldModel.fileTime && fieldModel.fileTime != 0
                    ) {
                        fieldModel.abandon = true;
                    }
                };

                $scope.multiUploader.onSuccessItem = function (fileItem, response) {
                    var fieldModel = {};
                    fileItem.formData.forEach(function (formItem) {
                        Object.keys(formItem).forEach(function (key) {
                            fieldModel[key] = formItem[key];
                        })
                    });
                    // $scope.multiUploadSuccessItems.push(fieldModel);
                    $scope.uploadResultSuccessList.push(fieldModel);
                    $('#busy-indicator-container').show();
                };

                $scope.multiUploader.onErrorItem = function (fileItem) {
                    //todo 重新构造一个editModel
                    var fieldModel = {};
                    fileItem.formData.forEach(function (formItem) {
                        Object.keys(formItem).forEach(function (key) {
                            fieldModel[key] = formItem[key];
                        })
                    });
                    // fieldModel.file = fileItem;
                    if (verifyFieldModelDup(fieldModel, $scope.multiUploadErrorItems) === -1) {
                        $scope.multiUploadErrorItems.push(fieldModel);
                    }

                    var successDupIndex = verifyFieldModelDup(fieldModel, $scope.multiUploadSuccessItems);
                    if (successDupIndex > -1) {
                        $scope.multiUploadSuccessItems.splice(successDupIndex, 1);
                    }
                    $scope.abandonFileCache.push(fileItem);
                };

                function verifyFieldModelDup(fieldModel, uploadModelItems) {
                    var dupIndex = -1;
                    uploadModelItems.forEach(function (modelItem, modelIndex) {
                        if (fieldModel.companyName === modelItem.companyName
                            && fieldModel.fileType === modelItem.fileType
                            && fieldModel.taxType === modelItem.taxType
                            && fieldModel.ownTime === modelItem.ownTime
                            && fieldModel.fileTime === modelItem.fileTime) {
                            dupIndex = modelIndex;
                        }
                    });

                    return dupIndex;
                }

                // $scope.multiUploader.onCancelItem = function(fileItem, response, status, headers) {
                //     console.info('onCancelItem', fileItem, response, status, headers);
                // };

                $scope.multiUploader.onAfterAddingAll = function () {

                    if ($scope.multiUploadErrorItems.length) {
                        $scope.abandonFileCache.length = 0;
                        $scope.multiUploadErrorItems.forEach(function (errItem) {
                            var queueLen = $scope.multiUploader.queue.length;
                            while (queueLen--) {
                                var queueItem = $scope.multiUploader.queue[queueLen];
                                if (errItem.fileName === queueItem._file.name) {
                                    $scope.abandonFileCache.push(queueItem);
                                    $scope.multiUploader.removeFromQueue(queueLen);
                                    break;
                                }
                            }
                        });
                    }

                    if ($scope.multiUploader.queue.length) {
                        $scope.multiUploadSubmit_auto();
                    } else {
                        $("#uploadResultPop").modal("show");
                    }
                };

                $scope.multiUploadSubmit_auto = function () {
                    for (var i = 0; i < $scope.multiUploader.queue.length; i++) {

                        // 先设置uploader队列里每个文件的请求参数:fileOriginalName
                        var fileItem = $scope.multiUploader.queue[i];
                        fileItem.formData = [{
                            fileOriginName: fileItem.name ? fileItem.name : fileItem._file.name
                        }];
                        $scope.matchCompanyId($scope.multiUploadSuccessItems[i]);
                        var editFieldModel = $scope.multiUploadSuccessItems[i];
                        editFieldModel.effectiveTime  ? editFieldModel.effectiveTime = $scope.getQueryDate(editFieldModel.effectiveTime, "-") : delete editFieldModel.effectiveTime;
                        editFieldModel.createTime  ? editFieldModel.createTime = $scope.getQueryDate(editFieldModel.createTime, "-") : delete editFieldModel.createTime;
                        editFieldModel.updateTime ? editFieldModel.updateTime = $scope.getQueryDate(editFieldModel.updateTime, "-") : delete editFieldModel.updateTime;
                        editFieldModel.uploadTime  ? editFieldModel.uploadTime = $scope.getQueryDate(editFieldModel.uploadTime, "-") : delete editFieldModel.uploadTime;
                        editFieldModel.fileTime  ?  editFieldModel.fileTime = $scope.getQueryDate(editFieldModel.fileTime, "-") : delete editFieldModel.fileTime;

                        Object.keys(editFieldModel).forEach(function (key) {
                            var curItemValue = editFieldModel[key] ? editFieldModel[key] : "";
                            fileItem.formData.push($scope.queryFileUploadData(key, curItemValue));
                        });

                        (function (_i, _fileItem, _editFieldModel, _taxDocumentListService, _multiUploader) {

                            var params = angular.copy(_editFieldModel);
                            // params.ownTime = params.ownTime ? params.ownTime : "";
                            // params.ownTime = parseInt(_editFieldModel.ownTime.split("-").join(""));
                            params.ownTime = $scope.queryOwnTime(params.ownTime, "int");
                            params.fileTime = $scope.getQueryDate(params.fileTime, "-");
                            params.effectiveTime = $scope.getQueryDate(params.effectiveTime, "-");
                            _taxDocumentListService.verifyDuplicate(params).then(function (data) {
                                //data.id===null|| data.id===undefined,代表可以直接上传,否则属于覆盖行为
                                if (data.id === null || data.id === undefined) {
                                    _fileItem.url = apiInterceptor.webApiHostUrl + "/taxDoc/add";
                                    _multiUploader.uploadItem(_i);
                                } else {
                                    //覆盖行为-需上传参数
                                    _fileItem.formData.push({id:data.id});
                                    var Cover_Confirm="'"+data.fileName+"' 记录已经存在,是否进行覆盖?";
                                    Ewin.confirm({ message: Cover_Confirm }).on(function (e) {
                                        if (!e) {
                                            return;
                                        }
                                        setTimeout(function () {
                                            try {
                                                _fileItem.url = apiInterceptor.webApiHostUrl + "/taxDoc/edit";
                                                _multiUploader.uploadItem(_i);
                                            } catch (e) {
                                                SweetAlert.warning(e.message);
                                            }
                                        }, 1000);
                                    });
                                }
                            });
                        })(i, fileItem, editFieldModel, taxDocumentListService, $scope.multiUploader);

                    }
                };

                $scope.multiUploader.onCompleteAll = function () {

                    if ($scope.multiUploadErrorItems.length)
                        $scope.multiUploadErrorItems[0].iShow = true;

                    if ($scope.multiUploadErrorItems.length
                        || $scope.uploadResultSuccessList.length)
                        $("#uploadResultPop").modal("show");
                    //是否都上传成功
                    if ($scope.multiUploadErrorItems.length > 0) {
                        $scope.FileItem.isSuccess = false;
                    } else {
                        $scope.FileItem.isSuccess = true;
                    }
                    $('#busy-indicator-container').hide();

                    $scope.loadMainData();
                };

                $scope.confirmUploadResult = function () {
                    $scope.multiUploadSuccessItems.length = 0;

                    // 默认显示第一个
                    if ($scope.multiUploadErrorItems.length) {
                        $scope.multiUploadErrorItems.forEach(function (errorItem) {
                            errorItem.iShow = false;
                        });
                        $scope.multiUploadErrorItems[0].iShow = true;
                    }
                    $('#uploadResultPop').modal('hide');
                    if ($scope.FileItem.isSuccess == false) {
                        $("#multiUploadPopDialog").modal("show");
                    } else {
                        $scope.FileItem.isSuccess = false;
                    }
                };

                $scope.closeUploadReview = function () {
                    clearCache();
                    $("#multiUploadPopDialog").modal("hide");
                };

                function clearCache() {
                    $scope.uploadResultSuccessList.length = 0;
                    $scope.multiUploadErrorItems.length = 0;
                    $scope.multiUploadSuccessItems.length = 0;
                    $scope.multiUploader.clearQueue();
                }

                $scope.multiUploadSubmit_handmade = function () {
                    var alertContent = verifyRequiredFields($scope.multiUploadErrorItems);

                    if (!alertContent) {
                        exchangedFieldModel();
                        addFileItemToQueueFromCache();
                        $("#multiUploadPopDialog").modal("hide");
                        multiUpload_handmade();
                    } else {
                        swal(alertContent);
                    }

                };

                function addFileItemToQueueFromCache() {

                    $scope.abandonFileCache.forEach(function (fileItem) {
                        $scope.multiUploader.queue.push(fileItem);
                    });
                    $scope.abandonFileCache.length = 0;
                }

                function exchangedFieldModel() {
                    $scope.multiUploadErrorItems.forEach(function (errItem) {
                        $scope.multiUploadSuccessItems.push(errItem);
                    });
                    $scope.multiUploadErrorItems.length = 0;
                }

                function verifyRequiredFields(multiUploadErrorItems) {

                    var alertText = "";
                    if (!$scope.requiredField.length) {
                        return $translate.instant("PleaseChecksRequired");
                    }
                    //todo 先获取必填字段
                    for (var i = 0; i < multiUploadErrorItems.length; i++) {
                        var modelItem = multiUploadErrorItems[i];
                        // $scope.isRequired = function (IT8nField) {
                        //     return $scope.requiredField.indexOf($translate.instant(IT8nField)) > -1;
                        // };
                        if (!PWC.isNullOrEmpty(modelItem.fileTime) && !PWC.isNullOrEmpty(modelItem.effectiveTime) &&
                            modelItem.fileTime > modelItem.effectiveTime)
                        {
                            alertText = $translate.instant("Document") + (i + 1) + "," + "【"+$translate.instant('FileTimeDateRangeError')+"】";
                            break;
                        }
                        if(!modelItem.companyName && $scope.isRequired($translate.instant("CompanyName"))){
                            alertText += "【"+$translate.instant("CompanyName")+"】"
                        }
                        if(!modelItem.fileType && $scope.isRequired($translate.instant("Document Type"))){
                            alertText += "【"+$translate.instant("Document Type")+"】"
                        }
                        if(!modelItem.fileAttr && $scope.isRequired($translate.instant("Document Attribute"))){
                            alertText += "【"+$translate.instant("Document Attribute")+"】"
                        }
                        if(!modelItem.taxType && $scope.isRequired($translate.instant("Tax Type"))){
                            alertText += "【"+$translate.instant("Tax Type")+"】"
                        }
                        if(!modelItem.ownTime && $scope.isRequired($translate.instant("Duration"))){
                            alertText += "【"+$translate.instant("Duration")+"】"
                        }
                        if(!modelItem.fileTime && $scope.isRequired($translate.instant("Effective_Date"))){
                            alertText += "【"+$translate.instant("Effective_Date")+"】"
                        }
                        if(!modelItem.effectiveTime && $scope.isRequired($translate.instant("Due Date"))){
                            alertText += "【"+$translate.instant("Due Date")+"】"
                        }
                        if(!modelItem.keeper && $scope.isRequired($translate.instant("Custodian"))){
                            alertText += "【"+$translate.instant("Custodian")+"】"
                        }
                        if(!modelItem.storageArea && $scope.isRequired($translate.instant("Storage Location"))){
                            alertText += "【"+$translate.instant("Storage Location")+"】"
                        }
                        if(!modelItem.physicalIndexNumber && $scope.isRequired($translate.instant("Storage Index"))){
                            alertText += "【"+$translate.instant("Storage Index")+"】"
                        }
                        if(!modelItem.remark && $scope.isRequired($translate.instant("Remarks"))){
                            alertText += "【"+$translate.instant("Remarks")+"】"
                        }

                        if(alertText.length > 0){
                            alertText = $translate.instant("Document") + (i + 1) + "," + alertText + $translate.instant("IsRequired");
                            break;
                        }
                    }

                    return alertText;
                }

                function multiUpload_handmade() {
                    for (var i = 0; i < $scope.multiUploader.queue.length; i++) {

                        // 过滤参数格式,并把参数推进上传队列
                        var fileItem = $scope.multiUploader.queue[i];

                        // 先设置uploader队列里每个文件的请求参数:fileOriginalName
                        fileItem.formData = [{
                            fileOriginName: fileItem.name ? fileItem.name : fileItem._file.name
                        }];
                        $scope.matchCompanyId($scope.multiUploadSuccessItems[i]);
                        var editFieldModel = $scope.multiUploadSuccessItems[i];

                        editFieldModel.effectiveTime  ? editFieldModel.effectiveTime = $scope.getQueryDate(editFieldModel.effectiveTime, "-") : delete editFieldModel.effectiveTime;
                        editFieldModel.createTime  ? editFieldModel.createTime = $scope.getQueryDate(editFieldModel.createTime, "-") : delete editFieldModel.createTime;
                        editFieldModel.updateTime ? editFieldModel.updateTime = $scope.getQueryDate(editFieldModel.updateTime, "-") : delete editFieldModel.updateTime;
                        editFieldModel.uploadTime  ? editFieldModel.uploadTime = $scope.getQueryDate(editFieldModel.uploadTime, "-") : delete editFieldModel.uploadTime;
                        editFieldModel.fileTime  ?  editFieldModel.fileTime = $scope.getQueryDate(editFieldModel.fileTime, "-") : delete editFieldModel.fileTime;
                        Object.keys(editFieldModel).forEach(function (key) {
                            var curItemValue = editFieldModel[key] ? editFieldModel[key] : "";
                            fileItem.formData.push($scope.queryFileUploadData(key, curItemValue));
                        });

                        (function (_i, _fileItem, _editFieldModel, _taxDocumentListService, _multiUploader) {
                            var params = angular.copy(_editFieldModel);
                            params.ownTime = $scope.queryOwnTime(params.ownTime, "int");
                            params.fileTime = $scope.getQueryDate(params.fileTime, "-");
                            params.effectiveTime = $scope.getQueryDate(params.effectiveTime, "-");
                            _taxDocumentListService.verifyDuplicate(params).then(function (data) {
                                //data.id===null|| data.id===undefined,代表可以直接上传,否则属于覆盖行为
                                if (data.id === null || data.id === undefined) {
                                    _fileItem.url = apiInterceptor.webApiHostUrl + "/taxDoc/add";
                                    _multiUploader.uploadItem(_i);
                                } else {
                                    //覆盖行为-需上传参数
                                    _fileItem.formData.push({id:data.id});
                                    var Cover_Confirm="'"+data.fileName+"' 记录已经存在,是否进行覆盖?";
                                    Ewin.confirm({ message: Cover_Confirm }).on(function (e) {
                                        if (!e) {
                                            return;
                                        }
                                        setTimeout(function () {
                                            try {
                                                _fileItem.url = apiInterceptor.webApiHostUrl + "/taxDoc/edit";
                                                _multiUploader.uploadItem(_i);
                                            } catch (e) {
                                                SweetAlert.warning(e.message);
                                            }
                                        }, 1000);
                                    });

                                }

                            });
                        })(i, fileItem, editFieldModel, taxDocumentListService, $scope.multiUploader);

                    }
                }
            }]
    }
});
taxDocumentManageModule.directive('filePreview', function () {
    return {
        restrict: 'EA',
        controller: ['$log','$scope', '$translate', 'SweetAlert', '$compile', 'taxDocumentListService', '$q',
            function ($log,$scope, $translate, SweetAlert, $compile, taxDocumentListService, $q) {

                $scope.previewData = [];
                /**上传时预览的功能取消 2019/3/8*/
                /* $scope.viewNativeFile = function(fileItem){

                 if(!fileItem) return SweetAlert.warning($translate.instant('NeedLoadUp'));

                 var fileType = fileItem.filePositionUrl.split(".").pop();

                 if(/xlsx|xls/i.test(fileType)){
                 var reader = new FileReader();
                 reader.onload = function (e) {
                 /!* read workbook *!/
                 var wb = window.XLSX.read(e.target.result, {type:"binary"});
                 var data = window.XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
                 if(data.length){
                 $scope.filePreview_dataGridUpdate(data);
                 $("#filePreviewPop").modal("show");
                 }
                 else{
                 SweetAlert.warning($translate.instant('UnReadFile'));
                 }
                 /!* DO SOMETHING WITH workbook HERE *!/
                 };

                 reader.readAsBinaryString(fileItem._file);
                 }else if(/pdf/i.test(fileType)){
                 $scope.openPdfPreviewPop(fileItem.filePositionUrl);
                 }else{
                 SweetAlert.warning($translate.instant('UnFile'));
                 }
                 };*/
                $scope.currentSheetName = '';
                var sheetCurPageIndex = 0;
                var sheetSumPages = 1;
                var sheetPromise = null;
                var cacheUrl = null;

                $scope.prevPaging_xls = function () {
                    if (sheetCurPageIndex <= 0) return sheetCurPageIndex = 0;
                    sheetCurPageIndex--;
                    sheetPromise.then(function (resData) {
                        renderXLS(resData)
                    })
                };
                $scope.nextPaging_xls = function () {
                    if (sheetCurPageIndex >= (sheetSumPages - 1)) return sheetCurPageIndex = sheetSumPages - 1;
                    sheetCurPageIndex++;
                    sheetPromise.then(function (resData) {
                        renderXLS(resData)
                    })
                };

                function getXLS(url) {
                    // return taxDocumentListService.getBinaryData('./bundles/MS Function list - Phase 1.xlsx');


                    return taxDocumentListService.readXLSX({
                        path: url
                        // path: 'http://47.94.233.173:11007/static/erp_tax_system/FE9A6FCC-019E-4B93-A9B2-1DD04CDD7431?expire=1552463739&signiture=H15ovgMR4zXwiYlPe4nZMoeLMSZFhimiHFUZ4-SVVaE='
                    });
                }

                function renderXLS(resData) {
                    try {
                        if (!resData || !resData.length) return SweetAlert.warning("Empty File");
                        var _resData = JSON.parse(resData);
                        sheetSumPages = _resData.length;
                        var curSheet = _resData[sheetCurPageIndex];
                        $scope.currentSheetName = Object.keys(curSheet)[0];
                        if (_resData && _resData.length) {
                            $scope.filePreview_dataGridUpdate(curSheet[$scope.currentSheetName]);
                            $("#filePreviewPop").modal("show");
                        }
                    } catch (e) {
                        SweetAlert.warning(e.message);
                    }
                }

                $scope.viewRemoteFile = function (fileName, filePositionUrl) {
                    if (typeof filePositionUrl !== 'string'
                        || filePositionUrl == 'null'
                        || filePositionUrl == 'undefined')
                        return SweetAlert.warning($translate.instant('UnRecord'));

                    //区分文件类型

                    fileName = fileName ? fileName : "";
                    var fileType = fileName.split(".").pop();
                    if (/xlsx|xls/i.test(fileType)) {

                        $('#busy-indicator-container').show();
                        taxDocumentListService.viewExcelBySpread(fileType,filePositionUrl).then(function (reportSpread) {
                            var spreadCtrl = new GC.Spread.Sheets.Workbook(document.getElementById("excetlContainer"));
                            if (spreadCtrl) {
                                spreadCtrl.destroy();
                            }
                            spreadCtrl = null;
                            if (!_.isEmpty(reportSpread)) {
                                initSpreadExcel(reportSpread).then(function (spread) {
                                    /*  return locateCell(spread, true);*/
                                    $('#busy-indicator-container').hide();
                                });
                            }
                        }, function (data) {
                            $('#busy-indicator-container').hide();
                            $log.info(data);
                        });
                    }
                    // sheetPromise.then(function (resData) {
                    //     renderXLS(resData)
                    // })


                    else if (/pdf/i.test(fileType)) {
                        $scope.openPdfPreviewPop(filePositionUrl);
                    } else if (/jpg|pig|gif|png|jpeg/i.test(fileType)) {
                        $scope.openImgPreviewPop(fileName, filePositionUrl);
                    } else {
                        SweetAlert.warning($translate.instant('UnFile'));
                    }

                };

                var initSpreadExcel = function (reportSpread) {
                    $("#filePreviewPop").modal("show");
                    var spread = new GC.Spread.Sheets.Workbook(document.getElementById("excetlContainer"));
                    // spread.suspendPaint();
                    spread.fromJSON(reportSpread);
                    // spread.options.showVerticalScrollbar = true;
                    // spread.options.showHorizontalScrollbar = true;
                    // spread.options.scrollbarMaxAlign = true;
                    // spread.options.scrollbarShowMax = true;
                    // spread.options.tabNavigationVisible = true;
                    // if (constant.regesterInformation.active) {
                    //     spread.options.tabEditable = false;
                    //     spread.options.tabStripVisible = false;
                    //     spread.options.newTabVisible = false;
                    // }
                    // spread.options.allowUndo = false;
                    // spread.options.allowUserResize = false;
                    // spread.options.allowUserDragDrop = false;
                    // spread.options.allowUserDragFill = false;
                    // spread.options.allowUserEditFormula = false;
                    // spread.options.allowContextMenu = false;
                    // //todo:注册之后这里去掉注释
                    // //var sheet = spread.getActiveSheet();
                    //
                    // var sheet;
                    // if (constant.regesterInformation.active) {
                    //     sheet = spread.getActiveSheet();
                    // } else {
                    //     sheet = spread.getSheet(1);
                    // }
                    // if (sheet != null) {
                    //     sheet.options.rowHeaderVisible = true;
                    //     sheet.options.colHeaderVisible = true;
                    //     sheet.options.gridline.showVerticalGridline = true;
                    //     sheet.options.gridline.showHorizontalGridline = true;
                    //     sheet.options.isProtected = true;
                    //     sheet.clearSelection();
                    // }
                    // // setColWidth(sheet);
                    // // if(sheet.getRowCount() <= 38)
                    // //     scope.relation.addEbitRow(sheet)
                    // // if (scope.templateId && scope.reportSource) {
                    // //     setData();
                    // // }
                    // sheet.setRowResizable(0, false, GC.Spread.Sheets.SheetArea.viewport);
                    // spread.resumePaint();
                    return $q.when(spread);
                };

                $scope.filePreview_dataGridUpdate = function (_data) {
                    // console.info("excel:",_data);
                    $scope.previewData = _data || [{}];
                    var field_keys = Object.keys(_data[0]);
                    var field_values = Object.values(_data[0]);

                    // _data.forEach(function (item) {
                    //     var curRow_keys = Object.keys(item);
                    //     var curRow_values = Object.values(item);
                    //     if (curRow_keys && curRow_keys.length > field_keys.length) {
                    //         field_keys = curRow_keys;
                    //         field_values = curRow_values;
                    //     }
                    // });

                    $scope.filePreview_dataGridOptions = {
                        bindingOptions: {
                            dataSource: 'previewData',
                        },
                        showBorders: true,
                        paging: {
                            enable: true,
                            pageIndex: 1,
                            pageSize: 10
                        },
                        pager: {
                            allowedPageSizes: 5,
                            infoText: "当前 {0}页 /共 {1}页 ({2} 项)",
                            showInfo: true,
                            showNavigationButtons: true,
                            showPageSizeSelector: true,
                            visible: true
                        },
                        searchPanel: {//查询
                            highlightCaseSensitive: true,
                            highlightSearchText: true,
                            searchVisibleColumnsOnly: false,
                            text: "",
                            width: 518,
                            visible: true,
                            placeholder: $translate.instant('Search'),
                        },
                        sorting: {//排序
                            ascendingText: "Sort Ascending",
                            clearText: "Clear Sorting",
                            descendingText: "Sort Descending",
                            mode: "single"
                        },
                        showRowLines: true,
                        columnAutoWidth: true,
                        allowColumnReordering: true,
                        columns: (function () {
                            var cols = [];
                            field_keys.forEach(function (field, index) {
                                cols.push({
                                    dataField: field,
                                    caption: field_values[index]
                                });
                            });
                            return cols;
                        })(),
                        rowAlternationEnabled: true,  //单双行颜色
                    };
                    var dataGrid = $('<div dx-data-grid="filePreview_dataGridOptions">');
                    $("#preview_dataGrid").html("").append(dataGrid);
                    $compile(dataGrid)($scope);

                };

                $scope.hideFilePreviewPop = function () {
                    $("#preview_dataGrid").html("");
                    $("#filePreviewPop").modal("hide");
                };

                $scope.resetDataForm = function () {
                    $scope.previewData.length = 0;
                    if ($scope.filePreview_dataGridOptions)
                        $scope.filePreview_dataGridOptions.columns.length = 0;
                };


            }]
    }
});
taxDocumentManageModule.directive('pdfPreview', function () {
    return {
        restrict: 'EA',
        controller: ['$scope','taxDocumentListService', function ($scope,taxDocumentListService) {
            window.PDFJS.workerSrc = './bundles/pdf.worker.js';
            var canvas = document.getElementById('the-canvas');
            var context = canvas.getContext('2d');
            var pdfCurPageIndex = 1;
            var pdfSumPages = 1;
            var container = document.getElementById("pdfLayoutDialog");
            var pdfPromise = null;
            var cacheUrl = null;
            var pageInfo=null;//pdf页面信息
            var angle=0;//旋转角度
            $scope.openPdfPreviewPop_bak = function (url) {
                container.style.display = "block";
                if (cacheUrl !== url) {
                    cacheUrl = url;
                    pdfPromise = getPdf(url);
                }
                pdfPromise.then(function (pdf) {
                    renderPdf(pdf)
                })
            };
            $scope.openPdfPreviewPop = function (url) {
                container.style.display = "block";
                function start() {
                    return new Promise(function (resolve, reject){
                        resolve('start');
                    });
                }
                start().then(function(data) {
                    return taxDocumentListService.readPDF({path:url});
                }).then(function(dataURL) {
                    var pdfData=null;
                    if(typeof dataURL =="string"){
                        pdfData = convertDataURIToBinary(dataURL);
                    }
                    return  window.PDFJS.getDocument({data:pdfData});
                }).then(function(data) {
                    pdfSumPages = data.numPages;
                    return data.getPage(pdfCurPageIndex);
                }).then(function(page){
                    pageInfo=page;
                    var scale = 1.5;
                    var viewport = page.getViewport(scale);
                    canvas.height = viewport.height;
                    canvas.width = viewport.width;
                    var renderContext = {
                        canvasContext: context,
                        viewport: viewport
                    };
                    page.render(renderContext);
                });
            };
            function convertDataURIToBinary(dataURI) { //将encodeBase64解码
                var raw = window.atob(dataURI);
                var rawLength = raw.length;
                //转换成pdf.js能直接解析的Uint8Array类型,见pdf.js-4068
                var array = new Uint8Array(new ArrayBuffer(rawLength));
                for(var i = 0; i < rawLength; i++) {
                    array[i] = raw.charCodeAt(i);
                }
                return array;
            }
            $scope.closePdfPop = function () {
                container.style.display = "none";
            };
            $scope.prevPaging = function () {
                if (pdfCurPageIndex <= 1) return pdfCurPageIndex = 1;
                pdfCurPageIndex--;
                pdfPromise.then(function (pdf) {
                    renderPdf(pdf)
                })
            };
            $scope.nextPaging = function () {
                if (pdfCurPageIndex >= pdfSumPages) return pdfCurPageIndex = pdfSumPages;
                pdfCurPageIndex++;
                pdfPromise.then(function (pdf) {
                    renderPdf(pdf)
                })
            };
            $scope.webViewerRotateCw =function(){
                angle+=90;
                var scale = 1.5;
                var viewport = pageInfo.getViewport(1.5,angle);
                canvas.height = viewport.height;
                canvas.width = viewport.width;
                var renderContext = {
                    canvasContext: context,
                    viewport: viewport
                };
                pageInfo.render(renderContext);
            };
            function getPdf(url) {
                // var url = 'http://47.94.233.173:11007/static/erp_tax_system/61063D1D-8C9E-47C1-B106-AFF696CF5D98?expire=1552466477&signiture=5IaoVIHX_pzmQgyaxdzYC2NsNOz_R0eyRUhQU1BJjiE=';
                return window.PDFJS.getDocument(url);
            }

            function renderPdf(pdf) {
                pdfSumPages = pdf.numPages;
                pdf.getPage(pdfCurPageIndex).then(function getPageHelloWorld(page) {

                    var scale = 1.5;
                    var viewport = page.getViewport(scale);

                    //
                    // Prepare canvas using PDF page dimensions
                    //
                    canvas.height = viewport.height;
                    canvas.width = viewport.width;

                    //
                    // Render PDF page into canvas context
                    //
                    var renderContext = {
                        canvasContext: context,
                        viewport: viewport
                    };
                    page.render(renderContext);
                });
            }

        }]
    }
});
taxDocumentManageModule.directive('imgPreview', function () {
    return {
        restrict: 'EA',
        controller: ['$scope', function ($scope) {
            $scope.curImgSrc = "";
            $scope.curImgName = "";
            $scope.openImgPreviewPop = function (fileName, url) {
                if ($scope.curImgSrc !== url) {
                    $scope.curImgName = fileName;
                    $scope.curImgSrc = url;
                }
                $("#imgLayoutDialog").modal("show");
            };

            $scope.closeImgPop = function () {
                $("#imgLayoutDialog").modal("hide");
            };

        }]
    }
});
taxDocumentManageModule.directive('helpPop', function () {
    return {
        restrict: 'EA',
        controller: ['$scope', 'taxDocumentListService', '$translate', '$compile', 'SweetAlert',
            function ($scope, taxDocumentListService, $translate, $compile, SweetAlert) {
                $scope.curEditModel = null;
                $scope.openHelpPop = function (curEditModel) {
                    $scope.curEditModel = curEditModel;
                    $scope.help_loadData();
                };
                $scope.help_cacheData = {};
                $scope.help_loadData = function () {
                    taxDocumentListService.getDocumentsAttrAndType({params: {}}).then(function (data) {
                        $scope.help_dataGridUpdate(data);
                        var dataGrid = $('<div dx-data-grid="help_dataGridOptions">');
                        $("#helpPopContainer").html("").append(dataGrid);
                        $compile(dataGrid)($scope);
                        var helpPopDialog = $("#helpPopDialog");
                        helpPopDialog.modal("show");
                    })
                };

                $scope.sniffHelpPopRadio = function () {
                    var checkedItem = $(".TDL-has-checked").children()[0].childNodes[0];
                    $scope.curEditModel.fileAttr = checkedItem.getAttribute("data-fileAttr");
                    taxDocumentListService.getDocumentsAttrAndType({params: {}}).then(function (data) {
                        $scope.FileAttrAndTypeCache = data.items;
                        //根据文件属性来匹配出 文件类型下拉列表
                        $scope.syncFileType($scope.curEditModel.fileAttr);
                        $scope.curEditModel.fileType = checkedItem.getAttribute("data-fileType");
                        $scope.syncRequiredFields($scope.curEditModel);
                    });

                    $("#helpPopDialog").modal("hide");
                };

                $scope.help_dataGridUpdate = function (_data) {
                    $scope.help_cacheData = _data.items;
                    $scope.help_dataGridOptions = {
                        bindingOptions: {
                            dataSource: 'help_cacheData',
                        },
                        paging: {
                            enable: true,
                            pageIndex: 0,
                            pageSize: 10
                        },
                        pager: {
                            allowedPageSizes: 5,
                            infoText: "当前 {0}页 /共 {1}页 ({2} 项)",
                            showInfo: true,
                            showNavigationButtons: true,
                            showPageSizeSelector: true,
                            visible: true
                        },
                        showBorders: true,
                        showRowLines: true,
                        columnAutoWidth: true,
                        allowColumnReordering: true,
                        columns: [
                            {
                                dataField: "fileAttr",
                                caption: $translate.instant('Document Attribute'),
                                cellTemplate: function (container, options) {
                                    var target = $('<span name="helpPopRadio" type="radio" ' +
                                        'data-id="helpPop_' + options.data.id + '" ' +
                                        'data-fileAttr="' + options.data.fileAttr + '" ' +
                                        'data-fileType="' + options.data.fileType +
                                        '">' + options.data.fileAttr + '</span>');
                                    container.append(target);

                                    var trs = $("#helpPopDialog").find("tr");
                                    trs.each(function (index, item) {
                                        $(item).off("click").on("click", function (e) {
                                            trs.each(function (_index, _item) {
                                                $(_item).removeClass('TDL-has-checked');
                                            });
                                            $(e.currentTarget).addClass('TDL-has-checked');
                                        })
                                    })
                                }
                            },

                            {
                                dataField: "fileType",
                                caption: $translate.instant('Document Type'),

                            },
                            {
                                dataField: "description",
                                caption: $translate.instant('Description'),

                            },

                        ],
                    };
                };

                $scope.openHelpPopForEntityStorage = function () {
                    window.swal($translate.instant('EntityStorageDescription'));
                }
            }]
    }
});
taxDocumentManageModule.directive('watchGroup', function () {
    return {
        restrict: 'EA',
        controller: ['$scope', 'taxDocumentListService', '$translate',
            function ($scope, taxDocumentListService, $translate) {

                $scope.requiredField = [];
                $scope.FileAttrAndTypeCache = [];
                taxDocumentListService.getDocumentsAttrAndType({params: {}}).then(function (data) {
                    $scope.FileAttrAndTypeCache = data.items;
                });

                //根据文件属性来匹配出 文件类型下拉列表
                $scope.syncFileType = function (curAttr) {
                    $scope.curFileTypeOptions.length = 0;
                    Object.keys($scope.typeAndAttrMap).forEach(function (key) {
                        if (curAttr === $scope.typeAndAttrMap[key]) {
                            $scope.curFileTypeOptions.push(key);
                        }
                    });
                };

                //根据文件名来匹配出
                // 1,公司名
                // 2,公司ID
                // 3,文档属性
                // 4,文档类型
                // 5,文档类型ID
                $scope.autoMatchAttrAndType = function (fileName, fieldModel) {
                    fileName = fileName ? fileName : "";
                    var fieldsArray = fileName.split("_");
                    // 嘀嘀无限_增值税纳税申报表_增值税_201811_20181201
                    // 公司名_文档类型_税种_所属期间_到期日
                    if (fieldsArray.length) {
                        //需要验证每个值在对应的下拉菜单里面有没有对应的值
                        fieldModel.companyName = $scope.verifyRequiredData(fieldsArray[0], "companyName");
                        fieldModel.fileType = $scope.verifyRequiredData(fieldsArray[1], "fileType");
                        fieldModel.taxType = $scope.verifyRequiredData(fieldsArray[2], "taxType");
                        fieldModel.ownTime = $scope.intToDate(fieldsArray[3]);
                        fieldModel.fileTime = $scope.intToDate(fieldsArray[4]);
                    }

                    // 根据Type来匹配Attr;
                    Object.keys($scope.typeAndAttrMap).forEach(function (key) {
                        if (fieldModel.fileType === key) {
                            fieldModel.fileAttr = $scope.verifyRequiredData($scope.typeAndAttrMap[key], "fileAttr");
                        }
                    });

                    $scope.syncFileType(fieldModel.fileAttr);
                    $scope.syncRequiredFields(fieldModel);
                    $scope.matchCompanyId(fieldModel);
                };

                // 选了类型之后,就自动匹配必填字段
                $scope.syncRequiredFields = function (fieldModel) {
                    $scope.FileAttrAndTypeCache.forEach(function (FATItem) {
                        if (FATItem.fileType === fieldModel.fileType
                            && FATItem.fileAttr === fieldModel.fileAttr) {
                            $scope.requiredField = FATItem.requiredField;
                        }
                    });

                    // 根据Type来匹配TypeId;
                    $scope.matchFieldTypeId(fieldModel);
                };

                $scope.isRequired = function (IT8nField) {
                    return $scope.requiredField.indexOf($translate.instant(IT8nField)) > -1;
                };

                $scope.matchFieldTypeId = function (fieldModel) {
                    // 根据Type来匹配TypeId;
                    $scope.FileAttrAndTypeCache.forEach(function (FATItem) {
                        if (FATItem.fileType === fieldModel.fileType
                            && FATItem.fileAttr === fieldModel.fileAttr) {
                            fieldModel.fileTypeId = FATItem.id;
                        }
                    });
                };

                // 选了公司之后,就自动匹配公司ID
                $scope.matchCompanyId = function (fieldModel) {
                    angular.forEach($scope.companyNameOptionsMap, function (d) {
                        if (d.key === fieldModel.companyName) {
                            fieldModel.companyId = d.val;
                            return;
                        }
                    })
                    // Object.keys($scope.companyNameOptionsMap).forEach(function (key) {
                    //     if ($scope.companyNameOptionsMap[key] === fieldModel.companyName) {
                    //         fieldModel.companyId = key;
                    //     }
                    // })
                };

                // 根据当前获取的字段值来匹配下拉菜单,如果匹配不到就返回空字符串,以使得form表单验证功能正常
                $scope.verifyRequiredData = function (src, type) {
                    var pass = false;
                    switch (type) {
                        case "taxType":
                            pass = $scope.taxTypeSelects.indexOf(src) > -1;
                            break;
                        case "fileAttr":
                            pass = $scope.fileAttrOptions.indexOf(src) > -1;
                            break;
                        case "fileType":
                            pass = $scope.fileTypeOptions.indexOf(src) > -1;
                            break;
                        case "companyName":
                            angular.forEach($scope.companyNameOptionsMap, function (d) {
                                if (d.key === src) {
                                    pass = true;
                                    return;
                                }
                            })
                            break;
                    }

                    return pass ? src : undefined;
                }
            }]
    }
});

taxDocumentManageModule.directive('tempModule', function () {
    return {
        restrict: 'EA',
        controller: ['$scope', 'taxDocumentListService', '$translate',
            function ($scope, taxDocumentListService, $translate) {
                //税种
                $scope.taxTypeSelects = [];
                angular.forEach(constant.GroupTypeList, function (item) {
                    $scope.taxTypeSelects.push(item.type);
                });
                // $scope.taxTypeSelects = [
                //     "纳税申报表",
                //     "税票",
                //     "企业所得税",
                //     "印花税",
                //     "附加税",
                //     "代扣代缴税",
                //     "其它税",
                //     "增值税",
                // ];
                //审批状态
                $scope.auditSelectsMap = {
                    "0": "待审批",
                    "1": "已审批",
                    "-1": "拒绝审批",
                };
                //机构下拉设置
                $scope.queryOrgOptions = {
                    displayExpr: 'key',
                    valueExpr: 'key',
                    // width: '95%',
                    bindingOptions: {
                        value: 'queryFieldModel.companyName',
                        dataSource: 'companyNameOptionsMap',
                        readOnly: 'isOrgReadOnly'
                    },
                    // height: '30px',
                    placeholder: '',
                    showClearButton: true,
                    searchEnabled: true,
                    showSelectionControls: true
                };
                $scope.editOrgOptions = {
                    displayExpr: 'key',
                    valueExpr: 'key',
                    // width: '95%',
                    bindingOptions: {
                        value: 'editFieldModel.companyName',
                        dataSource: 'companyNameOptionsMap',
                        readOnly: 'isOrgReadOnly'
                    },
                    // height: '30px',
                    placeholder: '',
                    showClearButton: true,
                    searchEnabled: true,
                    showSelectionControls: true
                };
                $scope.editFieldItemOrgOptions = {
                    displayExpr: 'key',
                    valueExpr: 'key',
                    // width: '95%',
                    bindingOptions: {
                        value: 'editFieldItem.companyName',
                        dataSource: 'companyNameOptionsMap',
                        readOnly: 'isOrgReadOnly'
                    },
                    // height: '30px',
                    placeholder: '',
                    showClearButton: true,
                    searchEnabled: true,
                    showSelectionControls: true
                };
                $scope.typeAndAttrMap = {};
                $scope.fileTypeOptions = [];
                $scope.fileAttrOptions = [];
                $scope.fileTypeEnableOptions = [];
                $scope.fileAttrEnableOptions = [];
                $scope.curFileTypeOptions = [];
                $scope.companyNameOptionsMap = [];
                $scope.loadCompanyNameMap = function(){
                    taxDocumentListService.getCompanyNameOptions().then(function (res) {
                        if (res && 0 === res.code) {
                            angular.forEach(res.data, function (item) {
                                $scope.companyNameOptionsMap.push({'key': item.abbreviation, 'val': item.id});
                                // $scope.companyNameOptionsMap[item.id] = item.abbreviation;
                            });

                        } else {
                            SweetAlert.error($translate.instant('RevenueGetOrgError'));
                        }

                    });
                }
                $scope.loadSelectMap = function () {
                    taxDocumentListService.getFileInfoOptions().then(function (data) {
                        if (data) {
                            $scope.typeAndAttrMap = data;
                            // 抽取每个元素的头一个字串,用于排序;
                            // $scope.fileTypeOptions = $scope.sortByFirstCode(Object.keys(data));
                            // $scope.fileAttrOptions = $scope.sortByFirstCode(Object.values(data));

                            $scope.fileTypeOptions = Object.keys(data);
                            $scope.fileAttrOptions = Object.values(data);

                            // 过滤去重
                            var temp = $scope.fileTypeOptions;
                            $scope.fileTypeOptions = (function () {
                                var result = [];
                                temp.forEach(function (typeItem) {
                                    if (result.indexOf(typeItem) === -1) {
                                        result.push(typeItem);
                                    }
                                });
                                return result;
                            })();
                            $scope.fileTypeOptions.sort();
                            temp = $scope.fileAttrOptions;
                            $scope.fileAttrOptions = (function () {
                                var result = [];
                                temp.forEach(function (attrItem) {
                                    if (result.indexOf(attrItem) === -1) {
                                        result.push(attrItem);
                                    }
                                });
                                return result;
                            })();
                            $scope.fileAttrOptions.sort();
                        }

                    });
                };
                //加载可用的档案属性
                $scope.loadSelectEnableMap = function () {
                    taxDocumentListService.getFileInfoEnableOptions().then(function (data) {
                        if (data) {
                            $scope.typeAndAttrMap = data;
                            // 抽取每个元素的头一个字串,用于排序;
                            // $scope.fileTypeEnableOptions = $scope.sortByFirstCode(Object.keys(data));
                            // $scope.fileAttrEnableOptions = $scope.sortByFirstCode(Object.values(data));

                            $scope.fileTypeEnableOptions = Object.keys(data);
                            $scope.fileAttrEnableOptions = Object.values(data);

                            // 过滤去重
                            var temp = $scope.fileTypeEnableOptions;
                            $scope.fileTypeEnableOptions = (function () {
                                var result = [];
                                temp.forEach(function (typeItem) {
                                    if (result.indexOf(typeItem) === -1) {
                                        result.push(typeItem);
                                    }
                                });
                                return result;
                            })();
                            $scope.fileTypeEnableOptions.sort();
                            temp = $scope.fileAttrEnableOptions;
                            $scope.fileAttrEnableOptions = (function () {
                                var result = [];
                                temp.forEach(function (attrItem) {
                                    if (result.indexOf(attrItem) === -1) {
                                        result.push(attrItem);
                                    }
                                });
                                return result;
                            })();
                            $scope.fileAttrEnableOptions.sort();
                        }

                    });
                };
                $scope.loadSelectMap();
                $scope.loadSelectEnableMap();
                $scope.loadCompanyNameMap();
                $scope.businessLineOptions = [];
                $scope.loadBusinessList = function () {
                    taxDocumentListService.getBusinessList().then(function (resData) {
                        $scope.businessLineOptions = resData;
                    });
                };
                $scope.loadBusinessList();
                $scope.getQueryDate = function (time, mark) {
                    if (!time) return "";
                    var theDate = new Date(time);
                    var year = theDate.getFullYear();
                    var mm = theDate.getMonth() + 1;
                    var dd = theDate.getDate();
                    mm = (mm + "").length < 2 ? "0" + mm : mm;
                    dd = (dd + "").length < 2 ? "0" + dd : dd;
                    return year + mark + mm + mark + dd;
                };

                $scope.checkedItemIds = [];
                $scope.sniffCheckbox = function () {
                    $scope.checkedItemIds.length = 0;
                    $("tr td[name='logCheckedItem']").each(function (index, item) {
                        if (item.checked) {
                            var cellId = $(item).attr("data-id");
                            $scope.checkedItemIds.push(cellId);
                        }
                    });
                    console.info($scope.checkedItemIds.join(","));
                };
                $scope.sniffCheckboxAll=function(){
                    $("input[name='dataGridCheckBoxALL']").each(function (index, item) {
                        if(item.checked){
                            $("input[name='dataGridCheckBox']").each(function (index, item) {
                                item.checked=true;
                            });
                        }else{
                            $("input[name='dataGridCheckBox']").each(function (index, item) {
                                item.checked=false;
                            });
                        }
                    });
                };
                $scope.getMonthLastDate = function (year, month) {
                    year = year ? year : new Date().getFullYear();
                    month = month ? month : (new Date().getMonth() + 1);
                    var nextMoth = null;
                    if (month == 12) {
                        year += 1;
                        nextMoth = 1;
                    } else {
                        nextMoth = month + 1;
                    }
                    var curMothLastDayObj = new Date(new Date(year, nextMoth, 1).getTime() - 1000 * 60 * 60 * 24);
                    var date = curMothLastDayObj.getDate();
                    date = (date + "").length < 2 ? "0" + date : date;
                    return date;
                };

                $scope.queryOwnTime = function (target, type) {
                    if (!target) return "";
                    var result = "";
                    try {
                        if (type === "int") {
                            if (typeof target === "number") {
                                result = target;
                            } else {
                                var date = new Date(target);
                                var year = date.getFullYear() + "";
                                var mon = (date.getMonth() + 1) + "";
                                year = year.length < 2 ? "0" + year : year;
                                mon = mon.length < 2 ? "0" + mon : mon;
                                result = parseInt(year + "" + mon);
                            }
                        } else {
                            var newMark = type;
                            if (typeof target === "number") {
                                var ownTimeString = target + "";
                                var year = ownTimeString.substr(0, 4);
                                var mon = ownTimeString.substr(4, 2);
                                result = year + newMark + mon;
                            } else {
                                var date = new Date(target);
                                var year = date.getFullYear() + "";
                                var mon = (date.getMonth() + 1) + "";
                                year = year.length < 2 ? "0" + year : year;
                                mon = mon.length < 2 ? "0" + mon : mon;
                                result = year + newMark + mon;
                            }
                        }
                    } catch (e) {
                        console.info(e.message);
                        result = "";
                    }
                    return result;
                };

                $scope.resetQueryField = function () {
                    $scope.queryFieldModel = {};

                    $("#period-picker1").val("");
                    $("#period-picker2").val("");
                    $("#period-picker3").val("");
                    $("#period-picker4").val("");
                };

                $scope.sortByFirstCode = function (src) {
                    var result = [];
                    var firstCodesOrigin = [];
                    var originValuesMapping = [];
                    src.forEach(function (key, index) {
                        // 记录原始的下标,拼在第一个字符后面
                        var firstCode = (key + "").substr(0, 1) + "_" + index;
                        firstCodesOrigin.push(firstCode);
                        originValuesMapping.push(key);
                    });

                    firstCodesOrigin.sort().forEach(function (firstCodeSortedItem, sortedIndex) {
                        // 循环已排序的首字符数组,根据记录的原始下标,对换originValuesMapping的位置
                        var originIndex = firstCodeSortedItem.split("_").pop();
                        result[sortedIndex] = originValuesMapping[originIndex];
                    });

                    return result;
                };

                $scope.intToDate = function (src, type) {
                    if (!src) return "";
                    src = src + "";
                    type = type ? type : "/";
                    var year = src.substr(0, 4);
                    var mon = src.substr(4, 2);
                    var day = src.substr(6, 2);
                    if (!day) return year + type + mon;
                    return year + type + mon + type + day;
                };

                $scope.transformAuditStatusToServer = function (src) {
                    var result = 0;
                    if (src === $translate.instant('ApprovalStandby')) {
                        result = 0;
                    } else if (src === $translate.instant('ApprovalPass')) {
                        result = 1;
                    } else if (src === $translate.instant('ApprovalReject')) {
                        result = -1;
                    } else {
                        result = "";
                    }
                    return result;
                };

                $scope.transformAuditStatusToView = function (src) {
                    var result="";
                    if(typeof src == 'string'){
                        if(src == "待审批"|| src == "审批通过"|| src == "拒绝审批"){
                            result = src;
                        }
                    }else{
                        if(src == 0){
                            result = $translate.instant('ApprovalStandby');
                        }else if(src == 1){
                            result = $translate.instant('ApprovalPass');
                        }else if(src == -1){
                            result = $translate.instant('ApprovalReject');
                        }else{
                            result="";
                        }
                    }
                    return result;
                };

                $scope.queryFileUploadData = function (key, curItemValue) {
                    var fields = {};
                    if (/ownTime/.test(key)) {
                        fields[key] = $scope.queryOwnTime(curItemValue, "int");
                    } else {
                        if (/(createTime|updateTime|uploadTime)/.test(key)) {
                            fields[key] = $scope.getQueryDate(curItemValue, "-");
                        } else fields[key] = curItemValue;
                    }
                    return fields;
                }
            }]
    }
});
taxDocumentManageModule.directive('downLoadModule', function () {
    return {
        restrict: 'EA',
        controller: ['$scope', 'taxDocumentListService', '$translate', 'SweetAlert',
            function ($scope, taxDocumentListService, $translate, SweetAlert) {

                $scope.downloadAttachment = function () {
                    var checkedIDs = [];
                    var checkedUrls = [
                        // 'http://47.94.233.173:11007/static/erp_tax_system/3221D133-85B8-4E22-AE9B-DBEBD942D217?expire=1552361736&signiture=_Wz1_8Z6T8h5qnZAGpoRa8kNZeqmE7KoztKeehzYK4U=',
                        // 'http://47.94.233.173:11007/static/erp_tax_system/3221D133-85B8-4E22-AE9B-DBEBD942D217?expire=1552361736&signiture=_Wz1_8Z6T8h5qnZAGpoRa8kNZeqmE7KoztKeehzYK4U=',
                        // 'http://47.94.233.173:11007/static/erp_tax_system/3221D133-85B8-4E22-AE9B-DBEBD942D217?expire=1552361736&signiture=_Wz1_8Z6T8h5qnZAGpoRa8kNZeqmE7KoztKeehzYK4U=',
                        // 'http://47.94.233.173:11007/static/erp_tax_system/3221D133-85B8-4E22-AE9B-DBEBD942D217?expire=1552361736&signiture=_Wz1_8Z6T8h5qnZAGpoRa8kNZeqmE7KoztKeehzYK4U=',
                    ];
                    $("input[name='dataGridCheckBox']").each(function (index, item) {
                        if (item.checked) {
                            var cellId = $(item).attr("data-id");
                            var cellUrl = $(item).attr("data-url");
                            checkedIDs.push(cellId);
                            checkedUrls.push(cellUrl);
                        }
                    });
                    //是否勾选
                    if (checkedIDs.length == 0) {
                        return SweetAlert.warning($translate.instant("NeedChecked"));
                    }
                    //是否含附件
                    if ((checkedUrls.length == 0) || (!checkedUrls[0])) {
                        return SweetAlert.warning($translate.instant('UnRecord'));
                    }
                    if (checkedIDs.length === 1 && checkedUrls.length === 1) {
                        simpDownload(checkedUrls[0]);
                    } else {
                        multiDownToZip(checkedIDs);
                    }
                };

                function simpDownload(url) {
                    // if (!url) return SweetAlert.warning($translate.instant("NeedChecked"));
                    // setTimeout(function () {
                    var frame = $('<iframe style="display: none;" class="multi-download"></iframe>');
                    frame.attr('src', url);
                    document.body.appendChild(frame[0]);
                    setTimeout(function () {
                        frame.remove();
                    }, 1000);
                    // }, 100);
                }

                function multiDownToZip(ids) {
                    if (!ids.length) return SweetAlert.warning($translate.instant("NeedChecked"));
                    setTimeout(function () {
                        taxDocumentListService.downloadAllFile({
                            "ids": ids
                        });
                    }, 500);
                }

                /*$scope.downloadAttachment = function () {
                    var checkedURLs = [
                        // 'http://47.94.233.173:11007/static/erp_tax_system/3221D133-85B8-4E22-AE9B-DBEBD942D217?expire=1552361736&signiture=_Wz1_8Z6T8h5qnZAGpoRa8kNZeqmE7KoztKeehzYK4U=',
                        // 'http://47.94.233.173:11007/static/erp_tax_system/3221D133-85B8-4E22-AE9B-DBEBD942D217?expire=1552361736&signiture=_Wz1_8Z6T8h5qnZAGpoRa8kNZeqmE7KoztKeehzYK4U=',
                        // 'http://47.94.233.173:11007/static/erp_tax_system/3221D133-85B8-4E22-AE9B-DBEBD942D217?expire=1552361736&signiture=_Wz1_8Z6T8h5qnZAGpoRa8kNZeqmE7KoztKeehzYK4U=',
                        // 'http://47.94.233.173:11007/static/erp_tax_system/3221D133-85B8-4E22-AE9B-DBEBD942D217?expire=1552361736&signiture=_Wz1_8Z6T8h5qnZAGpoRa8kNZeqmE7KoztKeehzYK4U=',
                    ];
                    $("input[name='dataGridCheckBox']").each(function (index, item) {
                        if (item.checked) {
                            var cellUrl = $(item).attr("data-url");
                            checkedURLs.push(cellUrl);
                        }
                    });
                    if (!checkedURLs.length) return SweetAlert.warning($translate.instant("NeedChecked"));
                    var triggerDelay = 100;
                    var removeDelay = 1000;
                    checkedURLs.forEach(function (item, index) {
                        if(item)_createIFrame(item, index * triggerDelay, removeDelay);
                    });
                    function _createIFrame(url, _triggerDelay, _removeDelay) {
                        setTimeout(function () {
                            var frame = $('<iframe style="display: none;" class="multi-download"></iframe>');
                            frame.attr('src', url);
                            document.body.appendChild(frame[0]);
                            setTimeout(function () {
                                frame.remove();
                            }, _removeDelay);
                        }, _triggerDelay);
                    }
                };*/
            }]
    }
});
taxDocumentManageModule.directive('exportPlugin', function () {
    return {
        restrict: "EA",
        controller: ['$scope', 'SweetAlert', '$translate', 'taxDocumentListService', '$q', '$log',
            function ($scope, SweetAlert, $translate, taxDocumentListService, $q, $log) {
                $scope.exportTableData = function () {
                    $scope.queryFieldModel.currentPage = $scope.pagingOptions.pageIndex;
                    $scope.queryFieldModel.pageSize = $scope.pagingOptions.pageSize;

                    var delIDs = [];
                    $("input[name='dataGridCheckBox']").each(function (index, tdCell) {
                        if (tdCell.checked) {
                            var cellId = $(tdCell).attr('data-id');
                            delIDs.push(cellId);
                        }
                    });
                    var params = angular.copy($scope.queryFieldModel);
                    params.ids = delIDs;
                    params.fileBeginTime = getQueryDate(params.fileBeginTime, "-");
                    params.fileEndTTime = getQueryDate(params.fileEndTTime, "-");
                    params.ownBeginTime = getQueryDate(params.ownBeginTime, "-");
                    params.ownEndTime = getQueryDate(params.ownEndTime, "-");
                    params.effectiveBeginTime = getQueryDate(params.effectiveBeginTime, "-");
                    params.effectiveEndTime = getQueryDate(params.effectiveEndTime, "-");
                    params.uploadBeginTime = getQueryDate(params.uploadBeginTime, "-");
                    params.uploadEndTime = getQueryDate(params.uploadEndTime, "-");

                    function getQueryDate(time, mark) {
                        if (!time) return "";
                        var theDate = new Date(time);
                        var year = theDate.getFullYear();
                        var mm = theDate.getMonth() + 1;
                        var dd = theDate.getDate();
                        mm = (mm + "").length < 2 ? "0" + mm : mm;
                        dd = (dd + "").length < 2 ? "0" + dd : dd;
                        return year + mark + mm + mark + dd;
                    }

                    taxDocumentListService.exportTableData(params).then(function (data, status, headers) {
                        if (status === 204) {
                            SweetAlert.warning("没有数据可以下载");
                            return;
                        }
                        exportToExcel(data, 'taxDocument.xls');
                    }, function () {
                        SweetAlert.error($translate.instant('PleaseContactAdministrator'));
                    })/*.error(function () {
                    SweetAlert.error($translate.instant('PleaseContactAdministrator'));
                });*/
                };

                //下载服务器上的xls文件
                var exportToExcel = function (data, filename) {

                    $('#busy-indicator-container').show();

                    var defer = $q.defer();
                    // var octetStreamMime = 'application/vnd.ms-excel';
                    var success = false;

                    // Get the headers
                    // headers = headers();

                    // Get the filename from the x-filename header or default to "download.bin"
                    // var filename = decodeURI(headers['x-file-name']) + defaultFileName;

                    // Determine the content type from the header or default to "application/octet-stream"
                    // var contentType = headers['content-type'] || octetStreamMime;

                    try {
                        // Try using msSaveBlob if supported
                        //console.log("Trying saveBlob method ...");
                        var blob = new Blob([data], {type: "arraybuffer"});
                        if (navigator.msSaveBlob)
                            navigator.msSaveBlob(blob, filename);
                        else {
                            // Try using other saveBlob implementations, if available
                            var saveBlob = navigator.webkitSaveBlob || navigator.mozSaveBlob || navigator.saveBlob;
                            if (saveBlob === undefined) throw "Not supported";
                            saveBlob(blob, filename);
                        }
                        //console.log("saveBlob succeeded");
                        success = true;
                    } catch (ex) {
                        $log.debug("saveBlob method failed with the following exception:");
                        $log.debug(ex);
                    }

                    if (!success) {
                        // Get the blob url creator
                        var urlCreator = window.URL || window.webkitURL || window.mozURL || window.msURL;
                        if (urlCreator) {
                            // Try to use a download link
                            var link = document.createElement('a');
                            if ('download' in link) {
                                // Try to simulate a click
                                try {
                                    // Prepare a blob URL
                                    //console.log("Trying download link method with simulated click ...");
                                    var blobdownload = new Blob([data], {type: "arraybuffer"});
                                    var urldownload = urlCreator.createObjectURL(blobdownload);
                                    link.setAttribute('href', urldownload);

                                    // Set the download attribute (Supported in Chrome 14+ / Firefox 20+)
                                    link.setAttribute("download", filename);

                                    // Simulate clicking the download link
                                    var event = document.createEvent('MouseEvents');
                                    event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
                                    link.dispatchEvent(event);
                                    //console.log("Download link method with simulated click succeeded");
                                    success = true;

                                } catch (ex) {
                                    $log.debug("Download link method with simulated click failed with the following exception:");
                                    $log.debug(ex);
                                    $q.reject();
                                }
                            }

                            if (!success) {
                                // Fallback to window.location method
                                try {
                                    // Prepare a blob URL
                                    // Use application/octet-stream when using window.location to force download
                                    //console.log("Trying download link method with window.location ...");
                                    var blobsuccess = new Blob([data], {type: "arraybuffer"});
                                    var urlsuccess = urlCreator.createObjectURL(blobsuccess);
                                    window.location = urlsuccess;
                                    //console.log("Download link method with window.location succeeded");
                                    success = true;
                                } catch (ex) {
                                    //console.log("Download link method with window.location failed with the following exception:");
                                    $log.debug(ex);
                                    $q.reject();
                                }
                            }
                        }
                    }

                    if (!success) {
                        // Fallback to window.open method
                        $log.debug("No methods worked for saving the arraybuffer, using last resort window.open");
                        window.open(httpPath, '_blank', '');
                    }

                    //Delete the file
                    // deleteFile(encodeURI(filename));
                    defer.resolve('success');
                    $('#busy-indicator-container').hide();
                    return defer.promise;
                };
            }]
    }
});