vatModule.controller('VatLayoutController', ['$scope', '$rootScope', '$q', '$log', '$timeout', '$state', '$translate', 'projectService', 'SweetAlert', 'loginContext'
    , 'vatSessionService', 'vatCommonService', 'vatWorkflowService', 'application', 'enums', '$uibModal',
    function ($scope, $rootScope, $q, $log, $timeout, $state, $translate, projectService, SweetAlert, loginContext
        , vatSessionService, vatCommonService, vatWorkflowService, application, enums, $uibModal) {
        'use strict';
        $log.debug('VatLayoutController.ctor()...');

        $scope.dateFormat = $translate.instant('dateFormat4YearMonth');
        $scope.showSubMenu = true;
        if (vatSessionService.project.projectName) {
            $scope.projectName = vatSessionService.project.projectName;
        } else {
            $scope.projectName = vatSessionService.project.organizationName + '(' + vatSessionService.project.year + ')';
        }


        $scope.selectedDate = new Date(vatSessionService.project.year, vatSessionService.month - 1, 1);
        $scope.startDate = new Date(vatSessionService.project.year, 0, 1);
        $scope.endDate = new Date(vatSessionService.project.year, 11, 31, 23, 59, 59);
        var subMenus = [];

        var subStatusDto = {
            dispalyIndex: -1,
            name: '',
            isImported: false
        };

        var msgboxOptions = {
            title: $translate.instant('UnsavedChange'),
            text: $translate.instant('ComfirmIgnoreUnsavedChanges'),
            type: "warning",
            showCancelButton: true,
            confirmButtonColor: "#e0301e",
            confirmButtonText: $translate.instant('ConfirmYes'),
            cancelButtonText: $translate.instant('ConfirmNo'),
            closeOnConfirm: true,
            closeOnCancel: true
        };

        $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams, options) {
            var mainMenu = [
//        'vat.importData',
                'vat.previewData', 'vat.reductionData', 'vat.analyzeLayout'];
            if (vatSessionService.dataChanged) {
                event.preventDefault();
                SweetAlert.swal(msgboxOptions, function (isConfirm) {
                    if (isConfirm) {
                        vatSessionService.dataChanged = false;
                        if (_.contains(mainMenu, toState.name)) {
                            goFirstSubMenu(toState);
                        } else {
                            $state.go(toState, toParams, options);
                        }
                        ;
                    }
                    ;
                });
            } else {
                if (_.contains(mainMenu, toState.name)) {
                    event.preventDefault();
                    goFirstSubMenu(toState);
                }
                ;
            }
            ;
        });

        $scope.changeDate = function (e) {
            $log.debug("start to change date");
            var temp = e.date.getMonth() + 1;
            if (vatSessionService.month != temp) {
                $timeout(function () {
                    $log.debug($scope.changeDate);
                    projectService.isProjectStatusExisted(vatSessionService.project.id, temp).success(function (or) {
                        if (or.result) {//如果当前期间还没有导入任何数据的话,就添加一条未开始状态的记录
                            if (_.isNull(or.data)) {
                                projectService.setProjectStatus(temp, constant.ProjectStatusEnum.UnStarted).success(function (or) {
                                    if (or.result) {
                                        vatSessionService.project.projectStatusList[temp] = constant.ProjectStatusEnum.UnStarted;
                                        initStatus(vatSessionService.project.id, temp);
                                    } else {
                                        SweetAlert.error($translate.instant('SetProjectStatusError'));
                                    }
                                }).error(function (e) {
                                    vatSessionService.project.projectStatusList[temp] = constant.ProjectStatusEnum.UnStarted;
                                    initStatus(vatSessionService.project.id, temp);
                                });
                            } else { //已经导入的话,更新最新项目状态
                                vatSessionService.project.projectStatusList[temp] = or.data.status;
                                initStatus(vatSessionService.project.id, temp);
                            }
                        } else {
                            vatSessionService.project.projectStatusList[temp] = constant.ProjectStatusEnum.UnStarted;
                            initStatus(vatSessionService.project.id, temp);
                        }
                    });

                    if (vatSessionService.dataChanged) {
                        SweetAlert.swal(msgboxOptions, function (isConfirm) {
                            if (isConfirm) {
                                vatSessionService.dataChanged = false;
                                vatSessionService.month = temp;
                                $scope.selectedDate = new Date(vatSessionService.project.year, temp - 1, 1);
                                ;
                                $state.reload($state.$current);
                            } else {
                                $scope.elePicker.datepicker("setDate", $scope.selectedDate);
                            }
                            ;
                        });
                    } else {
                        vatSessionService.month = temp;
                        $scope.selectedDate = new Date(vatSessionService.project.year, temp - 1, 1);
                        //查看报表时路由为三层结构,特殊处理,其他逻辑不变
                        if ($state.$current.parent && $state.$current.parent.self.name === 'vat.generateReport') {
                            $scope.$broadcast('refreshGenerateReport', {templateId: $state.params.templateid});
                        } else {
                            $state.reload($state.$current);
                        }
                    }
                    ;
                }, 100);
            }
        };

        $scope.setPermissionMenu = function () {
            $scope.menus = [];
            var menuList = [
                constant.vatPermission.dataImport.balanceSheet.queryCode,
                constant.vatPermission.dataImport.journalEntry.queryCode,
                constant.vatPermission.dataImport.erpImport.queryCode,
                // constant.vatPermission.dataImport.outputInvoice.queryCode,
                // constant.vatPermission.dataImport.inputInvoice.queryCode,
                // constant.vatPermission.dataImport.customInvoice.queryCode,
                // constant.vatPermission.dataImport.voucherMapping.queryCode,
                // constant.vatPermission.dataImport.invoiceMapping.queryCode,
                // constant.vatPermission.dataImport.auditAdjust.queryCode,


                constant.vatPermission.dataPreview.trialBalance.queryCode,
                constant.vatPermission.dataPreview.profitLoss.queryCode,
                constant.vatPermission.dataPreview.offBalanceSheet.queryCode,
                constant.vatPermission.dataPreview.journal.queryCode,
                constant.vatPermission.dataPreview.cashFlow.queryCode,
                constant.vatPermission.dataPreview.invoiceRecord.queryCode,
                constant.vatPermission.dataPreview.certifiedInvoicesList.queryCode,
                constant.vatPermission.dataPreview.redLetterInformationTable.queryCode,
                constant.vatPermission.dataPreview.coupaPurchasingReport.queryCode,
                constant.vatPermission.dataPreview.invoiceData.queryCode,


                // constant.vatPermission.dataManage.accountMappingCode,
                // constant.vatPermission.dataManage.goodsMappingCode,
                // constant.vatPermission.dataManage.unbilledInvoiceCode,

                //constant.vatPermission.dataAnalysis.vatTaxDifferenceCode,

                // constant.vatPermission.dataPreview.balanceSheet.queryCode,
                //
                // constant.vatPermission.dataPreview.outputInvoice.queryCode,
                // constant.vatPermission.dataPreview.inputInvoice.queryCode,

                constant.vatPermission.dataManage.caculateDataCode,
                constant.vatPermission.dataManage.revenueDetailCode,
                constant.vatPermission.dataManage.billDetailCode,

                constant.vatPermission.reportView.bsplCode,
                constant.vatPermission.reportView.taxReturnCode,

                // constant.vatPermission.dataAnalysis.modelAnalysisCode,
                // constant.vatPermission.dataAnalysis.dashboard.dashboardCode,
            ];

            $scope.$root.checkUserOrganizationPermissionList(menuList).success(function (data) {
                    if (data) {
                        if (data[constant.vatPermission.dataImport.balanceSheet.queryCode]) {
                            $scope.menus.push({
                                name: 'importData', state: 'importData', num: 1,
                                permission: constant.vatPermission.dataImport.dataImportCode, url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'importData.balanceSheet',
                                state: 'importData.balanceSheet',
                                num: 1,
                                permission: constant.vatPermission.dataImport.balanceSheet.queryCode,
                                url: '#/vat/importData/balanceSheet'
                            });
                        } else if (data[constant.vatPermission.dataImport.journalEntry.queryCode]) {
                            $scope.menus.push({
                                name: 'importData', state: 'importData', num: 1,
                                permission: constant.vatPermission.dataImport.dataImportCode, url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'importData.journalEntry',
                                state: 'importData.journalEntry',
                                num: 1,
                                permission: constant.vatPermission.dataImport.journalEntry.queryCode,
                                url: '#/vat/importData/journalEntry'
                            });
                        } else if (data[constant.vatPermission.dataImport.erpImport.queryCode]) {
                            $scope.menus.push({
                                name: 'importData', state: 'importData', num: 1,
                                permission: constant.vatPermission.dataImport.dataImportCode, url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'importData.erpData',
                                state: 'importData.erpData',
                                num: 1,
                                permission: constant.vatPermission.dataImport.erpImport.queryCode,
                                url: '#/vat/importData/erpData'
                            });
                        } else if (data[constant.vatPermission.dataImport.outputInvoice.queryCode]) {
                            $scope.menus.push({
                                name: 'importData', state: 'importData', num: 1,
                                permission: constant.vatPermission.dataImport.dataImportCode, url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'importData.outputInvoice',
                                state: 'importData.outputInvoice',
                                num: 1,
                                permission: constant.vatPermission.dataImport.outputInvoice.queryCode,
                                url: '#/vat/importData/outputInvoice'
                            });
                        } else if (data[constant.vatPermission.dataImport.inputInvoice.queryCode]) {
                            $scope.menus.push({
                                name: 'importData', state: 'importData', num: 1,
                                permission: constant.vatPermission.dataImport.dataImportCode, url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'importData.inputInvoice',
                                state: 'importData.inputInvoice',
                                num: 1,
                                permission: constant.vatPermission.dataImport.inputInvoice.queryCode,
                                url: '#/vat/importData/inputInvoice'
                            });
                        } else if (data[constant.vatPermission.dataImport.customInvoice.queryCode]) {
                            $scope.menus.push({
                                name: 'importData', state: 'importData', num: 1,
                                permission: constant.vatPermission.dataImport.dataImportCode, url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'importData.customInvoice',
                                state: 'importData.customInvoice',
                                num: 1,
                                permission: constant.vatPermission.dataImport.customInvoice.queryCode,
                                url: '#/vat/importData/customInvoice'
                            });
                        } else if (data[constant.vatPermission.dataImport.voucherMapping.queryCode]) {
                            $scope.menus.push({
                                name: 'importData', state: 'importData', num: 1,
                                permission: constant.vatPermission.dataImport.dataImportCode, url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'importData.voucherMapping',
                                state: 'importData.voucherMapping',
                                num: 1,
                                permission: constant.vatPermission.dataImport.voucherMapping.queryCode,
                                url: '#/vat/importData/voucherMapping'
                            });
                        } else if (data[constant.vatPermission.dataImport.invoiceMapping.queryCode]) {
                            $scope.menus.push({
                                name: 'importData', state: 'importData', num: 1,
                                permission: constant.vatPermission.dataImport.dataImportCode, url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'importData.invoiceMapping',
                                state: 'importData.invoiceMapping',
                                num: 1,
                                permission: constant.vatPermission.dataImport.invoiceMapping.queryCode,
                                url: '#/vat/importData/invoiceMapping'
                            });
                        } else if (data[constant.vatPermission.dataImport.auditAdjust.queryCode]) {
                            $scope.menus.push({
                                name: 'importData', state: 'importData', num: 1,
                                permission: constant.vatPermission.dataImport.dataImportCode, url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'importData.auditAdjust',
                                state: 'importData.auditAdjust',
                                num: 1,
                                permission: constant.vatPermission.dataImport.auditAdjust.queryCode,
                                url: '#/vat/importData/auditAdjust'
                            });
                        } else {
                            $scope.menus.push({
                                name: 'importData', state: 'importData', num: 1,
                                permission: constant.vatPermission.dataImport.dataImportCode, url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'importData.productItem', state: 'importData.productItem', num: 1,
                                permission: '02', url: '#/vat/importData/productItem'
                            });
                        }

                        // TODO
                        if (data[constant.vatPermission.dataPreview.trialBalance.queryCode]) {
                            $scope.menus.push({
                                name: 'previewData',
                                state: 'previewData',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.dataPreviewCode,
                                url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'previewData.trialBalance',
                                state: 'previewData.trialBalance',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.trialBalance.queryCode,
                                url: '#/vat/previewData/trialBalance'
                            });
                        } else if (data[constant.vatPermission.dataPreview.profitLoss.queryCode]) {
                            $scope.menus.push({
                                name: 'previewData',
                                state: 'previewData',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.dataPreviewCode,
                                url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'previewData.profitLoss',
                                state: 'previewData.profitLoss',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.profitLoss.queryCode,
                                url: '#/vat/previewData/profitLoss'
                            });
                        } else if (data[constant.vatPermission.dataPreview.offBalanceSheet.queryCode]) {
                            $scope.menus.push({
                                name: 'previewData',
                                state: 'previewData',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.dataPreviewCode,
                                url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'previewData.offBalanceSheet',
                                state: 'previewData.offBalanceSheet',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.offBalanceSheet.queryCode,
                                url: '#/vat/previewData/offBalanceSheet'
                            });
                        } else if (data[constant.vatPermission.dataPreview.journal.queryCode]) {
                            $scope.menus.push({
                                name: 'previewData',
                                state: 'previewData',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.dataPreviewCode,
                                url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'previewData.journal',
                                state: 'previewData.journal',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.journal.queryCode,
                                url: '#/vat/previewData/journal'
                            });
                        } else if (data[constant.vatPermission.dataPreview.cashFlow.queryCode]) {
                            $scope.menus.push({
                                name: 'previewData',
                                state: 'previewData',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.dataPreviewCode,
                                url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'previewData.cashFlow',
                                state: 'previewData.cashFlow',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.cashFlow.queryCode,
                                url: '#/vat/previewData/cashFlow'
                            });
                        } else if (data[constant.vatPermission.dataPreview.invoiceRecord.queryCode]) {
                            $scope.menus.push({
                                name: 'previewData',
                                state: 'previewData',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.dataPreviewCode,
                                url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'previewData.invoiceRecord',
                                state: 'previewData.invoiceRecord',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.invoiceRecord.queryCode,
                                url: '#/vat/previewData/invoiceRecord'
                            });
                        } else if (data[constant.vatPermission.dataPreview.certifiedInvoicesList.queryCode]) {
                            $scope.menus.push({
                                name: 'previewData',
                                state: 'previewData',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.dataPreviewCode,
                                url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'previewData.certifiedInvoicesList',
                                state: 'previewData.certifiedInvoicesList',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.certifiedInvoicesList.queryCode,
                                url: '#/vat/previewData/certifiedInvoicesList'
                            });
                        } else if (data[constant.vatPermission.dataPreview.redLetterInformationTable.queryCode]) {
                            $scope.menus.push({
                                name: 'previewData',
                                state: 'previewData',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.dataPreviewCode,
                                url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'previewData.redLetterInfoTab',
                                state: 'previewData.redLetterInfoTab',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.redLetterInformationTable.queryCode,
                                url: '#/vat/previewData/redLetterInfoTab'
                            });
                        } else if (data[constant.vatPermission.dataPreview.coupaPurchasingReport.queryCode]) {
                            $scope.menus.push({
                                name: 'previewData',
                                state: 'previewData',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.dataPreviewCode,
                                url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'previewData.coupaPurchasingReport',
                                state: 'previewData.coupaPurchasingReport',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.coupaPurchasingReport.queryCode,
                                url: '#/vat/previewData/coupaPurchasingReport'
                            });
                        } else if (data[constant.vatPermission.dataPreview.invoiceData.queryCode]) {

                            $scope.menus.push({
                                name: 'previewData',
                                state: 'previewData',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.dataPreviewCode,
                                url: '#/vat/importData'
                            });
                            subMenus.push({
                                name: 'previewData.invoiceData',
                                state: 'previewData.invoiceData',
                                num: 2,
                                permission: constant.vatPermission.dataPreview.invoiceData.queryCode,
                                url: '#/vat/previewData/invoiceData'
                            });
                        }


                        // TODO 待删除1
                        // TODO Delete


                        // TODO 待删除
//                     if (data[constant.vatPermission.dataPreview.balanceSheet.queryCode]) {
//                         $scope.menus.push({
//                             name: 'previewData', state: 'previewData', num: 2,
//                             permission: constant.vatPermission.dataPreview.dataPreviewCode, url: '#/vat/previewData'
//                         });
//                         subMenus.push({
//                             name: 'previewData.balanceSheet',
//                             state: 'previewData.balanceSheet',
//                             num: 2,
//                             permission: constant.vatPermission.dataPreview.balanceSheet.queryCode,
//                             url: '#/vat/previewData/balanceSheet'
//                         });
//
// //               }
//                         // else if (data[constant.vatPermission.dataPreview.accountVoucher.queryCode]) {
//                         //     $scope.menus.push({
//                         //         name: 'previewData', state: 'previewData', num: 2,
//                         //         permission: constant.vatPermission.dataPreview.dataPreviewCode, url: '#/vat/previewData'
//                         //     });
//                         //     subMenus.push({
//                         //         name: 'previewData.accountVoucher', state: 'previewData.accountVoucher', num: 2,
//                         //         permission: constant.vatPermission.dataPreview.accountVoucher.queryCode, url: '#/vat/previewData/accountVoucher'
//                         //     });
//                         // }
// //               else if (data[constant.vatPermission.dataPreview.inputInvoice.queryCode]) {
// //                    $scope.menus.push({
// //                        name: 'previewData', state: 'previewData', num: 2,
// //                        permission: constant.vatPermission.dataPreview.dataPreviewCode, url: '#/vat/previewData'
// //                    });
//                         subMenus.push({
//                             name: 'previewData.inputInvoice',
//                             state: 'previewData.inputInvoice',
//                             num: 2,
//                             permission: constant.vatPermission.dataPreview.inputInvoice.queryCode,
//                             url: '#/vat/previewData/inputInvoice'
//                         });
// //                }
// //                else if (data[constant.vatPermission.dataPreview.outputInvoice.queryCode]) {
// //                    $scope.menus.push({
// //                        name: 'previewData', state: 'previewData', num: 2,
// //                        permission: constant.vatPermission.dataPreview.dataPreviewCode, url: '#/vat/previewData'
// //                    });
//                         subMenus.push({
//                             name: 'previewData.outputInvoice',
//                             state: 'previewData.outputInvoice',
//                             num: 2,
//                             permission: constant.vatPermission.dataPreview.outputInvoice.queryCode,
//                             url: '#/vat/previewData/outputInvoice'
//                         });
//                         subMenus.push({
//                             name: 'previewData.outputoffInvoice',
//                             state: 'previewData.outputoffInvoice',
//                             num: 2,
//                             permission: constant.vatPermission.dataPreview.outputInvoice.queryCode,
//                             url: '#/vat/previewData/outputoffInvoice'
//                         });
//                     }
//                else if (data[constant.vatPermission.dataPreview.customInvoice.queryCode]) {
//                    $scope.menus.push({
//                        name: 'previewData', state: 'previewData', num: 2,
//                        permission: constant.vatPermission.dataPreview.dataPreviewCode, url: '#/vat/previewData'
//                    });
//                    subMenus.push({
//                        name: 'previewData.customInvoice', state: 'previewData.customInvoice', num: 2,
//                        permission: constant.vatPermission.dataPreview.customInvoice.queryCode, url: '#/vat/previewData/customInvoice'
//                    });
//                }
                        //else {
                        //    $scope.menus.push({
                        //        name: 'previewData', state: 'previewData', num: 2,
                        //        permission: constant.vatPermission.dataPreview.dataPreviewCode, url: '#/vat/previewData'
                        //    });
                        //    subMenus.push({
                        //        name: 'previewData.productItem', state: 'previewData.productItem', num: 2,
                        //        permission: '02', url: '#/vat/previewData/productItem'
                        //    });
                        //}

                        if (data[constant.vatPermission.dataManage.caculateDataCode]) {
                            $scope.menus.push({
                                name: 'reductionData', state: 'reductionData', num: 3,
                                permission: constant.vatPermission.dataManage.dataManageCode, url: '#/vat/reductionData'
                            });
                            subMenus.push({
                                name: 'reductionData.caculateData',
                                state: 'reductionData.caculateData',
                                num: 3,
                                permission: constant.vatPermission.dataManage.caculateDataCode,
                                url: '#/vat/reductionData/caculateData'
                            });
                            subMenus.push({
                                name: 'reductionData.revenueDetail',
                                state: 'reductionData.revenueDetail',
                                num: 3,
                                permission: constant.vatPermission.dataManage.revenueDetailCode,
                                url: '#/vat/reductionData/revenueDetail'
                            });
                            subMenus.push({
                                name: 'reductionData.billDetail',
                                state: 'reductionData.billDetail',
                                num: 3,
                                permission: constant.vatPermission.dataManage.billDetailCode,
                                url: '#/vat/reductionData/billDetail'
                            });
                        } else if (data[constant.vatPermission.dataManage.accountMappingCode]) {
                            $scope.menus.push({
                                name: 'reductionData', state: 'reductionData', num: 3,
                                permission: constant.vatPermission.dataManage.dataManageCode, url: '#/vat/reductionData'
                            });
                            /* subMenus.push({
                                 name: 'reductionData.accountMapping', state: 'reductionData.accountMapping', num: 3,
                                 permission: constant.vatPermission.dataManage.accountMappingCode, url: '#/vat/reductionData/accountMapping'
                             });*/
                        } else if (data[constant.vatPermission.dataManage.goodsMappingCode]) {
                            $scope.menus.push({
                                name: 'reductionData', state: 'reductionData', num: 3,
                                permission: constant.vatPermission.dataManage.dataManageCode, url: '#/vat/reductionData'
                            });
                            /* subMenus.push({
                                 name: 'reductionData.goodsMapping', state: 'reductionData.goodsMapping', num: 3,
                                 permission: constant.vatPermission.dataManage.goodsMappingCode, url: '#/vat/reductionData/goodsMapping'
                             });*/
                        } else if (data[constant.vatPermission.dataManage.unbilledInvoiceCode]) {
                            $scope.menus.push({
                                name: 'reductionData', state: 'reductionData', num: 3,
                                permission: constant.vatPermission.dataManage.dataManageCode, url: '#/vat/reductionData'
                            });
                            /*subMenus.push({
                                name: 'reductionData.unbilledInvoice', state: 'reductionData.unbilledInvoice', num: 3,
                                permission: constant.vatPermission.dataManage.unbilledInvoiceCode, url: '#/vat/reductionData/unbilledInvoice'
                            });*/
                        }

                        if (data[constant.vatPermission.reportView.bsplCode] || data[constant.vatPermission.reportView.taxReturnCode]) {
                            $scope.menus.push({
                                name: 'generateReport',
                                state: 'generateReport',
                                num: 4,
                                permission: constant.vatPermission.reportView.reportViewCode,
                                url: '#/vat/generateReport'
                            });
                            subMenus.push({
                                name: 'generateReport.reportView',
                                state: 'generateReport.reportView',
                                num: 4,
                                permission: constant.vatPermission.reportView.bsplCode,
                                url: '#/vat/generateReport/reportView'
                            });
                        }

                        if (data[constant.vatPermission.dataAnalysis.modelAnalysisCode]) {
                            // $scope.menus.push({
                            //     name: 'analyzeLayout', state: 'analyzeLayout', num: 5,
                            //     permission: constant.vatPermission.dataAnalysis.dataAnalysisCode, url: '#/vat/analyzeLayout'
                            // });
                            // subMenus.push({
                            //     name: 'analyzeLayout.analyzeReport', state: 'analyzeLayout.analyzeReport', num: 5,
                            //     permission: constant.vatPermission.dataAnalysis.modelAnalysisCode, url: '#/vat/analyzeLayout/analyzeReport'
                            // });
                        }
                        //else if (data[constant.vatPermission.dataAnalysis.dashboard.dashboardCode]) {
                        //    $scope.menus.push({
                        //        name: 'analyzeLayout', state: 'analyzeLayout', num: 5,
                        //        permission: constant.vatPermission.dataAnalysis.dataAnalysisCode, url: '#/vat/analyzeLayout'
                        //    });
                        //    subMenus.push({
                        //        name: 'analyzeLayout.analyzeOrganizeDashboard', state: 'analyzeLayout.analyzeOrganizeDashboard', num: 5,
                        //        permission: constant.vatPermission.dataAnalysis.dashboard.dashboardCode, url: '#/analyzeOrganizeDashboard'
                        //    });
                        //}
                        else {
                            //data[constant.vatPermission.dataAnalysis.vatTaxDifferenceCode]
                            // $scope.menus.push({
                            //     name: 'analyzeLayout', state: 'analyzeLayout', num: 5,
                            //     permission: constant.vatPermission.dataAnalysis.dataAnalysisCode, url: '#/vat/analyzeLayout'
                            // });
                            // subMenus.push({
                            //     name: 'analyzeLayout.vatTaxDifference', state: 'analyzeLayout.vatTaxDifference', num: 5,
                            //     permission: constant.vatPermission.dataAnalysis.vatTaxDifferenceCode, url: '#/analyzeLayout/vatTaxDifference'
                            // });
                        }
                    }
                }
            );

        }

        var goFirstSubMenu = function (toState) {
            if (toState && toState.name && toState.name.length > 4 && $scope.menus) {
                var to = toState.name.substring(4);
                var state = _.find(subMenus, function (v, i, arr) {
                    if (v && v['state'].indexOf(to + '.') >= 0) {
                        return true;
                    }
                });
                if (state) {
                    if (state['state'] && state['state'].indexOf('analyzeOrganizeDashboard') >= 0) {
                        $state.go('organizationDashboard', {id: vatSessionService.project.organizationID});
                    } else {
                        $state.go('vat.' + state['state']);
                    }
                } else {
                    $state.go(toState);
                }
                ;
            }
        }

        $scope.$on(application.events.showSubMenu, function (event, data) {
            if (data) {
                $scope.showSubMenu = data.show;
            }
        });

        $scope.setReportSession = function (menuName) {
            if (menuName === 'generateReport') {
                vatSessionService.isFromTopMenu = true;
            }
        }

        $scope.showProjectStatus = function () {
            var modalInstance = $uibModal.open({
                animation: false,
                //appendTo: angular.element(document.querySelector('#imgProjectStatus')),//把弹出框加到imgProjectStatus下面
                ariaLabelledBy: 'modal-title',
                ariaDescribedBy: 'modal-body',
                templateUrl: 'model-project-status.html',
                scope: $scope,
                windowClass: "model-project-status"
            });

            modalInstance.rendered.then(function () {
                $log.debug("modalInstance.rendered");
                // Grab target element
                var element = document.querySelector('#imgProjectStatus'),
                    // Get target position and size
                    rect = element.getBoundingClientRect(),
                    // Grab modal element
                    modal = document.querySelector('.model-project-status');

                $log.debug(rect);
                // Set style
                modal.style.margin = 0;
                //modal.style.width = rect.width + 'px';
                modal.style.top = rect.top + 'px';
                modal.style.left = rect.left + 'px';

            });

            $scope.closeModal = function () {
                modalInstance.dismiss('cancel');
            };

            setSubStatusDto();
            setApproveDetailDto();
            setSubmitDetailDto();
            setStartStatusText(vatSessionService.month);
        }

        $scope.showSubStatus = function () {
            var temp = $scope.displaySubStatus;
            $scope.displaySubStatus = !temp;
        }

        $scope.showApproveDetail = function () {
            var temp = $scope.displayApproveDetails;
            $scope.displayApproveDetails = !temp;
        }

        //设置项目状态Title
        function setLayoutStatusTitle(statusId) {
            $log.debug("setLayoutStatusTitle");
            $scope.statusTitle = $translate.instant('ProjectStatusTitle');
            switch (statusId) {
                case constant.ProjectStatusEnum.UnStarted:
                    $scope.statusTitle += $translate.instant('ProjectStatusUnStarted');
                    break;
                case constant.ProjectStatusEnum.Imported:
                    $scope.statusTitle += $translate.instant('ProjectStatusImported');
                    break;
                case constant.ProjectStatusEnum.AccountMapSubmitted:
                    $scope.statusTitle += $translate.instant('ProjectStatusAcccountMapSubmitted');
                    break;
                case constant.ProjectStatusEnum.Generated:
                    $scope.statusTitle += $translate.instant('ProjectStatusGenerated');
                    break;
                case constant.ProjectStatusEnum.ReportSubmitted:
                    $scope.statusTitle += $translate.instant('ProjectStatusReportSubmitted');
                    break;
                case constant.ProjectStatusEnum.ReportApproved:
                    $scope.statusTitle += $translate.instant('ProjectStatusReportApproved');
                    break;
                case constant.ProjectStatusEnum.ReportRejected:
                    $scope.statusTitle += $translate.instant('ProjectStatusReportRejected');
                    break;
                case constant.ProjectStatusEnum.Completed:
                    $scope.statusTitle += $translate.instant('ProejctStatusCompleted');
                    break;
            }
        }


        function setSubStatusDto() {
            $log.debug("setSubStatusDto");
            $scope.subStatusList = [];
            var tbStatus = {
                dispalyIndex: 1,
                name: $translate.instant('balanceSheet'),
                isImported: vatSessionService.project.importSubStatus.isTbImport
            };
            var entryStatus = {
                dispalyIndex: 2,
                name: $translate.instant('JournalEntryTitle'),
                isImported: vatSessionService.project.importSubStatus.isEntryImport
            };
            var erpStatus = {
                dispalyIndex: 3,
                name: $translate.instant('erpData'),
                isImported: vatSessionService.project.importSubStatus.isErpImport
            };
            var outputInvoiceStatus = {
                dispalyIndex: 4,
                name: $translate.instant('outputInvoice'),
                isImported: vatSessionService.project.importSubStatus.isOutputInvoiceImport
            };
            var inputInvoiceStatus = {
                dispalyIndex: 5,
                name: $translate.instant('inputInvoice'),
                isImported: vatSessionService.project.importSubStatus.isInputInvoiceImport
            };
            var customStatus = {
                dispalyIndex: 6,
                name: $translate.instant('customInvoice'),
                isImported: vatSessionService.project.importSubStatus.isCustomInvoiceImport
            };
            var voucherMapStatus = {
                dispalyIndex: 7,
                name: $translate.instant('voucherMapping'),
                isImported: vatSessionService.project.importSubStatus.isVoucherMapImport
            };
            var invoiceMapStatus = {
                dispalyIndex: 8,
                name: $translate.instant('invoiceMapping'),
                isImported: vatSessionService.project.importSubStatus.isInvoiceMapImport
            };
            var adjustStatus = {
                dispalyIndex: 9,
                name: $translate.instant('auditAdjust'),
                isImported: vatSessionService.project.importSubStatus.isAdjustImport
            };

            $scope.subStatusList.push(tbStatus);
            $scope.subStatusList.push(entryStatus);
            $scope.subStatusList.push(erpStatus);
            $scope.subStatusList.push(outputInvoiceStatus);
            $scope.subStatusList.push(inputInvoiceStatus);
            $scope.subStatusList.push(customStatus);
            $scope.subStatusList.push(voucherMapStatus);
            $scope.subStatusList.push(invoiceMapStatus);
            $scope.subStatusList.push(adjustStatus);
            $log.debug($scope.subStatusList);
        }

        function setSubmitDetailDto() {
            $log.debug("setSubmitDetailDto");
            $scope.submitDetailDto = {
                userId: "",
                userName: "",
                finishedDateTime: "",
                finishedData: "",
                isDone: false
            }
            var wf = vatSessionService.project.workflow;
            if (_.isNull(wf)) {
                return;
            }

            var viewReportNode = _.where(wf.workflowNodeList, {dictionaryKey: constant.DictionaryDictKey.ViewReport})[0];
            if (!_.isNull(viewReportNode) && !_.isUndefined(viewReportNode)) {
                var submitTask = _.where(viewReportNode.workflowTaskList, {dictionaryKey: constant.DictionaryDictKey.WFSubmitReport})[0];
                if (!_.isNull(submitTask) && !_.isUndefined(submitTask)) {
                    $scope.submitDetailDto.userId = submitTask.userId;
                    $scope.submitDetailDto.userName = submitTask.userName;
                    $scope.submitDetailDto.finishedDateTime = !_.isNull(submitTask.createTime)
                        ? (new Date(submitTask.createTime)).dateTimeToString('yyyyMMdd') : "";
                    $scope.submitDetailDto.isDone = submitTask.isDone;
                    $scope.submitDetailDto.finishedData = $scope.submitDetailDto.userName + " " + $scope.submitDetailDto.finishedDateTime;

                }
            }
        }

        function setApproveDetailDto() {
            $log.debug("setApproveDetailDto");
            $scope.approveDetailList = [];
            switch (vatSessionService.project.projectStatusList[vatSessionService.month]) {
                case constant.ProjectStatusEnum.ReportApproved:
                    $scope.approveTitle = $translate.instant('ProjectStatusReportApproved');
                    break;
                case constant.ProjectStatusEnum.ReportRejected:
                    $scope.approveTitle = $translate.instant('ProjectStatusReportRejected');
                    break;
                default:
                    $scope.approveTitle = $translate.instant('ProjectStatusReportApproved');
                    ;
            }

            var wf = vatSessionService.project.workflow;
            if (_.isNull(wf)) {
                return;
            }

            var approveReportNode = _.where(wf.workflowNodeList, {dictionaryKey: constant.DictionaryDictKey.ApproveReport})[0];
            if (!_.isNull(approveReportNode) && !_.isUndefined(approveReportNode)) {
                $.each(approveReportNode.auditReportLevelList, function (index, item) {
                    var approveDto = {
                        orderIndex: -1,
                        name: "",
                        isDone: false,
                        finishedByUserName: "",
                        finishedDateTime: "",
                        finishedData: "",
                        isRejected: false,
                        ngClassInActive: false
                    };

                    approveDto.orderIndex = item.orderIndex;
                    approveDto.name = item.name + ' ' + $translate.instant('ProjectStatusReportApproved');
                    approveDto.isDone = item.isDone;
                    approveDto.finishedByUserName = !_.isNull(item.finishedByUserName) ? item.finishedByUserName : "";
                    approveDto.finishedDateTime = !_.isNull(item.finishedDateTime) ? (new Date(item.finishedDateTime)).dateTimeToString('yyyyMMdd') : "";
                    approveDto.finishedData = approveDto.finishedByUserName + "  " + approveDto.finishedDateTime;
                    approveDto.ngClassInActive = vatSessionService.project.projectStatusList[vatSessionService.month] < 60 || (!approveDto.isDone
                        && !approveDto.isRejected) ? true : false; //没有完成&&没有拒绝审核:未操作。显示为灰色
                    $scope.approveDetailList.push(approveDto);
                });

                $scope.approveDetailList.forEach(function (a) {
                    //如果当前层级'未完成'的话,检查是否作为'拒绝审核'操作。做过的话,重新设置dto数据
                    if (!a.isDone) {
                        vatWorkflowService.getWorkflowApproveReportLog(vatSessionService.project.id, vatSessionService.month, a.orderIndex,
                            enums.vatLogOperationTypeEnum.RejectReport, enums.ReportTemplateCode.TaxDeclarationCategory)
                            .success(function (or) {
                                if (or.result) {
                                    if (!_.isNull(or.data)) {
                                        a.isRejected = true;
                                        a.name = a.name.substring(0, a.name.indexOf(' ')) + ' ' + $translate.instant('HasRejected');
                                        a.finishedByUserName = or.data.userName;
                                        a.finishedDateTime = !_.isNull(or.data.createTime) ? (new Date(or.data.createTime)).dateTimeToString('yyyyMMdd') : "";
                                        a.finishedData = a.finishedByUserName + "  " + a.finishedDateTime;
                                        a.ngClassInActive = vatSessionService.project.projectStatusList[vatSessionService.month] < 60
                                        || (!a.isDone && !a.isRejected) ? true : false;

                                        //如下操作:一级通过审核,二级拒绝审核,提交审核,一级通过审核。
                                        //此时状态为“已审核”,审核的子状态:1级审核 已审核; 2级审核 已驳回 :应该显示为灰色
                                        if (vatSessionService.project.projectStatusList[vatSessionService.month] === 60 && a.orderIndex > 1) {
                                            var previousLevel = _.where($scope.approveDetailList, {orderIndex: a.orderIndex - 1})[0];
                                            if (!_.isUndefined(previousLevel)) {
                                                if (previousLevel.isDone && a.isRejected) {
                                                    a.ngClassInActive = true;
                                                }
                                            }
                                        }

                                    }
                                }
                            });
                    }
                });
            }

        }

        //项目未开始时,第一个节点显示”未开始”,开始以后显示“开始”
        function setStartStatusText(period) {
            var curPeriodStatus = vatSessionService.project.projectStatusList[period];
            if (!_.isUndefined(curPeriodStatus)) {
                if (_.isEqual(curPeriodStatus, constant.ProjectStatusEnum.UnStarted)) {
                    $scope.startStatusText = $translate.instant('ProjectStatusUnStarted');
                } else {
                    $scope.startStatusText = $translate.instant('ProjectStatusStarted');
                }
            }
        }

        function initStatus(id, month) {
            $q.all([
                projectService.getProjectStatus(id, month),
            ]).then(function (result) {
                var statusData = result[0].data;
                if (statusData.result) {
                    $log.debug("vat-layout.ctrl.js  initStatus set project importSubStatus");
                    vatSessionService.project.importSubStatus = statusData.data.importSubStatus;
                    $scope.layoutVatSession = vatSessionService;
                    $scope.period = vatSessionService.month;
                    setLayoutStatusTitle(vatSessionService.project.projectStatusList[month]);
                    setStartStatusText(month);
                    $log.debug(vatSessionService.project.importSubStatus);
                } else {
                    vatSessionService.project.importSubStatus = constant.ProjectStatusEnum.UnStarted;
                    $scope.period = vatSessionService.month;
                    setLayoutStatusTitle(constant.ProjectStatusEnum.UnStarted);
                    setStartStatusText(month);
                }

            });
        }


        function triggerSchedulerJob() {
            vatWorkflowService.execute();
        }

        (function initialize() {
            $log.debug("vat-layout-crtl.js initialize() ");
            $scope.displaySubStatus = false;//导入子状态是否显示
            $scope.displayApproveDetails = false;//审核详细详细是否显示
            $scope.triggerSchedulerJob = triggerSchedulerJob;
            initStatus(vatSessionService.project.id, vatSessionService.month);
            $scope.setPermissionMenu();


            $rootScope.$on('statusChanged', function (event, args) {
                $log.debug("receive statusChanged");
                $log.debug(args.status);
                setLayoutStatusTitle(args.status);
            });

        })();
    }]);