//Common Bind Module Method
var bindModule = function (thisModule, controllerProvider, compileProvider, filterProvider, provide) {

    thisModule.controller = controllerProvider.register;
    thisModule.directive = compileProvider.directive;
    thisModule.filter = filterProvider.register;
    thisModule.factory = provide.factory;
    thisModule.service = provide.service;

    return thisModule;
};

// register common module for shared functionalities for all other feature modules
var commonModule = angular.module('app.common', ['pascalprecht.translate', 'ngAnimate', 'ui.grid', 'ui.grid.selection', 'ui.grid.selection', 'ui.grid.treeView', 'ui.grid.resizeColumns', 'ui.grid.grouping', 'ui.grid.exporter', 'app.config', 'ui.grid.edit'])
	.run(['$log', function ($log) {
	    $log.debug('app.common.run()...');
	}])
	// define the script files for lazy loading and method to create depencency map for resovle config in route
	.provider('scriptDependency', ['version', function (version) {
	    'use strict';
	    // Here must add version parameter ?v=***, 
	    // to solve the problem that the bundle is not refreshed when its content changed.

	    this.commdataimport = [{
	        url: '/bundles/commdataimport.js?v=' + version,
	        type: 'text/javascript'
	    }, {
	        url: '/bundles/commdataimport.css?v=' + version,
	        type: 'text/css'
	    }];

	    this.vat = [{
	        url: '/bundles/vat.js?v=' + version,
	        type: 'text/javascript'
	    }, {
	        url: '/bundles/vat.css?v=' + version,
	        type: 'text/css'
	    }, {
	        url: '/bundles/vat.less?v=' + version,
	        type: 'text/css'
	    }];

	    this.cit = [{
	        url: '/bundles/cit.js?v=' + version,
	        type: 'text/javascript'
	    }, {
	        url: '/bundles/cit.css?v=' + version,
	        type: 'text/css'
	    }, {
	        url: '/bundles/cit.less?v=' + version,
	        type: 'text/css'
	    }];

        this.dataImport = [
            {
                url: '/bundles/globalDataImport.js?v=' + version,
                type: 'text/javascript'
            },
            {
                url: '/bundles/globalDataImport.css?v=' + version,
                type: 'text/css'
            },
            {
                url: '/bundles/globalDataImport.less?v=' + version,
                type: 'text/css'
            }
        ];

	    this.noPermissionPage = [{
	        url: '/bundles/noPermissionPage.js?v=' + version,
	        type: 'text/javascript'
	    }, {
	        url: '/bundles/noPermissionPage.less?v=' + version,
	        type: 'text/css'
	    }];

	    this.assetsManage = [{
	        url: '/bundles/assetsManage.js?v=' + version,
	        type: 'text/javascript'
	    }, {
	        url: '/bundles/assetsManage.css?v=' + version,
	        type: 'text/css'
	    }, {
	        url: '/bundles/assetsManage.less?v=' + version,
	        type: 'text/css'
	    }];

        this.taxDocumentManage = [{
            url: '/bundles/taxDocumentManage.js?v=' + version,
            type: 'text/javascript'
        }, {
            url: '/bundles/taxDocumentManage.css?v=' + version,
            type: 'text/css'
        }, {
            url: '/bundles/taxDocumentManage.less?v=' + version,
            type: 'text/css'
        }];


        this.taxTaskManage = [{
            url: '/bundles/taxTaskManage.js?v=' + version,
            type: 'text/javascript'
        }, {
            url: '/bundles/taxTaskManage.less?v=' + version,
            type: 'text/css'
        }];


	    this.summary = [
		//    {
		//    url: '/bundles/summary.js?v=' + version,
		//    type: 'text/javascript'
		//},
		{
		    url: '/bundles/summary.css?v=' + version,
		    type: 'text/css'
		}];

	    this.createDependenciesMap = function (dependencies) {
	        if (!angular.isArray(dependencies)) {
	            throw new TypeError('"scriptUrls" should be an array type!');
	        }

	        var dependenciesMap = {
	            dependency: ['$q', '$rootScope',
					function ($q, $rootScope) {
					    var deferred = $q.defer();
					    PWC.Loader.load(dependencies, function (hasNewJsLoaded) {
					        // If has new JavaScript resource loaded, should call $apply, otherwise, 
					        // should not call it.
					        if (hasNewJsLoaded) {
					            $rootScope.$apply(function () {
					                deferred.resolve();
					            });
					        } else {
					            deferred.resolve();
					        }
					    });
					    return deferred.promise;
					}
	            ]
	        };

	        return dependenciesMap;
	    };

	    this.$get = function () {
	        return {
	            createDependenciesMap: createDependenciesMap,
	            infrastructure: infrastructure,
	            vat: vat,
	            cit: cit,
                dataImport: dataImport,
	            assetsManage: assetsManage,
                taxDocumentManage: taxDocumentManage,
                noPermissionPageModule: noPermissionPageModule,
                taxTaskManage: taxTaskManage
	            //subjectCorrespondingInfrastructure: subjectCorrespondingInfrastructure
	            //subjectCorresponding: subjectCorresponding,
	            //configurationInfrastructure: configurationInfrastructure,
	            //declarationFormConfiguration: declarationFormConfiguration
	        };
	    };
	}]);

