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;
    $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.dbName, temp).success(function (or) {
                    if (or.result) {//如果当前期间还没有导入任何数据的话,就添加一条未开始状态的记录  
                        if (_.isNull(or.data)) {
                            projectService.setProjectStatus(vatSessionService.project.dbName, temp, constant.ProjectStatusEnum.UnStarted).success(function (or) {
                                if (or.result) {
                                    vatSessionService.project.projectStatusList[temp] = constant.ProjectStatusEnum.UnStarted;
                                    initStatus(vatSessionService.project.dbName, vatSessionService.project.id, temp);
                                }
                                else {
                                    SweetAlert.error($translate.instant('SetProjectStatusError'));
                                }
                            });
                        }
                        else { //已经导入的话,更新最新项目状态
                            vatSessionService.project.projectStatusList[temp] = or.data.status;
                            initStatus(vatSessionService.project.dbName, 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.balanceSheet.queryCode,
                    constant.vatPermission.dataPreview.accountVoucher.queryCode,
                    constant.vatPermission.dataPreview.customInvoice.queryCode,
                    constant.vatPermission.dataPreview.outputInvoice.queryCode,
                    constant.vatPermission.dataPreview.inputInvoice.queryCode,

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

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

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

        $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'
                //    });
                //}

                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'
                    });
                }
                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'
                    });
                }
                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', state: 'generateReport', num: 4,
                        permission: constant.vatPermission.reportView.reportViewCode, url: '#/vat/generateReport'
                    });
                }

                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.dbName, 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(dbName, id, month) {
        $q.all([
           projectService.getProjectStatus(dbName, id, month),
           //vatWorkflowService.getWorkflowDetailByDb(dbName, month)
        ]).then(function (result) {
            var statusData = result[0].data;
            var workflowData = result[1].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);
            }

            if (workflowData.result) {
                $log.debug("vat-layout.ctrl.js  initStatus set project workflow");
                vatSessionService.project.workflow = workflowData.data;
                $log.debug(vatSessionService.project.workflow);
            }
        });
    }

    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.dbName, vatSessionService.project.id, vatSessionService.month);
        $scope.setPermissionMenu();


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

    })();
}]);