{"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/init.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/models/dosing/DoseRange.js","../../src/legacy-common/models/dosing/DoseRangeInfo.js","../../src/legacy-common/models/imo/ImoPatient.js","../../src/legacy-common/services/AprimaRestangular.js","../../src/legacy-common/services/AuthorizationService.js","../../src/legacy-common/services/DashboardStructure.js","../../src/legacy-common/services/DateUtilities.js","../../src/legacy-common/services/debugLogService.js","../../src/legacy-common/services/DoseRangeUtil.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/LoginInitializationServiceJs.js","../../src/legacy-common/services/navigation/AppointmentTransitionToHelper.js","../../src/legacy-common/services/navigation/AppRoutes.js","../../src/legacy-common/services/navigation/BrowserWebViewManager.js","../../src/legacy-common/services/navigation/MessageTransitionToHelper.js","../../src/legacy-common/services/navigation/RouteFormatter.js","../../src/legacy-common/services/navigation/TransitionManager.js","../../src/legacy-common/services/navigation/XamarinWebViewManager.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","../../src/legacy-common/services/WidgetViews.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","LocalStorageRepository","LanguageFactory","currentLanguage","getLang","navigator","userLanguage","language","setLang","factory","gettextCatalog","text","getString","Bridge","AppRoutes","$uibModalStack","transition","dismissAll","toState","targetState","toStateName","appRoute","find","state","nativeSettings","ctrlSetsUpPage","setupPage","$location","$log","$state","$watch","path","a","output","current","description","info","sendPageView","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","exception","cause","message","get","sendException","ex","filter","patientId","height","width","url","ServerInfoRepository","personId","isFeatureSupported","ObjUtil","DoseRange","mapFromDto","defineReadonlyProps","Id","WeightRequired","BodySurfaceAreaRequired","LowDose","LowDoseUnits","HighDose","HighDoseUnits","MaximumDosePerDay","MaximumDosePerDayUnits","MaximumSingleDose","MaximumSingleDoseUnits","MaximumLifetimeDose","MaximumLifetimeDoseUnits","NteAmountPerSingleDose","NteAmountPerSingleDoseUnits","LowFrequency","HighFrequency","LowDuration","HighDuration","AdjustedLowDose","AdjustedHighDose","AdjustedMaximumSingleDose","AdjustedMaximumDosePerDay","AdjustedMaximumLifetimeDose","AdjustedNteAmountPerSingleDose","RangeLowDose","RangeLowDoseUnits","RangeHighDose","RangeHighDoseUnits","RangeLowDoseForm","RangeLowDoseFormUnits","RangeHighDoseForm","RangeHighDoseFormUnits","NtePediDailyDoseStrength","NtePediDailyDoseStrengthUnits","NtePediDailyDoseForm","NtePediDailyDoseFormUnits","IngredientStrength","IngredientStrengthUomAbbr","IngredientStrengthUomDesc","IngredientVolume","IngredientVolumeUomAbbr","IngredientVolumeUomDesc","WeightKg","BodySurfaceArea","ErrorMsg","HasError","DoseRangeInfo","call","MaxMinInformation","DateUtilities","femaleRegex","maleRegex","ImoPatient","mapFromApi","patient","FirstName","LastName","birthDate","BirthDate","DateOfBirth","deathDate","DeathDate","ageInfo","getPersonAge","gender","Gender","GenderName","GenderAnsi","age","ageInYears","standardizedAge","parseFloat","isNaN","round","standardizedGender","test","hasAge","hasGender","BrowserService","debugLogService","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","deviceId","getDeviceId","jwt","msg","alternativeLoginRoute","statementslogin","login","errorCode","parseInt","getUrl","parent","disableCaching","CurrentUser","isUserProvider","user","permissions","IsProvider","icd10User","ICD10User","VersionService","widgetViews","mapV1ConfigurationsToV2","configs","map","Type","ExternalId","Name","DisplayOrder","PhoneTiles","mapTiles","TabletTiles","DesktopTiles","numColumns","WidgetDescriptors","tile","partialRight","mapTile","index","collection","TileDescriptorId","Heading","ColumnSpan","Math","min","Column","IsCollapsed","Filter","routeSuffix","undefined","checkVersionValid","getPrmAssemblyVersion","MIN_PRM_DASHBOARD_VERSION","repositoryRoute","mapFn","identity","userId","words","years","en_us","es_mx","months","days","weeks","deceased","lang","_getPersonAge","displayAge","person","ageString","langCode","code","birthdate","units","display","getDurationString","refDate","diff","parse","duration","humanize","getPersonAgeAbbr","unit","isValid","charAt","end","_units","_age","_deceased","birthDateMoment","locale","tempDeathDate","deathdate","disableDebugMode","enableDebugMode","AdjustedForWeight","NumUtil","StringBuilder","SystemGuid","createWeightBasedMaxMinInformation","weightBasedDoseRange","sb","init","addDoseRange","LowDoseAmount","LowDoseAmountUnits","HighDoseAmount","HighDoseAmountUnits","Length","AppendLine","LowDoseForm","LowDoseFormUnits","HighDoseForm","HighDoseFormUnits","addNTEInfo","NTEAmount","NTEAmountUnits","NTEForm","NTEFormUnits","nte","nteUnits","Append","numFormat","addSingleDoseNTEInfo","NTESingleDoseAmount","NTESingleDoseAmountUnits","ToString","formatAgeInDays","getWeightBasedSummary","mapVariableDosingFromDto","variableDosingDto","variableDosing","isDisabled","minAge","MinAgeInDays","maxAge","MaxAgeInDays","defaultDosingQuantity","DefaultDosingQuantity","defaultMaximumDoseQuantity","DefaultMaximumDoseQuantity","variableDosingTypeId","VariableDosingTypeId","overrides","Overrides","override","overrideDosingQuantity","OverrideDosingQuantity","overrideMaximumDoseQuantity","OverrideMaximumDoseQuantity","calculationErrors","CalculationErrors","processedDosingType","processDosingType","unitDescription","dosingUnits","maxUnitDescription","maxDoseUnits","summary","mapVariableDosingToDto","processDoseRanges","variableDoseRanges","weightBasedDoseRanges","WeightBasedDoseRanges","doseRange","matches","match","maxMinInformationRows","GetMaxMinWarningMsg","drc","amount","frequencyPerDay","durationOfTherapyInDays","indexOf","dailyDose","dosingValue","dosePerDay","multiply","strength","isMilliliterUnitVolume","divide","dailyDosing","fdbDosingInformation","CreateMaxMinInformation","includeErrorMsg","doseLow","doseHigh","doseFormLow","doseFormHigh","doseUnit","doseResult","max","bsa","getHighLowDose","formDoseResult","getHighLowFormDose","doseUnitOnly","CalculateDosingInformation","mg","ml","totalML","dose","timesPerDay","convertDose","dosingUnitMilliliter","calculateMLFromMGDosing","adjustedMG","floor","num1","num2","remainder","formatted","trunc","subtract","dosingUnitMilligram","calculateMGDosing","allowsBsaAdjustment","patientAgeInDays","canCalculateByMg","strengthUomAbbr","isMg","ageInDays","weightBasedDosing","maxDose","DosingCalculatorUnitGPerKgPerDay","DosingCalculatorUnitMcgPerKgPerDay","DosingCalculatorUnitMgPerKgPerDay","DosingCalculatorUnitMlPerKgPerDay","low","lowUnits","high","highUnits","doseFormRange","len","substr","num","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","TranslateService","currentLang","langOptions","normalizeToUnderscore","updateCurrentLangCode","use","getLangOptions","getActiveLanguage","$filter","cachedEnumerators","activeItems","buildAndCacheEnumerator","enumeratorName","list","orderPredicate","transitionFunction","enumerator","buildEnumerator","setActiveItemById","getEnumerator","callbackFunction","currentIndex","item","next","lookupIndex","canGoNext","currentItem","previous","first","last","moveToNextItem","moveToPreviousItem","moveToFirstItem","moveToLastItem","moveToItem","Exception","canGoPrevious","getNavStatus","canGoForward","canGoBack","i","toArray","oldIndex","arr","hydrateListNavigationProperties","settings","phone","modes","headerValue","requiresNavSettings","listNavigationProperties","tablet","setAsBridgeHandler","on","navigationType","registerActiveItemForList","listType","itemId","deregisterActiveItemForList","setActiveItemByIdForEnumerator","storage","WebCommonStorageRepository","getPatientDashboardsKey","isNumber","clearAll","getIsActiveDirectoryUser","setIsActiveDirectoryUser","getClientID","getClientId","setClientID","setClientId","getNotificationTimeout","setNotificationTimeout","set","getClientUrl","setClientURL","setClientUrl","getGatewayUrl","setGatewayUrl","setJsonWebToken","removeJsonWebToken","setUserName","username","getUserName","setBirthDate","getBirthDate","setAccessCode","statementId","getAccessCode","setUserFullName","getUserFullName","removeUserName","remove","setUserID","userid","setUserId","getUserID","getUserId","getIsPatient","setIsPatient","isPatient","removeUserID","removeUserId","setDefaultSuperbillSubmissionMethod","methodId","getDefaultSuperbillSubmissionMethod","setKey","keyType","keyDictionary","activeKeys","split","includes","getKey","k","removeKey","setPatientDashboardWidgets","widget","getPatientDashboardWidgets","setPatientDashboardConfigurations","newList","getPatientDashboardConfigurations","hasV1Tiles","some","val","isUndefined","Tiles","savedConfig","savedTile","removePatientDashboardWidgets","overwritePatientDashboardConfigurations","removePatientDashboardConfigurations","getDashboardTileSettings","setDashboardTileSettings","setDefaultDashboardTileSettings","getAppointmentsListSettings","setAppointmentsListSettings","setDefaultAppointmentsListSettings","getMessagesListSettings","setMessagesListSettings","setDefaultMessagesListSettings","getAppointmentsBadgeSettings","setAppointmentsBadgeSettings","setDefaultAppointmentsBadgeSettings","getDefaultServiceSiteId","setDefaultServiceSiteId","serviceSiteId","setDeviceId","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","setIsCacheClient","$q","LoginInitializationService","LogInService","LogOffService","SettingService","updateVersionInfo","userLoginInfo","ProductVersions","PrmAssemblyVersion","setPrmAssemblyVersion","PrmDatabaseVersion","setPrmDatabaseVersion","PrmDatabaseBuild","setPrmDatabaseBuild","AppServiceVersion","setMobileAssemblyVersion","SupportedFeatures","setSupportedFeatures","DatabaseName","setDatabaseName","haveVersionsChanged","getClientVersion","getPrmDatabaseVersion","getPrmDatabaseBuild","getMobileAssemblyVersion","initializeFromPrmLogin","authToken","JsonWebToken","clientURL","checkVersions","SupportedApiVersions","MinClientVersion","then","validationSuccesful","reject","DeviceId","warn","Permissions","changeUserInfo","loadSettings","catch","preLogin","clientServerInfo","clientId","oldClientId","oldUsername","isNew","setDefaultRedirect","logoff","registeredServerInfo","AppServerUrl","gatewayConfiguration","finishPrmLogin","getRedirect","apFilterFeature","AppointmentScheduleTypes","routes","view","edit","getTransition","apptScheduleType","calendarId","apptId","filteredRoutes","opts","lowerScheduleType","property","patientid","provider","appRoutes","getAppRoutes","setupAppRoutes","newAppRoutes","$get","$window","activateView","replaceCurrentState","go","location","history","back","MessageTypes","getTransitionForMessage","messageTypeId","messageId","messageSubTypeId","createNew","merge","lowerMessageTypeId","lowerMessageSubTypeId","$urlMatcherFactory","formatRoute","routePattern","compile","formatRelativeRoute","parentRoutePattern","substring","service","WebViewManager","previousTransition","onStart","fromState","from","fromStateName","findKey","cloneDeep","transitionToState","replaceState","formatTransition","targetRoute","isBoolean","$broadcast","getPreviousTransition","RouteFormatter","getRoute","completedRoute","completeRoute","appState","parentSeperator","lastIndexOf","parentState","onNavigate","d","navigate","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","Tabs","isNoteSlidersSupported","noteSliders","Sliders","isNoteTypeSupported","$timeout","whenFirstSuccess","promises","deferred","defer","results","resolved","rejectionFlagValue","tryResolveToFirstSuccess","resolve","time","timeoutPromise","finally","cancel","delay","abortablePromise","isFunction","previousPromises","shouldRejectOnAbort","once","abort","shouldAbort","replaceChainFnsWithAbortableFns","chainFnKey","wrappedFn","noop","chained","previousPromiseToAbort","abortDeferred","abortedError","assign","Schedule","FullNoteComposer","StrikeoutVisits","PermissionService","getPermissions","permissionName","isAllowedJs","isAllowed","IsAllowed","AprimaCache","groupStates","userPreference","allExpanded","allCollapsed","tileGroupName","storageType","disablePersistence","setupTile","tileId","defaultValue","forceDefault","tiles","isCollapsed","groupState","persist","save","toggle","nextState","updateTiles","changeConfiguration","getName","setPersistence","enable","cache","getOrCreateOverride","storagePrefix","setStorageMode","put","newValue","displayName","userPlaceable"],"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').run(['CustomModuleRunService', function(CustomModuleRunService) {\r\n 'use strict';\r\n CustomModuleRunService.add(\r\n [ 'LocalStorageRepository', 'LanguageFactory',\r\n function (LocalStorageRepository, LanguageFactory) {\r\n var currentLanguage;\r\n if (LocalStorageRepository.getLang()) {\r\n currentLanguage = LocalStorageRepository.getLang();\r\n }\r\n else {\r\n if (navigator.userLanguage) {\r\n // Explorer\r\n currentLanguage = navigator.userLanguage;\r\n }\r\n else if (navigator.language) {\r\n // FF\r\n currentLanguage = navigator.language;\r\n }\r\n }\r\n\r\n if (currentLanguage) {\r\n LanguageFactory.setLang(currentLanguage);\r\n }\r\n }]);\r\n}]);\r\n\r\nangular.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(['Bridge', '$transitions', 'AppRoutes', '_', '$uibModalStack', function (Bridge, $transitions, AppRoutes, _, $uibModalStack) {\r\n\r\n $transitions.onSuccess({}, function bridgeSetupPage(transition) {\r\n $uibModalStack.dismissAll('pageTransition');\r\n\r\n var toState = transition.targetState() || {};\r\n var toStateName = toState && toState.name() || '';\r\n var appRoute = _.find(AppRoutes, {state: toStateName});\r\n\r\n if (appRoute && appRoute.nativeSettings && !appRoute.nativeSettings.ctrlSetsUpPage) {\r\n Bridge.setupPage(appRoute.nativeSettings);\r\n }\r\n });\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', '$location', '$log', 'AprimaAnalytics', '$state',\r\n function ($rootScope, $location, $log, AprimaAnalytics, $state) {\r\n\r\n $rootScope.$watch(function () {\r\n return $location.path();\r\n },\r\n function (a) {\r\n var output = ($state.current.description) ? $state.current.description : a;\r\n $log.info('url has changed: ' + output);\r\n AprimaAnalytics.sendPageView(output);\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 AprimaAnalytics;\r\n\r\n return function customExceptionHandler(exception, cause) {\r\n var message = exception.message + ' (caused by \"' + cause + '\")';\r\n try {\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","(function(angular) {\r\n 'use strict';\r\n\r\n // TODO: move to separate module that has models\r\n angular.module('aprima-legacy-common').factory('DoseRange', [\r\n 'ObjUtil',\r\n DoseRangeFactory,\r\n ]);\r\n\r\n function DoseRangeFactory(\r\n ObjUtil\r\n ) {\r\n\r\n DoseRange.mapFromDto = mapFromDto;\r\n return DoseRange;\r\n\r\n function DoseRange(obj) {\r\n ObjUtil.defineReadonlyProps(this, {\r\n Id: obj.Id,\r\n WeightRequired: obj.WeightRequired,\r\n BodySurfaceAreaRequired: obj.BodySurfaceAreaRequired,\r\n LowDose: obj.LowDose,\r\n LowDoseUnits: obj.LowDoseUnits,\r\n HighDose: obj.HighDose,\r\n HighDoseUnits: obj.HighDoseUnits,\r\n MaximumDosePerDay: obj.MaximumDosePerDay,\r\n MaximumDosePerDayUnits: obj.MaximumDosePerDayUnits,\r\n MaximumSingleDose: obj.MaximumSingleDose,\r\n MaximumSingleDoseUnits: obj.MaximumSingleDoseUnits,\r\n MaximumLifetimeDose: obj.MaximumLifetimeDose,\r\n MaximumLifetimeDoseUnits: obj.MaximumLifetimeDoseUnits,\r\n NteAmountPerSingleDose: obj.NteAmountPerSingleDose,\r\n NteAmountPerSingleDoseUnits: obj.NteAmountPerSingleDoseUnits,\r\n LowFrequency: obj.LowFrequency,\r\n HighFrequency: obj.HighFrequency,\r\n LowDuration: obj.LowDuration,\r\n HighDuration: obj.HighDuration,\r\n AdjustedLowDose: obj.AdjustedLowDose,\r\n AdjustedHighDose: obj.AdjustedHighDose,\r\n AdjustedMaximumSingleDose: obj.AdjustedMaximumSingleDose,\r\n AdjustedMaximumDosePerDay: obj.AdjustedMaximumDosePerDay,\r\n AdjustedMaximumLifetimeDose: obj.AdjustedMaximumLifetimeDose,\r\n AdjustedNteAmountPerSingleDose: obj.AdjustedNteAmountPerSingleDose,\r\n RangeLowDose: obj.RangeLowDose,\r\n RangeLowDoseUnits: obj.RangeLowDoseUnits,\r\n RangeHighDose: obj.RangeHighDose,\r\n RangeHighDoseUnits: obj.RangeHighDoseUnits,\r\n RangeLowDoseForm: obj.RangeLowDoseForm,\r\n RangeLowDoseFormUnits: obj.RangeLowDoseFormUnits,\r\n RangeHighDoseForm: obj.RangeHighDoseForm,\r\n RangeHighDoseFormUnits: obj.RangeHighDoseFormUnits,\r\n NtePediDailyDoseStrength: obj.NtePediDailyDoseStrength,\r\n NtePediDailyDoseStrengthUnits: obj.NtePediDailyDoseStrengthUnits,\r\n NtePediDailyDoseForm: obj.NtePediDailyDoseForm,\r\n NtePediDailyDoseFormUnits: obj.NtePediDailyDoseFormUnits,\r\n IngredientStrength: obj.IngredientStrength,\r\n IngredientStrengthUomAbbr: obj.IngredientStrengthUomAbbr,\r\n IngredientStrengthUomDesc: obj.IngredientStrengthUomDesc,\r\n IngredientVolume: obj.IngredientVolume,\r\n IngredientVolumeUomAbbr: obj.IngredientVolumeUomAbbr,\r\n IngredientVolumeUomDesc: obj.IngredientVolumeUomDesc,\r\n WeightKg: obj.WeightKg,\r\n BodySurfaceArea: obj.BodySurfaceArea,\r\n ErrorMsg: obj.ErrorMsg,\r\n HasError: obj.HasError,\r\n });\r\n }\r\n\r\n function mapFromDto(obj) {\r\n if(!obj) {\r\n return null;\r\n }\r\n\r\n return new DoseRange(obj);\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n // TODO: move to separate module that has models\r\n angular.module('aprima-legacy-common').factory('DoseRangeInfo', [\r\n 'DoseRange',\r\n 'ObjUtil',\r\n DoseRangeInfoFactory,\r\n ]);\r\n\r\n function DoseRangeInfoFactory(\r\n DoseRange,\r\n ObjUtil\r\n ) {\r\n\r\n DoseRangeInfo.mapFromDto = mapFromDto;\r\n return DoseRangeInfo;\r\n\r\n function DoseRangeInfo(obj) {\r\n DoseRange.call(this, obj);\r\n\r\n ObjUtil.defineReadonlyProps(this, {\r\n MaxMinInformation: obj.MaxMinInformation,\r\n });\r\n }\r\n\r\n function mapFromDto(obj) {\r\n if(!obj) {\r\n return null;\r\n }\r\n\r\n return new DoseRangeInfo(obj);\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","(function(angular){\r\n 'use strict';\r\n\r\n // TODO: move to separate module that has models\r\n // provides standard values for age and gender to be used with imo requests\r\n angular.module('aprima-legacy-common').factory('ImoPatient', [\r\n '_',\r\n 'DateUtilities',\r\n 'ObjUtil',\r\n ImoPatientFactory\r\n ]);\r\n\r\n function ImoPatientFactory(\r\n _,\r\n DateUtilities,\r\n ObjUtil\r\n ) {\r\n\r\n var femaleRegex = /^f(emale)?$/i;\r\n var maleRegex = /^m(ale)?$/i;\r\n\r\n ImoPatient.mapFromApi = mapFromApi;\r\n return ImoPatient;\r\n\r\n function ImoPatient(name, ageInYears, gender) {\r\n var standardizedAge = null;\r\n ageInYears = parseFloat(ageInYears);\r\n if(!_.isNaN(ageInYears) && ageInYears >= 0) {\r\n standardizedAge = _.round(ageInYears);\r\n }\r\n\r\n var standardizedGender = null;\r\n if(femaleRegex.test(gender)) {\r\n standardizedGender = 'F';\r\n }\r\n else if(maleRegex.test(gender)) {\r\n standardizedGender = 'M';\r\n }\r\n\r\n ObjUtil.defineReadonlyProps(this, {\r\n name: name,\r\n age: ageInYears,\r\n standardizedAge: standardizedAge,\r\n hasAge: !!standardizedAge || standardizedAge === 0,\r\n gender: gender,\r\n standardizedGender: standardizedGender,\r\n hasGender: !!standardizedGender,\r\n });\r\n }\r\n\r\n function mapFromApi(patient) {\r\n if(!patient) {\r\n return null;\r\n }\r\n\r\n var name = patient.FirstName + ' ' + patient.LastName;\r\n\r\n // BirthDate from PatientDto, DateOfBirth from PatientHeaderDetailsDto\r\n var birthDate = patient.BirthDate || patient.DateOfBirth;\r\n // only PatientDto has DeathDate\r\n var deathDate = patient.DeathDate;\r\n var ageInfo = DateUtilities.getPersonAge(birthDate, deathDate, 'years');\r\n\r\n // Gender from PatientDto, GenderName and GenderAnsi from PatientHeaderDetailsDto\r\n var gender = patient.Gender || patient.GenderName || patient.GenderAnsi;\r\n\r\n return new ImoPatient(name, ageInfo.age, gender);\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","angular.module('aprima-legacy-common').factory('AprimaRestangular',\r\n [\r\n '$log',\r\n '$state',\r\n '_',\r\n 'AppRoutes',\r\n 'AprimaAnalytics',\r\n 'Bridge',\r\n 'BrowserService',\r\n 'configuration',\r\n 'debugLogService',\r\n 'LocalStorageRepository',\r\n 'Restangular',\r\n 'TransitionManager',\r\n function(\r\n $log,\r\n $state,\r\n _,\r\n AppRoutes,\r\n AprimaAnalytics,\r\n Bridge,\r\n BrowserService,\r\n configuration,\r\n debugLogService,\r\n LocalStorageRepository,\r\n Restangular,\r\n TransitionManager\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 var deviceId = LocalStorageRepository.getDeviceId();\r\n var jwt = LocalStorageRepository.getJsonWebToken();\r\n jwt = typeof jwt === 'undefined' ? 'undefined' : jwt ? jwt.length : '\"falsy token\"';\r\n var msg = 'User logged out by 401. Redirected to login. DeviceId=' + deviceId + ' JWT:' + jwt;\r\n\r\n $log.info(msg);\r\n AprimaAnalytics.sendException(msg);\r\n\r\n\r\n if($state.current.alternativeLoginRoute){\r\n TransitionManager.transition({ appRoute: AppRoutes.statementslogin.state});\r\n }\r\n else {\r\n TransitionManager.transition({ appRoute: AppRoutes.login.state});\r\n }\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('DashboardStructure',\r\n ['ServerInfoRepository', 'VersionService', 'CurrentUser', 'DeviceSettings', 'widgetViews', 'configuration',\r\n function (ServerInfoRepository, VersionService, CurrentUser, DeviceSettings, widgetViews, configuration) {\r\n 'use strict';\r\n\r\n function mapV1ConfigurationsToV2(configs) {\r\n var result = _.map(configs, mapV1ConfigurationToV2);\r\n\r\n return result;\r\n\r\n function mapV1ConfigurationToV2(config) {\r\n var result = {\r\n Id: config.Type,\r\n ExternalId: '',\r\n Name: config.Type,\r\n DisplayOrder: config.Type === 'All' ? 0 : 1,\r\n PhoneTiles: mapTiles(config, 1),\r\n TabletTiles: mapTiles(config, 2),\r\n DesktopTiles: mapTiles(config, 3)\r\n };\r\n\r\n return result;\r\n }\r\n\r\n function mapTiles(config, numColumns) {\r\n var tiles = _(config.WidgetDescriptors)\r\n .filter(function (tile) {\r\n return tile.Name !== 'header';\r\n })\r\n .map(_.partialRight(mapTile, numColumns))\r\n .value();\r\n\r\n return tiles;\r\n }\r\n\r\n function mapTile(tile, index, collection, numColumns) {\r\n var result = {\r\n Id: tile.Id,\r\n TileDescriptorId: _.find(widgetViews, {name: tile.Name}).id,\r\n Name: tile.Name,\r\n Heading: tile.Heading,\r\n ColumnSpan: Math.min(DeviceSettings.isPhoneOrOverride || tile.Column !== 'dblCol' ? 1 : 2, numColumns || 2),\r\n IsCollapsed: tile.Name === 'remarks' ? false : true,\r\n Filter: tile.Filter\r\n };\r\n\r\n return result;\r\n }\r\n }\r\n\r\n return {\r\n get: function (numColumns) {\r\n var routeSuffix = 'phone';\r\n\r\n switch (numColumns) {\r\n case 1:\r\n routeSuffix = 'phone';\r\n break;\r\n case 2:\r\n routeSuffix = 'tablet';\r\n break;\r\n case 3:\r\n routeSuffix = 'desktop';\r\n break;\r\n case undefined:\r\n case null:\r\n routeSuffix = '';\r\n break;\r\n default:\r\n throw new Error('Unsupported number of columns for dashboard configuration: ' + numColumns);\r\n }\r\n\r\n var isTileV2 = VersionService.checkVersionValid(ServerInfoRepository.getPrmAssemblyVersion(), configuration.MIN_PRM_DASHBOARD_VERSION);\r\n return isTileV2 ?\r\n {\r\n repositoryRoute: 'settings/patient-dashboards/' + routeSuffix,\r\n mapFn: _.identity\r\n } :\r\n {\r\n repositoryRoute: 'settings/patientdashboards/' + CurrentUser.get().userId,\r\n mapFn: mapV1ConfigurationsToV2\r\n };\r\n }\r\n };\r\n }]);\r\n\r\n","angular.module('aprima-legacy-common').factory('DateUtilities',\r\n ['_', 'moment', 'LanguageFactory',\r\n function (_, moment, LanguageFactory) {\r\n 'use strict';\r\n\r\n var words = {\r\n years: {'en_us': 'Years', 'es_mx': 'Años'},\r\n months: {'en_us': 'Months', 'es_mx': 'Meses'},\r\n days: {'en_us': 'Days', 'es_mx': 'Días'},\r\n weeks: {'en_us': 'Weeks', 'es_mx': 'Semanas'},\r\n deceased: {'en_us': 'deceased at', 'es_mx': 'fallecido en'}\r\n };\r\n var lang = LanguageFactory.getLang();\r\n\r\n return {\r\n getPersonAge: _getPersonAge,\r\n displayAge: _displayAge,\r\n getDurationString: getDurationString,\r\n getPersonAgeAbbr: _getPersonAgeAbbr\r\n };\r\n\r\n\r\n function _getPersonAgeAbbr(birthDate, deathDate, unit) {\r\n if(!moment(birthDate, 'MM/DD/YYYY').isValid()) {\r\n birthDate = moment(birthDate).format('L');\r\n }\r\n var ageInfo = _getPersonAge(birthDate, deathDate, unit);\r\n var age = ageInfo.age + '' + ageInfo.units.charAt(0).toLowerCase();\r\n return age;\r\n }\r\n // we need to assume the dates from the server are in mm/dd/yyy format\r\n // but we can use momentjs to format based on the language selection\r\n\r\n function _getPersonAge(birthDate, deathDate, unit) {\r\n var _units = 'Years';\r\n var _age = 0;\r\n var _deceased = false;\r\n var end;\r\n var years, months, days, weeks;\r\n var langCode = lang.code.toLowerCase();\r\n var birthDateMoment = birthDate;\r\n\r\n moment.locale(langCode);\r\n\r\n if (!moment(birthDate + '', 'MM/DD/YYYY').isValid()) {\r\n return {\r\n birthdate: '', age: 0, units: words.years[langCode]\r\n };\r\n }\r\n else {\r\n birthDateMoment = moment(birthDate, 'MM/DD/YYYY');\r\n }\r\n\r\n var tempDeathDate = moment(deathDate + '', 'MM/DD/YYYY');\r\n if (tempDeathDate.isValid()) {\r\n end = tempDeathDate;\r\n _deceased = true;\r\n }\r\n else {\r\n end = moment();\r\n }\r\n\r\n years = end.diff(birthDateMoment, 'years');\r\n months = end.diff(birthDateMoment, 'months');\r\n days = end.diff(birthDateMoment, 'days');\r\n weeks = end.diff(birthDateMoment, 'weeks');\r\n\r\n if ((!unit && days < 14) || unit === 'days') {\r\n _age = days;\r\n _units = words.days[langCode] || 'Days';\r\n }\r\n else if ((!unit && months < 2) || unit === 'weeks') {\r\n _age = weeks;\r\n _units = words.weeks[langCode] || 'Weeks';\r\n }\r\n else if ((!unit && years < 2) || unit === 'months') {\r\n _age = months;\r\n _units = words.months[langCode] || 'Months';\r\n }\r\n else {\r\n _age = years;\r\n _units = words.years[langCode] || 'Years';\r\n }\r\n\r\n return {\r\n birthdate: moment(birthDate, 'MM/DD/YYYY').format('L'),\r\n deathdate: moment(deathDate, 'MM/DD/YYYY').format('L'),\r\n age: _age,\r\n units: _units,\r\n deceased: _deceased\r\n };\r\n }\r\n\r\n function _displayAge (person, options) {\r\n var ageString;\r\n var outputString;\r\n var langCode = lang.code.toLowerCase();\r\n\r\n if (!person || person.birthdate === '') {\r\n return '';\r\n }\r\n\r\n ageString = person.age + ' ' + person.units;\r\n\r\n if (person.deceased) {\r\n ageString = words.deceased[langCode] + ' ' + ageString;\r\n }\r\n\r\n if (options && options.display === 'age') {\r\n return ageString;\r\n }\r\n\r\n if (options && options.display === 'birthdate') {\r\n return person.birthdate;\r\n }\r\n outputString = person.birthdate + ' (' + ageString + ')';\r\n return outputString;\r\n }\r\n\r\n function getDurationString(refDate) {\r\n var diff = Date.parse(refDate) - new Date();\r\n var msg = moment.duration(diff).humanize();\r\n if(diff < 0)\r\n return msg + ' ago';\r\n else\r\n return 'in ' + msg;\r\n }\r\n }]);\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, Math) {\r\n 'use strict';\r\n\r\n // Copied From iMedica.Prm.BusinessObject.NDD_DoseRangeChecking and converted to js\r\n\r\n // constants\r\n var singleDose = 'single dose ';\r\n var perDay = 'per day ';\r\n var AdjustedForWeight = ' (adjusted for patient\\'s weight)';\r\n var MetricWeightMask = '0.000';\r\n var AdjustedForBodySurfaceArea = ' (adjusted for body surface area)';\r\n var maxPediatricAgeInDays = 6569;\r\n\r\n angular.module('aprima-legacy-common').factory('DoseRangeUtil', [\r\n '_',\r\n 'NumUtil',\r\n 'StringBuilder',\r\n 'SystemGuid',\r\n DoseRangeUtil,\r\n ]);\r\n\r\n function DoseRangeUtil(\r\n _,\r\n NumUtil,\r\n StringBuilder,\r\n SystemGuid\r\n ) {\r\n\r\n var service = {\r\n createWeightBasedMaxMinInformation: createWeightBasedMaxMinInformation,\r\n formatAgeInDays: formatAgeInDays,\r\n getWeightBasedSummary: getWeightBasedSummary,\r\n mapVariableDosingFromDto: mapVariableDosingFromDto,\r\n mapVariableDosingToDto: mapVariableDosingToDto,\r\n processDoseRanges: processDoseRanges,\r\n GetMaxMinWarningMsg: getMaxMinWarningMsg,\r\n CreateMaxMinInformation: createMaxMinInformation,\r\n CalculateDosingInformation: calculateDosingInformation,\r\n allowsBsaAdjustment: allowsBsaAdjustment,\r\n canCalculateByMg: canCalculateByMg,\r\n };\r\n\r\n return service;\r\n\r\n function allowsBsaAdjustment(drc, patientAgeInDays) {\r\n if(!drc) {\r\n return false;\r\n }\r\n\r\n patientAgeInDays = patientAgeInDays || 0;\r\n\r\n var result = drc.BodySurfaceAreaRequired ||\r\n (patientAgeInDays <= maxPediatricAgeInDays &&\r\n drc.WeightRequired &&\r\n canCalculateByMg(drc));\r\n\r\n return result;\r\n }\r\n\r\n function canCalculateByMg(drc) {\r\n var strengthUomAbbr = drc && drc.IngredientStrengthUomAbbr;\r\n\r\n if(!strengthUomAbbr) {\r\n return false;\r\n }\r\n\r\n var isMg = strengthUomAbbr.toLowerCase() === 'mg';\r\n return isMg;\r\n }\r\n\r\n function createWeightBasedMaxMinInformation(weightBasedDoseRange) {\r\n if(!weightBasedDoseRange) {\r\n return '';\r\n }\r\n\r\n var sb = StringBuilder.init();\r\n\r\n addDoseRange(sb, weightBasedDoseRange.LowDoseAmount, weightBasedDoseRange.LowDoseAmountUnits, weightBasedDoseRange.HighDoseAmount, weightBasedDoseRange.HighDoseAmountUnits);\r\n if (sb.Length > 0)\r\n {\r\n sb.AppendLine();\r\n }\r\n\r\n addDoseRange(sb, weightBasedDoseRange.LowDoseForm, weightBasedDoseRange.LowDoseFormUnits, weightBasedDoseRange.HighDoseForm, weightBasedDoseRange.HighDoseFormUnits);\r\n if (sb.Length > 0)\r\n {\r\n sb.AppendLine();\r\n }\r\n\r\n addNTEInfo(sb, weightBasedDoseRange.NTEAmount, weightBasedDoseRange.NTEAmountUnits);\r\n addNTEInfo(sb, weightBasedDoseRange.NTEForm, weightBasedDoseRange.NTEFormUnits);\r\n addSingleDoseNTEInfo(sb, weightBasedDoseRange.NTESingleDoseAmount, weightBasedDoseRange.NTESingleDoseAmountUnits);\r\n\r\n return sb.ToString();\r\n }\r\n\r\n function formatAgeInDays(ageInDays) {\r\n if(ageInDays < 60) {\r\n return numFormat(ageInDays / 7, '0') + ' weeks';\r\n }\r\n if(ageInDays < 730) {\r\n return numFormat(ageInDays / 30.5, '0') + ' months';\r\n }\r\n return numFormat(ageInDays / 365, '0') + ' years';\r\n }\r\n\r\n function getWeightBasedSummary(weightBasedDosing) {\r\n var sb = StringBuilder.init();\r\n if (weightBasedDosing.minAge > 0) {\r\n sb.Append('Age ');\r\n sb.Append(formatAgeInDays(0));\r\n sb.Append(' - ');\r\n sb.AppendLine(formatAgeInDays(weightBasedDosing.minAge - 1));\r\n sb.AppendLine(' Manual Input Required');\r\n }\r\n weightBasedDosing.overrides.forEach(function(doseRange) {\r\n sb.AppendLine();\r\n sb.Append('Age ');\r\n sb.Append(formatAgeInDays(doseRange.minAge));\r\n sb.Append(' - ');\r\n sb.AppendLine(formatAgeInDays(doseRange.maxAge));\r\n sb.Append(' ');\r\n sb.Append(doseRange.overrideDosingQuantity ? doseRange.overrideDosingQuantity : weightBasedDosing.defaultDosingQuantity);\r\n sb.Append(' ');\r\n sb.Append(weightBasedDosing.unitDescription);\r\n\r\n var maxDose = doseRange.overrideMaximumDoseQuantity ? doseRange.overrideMaximumDoseQuantity : weightBasedDosing.defaultMaximumDoseQuantity;\r\n if (maxDose) {\r\n sb.AppendLine();\r\n sb.Append(' Maximum Dose ');\r\n sb.Append(maxDose);\r\n sb.Append(' ');\r\n sb.Append(weightBasedDosing.maxUnitDescription);\r\n }\r\n sb.AppendLine();\r\n });\r\n sb.AppendLine();\r\n sb.Append('Age ');\r\n sb.Append(formatAgeInDays(weightBasedDosing.maxAge + 1));\r\n sb.AppendLine(' and older');\r\n sb.Append(' Manual Input Required');\r\n return sb.ToString();\r\n }\r\n\r\n function mapVariableDosingFromDto(variableDosingDto) {\r\n if(!variableDosingDto) return null;\r\n var variableDosing = {\r\n isDisabled: false,\r\n minAge: variableDosingDto.MinAgeInDays,\r\n maxAge: variableDosingDto.MaxAgeInDays,\r\n defaultDosingQuantity: variableDosingDto.DefaultDosingQuantity,\r\n defaultMaximumDoseQuantity: variableDosingDto.DefaultMaximumDoseQuantity,\r\n variableDosingTypeId: variableDosingDto.VariableDosingTypeId,\r\n overrides: _.map(variableDosingDto.Overrides, mapOverrideFromDto),\r\n calculationErrors: variableDosingDto.CalculationErrors,\r\n };\r\n var processedDosingType = processDosingType(variableDosing.variableDosingTypeId);\r\n variableDosing.unitDescription = processedDosingType.dosingUnits;\r\n variableDosing.maxUnitDescription = processedDosingType.maxDoseUnits;\r\n variableDosing.summary = getWeightBasedSummary(variableDosing);\r\n return variableDosing;\r\n\r\n function mapOverrideFromDto(override) {\r\n return {\r\n minAge: override.MinAgeInDays,\r\n maxAge: override.MaxAgeInDays,\r\n overrideDosingQuantity: override.OverrideDosingQuantity,\r\n overrideMaximumDoseQuantity: override.OverrideMaximumDoseQuantity,\r\n };\r\n }\r\n }\r\n\r\n function mapVariableDosingToDto(variableDosing) {\r\n if (!variableDosing || variableDosing.isDisabled) return null;\r\n return {\r\n DefaultDosingQuantity: variableDosing.defaultDosingQuantity,\r\n DefaultMaximumDoseQuantity: variableDosing.defaultMaximumDoseQuantity,\r\n MaxAgeInDays: variableDosing.maxAge,\r\n MinAgeInDays: variableDosing.minAge,\r\n Overrides: _.map(variableDosing.overrides, mapOverrideToDto),\r\n VariableDosingTypeId: variableDosing.variableDosingTypeId,\r\n };\r\n\r\n function mapOverrideToDto(override) {\r\n return {\r\n MaxAgeInDays: override.maxAge,\r\n MinAgeInDays: override.minAge,\r\n OverrideDosingQuantity: override.overrideDosingQuantity,\r\n OverrideMaximumDoseQuantity: override.overrideMaximumDoseQuantity,\r\n };\r\n }\r\n }\r\n\r\n function processDoseRanges(variableDoseRanges) {\r\n var weightBasedDoseRanges = variableDoseRanges.WeightBasedDoseRanges || [];\r\n var minAge = 365;\r\n var maxAge = 0;\r\n var variableDosingTypeId;\r\n\r\n weightBasedDoseRanges.forEach(function(doseRange) {\r\n var matches = doseRange.MaxMinInformation && doseRange.MaxMinInformation.match(/\\r\\n/g);\r\n var maxMinInformationRows = (matches || []).length + 1;\r\n doseRange.maxMinInformationRows = maxMinInformationRows;\r\n\r\n if (doseRange.MinAgeInDays < minAge) {\r\n minAge = doseRange.MinAgeInDays;\r\n }\r\n if (doseRange.MaxAgeInDays > maxAge) {\r\n maxAge = doseRange.MaxAgeInDays;\r\n }\r\n variableDosingTypeId = doseRange.VariableDosingTypeId;\r\n });\r\n\r\n var processedDosingType = processDosingType(variableDosingTypeId);\r\n\r\n return {\r\n weightBasedDoseRanges: weightBasedDoseRanges,\r\n dosingUnits: processedDosingType.dosingUnits,\r\n maxAge: maxAge,\r\n maxDoseUnits: processedDosingType.maxDoseUnits,\r\n minAge: minAge,\r\n variableDosingTypeId: variableDosingTypeId,\r\n };\r\n }\r\n\r\n function processDosingType(variableDosingTypeId) {\r\n var dosingUnits;\r\n var maxDoseUnits;\r\n\r\n switch(variableDosingTypeId) {\r\n case SystemGuid.DosingCalculatorUnitGPerKgPerDay: {\r\n dosingUnits = 'g/kg/day';\r\n maxDoseUnits = 'g';\r\n break;\r\n }\r\n case SystemGuid.DosingCalculatorUnitMcgPerKgPerDay: {\r\n dosingUnits = 'mcg/kg/day';\r\n maxDoseUnits = 'mcg';\r\n break;\r\n }\r\n case SystemGuid.DosingCalculatorUnitMgPerKgPerDay: {\r\n dosingUnits = 'mg/kg/day';\r\n maxDoseUnits = 'mg';\r\n break;\r\n }\r\n case SystemGuid.DosingCalculatorUnitMlPerKgPerDay: {\r\n dosingUnits = 'mL/kg/day';\r\n maxDoseUnits = 'mL';\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n dosingUnits: dosingUnits,\r\n maxDoseUnits: maxDoseUnits,\r\n };\r\n }\r\n\r\n // this summary copied from PRM\r\n /// \r\n /// Returns >max/min warning message.\r\n /// \r\n /// amount is the dose in either mg or ml\r\n /// number of times taken a day\r\n /// the duration in number days\r\n /// found NDD_DoseRangeChecking\r\n /// max/min warning message\r\n function getMaxMinWarningMsg(drc, amount, frequencyPerDay, durationOfTherapyInDays) {\r\n if (!drc) {\r\n return '';\r\n }\r\n\r\n if(drc.ErrorMsg && -1 === drc.ErrorMsg.indexOf('there is no dosing information supplied for this patient')) {\r\n return drc.ErrorMsg;\r\n }\r\n\r\n amount = amount || 0;\r\n frequencyPerDay = frequencyPerDay || 0;\r\n durationOfTherapyInDays = durationOfTherapyInDays || 0;\r\n\r\n var dailyDose = dailyDosing(drc, amount, frequencyPerDay);\r\n\r\n if (drc.AdjustedLowDose > 0 && dailyDose < drc.AdjustedLowDose) {\r\n return 'The dosing is less than the recommended daily dosing; ' + fdbDosingInformation(drc);\r\n }\r\n else if (drc.AdjustedHighDose > 0 && drc.AdjustedMaximumSingleDose > 0 &&\r\n dailyDose > drc.AdjustedHighDose && dailyDose < drc.AdjustedMaximumSingleDose) {\r\n return 'The dosing is greater than the recommended daily dosing; ' + fdbDosingInformation(drc);\r\n }\r\n else if (drc.AdjustedHighDose > 0 && dailyDose > drc.AdjustedHighDose) {\r\n return 'The dosing is greater than the recommended daily dosing; ' + fdbDosingInformation(drc);\r\n }\r\n else if ((drc.AdjustedMaximumDosePerDay > 0 && dailyDose > drc.AdjustedMaximumDosePerDay) ||\r\n (drc.AdjustedNteAmountPerSingleDose > 0 && dailyDose > drc.AdjustedNteAmountPerSingleDose)) {\r\n return 'The dosing is greater than the recommended maximum single dose; ' + fdbDosingInformation(drc);\r\n }\r\n else if (drc.LowFrequency > 0 && drc.LowFrequency > frequencyPerDay) {\r\n // DRCM Warning Messages #8\r\n return 'Prescribed frequency of administration per day is less than the recommended minimum frequency of administration range for the drug. Please evaluate frequency.';\r\n }\r\n else if (drc.HighFrequency > 0 && frequencyPerDay > drc.HighFrequency) {\r\n // DRCM Warning Messages #9\r\n return 'Prescribed frequency of administration per day is greater than the recommended maximum frequency of administration for the drug. Please evaluate frequency.';\r\n }\r\n else if (drc.LowDuration > 0 && durationOfTherapyInDays < drc.LowDuration) {\r\n // DRCM Warning Messages #10\r\n return 'Prescribed duration is less than the recommended low duration for the drug.';\r\n }\r\n else if (drc.HighDuration > 0 && durationOfTherapyInDays > drc.HighDuration){\r\n // DRCM Warning Messages #11\r\n return 'Prescribed duration is greater than the highest recommended duration for the drug.';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n function createMaxMinInformation(drc, includeErrorMsg) {\r\n if(!drc) {\r\n return '';\r\n }\r\n\r\n var sb = StringBuilder.init();\r\n\r\n if (includeErrorMsg && drc.ErrorMsg && (drc.ErrorMsg.length > 0)) {\r\n sb.AppendLine(drc.ErrorMsg);\r\n sb.AppendLine();\r\n sb.AppendLine();\r\n }\r\n\r\n var doseLow = 0;\r\n var doseHigh = 0;\r\n var doseFormLow = 0;\r\n var doseFormHigh = 0;\r\n\r\n var doseUnit = '';\r\n var doseResult = getHighLowDose(drc);\r\n doseLow = doseResult.doseLow;\r\n doseHigh = doseResult.doseHigh;\r\n\r\n var formDoseResult = getHighLowFormDose(drc);\r\n doseFormLow = formDoseResult.doseFormLow;\r\n doseFormHigh = formDoseResult.doseFormHigh;\r\n\r\n if (doseLow > 0 && doseHigh > 0) {\r\n\r\n sb.Append(fdbDosingInformation(drc));\r\n sb.AppendLine();\r\n sb.AppendLine();\r\n\r\n if (drc.RangeLowDoseUnits) {\r\n doseUnit = drc.RangeLowDoseUnits;\r\n doseUnit = doseUnitOnly(doseUnit);\r\n }\r\n else {\r\n doseUnit = '';\r\n }\r\n\r\n sb.Append('dose ');\r\n sb.Append(numFormat(doseLow, '[0].[00]'));\r\n sb.Append(' ');\r\n sb.Append(doseUnit);\r\n\r\n if (drc.RangeHighDoseUnits) {\r\n doseUnit = drc.RangeHighDoseUnits;\r\n doseUnit = doseUnitOnly(doseUnit);\r\n }\r\n else {\r\n doseUnit = '';\r\n }\r\n\r\n sb.Append(' to ');\r\n sb.Append(numFormat(doseHigh, '[0].[00]'));\r\n sb.Append(' ');\r\n sb.Append(doseUnit);\r\n if (drc.WeightRequired) {\r\n sb.Append(AdjustedForWeight);\r\n }\r\n if (drc.BodySurfaceAreaRequired) {\r\n sb.Append(AdjustedForBodySurfaceArea);\r\n }\r\n }\r\n\r\n if (doseFormLow > 0 && doseFormHigh > 0) {\r\n if (drc.RangeLowDoseFormUnits) {\r\n doseUnit = drc.RangeLowDoseFormUnits;\r\n doseUnit = doseUnitOnly(doseUnit);\r\n }\r\n else {\r\n doseUnit = '';\r\n }\r\n\r\n sb.AppendLine();\r\n sb.Append('dose form ');\r\n sb.Append(numFormat(doseFormLow, '[0].[00]'));\r\n sb.Append(' ');\r\n sb.Append(doseUnit);\r\n\r\n if (drc.RangeHighDoseFormUnits) {\r\n doseUnit = drc.RangeHighDoseFormUnits;\r\n doseUnit = doseUnitOnly(doseUnit);\r\n }\r\n else {\r\n doseUnit = '';\r\n }\r\n\r\n sb.Append(' to ');\r\n sb.Append(numFormat(doseFormHigh, '[0].[00]'));\r\n sb.Append(' ');\r\n sb.Append(doseUnit);\r\n\r\n if (drc.WeightRequired) {\r\n sb.Append(AdjustedForWeight);\r\n }\r\n if (drc.BodySurfaceAreaRequired) {\r\n sb.Append(AdjustedForBodySurfaceArea);\r\n }\r\n }\r\n\r\n return sb.ToString();\r\n }\r\n\r\n function calculateDosingInformation(drc, frequencyPerDay, mg) {\r\n if(!drc) {\r\n return '';\r\n }\r\n\r\n frequencyPerDay = frequencyPerDay || 0;\r\n mg = mg || 0;\r\n\r\n if (mg > 0) {\r\n if (isMilliliterUnitVolume(drc)) {\r\n return calculateMLFromMGDosing(drc, frequencyPerDay, mg);\r\n }\r\n else {\r\n return calculateMGDosing(drc, mg);\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n function isMilliliterUnitVolume(drc) {\r\n if(!drc) {\r\n return false;\r\n }\r\n\r\n if(drc.IngredientVolumeUomAbbr &&\r\n drc.IngredientVolumeUomAbbr.toLowerCase() === 'ml' &&\r\n drc.IngredientVolume > 0) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function dailyDosing(drc, amount, frequencyPerDay) {\r\n if(!drc) {\r\n return 0;\r\n }\r\n amount = amount || 0;\r\n frequencyPerDay = frequencyPerDay || 0;\r\n\r\n var dosingValue = 0;\r\n var dosePerDay = multiply(amount, frequencyPerDay);\r\n var strength = 0;\r\n if (drc.IngredientStrength >= 0) {\r\n strength = drc.IngredientStrength;\r\n }\r\n if (isMilliliterUnitVolume(drc)) {\r\n dosingValue = multiply(strength, divide(amount, drc.IngredientVolume));\r\n }\r\n else {\r\n dosingValue = multiply(strength, dosePerDay);\r\n }\r\n\r\n return dosingValue;\r\n }\r\n\r\n function addDoseRange(sb, low, lowUnits, high, highUnits) {\r\n if(!sb) {\r\n return;\r\n }\r\n\r\n if (low > 0 && high > 0) {\r\n sb.Append(numFormat(low, '0.00'));\r\n\r\n if (lowUnits) {\r\n sb.Append(' ');\r\n sb.Append(lowUnits);\r\n }\r\n sb.Append(' - ');\r\n sb.Append(numFormat(high, '0.00'));\r\n\r\n if (highUnits) {\r\n sb.Append(' ');\r\n sb.Append(highUnits);\r\n }\r\n }\r\n }\r\n\r\n function addNTEInfo(sb, nte, nteUnits) {\r\n if(!sb) {\r\n return;\r\n }\r\n\r\n if (nte > 0) {\r\n sb.Append('NTE: ');\r\n sb.Append(numFormat(nte, '0.00'));\r\n if (nteUnits) {\r\n sb.Append(' ');\r\n sb.Append(nteUnits);\r\n }\r\n sb.AppendLine();\r\n }\r\n }\r\n\r\n function addSingleDoseNTEInfo(sb, nte, nteUnits) {\r\n if(!sb) {\r\n return;\r\n }\r\n\r\n if (nte > 0) {\r\n sb.Append('Single Dose NTE: ');\r\n sb.Append(numFormat(nte, '0.00'));\r\n if (nteUnits) {\r\n sb.Append(' ');\r\n sb.Append(nteUnits);\r\n }\r\n sb.AppendLine();\r\n }\r\n }\r\n\r\n function doseFormRange(drc, sb) {\r\n if(!drc || !sb) {\r\n return;\r\n }\r\n\r\n addDoseRange(sb, drc.RangeLowDoseForm, drc.RangeLowDoseFormUnits, drc.RangeHighDoseForm, drc.RangeHighDoseFormUnits);\r\n }\r\n\r\n function doseRange(drc, sb) {\r\n if(!drc || !sb) {\r\n return;\r\n }\r\n\r\n addDoseRange(sb, drc.RangeLowDose, drc.RangeLowDoseUnits, drc.RangeHighDose, drc.RangeHighDoseUnits);\r\n }\r\n\r\n function fdbDosingInformation(drc) {\r\n var sb = StringBuilder.init();\r\n\r\n if (isMilliliterUnitVolume(drc)) {\r\n doseFormRange(drc, sb);\r\n if (sb.Length > 0) {\r\n sb.Append('; ');\r\n }\r\n doseRange(drc, sb);\r\n }\r\n else {\r\n doseRange(drc, sb);\r\n if (sb.Length > 0) {\r\n sb.Append('; ');\r\n }\r\n doseFormRange(drc, sb);\r\n }\r\n\r\n return sb.ToString();\r\n }\r\n\r\n /// \r\n /// This method gets the doselow and the dosehigh values from the dosing row and corrects\r\n /// the doselow and dosehigh values by the either the patient's weight or body surface area\r\n /// as required.\r\n /// \r\n /// NDD_DoseRangeChecking row selected for the patient's age\r\n /// returns the the corrected doseLow value\r\n /// returns the the corrected doseHigh value\r\n function getHighLowDose(drc) {\r\n var result = {\r\n doseLow: 0,\r\n doseHigh: 0,\r\n };\r\n\r\n if(!drc) {\r\n return result;\r\n }\r\n\r\n if (drc.RangeLowDose >= 0 && drc.RangeHighDose >= 0) {\r\n result.doseLow = drc.LowDose;\r\n result.doseHigh = drc.HighDose;\r\n }\r\n\r\n if (drc.WeightRequired && drc.WeightKg >= 0) {\r\n result.doseLow = multiply(result.doseLow, Math.max(1, drc.WeightKg));\r\n result.doseHigh = multiply(result.doseHigh, Math.max(1, drc.WeightKg));\r\n }\r\n\r\n if (drc.BodySurfaceAreaRequired && drc.BodySurfaceArea >= 0) {\r\n var bsa = drc.BodySurfaceArea;\r\n result.doseLow = divide(multiply(result.doseLow, bsa), 1.73);\r\n result.doseHigh = divide(multiply(result.doseHigh, bsa), 1.73);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /// \r\n /// This method gets the doseformlow and the doseformhigh values from the dosing row \r\n /// and corrects the doseformlow and doseformhigh values by the either the patient's \r\n /// weight or body surface area as required.\r\n /// \r\n /// NDD_DoseRangeChecking row selected for the patient's age\r\n /// returns the the corrected doseFormLow value\r\n /// returns the the corrected doseFormHigh value\r\n function getHighLowFormDose(drc) {\r\n var result = {\r\n doseFormLow: 0,\r\n doseFormHigh: 0,\r\n };\r\n\r\n if(!drc) {\r\n return result;\r\n }\r\n\r\n if (drc.RangeLowDoseForm >= 0 && drc.RangeHighDoseForm >= 0) {\r\n result.doseFormLow = drc.RangeLowDoseForm;\r\n result.doseFormHigh = drc.RangeHighDoseForm;\r\n }\r\n\r\n if (drc.WeightRequired && drc.WeightKg >= 0) {\r\n result.doseFormLow = multiply(result.doseFormLow, Math.max(1, drc.WeightKg));\r\n result.doseFormHigh = multiply(result.doseFormHigh, Math.max(1, drc.WeightKg));\r\n }\r\n\r\n if (drc.BodySurfaceAreaRequired && drc.BodySurfaceArea >= 0) {\r\n var bsa = drc.BodySurfaceArea;\r\n result.doseFormLow = divide(multiply(result.doseFormLow, bsa), 1.73);\r\n result.doseFormHigh = divide(multiply(result.doseFormHigh, bsa), 1.73);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function doseUnitOnly(doseUnit) {\r\n if(!doseUnit) {\r\n return doseUnit;\r\n }\r\n\r\n var len = doseUnit.indexOf('/');\r\n\r\n if (len > 0) {\r\n doseUnit = doseUnit.substr(0, len);\r\n }\r\n\r\n return doseUnit;\r\n }\r\n\r\n function dosingUnitMilliliter(drc, frequencyPerDay, dose) {\r\n var sb = StringBuilder.init();\r\n frequencyPerDay = frequencyPerDay || 0;\r\n dose = dose || 0;\r\n\r\n if (isMilliliterUnitVolume(drc)) {\r\n var timesPerDay = frequencyPerDay;\r\n\r\n if (frequencyPerDay === 0) {\r\n sb.AppendLine('Cannot calculate a single dose without a frequency.');\r\n timesPerDay = 1;\r\n }\r\n\r\n // do milliliter per day\r\n var convertDose = _.round(divide(dose, timesPerDay), 1);\r\n if (convertDose !== 0) {\r\n sb.AppendLine();\r\n sb.Append('Milliliter(s) ');\r\n\r\n if (frequencyPerDay > 0) {\r\n sb.Append(singleDose);\r\n sb.Append(numFormat(convertDose, '[0].[0]'));\r\n }\r\n else {\r\n sb.Append(perDay);\r\n sb.Append(numFormat(multiply(convertDose, timesPerDay), '[0].[0]'));\r\n }\r\n }\r\n }\r\n\r\n return sb.ToString();\r\n }\r\n\r\n function formatEach(dose) {\r\n dose = dose || 0;\r\n\r\n var result = '';\r\n\r\n var remainder = subtract(dose, Math.trunc(dose));\r\n\r\n if (remainder > 0.499 && remainder < 0.999) {\r\n result = ' 1/2';\r\n }\r\n\r\n result = numFormat(Math.trunc(dose), '[0]') + result;\r\n return result;\r\n }\r\n\r\n function dosingUnitMilligram(mg, strength) {\r\n mg = mg || 0;\r\n strength = strength || 0;\r\n\r\n var sb = StringBuilder.init();\r\n\r\n // do milligram per dose\r\n var convertDose = Math.floor(mg);\r\n if (convertDose !== 0) {\r\n sb.Append('Milligram(s) ');\r\n sb.Append(singleDose);\r\n sb.Append(numFormat(convertDose, '[0]'));\r\n }\r\n\r\n // do tables per dose\r\n convertDose = _.round(mg, 3);\r\n var formatted = formatEach(divide(convertDose, strength));\r\n if (formatted) {\r\n sb.AppendLine();\r\n sb.Append('Each ');\r\n sb.Append(singleDose);\r\n sb.Append(formatted);\r\n }\r\n\r\n return sb.ToString();\r\n }\r\n\r\n function calculateMLFromMGDosing(drc, frequencyPerDay, mg) {\r\n if(!drc) {\r\n return '';\r\n }\r\n\r\n frequencyPerDay = frequencyPerDay || 0;\r\n mg = mg || 0;\r\n\r\n var sb = StringBuilder.init();\r\n\r\n if (drc.WeightRequired && drc.WeightKg >= 0) {\r\n sb.Append(numFormat(multiply(mg, drc.WeightKg), '0.0'));\r\n sb.Append(' mg ');\r\n sb.AppendLine(AdjustedForWeight);\r\n sb.AppendLine();\r\n }\r\n\r\n if (mg > 0 &&\r\n drc.IngredientVolume > 0 &&\r\n drc.IngredientStrength > 0) {\r\n\r\n var ml = divide(drc.IngredientVolume, drc.IngredientStrength);\r\n var totalML = 0;\r\n\r\n if (drc.WeightRequired && drc.WeightKg >= 0) {\r\n totalML = multiply(ml, mg, drc.WeightKg);\r\n }\r\n else {\r\n totalML = multiply(ml, mg);\r\n }\r\n sb.Append(dosingUnitMilliliter(drc, frequencyPerDay, totalML));\r\n\r\n // add calculation information\r\n sb.AppendLine();\r\n sb.Append('Daily total ml: ');\r\n sb.Append(numFormat(totalML, '0.0'));\r\n if (drc.WeightRequired) {\r\n sb.Append(' = ((');\r\n }\r\n else {\r\n sb.Append(' = (');\r\n }\r\n\r\n sb.Append(numFormat(ml, '0.0[000]'));\r\n sb.Append(' (ml per mg) * ');\r\n sb.Append(numFormat(mg, '0.0'));\r\n\r\n if (drc.WeightRequired) {\r\n sb.Append(') * ');\r\n sb.Append(numFormat(drc.WeightKg || 0, MetricWeightMask));\r\n sb.Append('(kg))');\r\n }\r\n else {\r\n sb.Append(')');\r\n }\r\n }\r\n\r\n return sb.ToString();\r\n }\r\n\r\n function calculateMGDosing(drc, mg) {\r\n if(!drc) {\r\n return '';\r\n }\r\n\r\n mg = mg || 0;\r\n\r\n var sb = StringBuilder.init();\r\n\r\n var bsa = 0;\r\n var adjustedMG = mg;\r\n var strength = 0;\r\n if (drc.IngredientStrength >= 0) {\r\n strength = drc.IngredientStrength;\r\n }\r\n\r\n if (drc.WeightRequired) {\r\n adjustedMG = multiply(mg, (drc.WeightKg || 0));\r\n sb.Append(numFormat(adjustedMG, '0.0'));\r\n sb.Append(' mg ');\r\n sb.AppendLine(AdjustedForWeight);\r\n sb.AppendLine();\r\n }\r\n else if (drc.BodySurfaceAreaRequired && drc.BodySurfaceArea >= 0) {\r\n bsa = drc.BodySurfaceArea;\r\n adjustedMG = divide(multiply(bsa, mg), 1.73);\r\n sb.Append(numFormat(adjustedMG, '0.0'));\r\n sb.Append(' mg ');\r\n sb.AppendLine(AdjustedForBodySurfaceArea);\r\n sb.AppendLine();\r\n }\r\n\r\n sb.Append(dosingUnitMilligram(adjustedMG, strength));\r\n\r\n // added calculation information\r\n if (drc.WeightRequired) {\r\n sb.AppendLine();\r\n sb.AppendLine();\r\n sb.Append('Single dose mg: ');\r\n sb.Append(numFormat(adjustedMG, '0.0'));\r\n sb.Append(' = (');\r\n sb.Append(numFormat(mg, '0.0'));\r\n sb.Append('(mg) * ');\r\n sb.Append(numFormat(drc.WeightKg || 0, MetricWeightMask));\r\n sb.Append('(kg))');\r\n }\r\n else if (drc.BodySurfaceAreaRequired) {\r\n // add calculation information\r\n sb.AppendLine();\r\n sb.AppendLine();\r\n sb.Append('Single pediatric dose mg: ');\r\n sb.Append(numFormat(adjustedMG, '0.0'));\r\n sb.Append(' = ((');\r\n sb.Append(numFormat(bsa, '0.0[000]'));\r\n sb.Append(' (bsa m2) * ');\r\n sb.Append(numFormat(mg, '0.0'));\r\n sb.Append(' (adult dose mg)');\r\n sb.AppendLine(') / 1.73)');\r\n sb.AppendLine();\r\n sb.Append('Body Surface Area is calculated using the \\'DuBois and DuBois 2\\' formula.');\r\n }\r\n\r\n return sb.ToString();\r\n }\r\n\r\n function multiply() {\r\n var result = NumUtil.multiply.apply(null, arguments);\r\n return result;\r\n }\r\n\r\n function divide(num1, num2) {\r\n var result = NumUtil.divide(num1, num2);\r\n return result;\r\n }\r\n\r\n function subtract(num1, num2) {\r\n var result = NumUtil.subtract(num1, num2);\r\n return result;\r\n }\r\n\r\n function numFormat(num, format) {\r\n var result = NumUtil.format(num, format);\r\n return result;\r\n }\r\n }\r\n\r\n})(window.angular, window.Math);\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 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 'LanguageFactory', ['gettextCatalog', 'LocalStorageRepository', 'TranslateService', function LanguageFactory(gettextCatalog, LocalStorageRepository, TranslateService) {\r\n\r\n 'use strict';\r\n\r\n var currentLang = {code: gettextCatalog.currentLanguage};\r\n var langOptions = [\r\n {\r\n name: 'English',\r\n id: 'en_US'\r\n },\r\n {\r\n name: 'Spanish',\r\n id: 'es_MX'\r\n }\r\n ];\r\n\r\n //sometimes the language has a '-' in it which doesnt match our language formats with '_'\r\n function normalizeToUnderscore(language) {\r\n if (language) {\r\n return language.replace('-', '_');\r\n }\r\n return language;\r\n }\r\n\r\n function updateCurrentLangCode(code) {\r\n currentLang.code = gettextCatalog.currentLanguage = normalizeToUnderscore(code);\r\n TranslateService.use(currentLang.code);\r\n }\r\n\r\n function setLang(language) {\r\n updateCurrentLangCode(language);\r\n LocalStorageRepository.setLang(gettextCatalog.currentLanguage);\r\n }\r\n\r\n function getLang() {\r\n var currentLangCode = (currentLang.code) ? normalizeToUnderscore(currentLang.code) : 'en_US';\r\n updateCurrentLangCode(currentLangCode);\r\n return currentLang;\r\n }\r\n\r\n function getActiveLanguage(){\r\n return _.find(langOptions, {id : getLang().code});\r\n }\r\n\r\n return {\r\n setLang: setLang,\r\n getLang: getLang,\r\n getLangOptions: langOptions,\r\n getActiveLanguage: getActiveLanguage\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 function getPatientDashboardsKey(type) {\r\n var key = 'patientDashboardConfigurations';\r\n\r\n if(angular.isNumber(type)) {\r\n type = '' + type + 'cols';\r\n }\r\n\r\n if(type) {\r\n key += '.' + type;\r\n }\r\n return key;\r\n }\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 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 storage.get('gatewayUrl');\r\n },\r\n\r\n setGatewayUrl: function (value) {\r\n storage.set('gatewayUrl', 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 storage.set('lang', lang);\r\n },\r\n\r\n getLang: function () {\r\n var lang = storage.get('lang');\r\n return lang;\r\n },\r\n\r\n setDefaultSuperbillSubmissionMethod: function (methodId) {\r\n storage.set('superbillMethod', methodId);\r\n },\r\n\r\n getDefaultSuperbillSubmissionMethod: function() {\r\n return storage.get('superbillMethod');\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 storage.set('patientDashboardWidgets', widget);\r\n },\r\n\r\n getPatientDashboardWidgets: function () {\r\n var pdw = storage.get('patientDashboardWidgets');\r\n return pdw;\r\n },\r\n setPatientDashboardConfigurations: function (newList, type) {\r\n var list = this.getPatientDashboardConfigurations(type) || [];\r\n var hasV1Tiles = _.some(list, function (val) {\r\n return !_.isUndefined(val.WidgetDescriptors);\r\n });\r\n\r\n if(!_.isEmpty(list) && !hasV1Tiles) {\r\n _.forEach(newList, function (val) {\r\n val.Tiles = _.map(val.Tiles, function (tile) {\r\n var savedConfig = _(list).find({Id: val.Id});\r\n if(savedConfig) {\r\n var savedTile = _(savedConfig.Tiles).find({Id: tile.Id});\r\n if(savedTile) {\r\n return _.defaults(tile, savedTile);\r\n }\r\n }\r\n return tile;\r\n });\r\n });\r\n }\r\n\r\n storage.set(getPatientDashboardsKey(type), newList);\r\n },\r\n\r\n removePatientDashboardWidgets: function () {\r\n storage.remove('patientDashboardWidgets');\r\n },\r\n\r\n overwritePatientDashboardConfigurations: function (newList, type) {\r\n storage.set(getPatientDashboardsKey(type), newList);\r\n },\r\n\r\n getPatientDashboardConfigurations: function (type) {\r\n return storage.get(getPatientDashboardsKey(type));\r\n },\r\n\r\n removePatientDashboardConfigurations: function (type) {\r\n storage.remove(getPatientDashboardsKey(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 storage.get('serviceSiteId');\r\n },\r\n\r\n setDefaultServiceSiteId: function(serviceSiteId) {\r\n storage.set('serviceSiteId', 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 storage.get('settings.currentUserLicenses');\r\n },\r\n setCurrentUserLicenses: function setCurrentUserLicenses(licenses) {\r\n storage.set('settings.currentUserLicenses', licenses);\r\n },\r\n\r\n getIsERxEnabled: function () {\r\n return storage.get('settings.erxenabled');\r\n },\r\n setIsERxEnabled: function (enabled) {\r\n storage.set('settings.erxenabled', !!enabled);\r\n },\r\n\r\n getAllowImperialUnits: function () {\r\n return storage.get('settings.allowImperialUnitsInPrescription');\r\n },\r\n setAllowImperialUnits: function (allowed) {\r\n storage.set('settings.allowImperialUnitsInPrescription', !!allowed);\r\n },\r\n\r\n getApplicationVersion: function(){\r\n return storage.get('applicationVersion');\r\n },\r\n setApplicationVersion: function(version){\r\n storage.set('applicationVersion', 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 var activeKeys = storage.get(keyType + 'keys');\r\n if(activeKeys){\r\n var keyDictionary = activeKeys.split(',');\r\n\r\n _.forEach(keyDictionary, function(key){\r\n storage.remove(key);\r\n });\r\n }\r\n\r\n storage.remove(keyType + 'keys');\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 storage.remove('messagetypessupportedforcreate');\r\n },\r\n\r\n setIsCacheClient: function(value){\r\n storage.set('settings.iscacheclient', value);\r\n }\r\n };\r\n }]);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-legacy-common').factory('LoginInitializationServiceJs', [\r\n '$log',\r\n '$q',\r\n 'AprimaAnalytics',\r\n 'Bridge',\r\n 'aprgettext',\r\n 'LocalStorageRepository',\r\n 'LoginInitializationService',\r\n 'LogInService',\r\n 'LogOffService',\r\n 'ServerInfoRepository',\r\n 'SettingService',\r\n 'TransitionManager',\r\n 'VersionService',\r\n LoginInitializationServiceJs,\r\n ]);\r\n\r\n function LoginInitializationServiceJs(\r\n $log,\r\n $q,\r\n AprimaAnalytics,\r\n Bridge,\r\n gettext,\r\n LocalStorageRepository,\r\n LoginInitializationService,\r\n LogInService,\r\n LogOffService,\r\n ServerInfoRepository,\r\n SettingService,\r\n TransitionManager,\r\n VersionService\r\n ) {\r\n function preLogin(clientServerInfo, clientId, username) {\r\n var oldClientId = LocalStorageRepository.getClientID(),\r\n oldUsername = LocalStorageRepository.getUserName(),\r\n isNew = false;\r\n\r\n if (oldClientId !== clientId || oldUsername !== username) {\r\n LocalStorageRepository.clearAll();\r\n LogInService.setDefaultRedirect();\r\n\r\n isNew = true;\r\n }\r\n\r\n LogOffService.logoff();\r\n LocalStorageRepository.setClientURL(clientServerInfo.registeredServerInfo.AppServerUrl);\r\n LocalStorageRepository.setGatewayUrl(clientServerInfo.gatewayConfiguration.url);\r\n LocalStorageRepository.setClientID(clientId);\r\n LocalStorageRepository.setUserName(username);\r\n\r\n return isNew;\r\n }\r\n\r\n function updateVersionInfo(userLoginInfo) {\r\n if (userLoginInfo) {\r\n if(userLoginInfo.ProductVersions){\r\n if (userLoginInfo.ProductVersions.PrmAssemblyVersion) {\r\n ServerInfoRepository.setPrmAssemblyVersion(userLoginInfo.ProductVersions.PrmAssemblyVersion);\r\n }\r\n if (userLoginInfo.ProductVersions.PrmDatabaseVersion) {\r\n ServerInfoRepository.setPrmDatabaseVersion(userLoginInfo.ProductVersions.PrmDatabaseVersion);\r\n }\r\n if (userLoginInfo.ProductVersions.PrmDatabaseBuild) {\r\n ServerInfoRepository.setPrmDatabaseBuild(userLoginInfo.ProductVersions.PrmDatabaseBuild);\r\n }\r\n if (userLoginInfo.ProductVersions.AppServiceVersion) {\r\n ServerInfoRepository.setMobileAssemblyVersion(userLoginInfo.ProductVersions.AppServiceVersion);\r\n }\r\n if(userLoginInfo.SupportedFeatures){\r\n ServerInfoRepository.setSupportedFeatures(userLoginInfo.SupportedFeatures);\r\n }\r\n }\r\n\r\n if(userLoginInfo.DatabaseName){\r\n ServerInfoRepository.setDatabaseName(userLoginInfo.DatabaseName);\r\n }\r\n }\r\n }\r\n\r\n function haveVersionsChanged(userLoginInfo) {\r\n if (userLoginInfo && userLoginInfo.ProductVersions) {\r\n return ( LocalStorageRepository.getApplicationVersion() !== VersionService.getClientVersion() ||\r\n userLoginInfo.ProductVersions.PrmAssemblyVersion !== ServerInfoRepository.getPrmAssemblyVersion() ||\r\n userLoginInfo.ProductVersions.PrmDatabaseVersion !== ServerInfoRepository.getPrmDatabaseVersion() ||\r\n userLoginInfo.ProductVersions.PrmDatabaseBuild !== ServerInfoRepository.getPrmDatabaseBuild() ||\r\n userLoginInfo.ProductVersions.AppServiceVersion !== ServerInfoRepository.getMobileAssemblyVersion());\r\n }\r\n else{\r\n return true;\r\n }\r\n }\r\n\r\n function initializeFromPrmLogin(userLoginInfo) {\r\n var authToken = userLoginInfo.JsonWebToken,\r\n clientURL = LocalStorageRepository.getClientURL(),\r\n msg;\r\n\r\n return VersionService.checkVersions(userLoginInfo.SupportedApiVersions, userLoginInfo.MinClientVersion).then(function (validationSuccesful) {\r\n if (validationSuccesful === false) {\r\n return $q.reject(new Error(gettext('Client Version not compatible with api server. Please update your app.')));\r\n }\r\n\r\n if (!userLoginInfo) {\r\n msg = gettext('Unexpected null result from server in Login');\r\n }\r\n else if (!userLoginInfo.DeviceId) {\r\n return $q.reject(new Error(gettext('Client Version not compatible with api server. Please update your app.')));\r\n }\r\n\r\n if (msg) {\r\n $log.warn(msg);\r\n AprimaAnalytics.sendException(msg);\r\n }\r\n\r\n LoginInitializationService.initializeFromPrmLogin(userLoginInfo);\r\n LocalStorageRepository.clearKeysOfType('metadata');\r\n\r\n LocalStorageRepository.setDeviceId(userLoginInfo.DeviceId);\r\n LocalStorageRepository.setJsonWebToken(authToken);\r\n LocalStorageRepository.setUserID(userLoginInfo.Id);\r\n LocalStorageRepository.setUserPermissions(userLoginInfo.Permissions || {});\r\n if(haveVersionsChanged(userLoginInfo)){\r\n LocalStorageRepository.clearOldVersionCache();\r\n LocalStorageRepository.setApplicationVersion(VersionService.getClientVersion());\r\n }\r\n\r\n updateVersionInfo(userLoginInfo);\r\n\r\n Bridge.changeUserInfo(authToken, clientURL, userLoginInfo.Id);\r\n\r\n return SettingService.loadSettings().catch(function () {\r\n return $q.reject(new Error(gettext('Error loading settings.')));\r\n });\r\n }, function () {\r\n return $q.reject(new Error(gettext('Client Version not compatible with api server. Please update your app.')));\r\n });\r\n }\r\n\r\n function finishPrmLogin() {\r\n TransitionManager.transition(LogInService.getRedirect());\r\n LogInService.setDefaultRedirect();\r\n }\r\n\r\n return {\r\n initializeFromPrmLogin: initializeFromPrmLogin,\r\n preLogin: preLogin,\r\n finishPrmLogin: finishPrmLogin,\r\n };\r\n }\r\n})(window.angular);\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 // These functions are used in Angular but not AngularJS.\r\n getAppRoutes: getAppRoutes,\r\n setupAppRoutes: setupAppRoutes,\r\n };\r\n\r\n this.setupAppRoutes = setupAppRoutes;\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","//WebViewManager for traditional browsers. It navigates the current window to the new route.\r\nangular.module('aprima-legacy-common').factory('BrowserWebViewManager', ['$window', '$state',\r\n function ($window, $state) {\r\n 'use strict';\r\n\r\n function activateView(appRoute, transition) {\r\n var opts = transition.opts;\r\n if(opts.replaceCurrentState && opts.replaceCurrentState === true){\r\n $state.go(appRoute.state, opts, {location: 'replace'});\r\n }\r\n else{\r\n $state.go(appRoute.state, opts);\r\n }\r\n return true;\r\n }\r\n\r\n function goBack(){\r\n $window.history.back();\r\n }\r\n\r\n return {\r\n activateView: activateView,\r\n goBack : goBack\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","//takes a route pattern and an parameter object and formats the pattern with the parameters.\r\n//reuses the route formatting built in to angular-ui-router library, but exposes it as our own library for easy maintainability.\r\n//it also allows you to write unit tests to discover how the $urlMatcherFactory works internally.\r\nangular.module('aprima-legacy-common').factory('RouteFormatter', ['$urlMatcherFactory', '_', function ($urlMatcherFactory, _) {\r\n 'use strict';\r\n var formatRoute = function (routePattern, params) {\r\n var route;\r\n\r\n params = !_.isUndefined(params) ? params : {};\r\n\r\n route = $urlMatcherFactory.compile(routePattern).format(params);\r\n\r\n return route;\r\n };\r\n\r\n var formatRelativeRoute = function formatRelativeRoute(routePattern, parentRoutePattern, params) {\r\n var route;\r\n\r\n params = !_.isUndefined(params) ? params : {};\r\n if(routePattern.indexOf(parentRoutePattern + '/') === 0)\r\n routePattern = routePattern.substring(parentRoutePattern.length);\r\n route = $urlMatcherFactory.compile(routePattern).format(params);\r\n\r\n return route;\r\n };\r\n\r\n return {\r\n formatRoute: formatRoute,\r\n formatRelativeRoute: formatRelativeRoute\r\n };\r\n}]);\r\n","//Used to invoke transitions in the TransitionManager and will handle transition if the transition is for the current page.\r\nangular.module('aprima-legacy-common').service('TransitionManagerJs', ['$log', '$state', 'AppRoutes', '_', 'WebViewManager', '$rootScope', '$transitions',\r\n function($log, $state, AppRoutes, _, WebViewManager, $rootScope, $transitions) {\r\n 'use strict';\r\n\r\n var previousTransition;\r\n\r\n $transitions.onStart({}, function(transition) {\r\n var fromState = transition.from() || {};\r\n var fromStateName = fromState && fromState.name || '';\r\n var toState = transition.targetState() || {};\r\n var toStateName = toState && toState.name() || '';\r\n var appRoute = _(AppRoutes).findKey({state: fromStateName || toStateName});\r\n\r\n previousTransition = {\r\n appRoute: appRoute,\r\n opts: _.cloneDeep(transition.params('from')),\r\n };\r\n });\r\n\r\n var transitionToState = function(transition, replaceState){\r\n transition = formatTransition(transition);\r\n\r\n if(!transition){\r\n return;\r\n }\r\n\r\n var targetRoute = AppRoutes[transition.appRoute];\r\n\r\n if(!targetRoute) {\r\n $log.warn('Unable to find AppRoute: \"' + transition.appRoute + '\". Aborting transition.');\r\n return false;\r\n }\r\n\r\n if(!_.isBoolean(transition.opts.replaceCurrentState)){\r\n if(_.isBoolean(replaceState)){\r\n transition.opts.replaceCurrentState = replaceState;\r\n }\r\n else if(!$state.current || $state.current.name !== targetRoute.state){\r\n transition.opts.replaceCurrentState = false;\r\n }\r\n else{\r\n transition.opts.replaceCurrentState = true;\r\n }\r\n }\r\n\r\n if(targetRoute.options){\r\n transition.opts = _.merge(transition.opts, targetRoute.options);\r\n }\r\n\r\n $rootScope.$broadcast('TransitionActivated', transition);\r\n\r\n return WebViewManager.activateView(targetRoute, transition);\r\n };\r\n\r\n var replaceCurrentState = function(transition){\r\n transitionToState(transition, true);\r\n };\r\n\r\n function getPreviousTransition(){\r\n return previousTransition;\r\n }\r\n\r\n function formatTransition(transition){\r\n if (!transition) {\r\n $log.warn('Cannot transition to null or undefined transition');\r\n return;\r\n }\r\n\r\n transition = _.defaults(transition, {\r\n type: 'transition',\r\n appRoute: '',\r\n opts: {}\r\n });\r\n\r\n $log.info('TransitionManager postMessage to ' + JSON.stringify(transition));\r\n\r\n return transition;\r\n }\r\n\r\n var goBack = function(){\r\n WebViewManager.goBack();\r\n };\r\n\r\n return {\r\n transition: transitionToState,\r\n replaceCurrentState: replaceCurrentState,\r\n goBack: goBack,\r\n getPreviousTransition: getPreviousTransition\r\n };\r\n }]);\r\n","angular.module('aprima-legacy-common').factory('XamarinWebViewManager',\r\n ['RouteFormatter', '_', 'Bridge', '$state',\r\n function (RouteFormatter, _, Bridge, $state) {\r\n 'use strict';\r\n\r\n function completeRoute(appState){\r\n var parentSeperator = appState.state.lastIndexOf('.');\r\n \r\n if(parentSeperator > 0){\r\n var parentState = $state.get(appState.state.substring(0, parentSeperator));\r\n \r\n return completeRoute({state: parentState.name, route: parentState.url}) + appState.route;\r\n }\r\n else{\r\n return appState.route;\r\n }\r\n }\r\n\r\n function getRoute(appRoute, transition) {\r\n if (!appRoute.route) {\r\n return '';\r\n }\r\n\r\n var completedRoute = completeRoute(appRoute);\r\n return RouteFormatter.formatRelativeRoute(completedRoute, $state.get('^').url, transition.opts);\r\n }\r\n\r\n function activateView(appRoute, transition) {\r\n var route = getRoute(appRoute, transition);\r\n\r\n Bridge.navigate(appRoute, route, transition);\r\n\r\n return true;\r\n }\r\n \r\n Bridge.onNavigate(function (d) {\r\n if (!_.isUndefined(d)) {\r\n var opts = JSON.parse(d.opts);\r\n\r\n if(opts && opts.replaceCurrentState === true){\r\n $state.go(d.state, opts, {location: 'replace'});\r\n }\r\n else{\r\n $state.go(d.state, opts);\r\n }\r\n }\r\n });\r\n\r\n function goBack(){\r\n Bridge.goBack();\r\n }\r\n\r\n return {\r\n activateView: activateView,\r\n goBack : goBack\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 'PermissionService',\r\n SecurityRepository\r\n ]);\r\n\r\n function SecurityRepository(\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 return PermissionService.isAllowedJs(permissionName).then(function (isAllowed) {\r\n return {\r\n IsAllowed: isAllowed,\r\n };\r\n });\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","\r\nangular.module('aprima-legacy-common').value('widgetViews', [\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000001',\r\n name: 'allergies',\r\n displayName: 'Allergies',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/allergiesTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000002',\r\n name: 'appointments',\r\n displayName: 'Appointments',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/appointmentsTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000003',\r\n name: 'demographics',\r\n displayName: 'Demographics',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/demographicsTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000004',\r\n name: 'header',\r\n displayName: 'Patient Header',\r\n userPlaceable : false,\r\n view: '/patients/views/dashboard-widgets/patientHeaderTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000009',\r\n name: 'problems',\r\n displayName: 'Problem List',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/problemListTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000006',\r\n name: 'medications',\r\n displayName: 'Active Medications',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/medicationsTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000012',\r\n name: 'visits',\r\n displayName: 'Visits',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/visitsTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000010',\r\n name: 'remarks',\r\n displayName: 'Remarks',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/remarksTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000008',\r\n name: 'orders',\r\n displayName: 'Orders',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/ordersTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000007',\r\n name: 'observationResults',\r\n displayName: 'Observation Results',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/observationResultsTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000011',\r\n name: 'vitals',\r\n displayName: 'Vitals',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/vitalsTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000005',\r\n name: 'healthMaintenanceReminders',\r\n displayName: 'Health Reminders',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/healthMaintenanceRemindersTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000013',\r\n name: 'attachments',\r\n displayName: 'Attachments',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/attachmentsTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000014',\r\n name: 'observationValues',\r\n displayName: 'Observation Values',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/observationValuesTile.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000015',\r\n name: 'diagnosisSummaries',\r\n displayName: 'Diagnosis Summaries',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/diagnosisSummariesTiles.html'\r\n },\r\n {\r\n id: '259e6a7b-64a8-437c-82b7-000000000016',\r\n name: 'recalls',\r\n displayName: 'Recalls',\r\n userPlaceable : true,\r\n view: '/patients/views/dashboard-widgets/recallsTile.html'\r\n }\r\n]);"]}