// register services module
var webservices = angular.module('app.webservices', ['app.common'])
	.run(['$log', function ($log) {
	    $log.debug('app.webservices.run()...');
	}]);

// register framework module for application framework
var frameworkModule = angular.module('app.framework', ['app.webservices', 'app.common', 'app.vatDashboard', 'ui.dashboard'])
	.run(['$log', function ($log) {
	    $log.debug('app.framework.run()...');
	}])
	.config(['$controllerProvider', '$urlRouterProvider', '$compileProvider', '$filterProvider', '$provide', 'scriptDependencyProvider', '$stateProvider',
		function ($controllerProvider, $urlRouterProvider, $compileProvider, $filterProvider, $provide, scriptDependencyProvider, $stateProvider) {
		    'use strict';
		    // this is required to add controller/directive/filter/service after angular bootstrap
		    bindModule(frameworkModule, $controllerProvider, $compileProvider, $filterProvider, $provide);

		    $stateProvider.state({
		        name: 'overview',
		        url: '/overview',
		        views: {
		            '@': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
							function ($scope, $stateParams, appTranslation) {
							    appTranslation.load([appTranslation.appPart]);
							}],
		                template: '<app-overview servicetypeid="2"></app-overview>',
		            }
		        },
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'notification',
		        url: '/notification',
		        views: {
		            '@': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
							function ($scope, $stateParams, appTranslation) {
							    appTranslation.load([appTranslation.appPart]);
							}],
		                template: '<app-push-notification></app-push-notification>',
		            }
		        },
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'overviewVat',
		        url: '/overview/vat',
		        views: {
		            '@': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
							function ($scope, $stateParams, appTranslation) {
							    appTranslation.load([appTranslation.appPart]);
							}],
		                template: '<app-overview servicetypeid="2"></app-overview>',
		            }
		        },
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'overviewAssetsManage',
		        url: '/overview/assetsManage',
		        views: {
		            '@': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
							function ($scope, $stateParams, appTranslation) {
							    appTranslation.load([appTranslation.appPart]);
							}],
		                template: '<app-overview servicetypeid="12"></app-overview>',
		            }
		        },
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'overviewCit',
		        url: '/overview/cit',
		        views: {
		            '@': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
							function ($scope, $stateParams, appTranslation) {
							    appTranslation.load([appTranslation.appPart]);
							}],
		                template: '<app-overview servicetypeid="6"></app-overview>',
		            }
		        },
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
                name: 'taxDocumentManage',
                url: '/documentManage/taxDocumentManage/:id',
                views: {
                    '@': {
                        controller: ['$scope', '$stateParams', 'appTranslation',
                            function ($scope, $stateParams, appTranslation) {
                                appTranslation.load([appTranslation.appPart]);
                            }],
                        template: '<document-manage></document-manage>',
                    }
                },
                deepStateRedirect: true,
                sticky: true
            });

            $stateProvider.state({
		        name: 'summary',
		        url: '/summary',
		        views: {
		            '@': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
							function ($scope, $stateParams, appTranslation) {
							    appTranslation.load([appTranslation.appPart]);
							}],
		                template: '<app-summary></app-summary>',
		            }
		        },
                resolve: scriptDependencyProvider.createDependenciesMap(_.flatten([scriptDependencyProvider.summary, scriptDependencyProvider.vat])),
		        deepStateRedirect: true,
		        sticky: true
		    });
		}
	]);

