'use strict'; (function () { angular .module('scriptsure.states', ['ui.router', 'scriptsure.services']) .config(['$stateProvider', '$urlRouterProvider', '$httpProvider', function ($stateProvider, $urlRouterProvider, $httpProvider) { $httpProvider.interceptors.push('httpInterceptor'); $stateProvider.state('auth', { abstract: true }); $stateProvider.state('auth.login', { url: '/login', data: { pageTitle: 'ScriptSure Login Portal', pageClass: 'auth-login' }, resolve: { user: function () { return null; }, locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('login'); return $translate.refresh(); }] }, views: { 'content@': { templateUrl: '//us.scriptsure.com/app/login/login.html', controller: 'LoginController as loginPage' } } }); $stateProvider.state('page', { abstract: true, data: { authRequired: true }, resolve: { user: function (UserService) { return UserService.getUser(); }, hiddenComponents: ['UserService', 'ComponentService', '$localStorage', 'SettingService', function (UserService, ComponentService, $localStorage, SettingService) { return UserService.getUser().then(() => { //Dont set the timeout every single time that a transition //is made. Once set trust that it is ok. On UserService.logout the //values are deleted from local storage $localStorage.timeoutAmount = SettingService.get('USER_TIMEOUT_AMOUNT', 'Practice'); $localStorage.timeoutUnit = SettingService.get('USER_TIMEOUT_UNITS', 'Practice'); //Sets the practice and the current default user if (UserService.user && UserService.user.currentPractice) { UserService.setPracticeUser(UserService.user.currentPractice, false, false); } ComponentService.getHiddenComponents(2); }); }], locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('main-nav'); $translatePartialLoader.addPart('schedule'); return $translate.refresh(); }] }, views: { 'main-nav': { templateUrl: '//us.scriptsure.com/components/main-nav/2', controller: 'MainNavController as mainNavBar' } } }); $stateProvider.state('page.home', { url: '/', data: { 'pageTitle': 'ScriptSure Home', 'pageClass': 'page-home' }, views: { 'content@': { templateUrl: '//us.scriptsure.com/app/pages/dashboard/dashboard.html', controller: 'DashboardPageController as vm' }, 'patientSearch@page.home': { templateUrl: '//us.scriptsure.com/app/patient/search/search.html', controller: 'PatientSearchController as patientSearch' }, 'prescriptionQueue@page.home': { templateUrl: '//us.scriptsure.com/app/prescription/prescription.queue.html', controller: 'PrescriptionQueueController as vm' }, 'message@page.home': { templateUrl: '//us.scriptsure.com/app/message/message.html', controller: 'MessageController as message' } }, resolve: { isSmall: function () { return false; }, isDashboard: function () { return true; }, mdPanelRef: function () { return null; }, locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('dashboard'); $translatePartialLoader.addPart('patient-search'); $translatePartialLoader.addPart('queue'); $translatePartialLoader.addPart('message'); return $translate.refresh(); }] }, onEnter: ['$rootScope', ($rootScope) => { //Refresh the queue list $rootScope.$broadcast('queueRefresh'); $rootScope.hideMainNav = false; }] }); $stateProvider.state('page.patient-search', { url: '/patient-search', data: { 'pageTitle': 'ScriptSure Patient Search', 'pageClass': 'page-patient-search' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('patient-search'); return $translate.refresh(); }] }, views: { 'content@': { templateUrl: '//us.scriptsure.com/app/patient/patient-search.html', controller: 'PatientSearchDialogController as patientSearchPage' }, 'static-widget@page.patient-search': { templateUrl: '//us.scriptsure.com/app/patient/search/search.html', controller: 'PatientSearchController as patientSearch' } } }); $stateProvider.state('page.chart', { url: '/chart/:patientId', abstract: true, data: { pageTitle: 'ScriptSure Chart', pageClass: 'page-chart' }, resolve: { patient: function ($stateParams, PatientService, $rootScope, SetupService) { //Get any pending requests for EPCS access outside of //the current logged in user. User cannot approve its //own EPCS request. Get all Access requests. Once all the //services are run then the setup is shown if needed SetupService.refresh(true); //Refresh the queue list $rootScope.$broadcast('queueRefresh'); return PatientService.getPatient(Number($stateParams.patientId), false, true); }, locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('chart'); return $translate.refresh(); }] }, views: { 'content@': { templateUrl: '//us.scriptsure.com/components/chart/2', controller: 'ChartController as chart' }, 'chart-sidebar@page.chart': { templateUrl: '//us.scriptsure.com/app/chart/chart-sidebar/chart-sidebar.html', controller: 'ChartSideBarController as chartSideBar' }, 'chart-nav@page.chart': { templateUrl: '//us.scriptsure.com/app/chart/chart-nav/chart-nav.html', controller: 'ChartNavController as chartNav' } }, onEnter: ['$rootScope', ($rootScope) => { $rootScope.hideMainNav = false; }] }); $stateProvider.state('page.chart.dashboard', { url: '/dashboard', data: { pageTitle: 'ScriptSure Chart', pageClass: 'page-chart' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('medication-history'); return $translate.refresh(); }] }, views: { 'chart-main@page.chart': { templateUrl: '//us.scriptsure.com/app/medication-history/medication-history.html', controller: 'MedicationHistoryController as vm' } } }); $stateProvider.state('page.chart.drugHistory', { url: '/drug-history', data: { pageTitle: 'ScriptSure Patient Medications', pageClass: 'page-prescriptions' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('medication-history'); return $translate.refresh(); }] }, views: { 'chart-main@page.chart': { templateUrl: '//us.scriptsure.com/app/medication-history/medication-history.html', controller: 'MedicationHistoryController as vm' } } }); $stateProvider.state('page.chart.demographics', { url: '/demographics', data: { pageTitle: 'ScriptSure Patient Demographics', pageClass: 'page-demographics' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('demographics'); return $translate.refresh(); }] }, views: { 'chart-main@page.chart': { templateUrl: '//us.scriptsure.com/app/patient/patient-demographics.html', controller: 'PatientDemographicsController as demo' } } }); $stateProvider.state('page.chart.demographics.general', { url: '', resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('demographics'); return $translate.refresh(); }] }, views: { 'tabContent': { templateUrl: '//us.scriptsure.com/app/patient/tabs/general.html', controller: 'PatientDemographicsController as demo' } } }); $stateProvider.state('page.chart.demographics.other', { url: '/other', resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('demographics'); return $translate.refresh(); }] }, views: { 'tabContent': { templateUrl: '//us.scriptsure.com/app/patient/tabs/other.html', controller: 'PatientDemographicsController as demo' } } }); $stateProvider.state('page.chart.demographics.insurance', { url: '/insurance', resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('demographics'); return $translate.refresh(); }] }, views: { 'tabContent': { templateUrl: '//us.scriptsure.com/app/patient/tabs/insurance.html', controller: 'PatientDemographicsController as demo' } } }); $stateProvider.state('page.chart.demographics.documents', { url: '/documents', resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('demographics'); return $translate.refresh(); }] }, views: { 'tabContent': { templateUrl: '//us.scriptsure.com/app/patient/tabs/documents.html', controller: 'PatientDemographicsController as demo' } } }); $stateProvider.state('page.chart.demographics.comments', { url: '/comments', resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('demographics'); return $translate.refresh(); }] }, views: { 'tabContent': { templateUrl: '//us.scriptsure.com/app/patient/tabs/comments.html', controller: 'PatientDemographicsController as demo' } } }); $stateProvider.state('page.chart.allergies', { url: '/allergies', data: { pageTitle: 'ScriptSure Patient Allergies', pageClass: 'page-allergies' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('allergy'); return $translate.refresh(); }] }, views: { 'chart-main@page.chart': { templateUrl: '//us.scriptsure.com/app/allergy/allergy.html', controller: 'AllergyController as vm' } } }); $stateProvider.state('page.chart.education', { url: '/education', data: { pageTitle: 'ScriptSure Patient Education', pageClass: 'page-education' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('education'); return $translate.refresh(); }] }, views: { 'chart-main@page.chart': { templateUrl: '//us.scriptsure.com/app/education/education.html', controller: 'EducationController as vm' } } }); $stateProvider.state('page.chart.vital', { url: '/vital', data: { pageTitle: 'ScriptSure Patient Vital', pageClass: 'page-vital' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('vital'); return $translate.refresh(); }] }, views: { 'chart-main@page.chart': { templateUrl: '//us.scriptsure.com/app/vital/vital.html', controller: 'VitalController as vm' } } }); $stateProvider.state('page.chart.schedule', { url: '/education', data: { pageTitle: 'ScriptSure Patient Schedule', pageClass: 'page-schedule' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('schedule'); return $translate.refresh(); }] }, views: { 'chart-main@page.chart': { templateUrl: '//us.scriptsure.com/app/schedule/schedule.html', controller: 'ScheduleController as vm' } } }); $stateProvider.state('page.chart.encounters', { url: '/encounters', data: { pageTitle: 'ScriptSure Patient Encounters', pageClass: 'page-encounters' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('encounter'); return $translate.refresh(); }] }, views: { 'chart-main@page.chart': { templateUrl: '//us.scriptsure.com/app/encounter/encounter.html' } } }); $stateProvider.state('page.chart.drugList', { url: '/drug-list?category&drug', params: { category: { value: null, dynamic: true, type: 'string' }, drug: { value: null, dynamic: true, type: 'int' } }, data: { pageTitle: 'ScriptSure Drug List', pageClass: 'page-druglist', restriction: 'DrugListView' }, resolve: { categories: function ($stateParams, DrugListService) { return DrugListService.getDrugCategories(); }, locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('drugList'); $translatePartialLoader.addPart('medication-history'); return $translate.refresh(); }] }, views: { 'chart-main@page.chart': { templateUrl: '//us.scriptsure.com/app/drug/drug-list.html', controller: 'DrugListController as vm' } } }); $stateProvider.state('page.chart.pharmacy', { url: '/pharmacy', data: { pageTitle: 'ScriptSure Patient Pharmacy', pageClass: 'page-pharmacy' }, resolve: { currentPatient: function ($stateParams, PatientService) { return PatientService.currentPatient; }, isPrescription: function () { return false; }, locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('pharmacy'); return $translate.refresh(); }] }, views: { 'chart-main@page.chart': { templateUrl: '//us.scriptsure.com/app/pharmacy/pharmacy.html', controller: 'PharmacyController as vm' } } }); $stateProvider.state('page.chart.diagnosis', { url: '/diagnosis', data: { pageTitle: 'ScriptSure Patient Diagnosis', pageClass: 'page-diagnosis' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('diagnosis'); return $translate.refresh(); }] }, views: { 'chart-main@page.chart': { templateUrl: '//us.scriptsure.com/app/diagnosis/diagnosis.html', controller: 'DiagnosisController as vm' } } }); $stateProvider.state('page.chart.notes', { url: '/notes', data: { pageTitle: 'ScriptSure Patient Notes', pageClass: 'page-notes' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('soap'); return $translate.refresh(); }] }, views: { 'chart-main@page.chart': { templateUrl: '//us.scriptsure.com/app/note/soap.html', controller: 'SoapController as soapCtrl' } } }); //$stateProvider.state('page.prescriptions', { // url: '/prescriptions', // data: { // 'pageTitle': 'ScriptSure Patient Prescriptions', // 'pageClass': 'page-prescriptions' // }, // views: { // 'content@': { // templateUrl: '/app/medication-history/medication-history.html', // controller: 'MedicationHistoryController as medicationHistory' // } // } //}); $stateProvider.state('page.message', { url: '/message', data: { 'pageTitle': 'ScriptSure Messages', 'pageClass': 'page-messages' }, views: { 'content@': { templateUrl: '//us.scriptsure.com/app/message/message.html', controller: 'MessageController as message' } }, resolve: { isDashboard: function () { return false; }, locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('message'); return $translate.refresh(); }] }, onEnter: ['$rootScope', ($rootScope) => { $rootScope.hideMainNav = false; }] }); $stateProvider.state('page.report', { url: '/report', data: { pageTitle: 'ScriptSure Reports', pageClass: 'page-reports', restriction: 'ReportRun' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('report'); return $translate.refresh(); }] }, views: { 'content@': { templateUrl: '//us.scriptsure.com/app/report/report.html', controller: 'ReportController as vm' } }, onEnter: ['$rootScope', ($rootScope) => { $rootScope.hideMainNav = false; }] }); $stateProvider.state('page.schedule', { url: '/schedule', data: { 'pageTitle': 'ScriptSure Schedule', 'pageClass': 'page-schedule' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('schedule'); return $translate.refresh(); }] }, views: { 'content@': { templateUrl: '//us.scriptsure.com/app/schedule/schedule.html', controller: 'ScheduleController as vm' } }, onEnter: ['$rootScope', ($rootScope) => { $rootScope.hideMainNav = false; }] }); $stateProvider.state('page.setting', { url: '/setting', data: { pageTitle: 'ScriptSure Settings', pageClass: 'page-setting', restriction: 'SetupSettingView' }, resolve: { authenticated: function (SecurityService) { return SecurityService.can('VIEW_SETTING'); }, currentState: ['$state', function ($state) { let currentStateData = { name: $state.current.name, params: {...$state.params}, url: $state.href($state.current.name, $state.params) }; return currentStateData; }], locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('setting'); return $translate.refresh(); }] }, views: { 'content@': { templateUrl: '//us.scriptsure.com/app/setting/setting.html', controller: 'SettingController as settingController' } }, onEnter: ['$rootScope', ($rootScope) => { $rootScope.hideMainNav = true; }] }); $stateProvider.state('page.setting.practice', { url: '/setting/practice', data: { 'pageTitle': 'ScriptSure Settings', 'pageClass': 'page-setting' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('practice'); return $translate.refresh(); }] }, views: { 'complexTemplates': { templateUrl: '//us.scriptsure.com/app/practice/practices.html', controller: 'PracticeController as vm' } } }); $stateProvider.state('page.setting.user', { url: '/setting/user', data: { 'pageTitle': 'ScriptSure Settings', 'pageClass': 'page-setting' }, resolve: { readOnly: function () { return true; }, businessunits: ['UserService', function (UserService) { return UserService.getBusinessUnits(UserService.user.currentBusinessUnit.organizationId); }], locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('user'); return $translate.refresh(); }] }, views: { 'complexTemplates': { templateUrl: '//us.scriptsure.com/app/user/user.profile.html', controller: 'UserProfileController as vm' } } }); $stateProvider.state('page.setting.users', { url: '/setting/users/:practiceId', data: { 'pageTitle': 'ScriptSure Settings', 'pageClass': 'page-setting' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('practice'); $translatePartialLoader.addPart('user'); return $translate.refresh(); }], practice: ['PracticeService', '$stateParams', function (PracticeService, $stateParams) { return PracticeService.getPractice($stateParams.practiceId); }] }, views: { 'complexTemplates': { templateUrl: '//us.scriptsure.com/app/practice/practice.view.html', controller: 'PracticeViewController as vm' } } }); $stateProvider.state('page.setting.security', { url: '/setting/security', data: { 'pageTitle': 'ScriptSure Settings', 'pageClass': 'page-setting' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('security'); return $translate.refresh(); }] }, views: { 'complexTemplates': { templateUrl: '//us.scriptsure.com/app/security/security.view.html', controller: 'SecurityViewController as vm' } } }); $stateProvider.state('page.setting.billing-account', { url: '/setting/billing-account/:practiceId', data: { 'pageTitle': 'ScriptSure Settings', 'pageClass': 'page-setting' }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('billing-account'); return $translate.refresh(); }] }, views: { 'complexTemplates': { templateUrl: '//us.scriptsure.com/app/billing-account/billing-account.html', controller: 'BillingAccountController as vm' } } }); $stateProvider.state('page.setting.epcs', { url: '/setting/epcs/:practiceId', data: { 'pageTitle': 'ScriptSure Settings', 'pageClass': 'page-setting' }, resolve: { authenticated: function (SecurityService) { return SecurityService.can('VIEW_EPCS_REQUEST'); }, locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('epcs'); return $translate.refresh(); }] }, views: { 'complexTemplates': { templateUrl: '//us.scriptsure.com/app/epcs/epcs.html', controller: 'EpcsController as vm' } } }); $stateProvider.state('user-security', { url: '/user-security', data: { authRequired: false }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('user'); return $translate.refresh(); }] }, views: { 'content@': { templateUrl: '//us.scriptsure.com/app/user/user.security.html' } } }); $stateProvider.state('user-review', { url: '/user-review', data: { authRequired: false }, reload: true, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('user'); return $translate.refresh(); }] }, views: { 'content@': { templateUrl: '//us.scriptsure.com/app/user/user.review.html', controller: 'UserReviewController as vm' } } }); $stateProvider.state('page.setting.clear', { url: '/setting/clear', views: { 'complexTemplates': { template: '' } } }); $stateProvider.state('complete-idproofing', { url: '/complete-idproofing/:userId/:signupToken', data: { authRequired: false }, resolve: { location: ['UserService', function (UserService) { return UserService.redirectApplication(); }], locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('setup'); return $translate.refresh(); }] }, views: { 'content': { templateUrl: '//us.scriptsure.com/app/user/complete.idproofing.html', controller: 'CompleteIdproofingController as vm' } } }); $stateProvider.state('update-idproofing', { url: '/update-idproofing', data: { authRequired: false }, resolve: { locales: ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) { $translatePartialLoader.addPart('setup'); return $translate.refresh(); }] }, views: { 'content': { templateUrl: '//us.scriptsure.com/app/user/update.idproofing.html', controller: 'UpdateIdproofingController as vm' } } }); $urlRouterProvider.otherwise('/login'); }]) .factory('httpInterceptor', ['$q', '$location', '$window', function ($q, $location, $window) { return { 'response': function (response) { if (response && (response.status === 401 || response.status === 403 || (response.status === 204 && response.config.url.indexOf('/v1.0/user') >= 0 && response.config.method === 'GET'))) { $location.path('/login'); return $q.reject(response); } return response || $q.when(response); }, 'responseError': function (rejection) { if (rejection && (rejection.status === 401 || rejection.status === 403)) { $location.path('/login'); return $q.reject(rejection); } return $q.reject(rejection); } }; }]); })();