{"version":3,"sources":["../../src/legacy-common/module.js","../../src/legacy-common/app.js","../../src/legacy-common/configuration/app.config.http.js","../../src/legacy-common/configuration/app.config.rootScope.js","../../src/legacy-common/configuration/app.config.translate.js","../../src/legacy-common/configuration/app.config.views.js","../../src/legacy-common/configuration/momentSetup.js","../../src/legacy-common/configuration/RestangularAbortable.js","../../src/legacy-common/decorators/AprimaExceptionHandler.js","../../src/legacy-common/filters/apPatientThumbnailSrc.js","../../src/legacy-common/filters/apPersonThumbnailSrc.js","../../src/legacy-common/services/AprimaRestangular.js","../../src/legacy-common/services/AuthorizationService.js","../../src/legacy-common/services/debugLogService.js","../../src/legacy-common/services/ErrorService.js","../../src/legacy-common/services/LanguageFactory.js","../../src/legacy-common/services/ListNavigationService.js","../../src/legacy-common/services/LocalStorageRepository.js","../../src/legacy-common/services/LogoffService.js","../../src/legacy-common/services/navigation/AppointmentTransitionToHelper.js","../../src/legacy-common/services/navigation/AppRoutes.js","../../src/legacy-common/services/navigation/MessageTransitionToHelper.js","../../src/legacy-common/services/NoteTypeRepository.js","../../src/legacy-common/services/promises/%24qHelpers.js","../../src/legacy-common/services/promises/HttpAbortableContext.js","../../src/legacy-common/services/security/Permissions.js","../../src/legacy-common/services/security/SecurityRepository.js","../../src/legacy-common/services/TileGroup.js"],"names":["angular","module","value","window","moment","messageTypes","LabResultMessageGuid","TaskMessageGuid","PortalAppointmentQuestionMessageGuid","PortalBillingQuestionMessageGuid","PortalDemographicsQuestionMessageGuid","PortalGeneralQuestionMessageGuid","PortalRxQuestionMessageGuid","PhoneMessageGuid","LabMessageGuid","AttachmentApprovalGuid","ServiceOrderApprovalMessageGuid","RxRefillRequestMessageGuid","PatientRxRefillRequestMessageGuid","PharmacyRefillRequestMessageGuid","RxRefillAndErxRequestMessageGuid","SupportedMessageTypesForCreate","Types","id","requiredFeature","SubTypes","appointmentScheduleTypes","PatientVisit","name","Event","BlockingEvent","GroupVisit","List","_","values","constant","listData","default","run","CustomModuleRunService","add","$rootScope","ErrorService","RequestTypes","$transitions","requestTypes","addHttpError","httpResponse","messages","type","isAborted","addHttpErrorToScope","this","removeHttpError","removeHttpErrorFromScope","setupDirectiveScope","$scope","onSuccess","TransitionManager","AprimaAnalytics","DeviceSettings","toaster","goBack","sendEvent","isEmpty","obj","isPhone","isPhoneOrOverride","isTablet","isTabletOrOverride","isBrowser","isBrowserOrOverride","tryToastModelStateError","response","modelState","ModelState","data","commandResult","forEach","e","pop","factory","gettextCatalog","text","getString","$uibModalStack","dismissAll","momentSetup","fn","removeOffset","utcOffset","utc","formatRemoveOffset","format","startOfDate","startOf","toDate","Restangular","HttpAbortableContext","$qHelpers","abortableFields","wrapCallsToRestangularizedElement","restangularizedElement","promiseInterceptor","functions","key","elementFn","wrappedKey","result","apply","arguments","isPromise","setRestangularFields","setOnElemRestangularized","element","isCollection","route","restangularObject","configuration","isRestangularized","promisesToAbort","promise","abortPromises","abortableContext","httpConfig","restangularFields","defaults","timeout","abortPromise","wrap","config","$provide","decorator","$delegate","$injector","ApErrorHandler","exception","cause","message","get","handleError","sendException","ex","filter","patientId","height","width","url","ServerInfoRepository","personId","isFeatureSupported","$log","Bridge","BrowserService","debugLogService","LocalStorageRepository","LogOffService","alwaysIgnoreCache","debugModeValue","getSupportedFeatures","endpointBase","options","isString","ignoreCache","isLegacyIE","debugMode","withConfig","RestangularConfigurer","clientUrl","getClientURL","Error","urlComponents","replace","SERVER_API_VERSION","baseUrl","c","isNull","join","setBaseUrl","headers","Auth-Token","getJsonWebToken","ApiKey","API_KEY","fireEvent","Pragma","Expires","Date","setDefaultHeaders","debugModeFeature","features","isArray","supportedFeatures","intersection","length","addFullRequestInterceptor","operation","what","_5","parameters","toLowerCase","getDebugMode","params","assignIn","t","toJSON","debug","levels","addResponseInterceptor","log","JSON","stringify","setErrorInterceptor","status","logoffFromUnauthorizedResponse","errorCode","parseInt","getUrl","parent","disableCaching","CurrentUser","isUserProvider","user","permissions","IsProvider","icd10User","ICD10User","disableDebugMode","enableDebugMode","gettext","convertToErrorMessages","displayErrorMessages","error","asHtml","errors","err","title","body","bodyOutputType","scope","reason","responseMessage","unhandled","httpError","hasOwnProperty","push","getGenericError","flatMap","validationResult","ValidationResult","IsValid","Errors","ErrorMessage","statusText","genericError","Message","setLang","language","currentLanguage","$filter","cachedEnumerators","activeItems","buildAndCacheEnumerator","enumeratorName","list","orderPredicate","transitionFunction","enumerator","buildEnumerator","setActiveItemById","getEnumerator","callbackFunction","info","currentIndex","item","indexOf","next","lookupIndex","canGoNext","currentItem","previous","first","last","moveToNextItem","moveToPreviousItem","moveToFirstItem","moveToLastItem","moveToItem","Exception","canGoPrevious","getNavStatus","canGoForward","canGoBack","i","Id","toArray","oldIndex","arr","hydrateListNavigationProperties","settings","phone","modes","headerValue","requiresNavSettings","listNavigationProperties","tablet","setAsBridgeHandler","on","navigationType","registerActiveItemForList","listType","itemId","deregisterActiveItemForList","setActiveItemByIdForEnumerator","storage","WebCommonStorageRepository","clearAll","getIsActiveDirectoryUser","setIsActiveDirectoryUser","getClientID","getClientId","setClientID","setClientId","getNotificationTimeout","setNotificationTimeout","set","setIdentityHint","getIdentityHint","getClientUrl","setClientURL","setClientUrl","getGatewayUrl","setGatewayUrl","setJsonWebToken","jwt","removeJsonWebToken","setUserName","username","getUserName","setBirthDate","birthDate","getBirthDate","setAccessCode","statementId","getAccessCode","setUserFullName","getUserFullName","removeUserName","remove","setUserID","userid","setUserId","getUserID","getUserId","getIsPatient","setIsPatient","isPatient","removeUserID","removeUserId","lang","getLang","setDefaultSuperbillSubmissionMethod","methodId","getDefaultSuperbillSubmissionMethod","setKey","keyType","keyDictionary","activeKeys","split","includes","getKey","k","removeKey","setPatientDashboardWidgets","widget","getPatientDashboardWidgets","setPatientDashboardConfigurations","newList","removePatientDashboardWidgets","getPatientDashboardConfigurations","removePatientDashboardConfigurations","getDashboardTileSettings","setDashboardTileSettings","setDefaultDashboardTileSettings","getAppointmentsListSettings","setAppointmentsListSettings","setDefaultAppointmentsListSettings","getMessagesListSettings","setMessagesListSettings","setDefaultMessagesListSettings","getAppointmentsBadgeSettings","setAppointmentsBadgeSettings","setDefaultAppointmentsBadgeSettings","getDefaultServiceSiteId","setDefaultServiceSiteId","serviceSiteId","getDeviceId","setDeviceId","deviceId","getPhoneMessageGeneralNoteTypeId","setPhoneMessageGeneralNoteTypeId","getTaskMessageGeneralNoteTypeId","setTaskMessageGeneralNoteTypeId","getPharmacyGeneralNoteTypeId","setPharmacyGeneralNoteTypeId","getPortalMessageGeneralNoteTypeId","setPortalMessageGeneralNoteTypeId","getRxRefillMessageGeneralNoteTypeId","setRxRefillMessageGeneralNoteTypeId","getPharmacyRefillMessageGeneralNoteTypeId","setPharmacyRefillMessageGeneralNoteTypeId","getPatientVitalsDefaultSettingId","setPatientVitalsDefaultSettingId","getMedicationOverrideGeneralNoteTypeId","setMedicationOverrideGeneralNoteTypeId","getCurrentUserLicenses","setCurrentUserLicenses","licenses","getIsERxEnabled","setIsERxEnabled","enabled","getAllowImperialUnits","setAllowImperialUnits","allowed","getApplicationVersion","setApplicationVersion","version","getUserPermissions","setUserPermissions","getAskedUserForTouchID","setAskedUserForTouchID","prompt","getUserEnabledTouchID","setUserEnabledTouchID","getOncePerLoginChartConsent","setOncePerLoginChartConsent","clearKeysOfType","clearSessionStorage","clearOldVersionCache","setIsCacheUser","$q","LogOffServiceTs","logoff","when","apFilterFeature","AppointmentScheduleTypes","routes","view","edit","getTransition","apptScheduleType","calendarId","apptId","filteredRoutes","transition","opts","lowerScheduleType","property","appRoute","patientid","provider","appRoutes","findByStateName","stateName","find","getAppRoutes","state","findKeyByStateName","findKey","setupAppRoutes","newAppRoutes","$get","MessageTypes","getTransitionForMessage","messageTypeId","messageId","messageSubTypeId","createNew","merge","lowerMessageTypeId","lowerMessageSubTypeId","SystemGuid","supportedTabs","UIControl_Note_CC","UIControl_Note_CCHPI","UIControl_Note_Confidential","UIControl_Note_DX","UIControl_Note_DXDSM","UIControl_Note_GeneralNote","UIControl_Note_HPI","UIControl_Note_HX","UIControl_Note_PE","UIControl_Note_Plan","UIControl_Note_Results","UIControl_Note_ROS","UIControl_Note_ROSPE","UIControl_Note_RX","UIControl_Note_SO","UIControl_Note_SP","UIControl_Note_VisitText","UIControl_Note_Vitals","supportedSliders","isNoteTabsSupported","note","isNil","noteTabs","map","Tabs","isNoteSlidersSupported","noteSliders","Sliders","isNoteTypeSupported","$timeout","whenFirstSuccess","promises","deferred","defer","results","resolved","rejectionFlagValue","tryResolveToFirstSuccess","index","undefined","resolve","reject","then","time","timeoutPromise","catch","finally","cancel","delay","abortablePromise","isFunction","previousPromises","shouldRejectOnAbort","once","msg","abort","shouldAbort","replaceChainFnsWithAbortableFns","chainFnKey","wrappedFn","noop","chained","previousPromiseToAbort","abortDeferred","abortedError","assign","Schedule","FullNoteComposer","StrikeoutVisits","PermissionService","getPermissions","permissionName","getPermissionsJs","AprimaCache","groupStates","userPreference","allExpanded","allCollapsed","tileGroupName","storageType","disablePersistence","setupTile","tileId","defaultValue","forceDefault","tile","tiles","isCollapsed","groupState","persist","save","toggle","nextState","updateTiles","changeConfiguration","getName","setPersistence","enable","cache","getOrCreateOverride","storagePrefix","setStorageMode","put","newValue","val"],"mappings":"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","file":"aprima-legacy-common.min.js","sourcesContent":["angular.module('aprima-legacy-common', [\r\n    'ui.router',\r\n    'restangular',\r\n    'ngTouch',\r\n    'ngAnimate',\r\n    'ui.bootstrap',\r\n    'angularLocalStorage',\r\n    'gettext',\r\n    'lodash',\r\n    'toaster',\r\n    'rt.debounce',\r\n    'hmTouchEvents',\r\n\r\n    //aprima\r\n    'aprima-core',\r\n    'aprima-bridge',\r\n    'aprima-config'\r\n]);","angular.module('aprima-legacy-common').value('moment', window.moment);\r\n\r\n(function() {\r\n    'use strict';\r\n\r\n    var messageTypes = {\r\n        LabResultMessageGuid: '',\r\n        TaskMessageGuid: '10101010-0000-0000-0000-000000000005',\r\n        PortalAppointmentQuestionMessageGuid: 'fd4e2c5d-29c6-4a51-bd20-551d6ed90843',\r\n        PortalBillingQuestionMessageGuid: '73366ba8-0149-47e0-875b-cb12bb4cb250',\r\n        PortalDemographicsQuestionMessageGuid: 'dffb40d0-2318-41a9-8eef-94c58babb9b9',\r\n        PortalGeneralQuestionMessageGuid: '9af1089b-e98b-4758-80f8-0435b143426d',\r\n        PortalRxQuestionMessageGuid: 'e94b7146-407d-4f92-a393-de8429b7bfbf',\r\n        PhoneMessageGuid: '10101010-0000-0000-0000-000000000003',\r\n        LabMessageGuid: 'f05f9c71-a893-46c3-a7fe-37988f48a782',\r\n        AttachmentApprovalGuid: '10101010-0000-0000-0000-000000000002',\r\n        ServiceOrderApprovalMessageGuid: '10101010-0000-0000-0000-000000000008',\r\n\r\n        // These refill message types still need to be handled to keep compatibility with older versions of PRM\r\n        // where they are still commonly used.\r\n        // Also, there still could be messages of this type in the database even in newer versions of PRM that were created\r\n        // before the upgrade where this new message type below was introduced.\r\n        // We may want to handle these differently at some point\r\n        RxRefillRequestMessageGuid: '136d8762-82ec-487d-9448-f52469a3cdcd',\r\n        PatientRxRefillRequestMessageGuid: 'b1b7d286-1fb2-43d0-a883-7946b1cd8751',\r\n        PharmacyRefillRequestMessageGuid: 'd7716f70-61d6-4ec0-8ba6-01afc95e99f2',\r\n\r\n        // This is the new message type that was recently created.\r\n        // Description: Messages of this type are created by the user as part of the manual and electronic Rx Refill workflow.\r\n        // Also, currently the patient portal rx refill request messages are a subtype of this message type.\r\n        RxRefillAndErxRequestMessageGuid: 'eb31df6b-3685-4639-81f6-026f6278e1dc',\r\n    };\r\n\r\n    messageTypes.SupportedMessageTypesForCreate = {\r\n        Types: [{id: messageTypes.TaskMessageGuid}, {id: messageTypes.PhoneMessageGuid, requiredFeature: 'PhoneMessageCreation'}],\r\n        SubTypes: [{id: messageTypes.PortalGeneralQuestionMessageGuid}]\r\n    };\r\n\r\n    var appointmentScheduleTypes = {\r\n        PatientVisit: {\r\n            id: 'patientvisit',\r\n            name: 'Patient Visit'\r\n        },\r\n        Event: {\r\n            id: 'event',\r\n            name: 'Event',\r\n            requiredFeature: 'Appointments_DifferentScheduleTypes'\r\n        },\r\n        BlockingEvent: {\r\n            id: 'blockingevent',\r\n            name: 'Blocking Event',\r\n            requiredFeature: 'Appointments_DifferentScheduleTypes'\r\n        },\r\n        GroupVisit: {\r\n            id: 'groupvisit',\r\n            name: 'Group Visit',\r\n            requiredFeature: 'Appointments_DifferentScheduleTypes'\r\n        }\r\n    };\r\n    appointmentScheduleTypes.List = _.values(appointmentScheduleTypes);\r\n\r\n    var requestTypes = {\r\n        listData: 'listData',\r\n        default: 'default'\r\n    };\r\n\r\n    angular.module('aprima-legacy-common').constant('MessageTypes', messageTypes);\r\n    angular.module('aprima-legacy-common').constant('AppointmentScheduleTypes', appointmentScheduleTypes);\r\n    angular.module('aprima-legacy-common').constant('RequestTypes', requestTypes);\r\n})();","angular.module('aprima-legacy-common').run(['CustomModuleRunService', function(CustomModuleRunService) {\r\n    'use strict';\r\n    CustomModuleRunService.add(['$rootScope', 'ErrorService', 'RequestTypes', '$transitions', function ($rootScope, ErrorService, RequestTypes, $transitions) {\r\n\r\n    $rootScope.requestTypes = RequestTypes;\r\n\r\n    $rootScope.addHttpError = function (httpResponse, messages, type) {\r\n        var innerScope = this;\r\n\r\n        if(!httpResponse.isAborted) {\r\n            return ErrorService.addHttpErrorToScope(innerScope, httpResponse, messages, type);\r\n        }\r\n\r\n        return httpResponse;\r\n    };\r\n\r\n    $rootScope.removeHttpError = function (type) {\r\n        var innerScope = this;\r\n        return ErrorService.removeHttpErrorFromScope(innerScope, type);\r\n    };\r\n\r\n    $rootScope.setupDirectiveScope = function setupDirectiveScope($scope) {\r\n        $scope.addHttpError = $rootScope.addHttpError;\r\n        $scope.removeHttpError = $rootScope.removeHttpError;\r\n    };\r\n\r\n    $transitions.onSuccess({}, function removeHttpErrors() {\r\n        //http errors were being persisted between page views and caused valid pages to be rendered as if they had an http error\r\n        $rootScope.removeHttpError();\r\n    });\r\n\r\n}]);}]);\r\n","angular.module('aprima-legacy-common').run(['CustomModuleRunService', function(CustomModuleRunService) {\r\n    'use strict';\r\n    CustomModuleRunService.add(\r\n    ['$rootScope', 'TransitionManager', 'AprimaAnalytics', 'DeviceSettings', '_', 'toaster',\r\n        function ($rootScope, TransitionManager, AprimaAnalytics, DeviceSettings, _, toaster) {\r\n\r\n            $rootScope.goBack = function () {\r\n                TransitionManager.goBack();\r\n                AprimaAnalytics.sendEvent('user', 'click', 'back button');\r\n            };\r\n\r\n            $rootScope.isEmpty = function (obj) {\r\n                return _.isEmpty(obj);\r\n            };\r\n\r\n            $rootScope.isPhone = DeviceSettings.isPhoneOrOverride;\r\n            $rootScope.isTablet = DeviceSettings.isTabletOrOverride;\r\n            $rootScope.isBrowser = DeviceSettings.isBrowserOrOverride;\r\n\r\n            $rootScope.tryToastModelStateError = function tryToastModelStateError(response) {\r\n                var modelState = response.ModelState || (response.data && response.data.ModelState);\r\n\r\n                if(modelState && modelState.commandResult) {\r\n                    _(modelState.commandResult).forEach(function(e){\r\n                        toaster.pop('error', '', e);\r\n                    });\r\n                }\r\n            };\r\n        }]);\r\n}]);\r\n","angular.module('aprima-legacy-common').factory('aprgettext', ['gettextCatalog', function (gettextCatalog) {\r\n    'use strict';\r\n\r\n    //This is a hack. gettext can extract strings from js files much like it can from html files.\r\n    //To do this it searches for code that looks like \"gettext('....')\" and extracts the string.\r\n    //gettext() however simple returns the string, and doesn't actually translate the string.\r\n    //To do this, you have to pass that string to gettextCatalog.getString(), but that prevents\r\n    //it from being extracted by the grunt task. The official usage is:\r\n    //var translated = gettextCatalog.getString(gettext('Some String'));\r\n    //but this usage is overly verbose.\r\n    //This hack makes it so that you can use it like:\r\n    //var translated = gettext('Some String');\r\n\r\n    //When taking a dependency on this, make sure the variable is named 'gettext' and not 'apr_gettext'\r\n\r\n    //usage of this should be limited. Most code should be in views. This is useful when calling window.alert\r\n    //or toaster.pop();\r\n    //todo we should review this and see if anybody has a better solution.\r\n    return function (text) {\r\n        return gettextCatalog.getString(text);\r\n    };\r\n}]);\r\n","angular.module('aprima-legacy-common').run(['CustomModuleRunService', function(CustomModuleRunService) {\r\n    'use strict';\r\n    CustomModuleRunService.add(['$transitions', '$uibModalStack', function ($transitions, $uibModalStack) {\r\n\r\n        $transitions.onSuccess({}, function dismissAllModals() {\r\n            $uibModalStack.dismissAll('pageTransition');\r\n        });\r\n    }]);\r\n}]);\r\n\r\n","(function(angular) {\r\n    'use strict';\r\n\r\n    angular.module('aprima-legacy-common').run(['CustomModuleRunService', customRun]);\r\n\r\n    function customRun(CustomModuleRunService) {\r\n        CustomModuleRunService.add([\r\n            'moment',\r\n            momentSetup,\r\n        ]);\r\n    }\r\n\r\n    function momentSetup(\r\n        moment\r\n    ) {\r\n        moment.fn.removeOffset = function removeOffset() {\r\n            return this.add(this.utcOffset(), 'minutes').utc();\r\n        };\r\n\r\n        // the previous logic was this:\r\n        // moment(date).add(-moment(date).zone(), 'minutes').toDate().toJSON();\r\n        // OR\r\n        // moment(date).add(moment(date).utcOffset(), 'minutes').toDate().toJSON();\r\n        moment.fn.formatRemoveOffset = function formatRemoveOffset() {\r\n            return this.removeOffset().format();\r\n        };\r\n\r\n\r\n        moment.fn.startOfDate = function() {\r\n            return this.startOf('day').toDate();\r\n        };\r\n    }\r\n\r\n})(window.angular);\r\n","// Adds abortable and aborts functions to all Restangularized Elements globally\r\n// usage examples:\r\n// Restangular.one('route1').abortable().get() => returns AbortablePromise\r\n// Restangular.all('route3').abortable().put() => returns AbortablePromise\r\n// AprimaRestangular.get().one('route2').abortable(abortablePromise1).get() => aborts abortablePromise1, returns AbortablePromise\r\n// Restangular.all('route4').abortable(abortablePromiseList).put() => aborts all promises in abortablePromiseList, returns AbortablePromise\r\n// etc. you get the picture\r\nangular.module('aprima-legacy-common').run(['CustomModuleRunService', function(CustomModuleRunService) {\r\n    'use strict';\r\n    CustomModuleRunService.add(\r\n    ['Restangular', '_', 'HttpAbortableContext', '$qHelpers', function(Restangular, _, HttpAbortableContext, $qHelpers) {\r\n\r\n    var abortableFn = 'abortable';\r\n    var abortsFn = 'aborts';\r\n    var abortableFields = {};\r\n    abortableFields[abortableFn] = abortableFn;\r\n    abortableFields[abortsFn] = abortsFn;\r\n    //add these as RestangularFields, so that way they will stripped out correctly when calling .plain()\r\n    Restangular.setRestangularFields(abortableFields);\r\n    Restangular.setOnElemRestangularized(makeElementRequestAbortable);\r\n\r\n    function makeElementRequestAbortable(element, isCollection, route, restangularObject) {\r\n        if(element && restangularObject.configuration.isRestangularized(element)) {\r\n            // aborts passed in promises after sending out request\r\n            element[abortsFn] = function(promisesToAbort) {\r\n                wrapCallsToRestangularizedElement(this, function(promise) {\r\n                    $qHelpers.abortPromises(promisesToAbort);\r\n                    return promise;\r\n                });\r\n                return this;\r\n            };\r\n\r\n            // aborts passed in promises after sending out request, and returns an abortable promise\r\n            element[abortableFn] = function(promisesToAbort) {\r\n                var abortableContext = new HttpAbortableContext(promisesToAbort);\r\n                var httpConfig = restangularObject.configuration.restangularFields.httpConfig;\r\n        \r\n                // withHttpConfig needs to be called before this, so it doesn't get overwritten\r\n                this[httpConfig] = _.defaults(this[httpConfig], {timeout: abortableContext.abortPromise});\r\n                wrapCallsToRestangularizedElement(this, abortableContext.wrap);\r\n                return this;\r\n            };\r\n        }\r\n        return element;\r\n    }\r\n    \r\n    // ideally would use setRestangularizePromiseInterceptor instead of this but it doesn't expect a return value,\r\n    // it only allows you to mutate the promise, not wrap it and return a new one like we are doing here\r\n    function wrapCallsToRestangularizedElement(restangularizedElement, promiseInterceptor) {\r\n        _(restangularizedElement)\r\n            .functions()\r\n            .forEach(function(key) {\r\n                var elementFn = restangularizedElement[key];\r\n                var wrappedKey = '_' + key;\r\n                restangularizedElement[wrappedKey] = restangularizedElement[wrappedKey] || elementFn;\r\n\r\n                restangularizedElement[key] = function() {\r\n                    var result = elementFn.apply(this, arguments);\r\n\r\n                    if ($qHelpers.isPromise(result)) {\r\n                        result = promiseInterceptor(result);\r\n                    }\r\n\r\n                    return result;\r\n                };\r\n            });\r\n\r\n        return restangularizedElement;\r\n    }\r\n    }]);\r\n}]);\r\n","angular.module('aprima-legacy-common').config(['$provide', function($provide) {\r\n    'use strict';\r\n    $provide.decorator('$exceptionHandler', ['$delegate', '$injector', function($delegate, $injector) {\r\n        var ApErrorHandler;\r\n        var AprimaAnalytics;\r\n\r\n        return function customExceptionHandler(exception, cause) {\r\n            var message = exception.message + ' (caused by \"' + cause + '\")';\r\n            try {\r\n                ApErrorHandler = ApErrorHandler || $injector.get('ApErrorHandler');\r\n                if (ApErrorHandler) {\r\n                    ApErrorHandler.handleError(exception);\r\n                    return;\r\n                }\r\n\r\n                AprimaAnalytics = AprimaAnalytics || $injector.get('AprimaAnalytics');\r\n                AprimaAnalytics.sendException(message);\r\n            }\r\n            catch(ex) { }\r\n            $delegate(exception, cause);\r\n        };\r\n    }]);\r\n}]);\r\n","angular.module('aprima-legacy-common').filter('apPatientThumbnailSrc', [function () {\r\n    'use strict';\r\n    return function (patientId, height, width) {\r\n        if(!patientId) {\r\n            // if the patientId is null or undefined, return undefined because a valid url can't be formed\r\n            // and undefined can be handled accordingly\r\n            return;\r\n        }\r\n\r\n        if(height && !width) {\r\n            width = height;\r\n        }\r\n\r\n        var url = 'patients/' + patientId + '/thumbnail';\r\n\r\n        if(height) {\r\n            url += '?height=' + height + '&width=' + width;\r\n        }\r\n\r\n        return url;\r\n    };\r\n}]);\r\n","(function() {\r\n    'use strict';\r\n    angular.module('aprima-legacy-common').filter('apPersonThumbnailSrc', [\r\n        'ServerInfoRepository',\r\n        apPersonThumbnailSrc\r\n    ]);\r\n\r\n    function apPersonThumbnailSrc(\r\n        ServerInfoRepository\r\n    ) {\r\n        return function (personId, height, width) {\r\n            if (!personId || !ServerInfoRepository.isFeatureSupported([ 'PersonPhoto' ])) {\r\n                // return undefined because a valid url can't be formed\r\n                // and undefined can be handled accordingly\r\n                return;\r\n            }\r\n\r\n            if (height && !width) {\r\n                width = height;\r\n            }\r\n\r\n            var url = 'persons/' + personId + '/thumbnail';\r\n\r\n            if (height) {\r\n                url += '?height=' + height + '&width=' + width;\r\n            }\r\n\r\n            return url;\r\n        };\r\n    }\r\n})();\r\n","angular.module('aprima-legacy-common').factory('AprimaRestangular',\r\n    [\r\n        '$log',\r\n        '_',\r\n        'Bridge',\r\n        'BrowserService',\r\n        'configuration',\r\n        'debugLogService',\r\n        'LocalStorageRepository',\r\n        'Restangular',\r\n        'LogOffService',\r\n        function(\r\n            $log,\r\n            _,\r\n            Bridge,\r\n            BrowserService,\r\n            configuration,\r\n            debugLogService,\r\n            LocalStorageRepository,\r\n            Restangular,\r\n            LogOffService\r\n        ) {\r\n\r\n            'use strict';\r\n\r\n            var alwaysIgnoreCache = false;\r\n            var debugModeValue = LocalStorageRepository.getSupportedFeatures();\r\n\r\n            //to ignore the cache, you can call this like .get({ignoreCache: true}); or .get('baseurl', {ignoreCache: true});\r\n            var get = function(endpointBase, options) {\r\n                if (!_.isString(endpointBase) && !options) {\r\n                    options = endpointBase;\r\n                    endpointBase = null;\r\n                }\r\n\r\n                options = _.defaults(options || {}, {\r\n                    ignoreCache: BrowserService.isLegacyIE(),\r\n                    debugMode: false\r\n                });\r\n\r\n                var restangular = Restangular.withConfig(function(RestangularConfigurer) {\r\n\r\n                    var clientUrl = LocalStorageRepository.getClientURL();\r\n                    if (!clientUrl) {\r\n                        throw new Error('Cannot send request (configuration error): empty ClientURL');\r\n                    }\r\n\r\n                    var urlComponents = [\r\n                        clientUrl.replace(/\\/$/, ''),\r\n                        'api',\r\n                        endpointBase ? endpointBase : '',\r\n                        configuration.SERVER_API_VERSION\r\n                    ];\r\n\r\n                    var baseUrl = _.filter(urlComponents, function(c) {\r\n                        return !_.isNull(c) && !_.isEmpty(c);\r\n                    }).join('/');\r\n\r\n                    RestangularConfigurer.setBaseUrl(baseUrl);\r\n\r\n                    var headers = {\r\n                        'Auth-Token': LocalStorageRepository.getJsonWebToken(),\r\n                        'ApiKey': configuration.API_KEY\r\n                    };\r\n\r\n                    if (options.ignoreCache) {\r\n                        Bridge.fireEvent('clear-cache', {});\r\n\r\n                        headers['Cache-Control'] = 'no-cache, no-store, must-revalidate';\r\n                        headers.Pragma = 'no-cache';\r\n                        headers.Expires = new Date();\r\n                    }\r\n\r\n                    RestangularConfigurer.setDefaultHeaders(headers);\r\n\r\n                    var isFeatureSupported = function(features) {\r\n\r\n                        if (!angular.isArray(features)) {\r\n                            features = [features];\r\n                        }\r\n\r\n                        var supportedFeatures = debugModeValue;\r\n\r\n                        var matchedValues = _.intersection(features, supportedFeatures);\r\n\r\n                        return matchedValues.length === features.length;\r\n                    };\r\n\r\n                    var debugModeFeature = isFeatureSupported('DebuggerFeature');\r\n\r\n                    if (debugModeFeature) {\r\n\r\n                        RestangularConfigurer.addFullRequestInterceptor(function(element, operation, what, url, _5, parameters) {\r\n                            if (alwaysIgnoreCache && operation.toLowerCase() === 'get', 'put', 'post', 'delete') {\r\n                                if (debugLogService.getDebugMode()) {\r\n                                    return {\r\n                                        params: _.assignIn(parameters, {\r\n                                            t: new Date().toJSON(),\r\n                                            debug: true,    //passing debug parameters\r\n                                            levels: 'info,debug,fatal,warn,error'\r\n                                        })\r\n\r\n                                    };\r\n                                }\r\n                            }\r\n                            return element;\r\n                        });\r\n\r\n                        //displaying information from the response headers if debugMode is true and status=200\r\n                        RestangularConfigurer.addResponseInterceptor(function(data, operation, what, url, response/* ,deferred*/) {\r\n                            if (operation === 'get', 'post', 'put', 'delete') {\r\n                                if (debugLogService.getDebugMode()) {\r\n                                    $log.log('URL:', url);\r\n                                    $log.log('WHAT:', what);\r\n                                    $log.log('THE HEADERS ARE:', JSON.stringify(response.headers(), null, 2));\r\n\r\n                                }\r\n                            }\r\n                            return data;\r\n                        });\r\n                    }\r\n\r\n                    else {\r\n                        RestangularConfigurer.addFullRequestInterceptor(function(element, operation, what, url, _5, parameters) {\r\n                            if (alwaysIgnoreCache && operation.toLowerCase() === 'get') {\r\n                                return {\r\n                                    params: _.assignIn(parameters, {\r\n                                        t: new Date().toJSON(),\r\n\r\n                                    })\r\n                                };\r\n                            }\r\n\r\n                            return element;\r\n                        });\r\n                    }\r\n\r\n                    RestangularConfigurer.setErrorInterceptor(function(response) {\r\n                        if (response.status === 401) {\r\n                            LogOffService.logoffFromUnauthorizedResponse();\r\n                        }\r\n\r\n                        //displaying the exception information if debugMode is true and status!=200\r\n                        else if (debugModeFeature && response.status !== 200) {\r\n                            if (debugLogService.getDebugMode()) {\r\n                                $log.log('THE EXCEPTION INFORMATION:', JSON.stringify(response.headers(), null, 2));\r\n\r\n                            }\r\n                        }\r\n\r\n                        if (response.data && response.data.ModelState) {\r\n                            var errorCode = response.data.ModelState['commandResult-ErrorCode'];\r\n\r\n                            //errorCode is a string coming from the server. a value of '0' is not falsy.\r\n                            if (errorCode) {\r\n                                response.errorCode = parseInt(errorCode);\r\n                            }\r\n                        }\r\n\r\n                        //allows promises to receive these errors\r\n                        return true;\r\n                    });\r\n                });\r\n\r\n                return restangular;\r\n            };\r\n\r\n            function getUrl(endpointBase, parent){\r\n                var urlComponents = [\r\n                    LocalStorageRepository.getClientURL(),\r\n                    'api',\r\n                    endpointBase ? endpointBase : '',\r\n                    configuration.SERVER_API_VERSION,\r\n                    parent\r\n                ];\r\n\r\n                var baseUrl = _.filter(urlComponents, function(c){\r\n                    return !_.isNull(c) && !_.isEmpty(c);\r\n                }).join('/');\r\n\r\n\r\n                var headers = {\r\n                    'Auth-Token': LocalStorageRepository.getJsonWebToken(),\r\n                    'ApiKey': configuration.API_KEY\r\n                };\r\n\r\n                return [baseUrl, headers];\r\n\t\t\t}\r\n\r\n            return {\r\n                get: get,\r\n\t\t\t\tgetUrl: getUrl,\r\n                disableCaching: function () {\r\n                    alwaysIgnoreCache = true;\r\n                }\r\n            };\r\n        }]);\r\n\r\n","(function(angular) {\r\n    'use strict';\r\n\r\n    angular.module('aprima-legacy-common').factory('AuthorizationService', [\r\n        'CurrentUser',\r\n        'ServerInfoRepository',\r\n        AuthorizationService\r\n    ]);\r\n\r\n    function AuthorizationService(\r\n        CurrentUser,\r\n        ServerInfoRepository\r\n    ) {\r\n\r\n        return {\r\n            isUserProvider : isUserProvider,\r\n            icd10User: isIcd10User,\r\n        };\r\n\r\n        function isUserProvider() {\r\n            if(ServerInfoRepository.isFeatureSupported('ProviderAuthorization')){\r\n                var user = CurrentUser.get();\r\n\r\n                // Right now apAuthorization uses this in apPatientContextMenu to determine whether or not to allow the user to add a charge capture.\r\n                // In PRM, the permissions aren't filled in, so we can't determine right now whether they are a provider currently with CurrentUser service.\r\n                // At least this won't null ref now though:\r\n                // This will handle legacy case where it has the string value 'True', or\r\n                // the newer case where it is actually bool true\r\n                return user.permissions && (user.permissions.IsProvider === 'True' || user.permissions.IsProvider === true);\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        function isIcd10User() {\r\n            var user = CurrentUser.get();\r\n            // This will handle legacy case where it has the string value 'True', or\r\n            // the newer case where it is actually bool true\r\n            return user.permissions && (user.permissions.ICD10User === 'True' || user.permissions.ICD10User === true);\r\n        }\r\n    }\r\n\r\n})(window.angular);\r\n","angular.module('aprima-legacy-common').factory('debugLogService',[function( ){\r\n'use strict';\r\nvar debugMode = false;\r\nreturn {\r\n               disableDebugMode : function () {\r\n                    debugMode = false;  \r\n                },\r\n                enableDebugMode : function(){\r\n                    debugMode = true;\r\n                },\r\n                getDebugMode : function() {\r\n                    return debugMode;\r\n                 }\r\n                 \r\n\r\n};\r\n        }]);","(function(angular) {\r\n    'use strict';\r\n\r\n    angular.module('aprima-legacy-common').factory('ErrorService', [\r\n        '_',\r\n        'aprgettext',\r\n        'RequestTypes',\r\n        'toaster',\r\n        ErrorService,\r\n    ]);\r\n\r\n    function ErrorService(\r\n        _,\r\n        gettext,\r\n        RequestTypes,\r\n        toaster\r\n    ) {\r\n\r\n        return {\r\n            convertToErrorMessages: convertToErrorMessages,\r\n            displayErrorMessages: displayErrorMessages,\r\n            addHttpErrorToScope: addHttpErrorToScope,\r\n            removeHttpErrorFromScope: removeHttpErrorFromScope,\r\n        };\r\n\r\n        // This can't be moved to Angular because it's relying on translations being returned synchronously.\r\n        function convertToErrorMessages(error) {\r\n            var errors = [];\r\n\r\n            if (!error) {\r\n                errors.push(getGenericError());\r\n                return errors;\r\n            }\r\n\r\n            if(_.isString(error)) {\r\n                errors.push(error);\r\n                return errors;\r\n            }\r\n\r\n            var modelState = (error.data && error.data.ModelState) || error.ModelState;\r\n            if (modelState) {\r\n                _(modelState)\r\n                    .flatMap(function(value) {\r\n                        return value || [];\r\n                    })\r\n                    .forEach(function (err) {\r\n                        errors.push(gettext(err));\r\n                    });\r\n\r\n                if (errors.length) {\r\n                    return errors;\r\n                }\r\n            }\r\n\r\n            var validationResult = (error.data && error.data.ValidationResult) || error.ValidationResult;\r\n            if (validationResult && !validationResult.IsValid) {\r\n                _(validationResult.Errors)\r\n                    .forEach(function (err) {\r\n                        errors.push(gettext(err.ErrorMessage));\r\n                    });\r\n\r\n                if (errors.length) {\r\n                    return errors;\r\n                }\r\n            }\r\n\r\n            if (error.status && error.statusText) {\r\n                errors.push(gettext('An error has occurred. Status: ' + error.status + ': ' + error.statusText));\r\n            }\r\n            else {\r\n                var genericError = getGenericError();\r\n                if(error.Message) {\r\n                    genericError += ' ' + error.Message;\r\n                }\r\n                errors.push(genericError);\r\n            }\r\n            return errors;\r\n        }\r\n\r\n        function displayErrorMessages(error, asHtml) {\r\n            var errors = _.isArray(error) ? error : convertToErrorMessages(error);\r\n\r\n            errors.forEach(function (err) {\r\n                toaster.pop({\r\n                    type: 'error',\r\n                    title: '',\r\n                    body: err,\r\n                    bodyOutputType: asHtml ? 'trustedHtml' : '',\r\n                });\r\n            });\r\n\r\n            return errors;\r\n        }\r\n\r\n        function getGenericError() {\r\n            return gettext('An error has occurred and the process cannot be completed.');\r\n        }\r\n\r\n        function addHttpErrorToScope(scope, httpResponse, messages, type) {\r\n            var error = { type: type || RequestTypes.default };\r\n            var key = 'is' + httpResponse.status;\r\n            error[key] = true;\r\n            error.reason = messages && messages[key];\r\n\r\n            if (httpResponse.status === 403) {\r\n                error.responseMessage = httpResponse.headers()['reason-phrase'];\r\n            }\r\n            else {\r\n                error.unhandled = true;\r\n            }\r\n\r\n            error.reason = error.reason || error.responseMessage;\r\n\r\n            scope.httpError = error;\r\n\r\n            return error;\r\n        }\r\n\r\n        function removeHttpErrorFromScope(scope, type) {\r\n            //only remove it if on this specific scope. This avoids nulling in higher level scopes\r\n            //only remove matching types of httpError's\r\n            if (scope.hasOwnProperty('httpError') && scope.httpError && ((!type && scope.httpError.type === RequestTypes.default) || scope.httpError.type === type)) {\r\n                scope.httpError = null;\r\n            }\r\n        }\r\n    }\r\n\r\n})(window.angular);\r\n","angular.module('aprima-legacy-common').factory(\r\n    'LanguageFactoryJs', ['gettextCatalog', function LanguageFactory(gettextCatalog) {\r\n\r\n        'use strict';\r\n\r\n        function setLang(language) {\r\n            gettextCatalog.currentLanguage = language;\r\n        }\r\n\r\n        return {\r\n            setLang: setLang,\r\n        };\r\n    }]);\r\n","angular.module('aprima-legacy-common').\r\n    factory('ListNavigationService', ['$log', '$filter', 'Bridge',\r\n        function ($log, $filter, Bridge) {\r\n            'use strict';\r\n\r\n            var cachedEnumerators = [];\r\n            var activeItems = [];\r\n\r\n            var registerActiveItemForList = function (listType, itemId, settings, $scope) {\r\n                var enumerator = this.getEnumerator(listType);\r\n\r\n                if(enumerator){\r\n                    enumerator.setActiveItemById(itemId);\r\n                    this.hydrateListNavigationProperties(listType, settings);\r\n                    this.setAsBridgeHandler(listType, $scope);\r\n                }\r\n\r\n                activeItems[listType] = itemId;\r\n            };\r\n\r\n            var deregisterActiveItemForList = function (listType, itemId) {\r\n                if (activeItems[listType] && activeItems[listType] === itemId) {\r\n                    activeItems[listType] = null;\r\n                }\r\n            };\r\n\r\n            //orderPredicate can be prefixed with a '+' or '-' to change the direction of the sort. '+' is ascending and the default.\r\n            //'-' is descending\r\n            var buildAndCacheEnumerator = function (enumeratorName, list, orderPredicate, transitionFunction) {\r\n                var filter = $filter('orderBy');\r\n\r\n                var enumerator = this.buildEnumerator(filter(list, orderPredicate), transitionFunction);\r\n\r\n                cachedEnumerators[enumeratorName] = enumerator;\r\n\r\n                if (activeItems[enumeratorName]) {\r\n                    enumerator.setActiveItemById(activeItems[enumeratorName]);\r\n                }\r\n\r\n                return enumerator;\r\n            };\r\n\r\n            var setActiveItemByIdForEnumerator = function (enumeratorName, id) {\r\n                var enumerator = cachedEnumerators[enumeratorName];\r\n                if (enumerator) {\r\n                    enumerator.setActiveItemById(id);\r\n                }\r\n            };\r\n\r\n            var getEnumerator = function (enumeratorName) {\r\n                return cachedEnumerators[enumeratorName];\r\n            };\r\n\r\n            var hydrateListNavigationProperties = function (enumeratorName, settings) {\r\n                var enumerator = cachedEnumerators[enumeratorName];\r\n\r\n                if (enumerator) {\r\n                    angular.forEach(settings.phone.modes, function (value) {\r\n                        angular.forEach(value.headers, function (headerValue) {\r\n                            if (headerValue.requiresNavSettings) {\r\n                                headerValue.listNavigationProperties = enumerator.getNavStatus();\r\n                            }\r\n                        });\r\n                    });\r\n\r\n                    angular.forEach(settings.tablet.modes, function (value) {\r\n                        angular.forEach(value.headers, function (headerValue) {\r\n                            if (headerValue.requiresNavSettings) {\r\n                                headerValue.listNavigationProperties = enumerator.getNavStatus();\r\n                            }\r\n                        });\r\n                    });\r\n                }\r\n            };\r\n\r\n            var setAsBridgeHandler = function (enumeratorName, $scope) {\r\n                var enumerator = cachedEnumerators[enumeratorName];\r\n\r\n                if (enumerator) {\r\n                    Bridge.on('navigate-item', $scope, function (data) {\r\n                        switch (data.navigationType) {\r\n                            case 'next':\r\n                                enumerator.moveToNextItem();\r\n                                break;\r\n                            case 'previous':\r\n                                enumerator.moveToPreviousItem();\r\n                                break;\r\n                            default:\r\n                                break;\r\n                        }\r\n                    });\r\n                }\r\n            };\r\n\r\n            var buildEnumerator = function (list, callbackFunction) {\r\n                $log.info('enumerator built');\r\n\r\n                var currentIndex = -1;\r\n\r\n                var transitionFunction = function (item) {\r\n                    currentIndex = list.indexOf(item);\r\n\r\n                    if (callbackFunction) {\r\n                        callbackFunction(item);\r\n                    }\r\n                };\r\n\r\n                var next = function () {\r\n                    var lookupIndex;\r\n\r\n                    if (currentIndex !== -1) {\r\n                        if (currentIndex === (list.length - 1)) {\r\n                            return null;\r\n                        }\r\n                        else {\r\n                            lookupIndex = currentIndex + 1;\r\n                        }\r\n                    }\r\n                    else {\r\n                        if (list.length === 0) {\r\n                            return null;\r\n                        }\r\n                        lookupIndex = 0;\r\n                    }\r\n\r\n                    return list[lookupIndex];\r\n                };\r\n\r\n                var previous = function () {\r\n                    var lookupIndex;\r\n\r\n                    if (currentIndex !== -1) {\r\n                        if (currentIndex === 0) {\r\n                            return null;\r\n                        }\r\n                        else {\r\n                            lookupIndex = currentIndex - 1;\r\n                        }\r\n                    }\r\n                    else {\r\n                        if (list.length === 0) {\r\n                            return null;\r\n                        }\r\n\r\n                        lookupIndex = list.length - 1;\r\n                    }\r\n\r\n                    return list[lookupIndex];\r\n                };\r\n\r\n                var first = function () {\r\n                    if (list.length === 0) {\r\n                        return null;\r\n                    }\r\n\r\n                    return list[0];\r\n                };\r\n\r\n                var last = function () {\r\n                    if (list.length === 0) {\r\n                        return null;\r\n                    }\r\n\r\n                    return list[list.length - 1];\r\n                };\r\n\r\n                var moveToNextItem = function () {\r\n                    var next = this.next();\r\n\r\n                    if (next) {\r\n                        transitionFunction(next);\r\n                    }\r\n                };\r\n\r\n                var moveToPreviousItem = function () {\r\n                    var previous = this.previous();\r\n\r\n                    if (previous) {\r\n                        transitionFunction(previous);\r\n                    }\r\n                };\r\n\r\n                var moveToFirstItem = function () {\r\n                    transitionFunction(this.first());\r\n                };\r\n\r\n                var moveToLastItem = function () {\r\n                    transitionFunction(this.last());\r\n                };\r\n\r\n                var moveToItem = function (item) {\r\n                    var indexOf = list.indexOf(item);\r\n\r\n                    if (indexOf >= 0) {\r\n                        currentIndex = indexOf;\r\n                        transitionFunction(item);\r\n                    }\r\n                    else {\r\n                        throw new Exception('Cannot move to item as it does not exist in the list.');\r\n                    }\r\n                };\r\n\r\n                var setActiveItemById = function (id) {\r\n                    for (var i = 0; i <= list.length - 1; i++) {\r\n                        if (list[i].Id === id) {\r\n                            currentIndex = i;\r\n                            break;\r\n                        }\r\n                    }\r\n                };\r\n\r\n                var canGoNext = function () {\r\n                    return (currentIndex !== -1) && (currentIndex !== (list.length - 1));\r\n                };\r\n\r\n                var canGoPrevious = function () {\r\n                    return (currentIndex !== -1) && (currentIndex !== 0);\r\n                };\r\n\r\n                var getNavStatus = function () {\r\n                    return {\r\n                        canGoForward: this.canGoNext(),\r\n                        canGoBack: this.canGoPrevious()\r\n                    };\r\n                };\r\n\r\n                var currentItem = function () {\r\n                    if (currentIndex !== -1) {\r\n                        return list[currentIndex];\r\n                    }\r\n                    else {\r\n                        return null;\r\n                    }\r\n                };\r\n\r\n                var toArray = function() {\r\n                    var oldIndex = currentIndex;\r\n                    var arr = [];\r\n                    currentIndex = 0;\r\n\r\n                    if(currentItem()) {\r\n                        arr.push(currentItem());\r\n                    }\r\n\r\n                    while(canGoNext()){\r\n                        arr.push(next());\r\n                        currentIndex++;\r\n                    }\r\n\r\n                    currentIndex = oldIndex;\r\n                    return arr;\r\n                };\r\n\r\n                return {\r\n                    next: next,\r\n                    previous: previous,\r\n                    first: first,\r\n                    last: last,\r\n                    moveToNextItem: moveToNextItem,\r\n                    moveToPreviousItem: moveToPreviousItem,\r\n                    moveToFirstItem: moveToFirstItem,\r\n                    moveToLastItem: moveToLastItem,\r\n                    moveToItem: moveToItem,\r\n                    canGoNext: canGoNext,\r\n                    canGoPrevious: canGoPrevious,\r\n                    getNavStatus: getNavStatus,\r\n                    setActiveItemById: setActiveItemById,\r\n                    currentItem: currentItem,\r\n                    toArray: toArray\r\n                };\r\n            };\r\n\r\n            return {\r\n                buildAndCacheEnumerator: buildAndCacheEnumerator,\r\n                getEnumerator: getEnumerator,\r\n                buildEnumerator: buildEnumerator,\r\n                hydrateListNavigationProperties: hydrateListNavigationProperties,\r\n                setAsBridgeHandler: setAsBridgeHandler,\r\n                registerActiveItemForList: registerActiveItemForList,\r\n                deregisterActiveItemForList: deregisterActiveItemForList,\r\n                setActiveItemByIdForEnumerator: setActiveItemByIdForEnumerator\r\n            };\r\n        }]);","angular.module('aprima-legacy-common').factory('LocalStorageRepository',\r\n    ['storage', '_', 'WebCommonStorageRepository',\r\n        function (storage, _, WebCommonStorageRepository) {\r\n            'use strict';\r\n\r\n            return {\r\n\r\n                clearAll: function () {\r\n                    WebCommonStorageRepository.clearAll();\r\n                },\r\n\r\n                getIsActiveDirectoryUser: function() {\r\n                    return WebCommonStorageRepository.getIsActiveDirectoryUser();\r\n                },\r\n                \r\n                setIsActiveDirectoryUser: function(value) {\r\n                    WebCommonStorageRepository.setIsActiveDirectoryUser(value);\r\n                },\r\n\r\n                getClientID: function () {\r\n                    return WebCommonStorageRepository.getClientId();\r\n                },\r\n\r\n                setClientID: function (value) {\r\n                    WebCommonStorageRepository.setClientId(value);\r\n                },\r\n\r\n                getNotificationTimeout: function () {\r\n                    return storage.get('notificationTimeout');\r\n                },\r\n\r\n                setNotificationTimeout: function (value) {\r\n                    storage.set('notificationTimeout', value);\r\n                },\r\n\r\n                setIdentityHint: function (value) {\r\n                    storage.set('identityHint', value);\r\n                },\r\n                \r\n                getIdentityHint: function () {\r\n                    return storage.get('identityHint');\r\n                },\r\n\r\n                getClientURL: function () {\r\n                    return WebCommonStorageRepository.getClientUrl();\r\n                },\r\n\r\n                setClientURL: function (value) {\r\n                    WebCommonStorageRepository.setClientUrl(value);\r\n                },\r\n\r\n                getGatewayUrl: function () {\r\n                    return WebCommonStorageRepository.getGatewayUrl();\r\n                },\r\n\r\n                setGatewayUrl: function (value) {\r\n                    WebCommonStorageRepository.setGatewayUrl(value);\r\n                },\r\n\r\n                setJsonWebToken: function (jwt) {\r\n                    WebCommonStorageRepository.setJsonWebToken(jwt);\r\n                },\r\n                getJsonWebToken: function () {\r\n                    return WebCommonStorageRepository.getJsonWebToken();\r\n                },\r\n\r\n                removeJsonWebToken: function () {\r\n                    WebCommonStorageRepository.removeJsonWebToken();\r\n                },\r\n\r\n                setUserName: function (username) {\r\n                    WebCommonStorageRepository.setUserName(username);\r\n                },\r\n                getUserName: function () {\r\n                    return WebCommonStorageRepository.getUserName();\r\n                },\r\n\r\n                setBirthDate: function (birthDate) {\r\n                    storage.set('birthDate', birthDate);\r\n                },\r\n\r\n                getBirthDate: function () {\r\n                    return storage.get('birthDate');\r\n                },\r\n\r\n                setAccessCode: function (statementId) {\r\n                    storage.set('accessCode', statementId);\r\n                },\r\n\r\n                getAccessCode: function () {\r\n                    return storage.get('accessCode');\r\n                },\r\n\r\n                setUserFullName: function (name) {\r\n                    WebCommonStorageRepository.setUserFullName(name);\r\n                },\r\n\r\n                getUserFullName: function () {\r\n                    return WebCommonStorageRepository.getUserFullName();\r\n                },\r\n\r\n                removeUserName: function () {\r\n                    storage.remove('userName');\r\n                },\r\n\r\n                setUserID: function (userid) {\r\n                    WebCommonStorageRepository.setUserId(userid);\r\n                },\r\n\r\n                getUserID: function () {\r\n                    return WebCommonStorageRepository.getUserId();\r\n                },\r\n\r\n                getIsPatient: function () {\r\n                    return storage.get('isPatient');\r\n                },\r\n\r\n                setIsPatient: function (isPatient) {\r\n                    storage.set('isPatient', isPatient);\r\n                },\r\n\r\n                getSupportedFeatures: function () {\r\n                    return storage.get('apiSupportedFeatures');\r\n                },\r\n                removeUserID: function () {\r\n                    WebCommonStorageRepository.removeUserId();\r\n                },\r\n\r\n                setLang: function (lang) {\r\n                    WebCommonStorageRepository.setLang(lang);\r\n                },\r\n\r\n                getLang: function () {\r\n                    return WebCommonStorageRepository.getLang();\r\n                },\r\n\r\n                setDefaultSuperbillSubmissionMethod: function (methodId) {\r\n                    WebCommonStorageRepository.setDefaultSuperbillSubmissionMethod(methodId);\r\n                },\r\n\r\n                getDefaultSuperbillSubmissionMethod: function() {\r\n                    return WebCommonStorageRepository.getDefaultSuperbillSubmissionMethod();\r\n                },\r\n\r\n                setKey: function (key, value, keyType) {\r\n                    storage.set(key, value);\r\n\r\n                    if(keyType){\r\n                        var activeKeys = storage.get(keyType + 'keys');\r\n                        var keyDictionary;\r\n\r\n                        if(activeKeys){\r\n                            keyDictionary = activeKeys.split(',');\r\n                        }\r\n                        else{\r\n                            keyDictionary = [];\r\n                        }\r\n\r\n                        if(!_.includes(keyDictionary, key)){\r\n                            keyDictionary.push(key);\r\n                            storage.set(keyType + 'keys', keyDictionary.join(','));\r\n                        }\r\n                    }\r\n                },\r\n\r\n                getKey: function (key, keyType) {\r\n                    var k = storage.get(key);\r\n\r\n                    // This can be removed after 1 release with it in there.  It just needs to be there to build up the initial list.\r\n                    if(keyType){\r\n                        var activeKeys = storage.get(keyType + 'keys');\r\n                        var keyDictionary;\r\n\r\n                        if(activeKeys){\r\n                            keyDictionary = activeKeys.split(',');\r\n                        }\r\n                        else{\r\n                            keyDictionary = [];\r\n                        }\r\n\r\n                        if(!_.includes(keyDictionary, key)){\r\n                            keyDictionary.push(key);\r\n                            storage.set(keyType + 'keys', keyDictionary.join(','));\r\n                        }\r\n                    }\r\n\r\n                    return k;\r\n                },\r\n\r\n                removeKey: function (key) {\r\n                    storage.remove(key);\r\n                },\r\n                setPatientDashboardWidgets: function (widget) {\r\n                    WebCommonStorageRepository.setPatientDashboardWidgets(widget);\r\n                },\r\n\r\n                getPatientDashboardWidgets: function () {\r\n                    return WebCommonStorageRepository.getPatientDashboardWidgets();\r\n                },\r\n                setPatientDashboardConfigurations: function (newList, type) {\r\n                    WebCommonStorageRepository.setPatientDashboardConfigurations(newList, type);\r\n                },\r\n\r\n                removePatientDashboardWidgets: function () {\r\n                    WebCommonStorageRepository.removePatientDashboardWidgets();\r\n                },\r\n\r\n                getPatientDashboardConfigurations: function (type) {\r\n                    return WebCommonStorageRepository.getPatientDashboardConfigurations(type);\r\n                },\r\n\r\n                removePatientDashboardConfigurations: function (type) {\r\n                    WebCommonStorageRepository.removePatientDashboardConfigurations(type);\r\n                },\r\n\r\n                getDashboardTileSettings: function () {\r\n                    return WebCommonStorageRepository.getDashboardTileSettings();\r\n                },\r\n                setDashboardTileSettings: function (settings) {\r\n                    WebCommonStorageRepository.setDashboardTileSettings(settings);\r\n                },\r\n                setDefaultDashboardTileSettings: function (settings) {\r\n                    WebCommonStorageRepository.setDefaultDashboardTileSettings(settings);\r\n                },\r\n\r\n                getAppointmentsListSettings: function () {\r\n                    return WebCommonStorageRepository.getAppointmentsListSettings();\r\n                },\r\n                setAppointmentsListSettings: function (settings) {\r\n                    WebCommonStorageRepository.setAppointmentsListSettings(settings);\r\n                },\r\n                setDefaultAppointmentsListSettings: function (settings) {\r\n                    WebCommonStorageRepository.setDefaultAppointmentsListSettings(settings);\r\n                },\r\n\r\n                getMessagesListSettings: function () {\r\n                    return WebCommonStorageRepository.getMessagesListSettings();\r\n                },\r\n                setMessagesListSettings: function (settings) {\r\n                    WebCommonStorageRepository.setMessagesListSettings(settings);\r\n                },\r\n                setDefaultMessagesListSettings: function (settings) {\r\n                    WebCommonStorageRepository.setDefaultMessagesListSettings(settings);\r\n                },\r\n\r\n                getAppointmentsBadgeSettings: function () {\r\n                    return WebCommonStorageRepository.getAppointmentsBadgeSettings();\r\n                },\r\n                setAppointmentsBadgeSettings: function (settings) {\r\n                    WebCommonStorageRepository.setAppointmentsBadgeSettings(settings);\r\n                },\r\n                setDefaultAppointmentsBadgeSettings: function (settings) {\r\n                    WebCommonStorageRepository.setDefaultAppointmentsBadgeSettings(settings);\r\n                },\r\n\r\n                getDefaultServiceSiteId: function() {\r\n                    return WebCommonStorageRepository.getDefaultServiceSiteId();\r\n                },\r\n\r\n                setDefaultServiceSiteId: function(serviceSiteId) {\r\n                    WebCommonStorageRepository.setDefaultServiceSiteId(serviceSiteId);\r\n                },\r\n\r\n                getDeviceId: function () {\r\n                    return WebCommonStorageRepository.getDeviceId();\r\n                },\r\n\r\n                setDeviceId: function (deviceId) {\r\n                    WebCommonStorageRepository.setDeviceId(deviceId);\r\n                },\r\n\r\n                getPhoneMessageGeneralNoteTypeId: function () {\r\n                    return WebCommonStorageRepository.getPhoneMessageGeneralNoteTypeId();\r\n                },\r\n                setPhoneMessageGeneralNoteTypeId: function (id) {\r\n                    WebCommonStorageRepository.setPhoneMessageGeneralNoteTypeId(id);\r\n                },\r\n\r\n                getTaskMessageGeneralNoteTypeId: function () {\r\n                    return WebCommonStorageRepository.getTaskMessageGeneralNoteTypeId();\r\n                },\r\n                setTaskMessageGeneralNoteTypeId: function (id) {\r\n                    WebCommonStorageRepository.setTaskMessageGeneralNoteTypeId(id);\r\n                },\r\n\r\n                getPharmacyGeneralNoteTypeId: function () {\r\n                    return WebCommonStorageRepository.getPharmacyGeneralNoteTypeId();\r\n                },\r\n                setPharmacyGeneralNoteTypeId: function (id) {\r\n                    WebCommonStorageRepository.setPharmacyGeneralNoteTypeId(id);\r\n                },\r\n\r\n                getPortalMessageGeneralNoteTypeId : function () {\r\n                    return WebCommonStorageRepository.getPortalMessageGeneralNoteTypeId();\r\n                },\r\n                setPortalMessageGeneralNoteTypeId : function (id) {\r\n                    WebCommonStorageRepository.setPortalMessageGeneralNoteTypeId(id);\r\n                },\r\n\r\n                getRxRefillMessageGeneralNoteTypeId : function () {\r\n                    return WebCommonStorageRepository.getRxRefillMessageGeneralNoteTypeId();\r\n                },\r\n                setRxRefillMessageGeneralNoteTypeId : function (id) {\r\n                    WebCommonStorageRepository.setRxRefillMessageGeneralNoteTypeId(id);\r\n                },\r\n\r\n                getPharmacyRefillMessageGeneralNoteTypeId : function () {\r\n                    return WebCommonStorageRepository.getPharmacyRefillMessageGeneralNoteTypeId();\r\n                },\r\n                setPharmacyRefillMessageGeneralNoteTypeId : function (id) {\r\n                    WebCommonStorageRepository.setPharmacyRefillMessageGeneralNoteTypeId(id);\r\n                },\r\n\r\n                getPatientVitalsDefaultSettingId: function () {\r\n                    return WebCommonStorageRepository.getPatientVitalsDefaultSettingId();\r\n                },\r\n                setPatientVitalsDefaultSettingId: function (id) {\r\n                    WebCommonStorageRepository.setPatientVitalsDefaultSettingId(id);\r\n                },\r\n\r\n                getMedicationOverrideGeneralNoteTypeId : function () {\r\n                    return WebCommonStorageRepository.getMedicationOverrideGeneralNoteTypeId();\r\n                },\r\n                setMedicationOverrideGeneralNoteTypeId : function (id) {\r\n                    WebCommonStorageRepository.setMedicationOverrideGeneralNoteTypeId(id);\r\n                },\r\n\r\n                getCurrentUserLicenses: function getCurrentUserLicenses() {\r\n                    return WebCommonStorageRepository.getCurrentUserLicenses();\r\n                },\r\n                setCurrentUserLicenses: function setCurrentUserLicenses(licenses) {\r\n                    WebCommonStorageRepository.setCurrentUserLicenses(licenses);\r\n                },\r\n\r\n                getIsERxEnabled: function () {\r\n                    return WebCommonStorageRepository.getIsERxEnabled();\r\n                },\r\n                setIsERxEnabled: function (enabled) {\r\n                    WebCommonStorageRepository.setIsERxEnabled(enabled);\r\n                },\r\n\r\n                getAllowImperialUnits: function () {\r\n                    return WebCommonStorageRepository.getAllowImperialUnits();\r\n                },\r\n                setAllowImperialUnits: function (allowed) {\r\n                    WebCommonStorageRepository.setAllowImperialUnits(allowed);\r\n                },\r\n\r\n                getApplicationVersion: function(){\r\n                    return WebCommonStorageRepository.getApplicationVersion();\r\n                },\r\n                setApplicationVersion: function(version){\r\n                    WebCommonStorageRepository.setApplicationVersion(version);\r\n                },\r\n                getUserPermissions: function(){\r\n                    return WebCommonStorageRepository.getUserPermissions();\r\n                },\r\n                setUserPermissions: function(permissions){\r\n                    WebCommonStorageRepository.setUserPermissions(permissions);\r\n                },\r\n                getAskedUserForTouchID: function() {\r\n                    return storage.get('askedUserForTouchID');\r\n                },\r\n                setAskedUserForTouchID: function(prompt) {\r\n                    storage.set('askedUserForTouchID', prompt);\r\n                },\r\n                getUserEnabledTouchID: function() {\r\n                    return storage.get('userEnabledTouchID');\r\n                },\r\n                setUserEnabledTouchID: function(enabled) {\r\n                    storage.set('userEnabledTouchID', enabled);\r\n                },\r\n                getOncePerLoginChartConsent: function() {\r\n                    return storage.get('OncePerLoginChartConsent');\r\n                },\r\n                setOncePerLoginChartConsent: function(enabled) {\r\n                    storage.set('OncePerLoginChartConsent', enabled);\r\n                },\r\n\r\n                clearKeysOfType: function(keyType){\r\n                    WebCommonStorageRepository.clearKeysOfType(keyType);\r\n                },\r\n\r\n                clearSessionStorage: function(){\r\n                    clearKeysOfType('list');\r\n                    clearKeysOfType('metadata');\r\n                },\r\n\r\n                clearOldVersionCache: function(){\r\n                    WebCommonStorageRepository.clearOldVersionCache();\r\n                },\r\n\r\n                setIsCacheUser: function(value){\r\n                    storage.set('settings.iscacheuser', value);\r\n                }\r\n            };\r\n        }]);\r\n","angular.module('aprima-legacy-common').factory('LogOffService',\r\n    ['$q', 'LogOffServiceTs',\r\n        function ($q, LogOffServiceTs) {\r\n            'use strict';\r\n\r\n            return {\r\n                logoff: logoff,\r\n                logoffFromUnauthorizedResponse: logoffFromUnauthorizedResponse,\r\n            };\r\n\r\n            function logoff() {\r\n                var promise = LogOffServiceTs.logoff();\r\n                return $q.when(promise);\r\n            }\r\n\r\n            function logoffFromUnauthorizedResponse() {\r\n                LogOffServiceTs.logoffFromUnauthorizedResponse();\r\n            }\r\n        }]);\r\n","angular.module('aprima-legacy-common').factory('AppointmentTransitionToHelper',\r\n    ['apFilterFeatureFilter', 'AppointmentScheduleTypes', function (apFilterFeature, AppointmentScheduleTypes) {\r\n        'use strict';\r\n\r\n        var routes = {};\r\n        routes[AppointmentScheduleTypes.PatientVisit.id] = {\r\n            view: 'appointment',\r\n            edit: 'editAppointment',\r\n            add: 'addAppointment',\r\n            requiredFeature: AppointmentScheduleTypes.PatientVisit.requiredFeature\r\n        };\r\n        routes[AppointmentScheduleTypes.GroupVisit.id] = {\r\n            view: 'groupAppointment',\r\n            edit: 'editGroupAppointment',\r\n            add: 'addGroupAppointment',\r\n            requiredFeature: AppointmentScheduleTypes.GroupVisit.requiredFeature\r\n        };\r\n        routes[AppointmentScheduleTypes.Event.id] = {\r\n            view: 'eventAppointment',\r\n            edit: 'editEventAppointment',\r\n            add: 'addEventAppointment',\r\n            requiredFeature: AppointmentScheduleTypes.Event.requiredFeature\r\n        };\r\n        routes[AppointmentScheduleTypes.BlockingEvent.id] = {\r\n            view: 'blockingEventAppointment',\r\n            edit: 'editBlockingEventAppointment',\r\n            add: 'addBlockingEventAppointment',\r\n            requiredFeature: AppointmentScheduleTypes.BlockingEvent.requiredFeature\r\n        };\r\n\r\n        function getTransition(apptScheduleType, patientId, calendarId, edit, apptId) {\r\n            if(!apptScheduleType) {\r\n                return false;\r\n            }\r\n\r\n            var filteredRoutes = apFilterFeature(routes, 'requiredFeature');\r\n            var transition = {\r\n                opts: {}\r\n            };\r\n            var lowerScheduleType = apptScheduleType.toLowerCase();\r\n\r\n            if(apptId) {\r\n                transition.opts.id = apptId;\r\n                var property = !!edit ? 'edit' : 'view';\r\n                transition.appRoute = (filteredRoutes[lowerScheduleType] && filteredRoutes[lowerScheduleType][property]) || filteredRoutes[AppointmentScheduleTypes.PatientVisit.id][property];\r\n            }\r\n            else {\r\n                transition.appRoute = (filteredRoutes[lowerScheduleType] && filteredRoutes[lowerScheduleType].add) || filteredRoutes[AppointmentScheduleTypes.PatientVisit.id].add;\r\n            }\r\n\r\n            if(patientId) {\r\n                transition.opts.patientid = patientId;\r\n            }\r\n            if(calendarId) {\r\n                transition.opts.calendarId = calendarId;\r\n            }\r\n\r\n            return transition;\r\n        }\r\n\r\n        return {\r\n            getTransition: getTransition\r\n        };\r\n    }]);\r\n","angular.module('aprima-legacy-common').provider('AppRoutes', ['_', function(_){\r\n    'use strict';\r\n\r\n    var appRoutes = {\r\n        findByStateName: findByStateName,\r\n        // These functions are used in Angular but not AngularJS.\r\n        findKeyByStateName: findKeyByStateName,\r\n        getAppRoutes: getAppRoutes,\r\n        setupAppRoutes: setupAppRoutes,\r\n    };\r\n\r\n    this.setupAppRoutes = setupAppRoutes;\r\n\r\n    function findByStateName(stateName) {\r\n        var appRoute = _.find(getAppRoutes(), {state: stateName});\r\n        return appRoute;\r\n    }\r\n\r\n    function findKeyByStateName(stateName) {\r\n        var appRoute = _.findKey(getAppRoutes(), {state: stateName});\r\n        return appRoute;\r\n    }\r\n\r\n    function setupAppRoutes(newAppRoutes) {\r\n        //does not overwrite existing properties\r\n        _.defaults(appRoutes, newAppRoutes);\r\n    }\r\n\r\n    function getAppRoutes() {\r\n        return appRoutes;\r\n    }\r\n\r\n    this.getAppRoutes = getAppRoutes;\r\n\r\n    this.$get = [function(){\r\n        return getAppRoutes();\r\n    }];\r\n}]);\r\n","angular.module('aprima-legacy-common').factory('MessageTransitionToHelper',\r\n    ['MessageTypes', '_', 'apFilterFeatureFilter', function (MessageTypes, _, apFilterFeature) {\r\n        'use strict';\r\n\r\n        var routes = {};\r\n        routes[MessageTypes.PhoneMessageGuid] = {\r\n            route: 'phonemessage'\r\n        };\r\n        routes[MessageTypes.TaskMessageGuid] = {\r\n            route: 'taskmessage'\r\n        };\r\n        routes[MessageTypes.LabMessageGuid] = {\r\n            route: 'labmessage'\r\n        };\r\n        routes[MessageTypes.PortalAppointmentQuestionMessageGuid] = {\r\n            route: 'portalmessage'\r\n        };\r\n        routes[MessageTypes.PortalBillingQuestionMessageGuid] = {\r\n            route: 'portalmessage'\r\n        };\r\n        routes[MessageTypes.PortalDemographicsQuestionMessageGuid] = {\r\n            route: 'portalmessage'\r\n        };\r\n        routes[MessageTypes.PortalGeneralQuestionMessageGuid] = {\r\n            route: 'portalmessage'\r\n        };\r\n        routes[MessageTypes.PortalRxQuestionMessageGuid] = {\r\n            route: 'portalmessage'\r\n        };\r\n        routes[MessageTypes.AttachmentApprovalGuid] = {\r\n            route: 'aamessage'\r\n        };\r\n        routes[MessageTypes.ServiceOrderApprovalMessageGuid] = {\r\n            route: 'serviceorderapprovalmessage'\r\n        };\r\n        routes[MessageTypes.RxRefillRequestMessageGuid] = {\r\n            route: 'rxrefillmessage',\r\n            requiredFeature: 'Messages_RxRefill,Visits_RX'\r\n        };\r\n        routes[MessageTypes.PatientRxRefillRequestMessageGuid] = {\r\n            route: 'rxrefillmessage',\r\n            requiredFeature: 'Messages_RxRefill,Visits_RX'\r\n        };\r\n        routes[MessageTypes.PharmacyRefillRequestMessageGuid] = {\r\n            route: 'pharmacyrefillmessage',\r\n            requiredFeature: 'Messages_PharmacyRefill,Visits_RX'\r\n        };\r\n        routes[MessageTypes.RxRefillAndErxRequestMessageGuid] = {\r\n            route: 'rxrefillmessagev2',\r\n            requiredFeature: 'Messages_PharmacyRefill,Visits_RX,Messages_RxRefillRequestV2,Messages_RxChange'\r\n        };\r\n\r\n        function getTransitionForMessage(messageTypeId, messageId, messageSubTypeId, createNew, options) {\r\n            var transition = {\r\n                appRoute: 'message',\r\n                opts: {\r\n                    id: messageId\r\n                }\r\n            };\r\n            \r\n            if(options){\r\n                _.merge(transition.opts, options);\r\n            }\r\n\r\n            var lowerMessageTypeId = messageTypeId.toLowerCase();\r\n            var lowerMessageSubTypeId = messageSubTypeId.toLowerCase();\r\n\r\n            var filteredRoutes = apFilterFeature(routes, 'requiredFeature');\r\n\r\n            transition.appRoute = (createNew ? 'create' : '') +\r\n                ((filteredRoutes[lowerMessageTypeId] && filteredRoutes[lowerMessageTypeId].route) ||\r\n                (filteredRoutes[lowerMessageSubTypeId] && filteredRoutes[lowerMessageSubTypeId].route) ||\r\n                'message');\r\n\r\n            return transition;\r\n        }\r\n\r\n        return {\r\n            getTransitionForMessage: getTransitionForMessage\r\n        };\r\n    }]);\r\n","angular.module('aprima-legacy-common')\r\n    .factory('NoteTypeRepository',\r\n        ['_', 'SystemGuid', function (_, SystemGuid) {\r\n            'use strict';\r\n\r\n            // TODO: before releasing, comment out those that we don't actually support.\r\n            /*jshint camelcase: false */\r\n            var supportedTabs = [\r\n                '3e4888e6-a0be-4e5b-bdbf-3da7d4f71375', //Assessments\r\n                SystemGuid.UIControl_Note_CC,\r\n                SystemGuid.UIControl_Note_CCHPI,\r\n                'ffbb556f-ab4e-478f-a2d7-b4b863a344e9', //CDS\r\n                SystemGuid.UIControl_Note_Confidential,\r\n                '2c513cab-0d52-4e06-b64f-dc6391e464b7', //CPP\r\n                SystemGuid.UIControl_Note_DX,\r\n                SystemGuid.UIControl_Note_DXDSM,\r\n                SystemGuid.UIControl_Note_GeneralNote,\r\n                '8b40d89b-3511-42a4-b07b-decadc72647e', //General Note CC\r\n                SystemGuid.UIControl_Note_HPI,\r\n                SystemGuid.UIControl_Note_HX,\r\n                '38080e33-7a49-4e4d-9d5c-ff87319d8307', //Observation\r\n                SystemGuid.UIControl_Note_PE,\r\n                SystemGuid.UIControl_Note_Plan,\r\n                SystemGuid.UIControl_Note_Results,\r\n                SystemGuid.UIControl_Note_ROS,\r\n                SystemGuid.UIControl_Note_ROSPE,\r\n                SystemGuid.UIControl_Note_RX,\r\n                '871c47ed-372f-4c89-a4b8-c753951ca93e', //Single CPP\r\n                SystemGuid.UIControl_Note_SO,\r\n                SystemGuid.UIControl_Note_SP,\r\n                SystemGuid.UIControl_Note_VisitText,\r\n                SystemGuid.UIControl_Note_Vitals,\r\n            ];\r\n\r\n            var supportedSliders = [\r\n                '2f35a3bb-0778-4cd6-a178-7734e7b4836e', //Attachments\r\n                '4836176d-e412-47e9-ab6b-b549515c8007', //Calendar\r\n                'bf9d1d68-cdcc-48f0-8080-1815212914fb', //CCM/CPO\r\n                '41e171a8-667a-4ade-aba4-dc7ce21c30d7', //Clinical Decision Support\r\n                '87d90295-1cbf-41cd-8582-fad6e0a7a4b9', //Dictation\r\n                '142937f8-4c55-4c15-9677-f1a2105a019e', //Education Forms\r\n                '5b8fa2e2-31fa-40aa-bbf6-9d969ae5cc71', //Follow-up\r\n                '41e171a8-667a-4ade-aba4-dc7ce21c30d7', //Health Maintenance\r\n                '48606f65-ddf6-4f83-afaf-7dfb842d13d6', //Numeric Keypad\r\n                '881ee22a-9193-45b3-85f5-818e4bd6ece9', //Rx Summary\r\n                'b9d820ab-b216-47bf-af2d-b7ebfb79a137', //Text Note\r\n                '14266173-8cfc-4b4e-8fa6-8f95ea61e03d', //Visit Information\r\n            ];\r\n\r\n            function isNoteTabsSupported(note) {\r\n                if(_.isNil(note)) { return false; }\r\n                var noteTabs = _.map(note.Tabs, 'TabSliderUid');\r\n\r\n                var matchedTabs = _.intersection(noteTabs, supportedTabs);\r\n                return matchedTabs.length === noteTabs.length;\r\n            }\r\n\r\n            function isNoteSlidersSupported(note) {\r\n                if(_.isNil(note)) { return false; }\r\n                var noteSliders = _.map(note.Sliders, 'TabSliderUid');\r\n\r\n                var matchedSliders = _.intersection(noteSliders, supportedSliders);\r\n                return matchedSliders.length === noteSliders.length;\r\n            }\r\n\r\n            function isNoteTypeSupported(note) {\r\n                if(_.isNil(note)) { return false; }\r\n                return isNoteTabsSupported(note) && isNoteSlidersSupported(note);\r\n            }\r\n\r\n            return {\r\n                isNoteTypeSupported: isNoteTypeSupported,\r\n                isNoteTabsSupported: isNoteTabsSupported,\r\n                isNoteSlidersSupported: isNoteSlidersSupported,\r\n            };\r\n        }]);\r\n","angular.module('aprima-legacy-common').factory('$qHelpers', ['$q', '_', '$timeout', function ($q, _, $timeout) {\r\n    'use strict';\r\n\r\n    return {\r\n        whenFirstSuccess: whenFirstSuccess,\r\n        timeout: timeout,\r\n        delay: delay,\r\n        abortablePromise: abortablePromise,\r\n        isPromise: isPromise,\r\n        abortPromises: abortPromises,\r\n        abortPromise: abortPromise\r\n    };\r\n\r\n    function whenFirstSuccess(promises) {\r\n        //Will resolve to the value of the first successful promise in order.\r\n        //Ignores rejected promises unless ALL were rejected, then the returned promise will be rejected.\r\n        \r\n        var deferred = $q.defer();\r\n        var results = [];\r\n        var resolved = false;\r\n        //Use reference instead of value for comparison.\r\n        var rejectionFlagValue = {};\r\n\r\n        function tryResolveToFirstSuccess() {\r\n            var index = -1;\r\n            var length = results ? results.length : 0;\r\n\r\n            if (!results || resolved) {\r\n                return false;\r\n            }\r\n\r\n            while (++index < length) {\r\n                var result = results[index];\r\n\r\n                if (result === undefined) {\r\n                    return false;\r\n                }\r\n\r\n                if (result !== rejectionFlagValue) {\r\n                    resolved = true;\r\n                    deferred.resolve(result);\r\n                    results = null;\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            deferred.reject('Could not resolve first successful promise. All promises were rejected.');\r\n        }\r\n\r\n        _.forEach(promises, function (promise, index) {\r\n            results[index] = undefined;\r\n\r\n            promise.then(function (result) {\r\n                if (!resolved) {\r\n                    results[index] = result;\r\n                    tryResolveToFirstSuccess();\r\n                }\r\n            }, function () {\r\n                if (!resolved) {\r\n                    results[index] = rejectionFlagValue;\r\n                    tryResolveToFirstSuccess();\r\n                }\r\n            });\r\n\r\n        });\r\n\r\n        return deferred.promise;\r\n    }\r\n\r\n    function timeout(promise, time) {\r\n        var deferred = $q.defer(),\r\n            timeoutPromise = $timeout(function() {\r\n                deferred.reject('Promise took too long to resolve and was rejected.');\r\n            }, time);\r\n\r\n        promise\r\n            .then(function (result) {\r\n                deferred.resolve(result);\r\n            })\r\n            .catch(function (err) {\r\n                deferred.reject(err);\r\n            })\r\n            .finally(function() {\r\n                $timeout.cancel(timeoutPromise);\r\n            });\r\n\r\n        return deferred.promise;\r\n    }\r\n\r\n    function delay(promise, time) {\r\n        var deferred = $q.defer();\r\n\r\n        $timeout(function() {\r\n            promise\r\n                .then(function (result) {\r\n                    deferred.resolve(result);\r\n                })\r\n                .catch(function (err) {\r\n                    deferred.reject(err);\r\n                });\r\n        }, time);\r\n\r\n        return deferred.promise;\r\n    }\r\n\r\n    function abortablePromise(promise, previousPromises, shouldRejectOnAbort) {\r\n        var deferred = $q.defer();\r\n        shouldRejectOnAbort = angular.isFunction(shouldRejectOnAbort) ? _.once(shouldRejectOnAbort) : function(){ return true; };\r\n\r\n        abortPromises(previousPromises);\r\n\r\n        promise\r\n            .then(function (result) {\r\n                deferred.resolve(result);\r\n            }, function (error) {\r\n                deferred.reject(error);\r\n            });\r\n\r\n        var error = {isAborted: true, msg: 'Aborted'};\r\n        deferred.promise.abort = function abort() {\r\n            var shouldAbort = !!shouldRejectOnAbort(error);\r\n            if(shouldAbort) {\r\n                deferred.reject(error);\r\n            }\r\n            return shouldAbort;\r\n        };\r\n\r\n        replaceChainFnsWithAbortableFns(deferred.promise, 'then');\r\n        replaceChainFnsWithAbortableFns(deferred.promise, 'catch');\r\n        replaceChainFnsWithAbortableFns(deferred.promise, 'finally');\r\n\r\n        return deferred.promise;\r\n    }\r\n    \r\n    function abortPromises(promises) {\r\n        if(!_.isArray(promises)) {\r\n            abortPromise(promises);\r\n            return;\r\n        }\r\n\r\n        _.forEach(promises, function (promise) {\r\n            abortPromise(promise);\r\n        });\r\n    }\r\n\r\n    function abortPromise(promise) {\r\n        if(promise && promise.abort){\r\n            promise.abort();\r\n        }\r\n    }\r\n    \r\n    function replaceChainFnsWithAbortableFns(promise, chainFnKey) {\r\n        var wrappedKey = '_' + chainFnKey;\r\n        var wrappedFn = promise[wrappedKey] = promise[wrappedKey] || promise[chainFnKey] || angular.noop;\r\n\r\n        promise[chainFnKey] = function() {\r\n            var chained = wrappedFn.apply(promise, arguments);\r\n            if(_.isFunction(chained.abort)) {\r\n                return chained;\r\n            }\r\n            \r\n            var newPromise = abortablePromise(chained, null, function() {\r\n                return promise.abort();\r\n            });\r\n            return newPromise;\r\n        };\r\n    }\r\n\r\n    function isPromise(value) {\r\n        return !!(value && angular.isFunction(value.then) && angular.isFunction(value.catch) && angular.isFunction(value.finally));\r\n    }\r\n}]);","angular.module('aprima-legacy-common').factory('HttpAbortableContext', ['$q', '$qHelpers', '_', function($q, $qHelpers, _) {\r\n    'use strict';\r\n    \r\n    return HttpAbortableContext;\r\n\r\n    function HttpAbortableContext(previousPromiseToAbort) {\r\n        var abortDeferred = $q.defer();\r\n        var abortPromise = abortDeferred.promise;\r\n\r\n        return {\r\n            abortPromise: abortPromise,\r\n            wrap: function wrap(promise) {\r\n                var abortedError;\r\n                promise = promise.catch(function(error) {\r\n                    if(abortedError && error && error.status < 0) {\r\n                        _.assign(error, abortedError);\r\n                    }\r\n                    return $q.reject(error);\r\n                });\r\n\r\n                return $qHelpers.abortablePromise(promise, previousPromiseToAbort, function(error) {\r\n                    abortedError = error;\r\n                    abortDeferred.resolve();\r\n                    return false;\r\n                });\r\n            }\r\n        };\r\n    }\r\n}]);\r\n","(function(angular) {\r\n    'use strict';\r\n\r\n    // Can add to this as necessary\r\n    // The Angular version of this is PermissionNames\r\n    var permissions = {\r\n        Schedule: 'schedule',\r\n        FullNoteComposer: 'fnc',\r\n        StrikeoutVisits: 'strikeoutvisits',\r\n    };\r\n\r\n    angular.module('aprima-legacy-common').constant('Permissions', permissions);\r\n})(window.angular);\r\n","(function(angular) {\r\n    'use strict';\r\n\r\n    angular.module('aprima-legacy-common').factory('SecurityRepository', [\r\n        '$q',\r\n        'PermissionService',\r\n        SecurityRepository\r\n    ]);\r\n\r\n    function SecurityRepository(\r\n        $q,\r\n        PermissionService\r\n    ) {\r\n        var service = {\r\n            getPermissions: getPermissions\r\n        };\r\n\r\n        return service;\r\n\r\n        function getPermissions(permissionName) {\r\n            var promise = PermissionService.getPermissionsJs(permissionName);\r\n            return $q.when(promise);\r\n        }\r\n    }\r\n\r\n})(window.angular);\r\n","(function(angular) {\r\n    'use strict';\r\n\r\n    angular.module('aprima-legacy-common').factory('TileGroup', [\r\n        '_',\r\n        'AprimaCache',\r\n        TileGroupFactory,\r\n    ]);\r\n\r\n\r\n    function TileGroupFactory(\r\n        _,\r\n        AprimaCache\r\n    ) {\r\n\r\n        var groupStates = {\r\n            userPreference: 0,\r\n            allExpanded: 1,\r\n            allCollapsed: 2\r\n        };\r\n\r\n        return TileGroup;\r\n\r\n        function TileGroup(tileGroupName, config, storageType, disablePersistence) {\r\n            var self = this;\r\n\r\n            self.setupTile = setupTile;\r\n            self.toggle = toggle;\r\n            self.nextState = nextState;\r\n            self.changeConfiguration = changeConfiguration;\r\n            self.getName = getName;\r\n            self.setPersistence = setPersistence;\r\n\r\n            var name = tileGroupName;\r\n            var persist = !disablePersistence;\r\n            var configuration = config || 'default';\r\n            var type = 'tileGroup';\r\n            var tiles = {};\r\n            var groupState = groupStates.userPreference;\r\n            var cache = AprimaCache.getOrCreateOverride(cacheName(), {storagePrefix: 'caches.'});\r\n            if(persist) {\r\n                cache.setStorageMode(storageType || 'localStorage');\r\n            }\r\n\r\n            updateTiles();\r\n\r\n            function setPersistence(enable) {\r\n                persist = !!enable;\r\n            }\r\n\r\n            function getName() {\r\n                return name;\r\n            }\r\n\r\n            function cacheName() {\r\n                return type + '.' + name;\r\n            }\r\n\r\n            function save() {\r\n                return cache.put(configuration, tiles);\r\n            }\r\n\r\n            function get() {\r\n                return cache.get(configuration);\r\n            }\r\n\r\n            function toggle(tileId) {\r\n                var tile = tiles[tileId];\r\n                if(!tile) {\r\n                    return;\r\n                }\r\n\r\n                tile.isCollapsed = !tile.isCollapsed;\r\n                if(groupState === groupStates.userPreference && persist) {\r\n                    save();\r\n                }\r\n            }\r\n\r\n            function setupTile(tileId, defaultValue, forceDefault) {\r\n                var tile = tiles[tileId];\r\n\r\n                if(!tile || forceDefault) {\r\n                    tile = tiles[tileId] = {\r\n                        isCollapsed: defaultValue\r\n                    };\r\n                }\r\n\r\n                if(groupState === groupStates.allExpanded) {\r\n                    tile.isCollapsed = false;\r\n                }\r\n                else if(groupState === groupStates.allCollapsed) {\r\n                    tile.isCollapsed = true;\r\n                }\r\n                else if(groupState === groupStates.userPreference && persist) {\r\n                    save();\r\n                }\r\n\r\n                return tile;\r\n            }\r\n\r\n            function updateTiles() {\r\n                if(groupState === groupStates.userPreference) {\r\n                    _.merge(tiles, get());\r\n                    return;\r\n                }\r\n\r\n                var newValue = groupState === groupStates.allCollapsed;\r\n                _.forEach(tiles, function (val) {\r\n                    val.isCollapsed = newValue;\r\n                });\r\n            }\r\n\r\n            function changeConfiguration(config) {\r\n                if(!config || configuration === config) {\r\n                    return;\r\n                }\r\n\r\n                configuration = config;\r\n                updateTiles();\r\n            }\r\n\r\n            function nextState() {\r\n                groupState = groupState !== groupStates.allCollapsed ?\r\n                groupState + 1 :\r\n                    groupStates.userPreference;\r\n                updateTiles();\r\n            }\r\n        }\r\n    }\r\n\r\n})(window.angular);\r\n"]}