// register cache module for application framework
var cacheModule = angular.module('app.cache', ['app.common'])
	.run(['$log', 'cacheService', function ($log, cacheService) {
	    $log.debug('app.cache.run()...');

	}]);

var vatModule = angular.module('app.vat', ['ui.grid', 'ui.grid.selection', 'ui.grid.moveColumns', 'ui.grid.grouping', 'ui.grid.expandable', 'ui.grid.treeView', 'ui.grid.exporter', 'ui.grid.resizeColumns', 'mc.resizer', 'ui.select', 'ngAnimate', 'ngSanitize', 'ui.bootstrap', 'ui.grid.edit', 'perfect_scrollbar', 'dx', 'ui.grid.pinning',])
	.run(['$log', function ($log) {
	    $log.debug('app.vat.run()...');
	}])
	.config(['$controllerProvider', '$urlRouterProvider', '$compileProvider', '$filterProvider', '$provide', '$stateProvider', 'uiSelectConfig', 'scriptDependencyProvider',
		function ($controllerProvider, $urlRouterProvider, $compileProvider, $filterProvider, $provide, $stateProvider, uiSelectConfig, scriptDependencyProvider) {
		    'use strict';
		    // this is required to add controller/directive/filter/service after angular bootstrap
		    bindModule(vatModule, $controllerProvider, $compileProvider, $filterProvider, $provide);

		    uiSelectConfig.theme = 'select2';

		    $stateProvider.state({
		        name: 'vat',
		        url: '/vat',
		        cache: false,
		        views: {
		            '@': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
							function ($scope, $stateParams, appTranslation) {
							    appTranslation.load([appTranslation.vat]);
							}],
		                template: '<vat-layout></vat-layout>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.importData',
		        url: '/importData',
		        views: {
		            '@vat': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-import-layout></vat-import-layout>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });


		    $stateProvider.state({
		        name: 'vat.importData.balanceSheet',
		        url: '/balanceSheet',
		        views: {
		            '@vat.importData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-import-trial-balance></vat-import-trial-balance>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.importData.journalEntry',
		        url: '/journalEntry',
		        views: {
		            '@vat.importData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-import-journal-entry></vat-import-journal-entry>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.importData.erpData',
		        url: '/erpData',
		        views: {
		            '@vat.importData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-import-erp></vat-import-erp>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.importData.outputInvoice',
		        url: '/outputInvoice',
		        views: {
		            '@vat.importData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-import-output-invoice></vat-import-output-invoice>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.importData.inputInvoice',
		        url: '/inputInvoice',
		        views: {
		            '@vat.importData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-import-income-invoice></vat-import-income-invoice>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.importData.customInvoice',
		        url: '/customInvoice',
		        views: {
		            '@vat.importData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-import-custom-invoice></vat-import-custom-invoice>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.importData.voucherMapping',
		        url: '/voucherMapping',
		        views: {
		            '@vat.importData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-voucher-mapping></vat-voucher-mapping>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.importData.invoiceMapping',
		        url: '/invoiceMapping',
		        views: {
		            '@vat.importData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-invoice-mapping></vat-invoice-mapping>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.importData.auditAdjust',
		        url: '/auditAdjust',
		        views: {
		            '@vat.importData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-audit-adjust></vat-audit-adjust>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.previewData',
		        url: '/previewData',
		        views: {
		            '@vat': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
													function ($scope, $stateParams, appTranslation) {
													    appTranslation.load([appTranslation.vat]);
													}],
		                template: '<vat-import-layout></vat-import-layout>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.previewData.balanceSheet',
		        url: '/balanceSheet',
		        views: {
		            '@vat.previewData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-preview-balance-sheet></vat-preview-balance-sheet>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.previewData.accountVoucher',
		        url: '/accountVoucher',
		        views: {
		            '@vat.previewData': {
		                controller: [
							'$scope', '$stateParams', 'appTranslation',
							function ($scope, $stateParams, appTranslation) {
							    appTranslation.load([appTranslation.vat]);
							}
		                ],
		                template: '<vat-preview-account-voucher></vat-preview-account-voucher>'
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.previewData.outputInvoice',
		        url: '/outputInvoice',
		        views: {
		            '@vat.previewData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-preview-output-invoice></vat-preview-output-invoice>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.previewData.inputInvoice',
		        url: '/inputInvoice',
		        views: {
		            '@vat.previewData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-preview-input-invoice></vat-preview-input-invoice>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.previewData.customInvoice',
		        url: '/customInvoice',
		        views: {
		            '@vat.previewData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-preview-custom-invoice-sheet></vat-preview-custom-invoice-sheet>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.reductionData',
		        url: '/reductionData',
		        views: {
		            '@vat': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-import-layout></vat-import-layout>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.reductionData.accountMapping',
		        url: '/accountMapping',
		        views: {
		            '@vat.reductionData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-account-mapping></vat-account-mapping>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.reductionData.goodsMapping',
		        url: '/goodsMapping',
		        views: {
		            '@vat.reductionData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-goods-mapping></vat-goods-mapping>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.reductionData.caculateData',
		        url: '/caculateData',
		        views: {
		            '@vat.reductionData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-caculate-data></vat-caculate-data>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.reductionData.inputInvoice',
		        url: '/inputInvoice',
		        views: {
		            '@vat.reductionData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<p>inputInvoice</p>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.reductionData.unbilledInvoice',
		        url: '/unbilledInvoice',
		        views: {
		            '@vat.reductionData': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-unbilled-invoice></vat-unbilled-invoice>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });


		    $stateProvider.state({
		        name: 'vat.generateReport',
		        url: '/generateReport',
		        views: {
		            '@vat': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    $scope.isFromTopMenu = true;
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-report-layout></vat-report-layout>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: false,
		        sticky: false
		    });

		    $stateProvider.state({
		        name: 'vat.generateReport.reportView',
		        url: '/reportView?{id:string}&{templateid:string}&{name:string}&{templatecode:string}',
		        views: {
		            '@vat.generateReport': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    $scope.reportId = $stateParams.id;
										    $scope.templateId = $stateParams.templateid;
										    $scope.templateName = $stateParams.name;
										    $scope.templateCode = $stateParams.templatecode;
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-report-view report-id="reportId" template-id="templateId" template-name="templateName" template-code="templateCode" service-type="\'2\'"></vat-report-view>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: false,
		        sticky: false
		    });


		    /**********a beautiful separated line for analyzeReport*********/
		    $stateProvider.state({
		        name: 'vat.analyzeLayout',
		        url: '/analyzeLayout',
		        views: {
		            '@vat': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-analysis-menu></vat-analysis-menu>',

		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.analyzeLayout.analyzeReport',
		        url: '/analyzeReport',
		        views: {
		            '@vat.analyzeLayout': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-model-analysis></vat-model-analysis>',

		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.analyzeLayout.vatTaxDifference',
		        url: '/vatTaxDifference',
		        views: {
		            '@vat.analyzeLayout': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-tax-difference></vat-tax-difference>',

		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });
		    $stateProvider.state({
		        name: 'vat.analyzeReport',
		        url: '/analyzeReport',
		        views: {
		            '@vat': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-model-analysis></vat-model-analysis>',

		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.analyzeReport.dataSummary',
		        url: '/dataSummary',
		        views: {
		            '@vat': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-data-summary></vat-data-summary>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.analyzeReport.vatAnalysis',
		        url: '/vatAnalysis',
		        views: {
		            '@vat': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-vat-analysis></vat-vat-analysis>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.analyzeReport.financeTargetAnalysis',
		        url: '/financeTargetAnalysis',
		        views: {
		            '@vat': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-finance-target-analysis></vat-finance-target-analysis>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    $stateProvider.state({
		        name: 'vat.analyzeReport.vatModelAnalysis',
		        url: '/vatModelAnalysis',
		        views: {
		            '@vat': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<vat-model-analysis></vat-model-analysis>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });

		    /**********the end of a beautiful separated line for analyzeReport*********/

		    $stateProvider.state({
		        name: 'vat.devGrid',
		        url: '/devGrid',
		        views: {
		            '@vat': {
		                controller: ['$scope', '$stateParams', 'appTranslation',
										function ($scope, $stateParams, appTranslation) {
										    appTranslation.load([appTranslation.vat]);
										}],
		                template: '<dev-grid></dev-grid>',
		            }
		        },
		        resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
		        deepStateRedirect: true,
		        sticky: true
		    });
		}]);