{"version":3,"file":"scripts.v4.71.2.min.js","sources":["scripts.v4.71.2.js"],"names":["promiseService","CreateDefer","context","this","resolve","success","apply","arguments","reject","error","promise","then","service","defer","angular","module","config","$httpProvider","interceptors","push","cfpLoadingBarProvider","includeSpinner","includeBar","CacheFactoryProvider","extend","defaults","maxAge","Common","isNumber","n","isNaN","parseFloat","isFinite","concatWithoutDuplicates","items","_i","length","res","i","list","j","isContains","getIndexBy","array","name","value","source","element","Array","isArray","equals","indexOf","Error","Enum","enums","console","warn","toArray","obj","Object","keys","map","index","key","toDictionaryObject","forEach","parseBoolean","toLowerCase","String","prototype","endsWith","suffix","startsWith","str","contains","insertAt","char","pos","slice","directive","restrict","link","scope","attrs","click","$apply","model","quantity","text","$compile","require","elem","ngModel","template","parent","append","clearIconToggle","toggleParam","val","trim","next","css","on","event","count","white","image","$timeout","$","preventDefault","$div","btnOffset","offset","xPos","pageX","left","yPos","pageY","top","addClass","$ripple","height","width","background","data","appendTo","remove","homeService","locationService","$routeParams","$rootScope","modalService","attr","practiceId","getWaitingPatients","getCachedCheckInPatients","checkedInPatients","filter","patient","Status","CheckedInPatientsUpdated$","$on","$e","goToHome","confirm","DatePickerModule","Config","init","format","DEFAULT_FORMAT","Link","ngModelCtrl","transclude","input","find","icon","inputElement","initWatcherModel","initDatePicker","initWatcherConfig","$watch","$modelValue","date","moment","isMoment","datepicker","toDate","dateFormat","onSelect","v_date","d","$setViewValue","_this","changeMonth","changeYear","year","max","min","Directive","formSubmitted","isRequired","factory","methodFactory","$inject","$document","placeholder","$scope","$element","autoFocus","timeout","parseInt","autofocusTimeOut","scrollCont","scrollY","scrollTop","focus","inputText","setPlaceholder","compile","contents","html","duration","easing","overflow","transitionProperty","transitionDuration","transitionTimingFunction","target","document","querySelector","slideToggle","expanded","bind","content","style","border","y","clientHeight","maxDate","Date","DATE_PATTERN_MOMENT","DATE_PATTERN","$filter","isDisabled","change","ctrl","label","option","useFirst","tab","tabIndex","itemsFirstAdded","filterKey","updateView","undefined","onChange","ngChange","interval","valueCopy","cancel","item","showDrop","dateFormatMoment","minDate","isValid","$formatters","dateMoment","$parsers","dateString","ngTab","which","first","select","$last","removeClass","infrastructureService","$interval","updateNetworkState","getNetworkState","response","Sucess","url","replace","Data","stopTime","GlobalVar","displayNetworkStatus","selectedIndex","newValue","oldValue","oldRow","children","newRow","encounterServiceNew","httpService","showDialog","$window","healthIdVisit","getHealthIDVisit","healthIDVisit","status","EncounterModule","Controller","NOT_VIEWED","goToHealthID","get","patientId","showThankYou","token","open","message","showProgressScreen","fadeIn","fadeOut","blur","validateOrder","firstFocus","e","keyDown","off","getSelection","toString","setSelectionRange","$eval","execOnEnter","tabs","onError","fnSrc","fnSrcError","fnUrl","squareAvatar","srcError","size","draw","mask","definitions","a","pre","maxlength","object","maxLength","Number","ngPattern","regex","RegExp","fromCharCode","charCode","resultStr","test","elm","unshift","viewValue","containsDigitFunc","containsSpecialSymbolsFunc","containsUpperLetterFunc","containsLowerLetterFunc","containsUpperLetter","containsLowerLetter","containsDigit","hasSpecialSymbol","$setValidity","ScrollUp","scrollto","container","small","getOwnPropertyNames","stop","scroll","animate","Shortcut","isFunction","keyPress","end","substring","words","split","charAt","toUpperCase","join","start","uppers","character","firstParameter","secondParameter","isToday","inputPattern","outputPattern","utc","today","startOf","isSame","fromNow","local","criterion","tmp","searchValue","diff","DOB","textCase","dividedText","filename","fileImg","filePath","search","consultationDateFormat","DATE_TIME_PATTERN","ServerDateFormat","PatientDateFormat","serverDateFormat","appControllers","appServices","globalProviders","clinicalGlobalProviders","$routeProvider","when","controller","templateUrl","otherwise","redirectTo","StorageModule","Service","EMPTY_PRACTICE_ID","MyStorage","storage","set","setItem","toJson","defaultValue","fromJson","getItem","removeItem","AuthorizationData","User","ADMIN_ROLE","DOCTOR_ROLE","FRONT_OFFICE","PRACTICING_NURSE","TRIAGE_NURSE","Practice","localStorage","sessionStorage","getLocalStorage","getSessionStorage","getUser","USER_KEY","setUser","user","getPractice","PRACTICE_KEY","setPractice","practice","getPracticeId","id","setPracticeId","getAuthorizationData","AUTHORIZATION_DATA","setAuthorizationData","authData","setBackPath","path","getBackPath","setBackHash","hash","getBackHash","getEmptyPracticeId","getParam","setParam","clear","BACK_PATH_KEY","ZERO_PRACTICE_ID","resultApi","ResultApi","Links","LinkApi","HttpModule","$http","CacheFactory","$q","cfpLoadingBar","$location","authService","storageService","notShowError","cacheId","cache","cacheFectory","getCache","resp","deferred","handleSuccess","request","serverURL","put","handleError","post","method","showError","complete","isObject","statusText","ExceptionMessage","Message","currentPath","logOut","isAdmin","toDefaulPath","cacheFactory","deleteOnExpire","storageMode","resetCache","destroy","__extends","b","__","constructor","p","hasOwnProperty","create","Domain","Patient","Patient_1","DoctorAppSystem","PatientEvent","PatientInWaitingRoom","_super","PatientId","PatientDetails","PatientAccountDetails","MedicalAidMainMemberDetails","CancelPatientVisit","CorrelationIds","OriginatedSystem","CreatePatient","PatientVo","CheckPatientResult","CheckInPatientVisit","PatientEventDetails","Option","Plan","Options","MedicalAid","Name","Plans","getPatientById","getUrl","getPatientsByName","encodeURIComponent","removePatient","getFamilyMembers","getMasterPatientsByName","createPatient","updateAccount","looseValidation","body","UpdateOtherPatientsAccountDetails","LooseValidation","changePatient","getPatientByAccNo","accountNo","cancelPatientEvent","patientEventId","PatientEventId","Reason","checkPatientVisit","checkInPatient","PracticeId","ScheduledTime","CheckInTime","CheckedIn","addToWaitingRoom","captureEncounter","getCheckInPatients","getWaitingRoomPatients","r","pwr","HasQuote","HasSummmaryOfCare","importPatientAndCheckIn","getMedSchemes","LocationModule","homePath","practicesPath","practiceCreatePath","practiceEditPath","practiceOptionsPath","clinicalDashboardPath","clinicalMessageCenter","clinicalPathalogyReport","clinicalPathologyReportWorkflow","createPatientPath","patientVisits","changePatientPath","loginPath","claimResponse","cardReader","visitOutcomes","goToPractices","goToCreatePractice","goToEditPractice","goToPracticeOptions","goToClinicalDashboard","goToClinicalMessageCenter","goToClinicalPathalogyReport","pathologyReportId","goToClinicalPathologyReportWorkflow","workflowId","goToHealthId","goToHealthDoc","goToPatientFile","documentId","goToClinicalVisitOutcomes","goToConsultationReport","type","ReportType","Prescription","MedicalCertificate","goToCreateClinicalTemplate","goToEditClinicalTemplate","templateId","goToAddressBook","goToCreateAddressBook","goToEditAddressBook","entryId","goToClinicalTemplates","goToTemplatesBulkImport","goToCreatePatient","goToChangePatient","goToPatientVisits","goToLogin","gotToClaimResponse","claimId","goToCardReaderCreate","gotToTestApi","goToSpecialityRules","goToCreateSpecialityRule","goToEditSpecialityRule","code","gotToAudit","goToPublicKeys","goToCardReaders","goToCardPayments","goToTenants","goToCreateTenant","goToEditTenant","tenantId","goToUsers","goToFailedInvoices","goToCardReaderEdit","cardReaderId","goToInvoice","goToMedicalHistory","goToEncounter","goToAccount","userId","goToChangePassword","goToNotificationsBulkSend","goToTemplates","goToCreateTemplate","goToEditTemplate","setAbsoluteServerUrl","report","getAbsoluteServerUrl","absoluteUrl","absUrl","substr","goToTenantEvents","dateFrom","dateTo","goToAuditEvents","aggregateId","goToPowerBi","goToPowerBiReport","reportId","goToCreateTimer","goToTimers","goToCreateUser","goToEditUser","Account","Claim","Claims","ChangeUserPassword","getPractices","createUser","getUsers","getUsersPage","pageCount","pageSize","updateUser","UserId","getUserByName","userName","deleteUser","changeUserPassword","changeRequest","Billing","Template","TemplateId","InvoiceLineItemsVo","InvoiceLineItems","InvoiceHeader","Diagnosis","LineItem","Invoice","Provider","LineItems","NetworkedSchemes","ManualPricingSchemes","SchemeObject","ClaimFinancials","Transaction","Response","LineItemFinancials","SupportingProviderVo","FullName","Title","Surname","ProviderBranchVo","LineItemFees","LineItemRef","DUR","LineItemInfo","ClaimResponseLineItem","LineItemWithStatus","ClaimResponseDetails","ClaimResponse","InvoiceLineItemsWithStatus","Event","ProviderVo","InvoiceSendingStatus","InvoiceWithStatus","SpecialityRule","MutuallyExclusiveCodes","PrefixChargeCodesOnClaim","DeactivateSpecialityRule","FeatureAllows","AllowDiagnosis","AllowMedicine","AllowProcedure","AllowPrescription","AllowConsumable","AllowReferralDoctor","AllowAssistingDoctor","AllowReferralLetter","AllowMyTemplates","AllowMedicalCertificate","AllowHospitalClaim","AllowDayClinicClaim","AllowMedicalInsurance","AllowClinicalMetric","CommunicationTemplate","getInvoices","getInvoice","invoiceId","getInvoiceWithStatus","getTemplatesByInvoice","getTemplates","getTemplate","submitInvoice","invoice","InvoiceVo","InvoiceId","saveTemplate","InvoiceTemplateVo","updateTemplate","removeTemplate","mergeInvoiceHospital","invoiceLineItems","OriginalInstruction","mergeInvoiceLineItems","NewInstruction","mergeTemplateLineItems","sendInvoiceManually","invoiceid","reason","retrySendingInvoice","abortSendingInvoice","getFailedInvoices","getSentInvoices","getCommunicationTemplates","updateCommunicationTemplate","getSpecialityRules","getSpecialityRulesByCode","updateSpecialityRule","rule","deactivateSpecialityRule","deactivateRule","createProvider","provider","ProviderConfiguration","updateProvider","deleteProvider","providerId","getProviders","getProvidersFiltered","getProvidersPage","getDoctorsByBillingNumber","getBranches","getProvider","getProviderById","setOptions","options","ProviderId","setProviderOption","cancelInvoice","Clinical","Encounter","EncounterLineItems","EncounterFollowUp","MedicationsAdministered","MedicationPrescription","MedicationsDispensed","MedicationsPrescribed","MergeEncounterValidationError","MergeEncounterResult","MedicationPrescriptionLines","MedicationPrescriptionLine","FollowUpReasons","TemplateCreate","EncounterTemplate","EncounterHeader","AddressBookEntry","Address","ModifierInfo","ModifierRequiredParams","Diagnoses","MedicalInsurer","MedicalInsurance","ClinicalMetric","PathologyReportWorkflow","PatientPathologyResultDeliveryStatus","PatientPathologyResult","PatientDashboardEvent","PatientDashboard","PatientDocument","Communication","ReferralTemplate","ReportStatusType","ReportStatusTypeUtil","getName","statusType","NAMES","PatientAllergies","PatientChronicConditions","Token","PatientCondition","Condition","Allergy","PatientAllergy","getEncounters","getEncounter","encounterId","getEncounterByPatientVisit","patientVisitId","getTemplatesByEncounter","invalidateEncounterTemplateCache","importMultipleTemplates","importType","onlyValidate","RawData","ImportType","OnlyValidate","getHistoricalMetrics","submitEncounter","encounter","wrapper","WrapperVo","EncounterId","setupPrice","validateEncounter","mergeLineItemsByEncounter","mergeLineItemsByTemplates","mainTemplate","getPrescriptionReport","responseType","getPrescriptionHistory","getMedicacalSertificate","sendCommunicationByEmail","mergeHospitalIndicator","lineItems","mergePlaceOfService","getAddressBook","lookupfilter","pageNo","getAddressBookFavourites","getAddressBookEntry","addAddressBookEntry","entry","updateAddressBookEntry","AddressBookEntryId","removeAddressBookEntry","createTemplate","saveEncounter","removeTemplatesByType","removeTemplates","getPathologyReports","searchText","getPathologyReportWorkflows","startDate","endDate","query","isValidMoment","isUndefined","getPathologyReportWorkflowsForProvider","getUndeliveredPathResults","getPathologyReportPatient","markPathologyReportsAsRead","workflowIds","JSON","stringify","getPathologyReportWorkflowsCount","OPEN","mergeReferralItemsByTemplate","comunnicationByEncounter","communicationId","comunnicationByIndex","indexId","getEncounterReferrals","encounterTemplateId","refreshEncounter","encounterType","EncounterType","updateEncounterCommunicationBody","templateBody","subject","CommunicationId","Content","deliverPathResult","PathologyReportId","ignorePathResult","renderEncounterCommunication","getEncounterCommunicationBody","getModifierInfo","getModifierRequiredInfo","inviteDoctor","getCacheTime","correlation","EncounterVo","RequestMergeEncounter","RequestMergeTemplate","AccountInfo","EventType","EventTypeUtil","getTypeById","DIAGNOSIS","PROCEDURE","MEDICINE","CONSUMABLE","PRESCRIPTION","FOLLOWUP","CLINICAL_NOTE","COMMUNICATION","MEDICAL_INSURANCE_PROCEDURE","CLINICAL_METRIC","MODIFIER","PROVIDER_NOTE","getTypeByName","getNameByType","ProviderModule","billingDomain","getProviderOptions","buildProviderOptions","saveProviderOption","providerOptions","isEnabledForClinicalResults","isEnabledForClinicalPatientVisitOutcome","IsEnabledForClinicalPatientVisitOutcome","isEnabledForMedicalCertificates","IsEnabledForMedicalCertificates","isDisabledForDisplayingPatientFinancialInformation","IsDisabledForDisplayingPatientFinancialInformation","isEnabledForMedicationPrescriptions","IsEnabledForMedicationPrescriptions","isEnabledForDisplayingPrices","IsEnabledForDisplayingPrices","PracticeXRef","isDispensing","DispensingDoctor","healthIDProviderCredentials","HealthIDProviderCredentials","consultationCustomLayoutOrder","ConsultationCustomLayoutOrder","displayPatientTimeLine","DisplayPatientTimeLine","healthDocEnabled","HealthDocEnabled","isPowerBIEnabled","IsPowerBIEnabled","isHealthbridgeClinicalEnabled","IsHealthbridgeClinicalEnabled","IsHealthbridgeClinicalLiteEnabled","isDrAppAccessAllowed","IsDrAppAccessAllowed","HomePage","myPatientFilesEnabled","MyPatienFilesEnabled","lastSeenImportantNotice","LastSeenImportantNotice","SearchModule","SearchType","SearchTypeUtil","searchType","getType","TYPES","TrackingModule","UserName","ClientVersion","call","ItemCode","PatientBase","PathReport","ReportId","PathReportDashboard","DashboardLineItem","util","appInsights","window","applicationInsightOptions","itemAddedToEncounter","templateEvent","logHbcRedirect","trackEvent","removedLineItemFromEncounter","trackLineItemEvent","openedDetailsDialog","openedPatientDetails","patientDetailsEvent","defineUser","setAuthenticatedUserContext","editedPatientDetails","openedPatientDashboard","patientEvent","patientDashboardEvent","openedPathReportWorkflow","pathReportEvent","openedPathReport","clickedOnPatientDashboardItem","trackClickedOnPatientDashboardItem","clickedOnPatientDashboardPathReport","pathReportDashboardEvent","clickedOnPatientDashboardMedicalCertificate","description","diagnoses","parseMedicalCertificateDiagnosis","getUserName","clientVersion","editedNotes","eventName","onViewChanged","viewName","properties","billingPracticeNumber","billingPrNo","treatingPracticeNumber","treatingPrNo","practiceName","trackPageView","openedPatientTelehealthFromDashboard","lineItemEvent","trackItem","ChargeCode","NappiCode","DiagnosisCode","TemplateType","diagnosis","BillingPracticeNumber","TreatingPracticeNumber","ModalModule","ModalHeight","ModalWidth","title","pdf","$modal","$templateCache","cacheParam","warning","instruction","backdrop","windowClass","ModalView","getModalWidthClass","modalInstance","result","hasClose","labels","leaveEncounterConfirm","_450px","info","cellPhone","openNumbers","number","useZerro","openDetailsItem","validateOptions","settings","getConfigForEventType","openDetails","openPrescriptionHistory","openSupportingProvider","_600px","providers","openSpecificRuleWarn","refreshPrice","openSubTemplates","subGroup","setTemplate","_800px","subgroup","getReportPatients","patients","openLetterEditor","communication","communicationTemplateBody","openCommunicationTemplates","templates","_700px","openLetterTemplates","openAddressBookSearch","showReportDialog","bodies","pdfFunction","getConfigUrlForReportType","templateBodies","pdfListener","_750px","showCaptureHealthDocDialog","captureHealthDoc","getModalHeightClass","showReceiptDialog","receipt","_325px","showInviteDoctorDialog","showMedicalInsuranceDetails","showConditionsDetails","showNotification","notification","_650px","sendReportByEmail","attachments","emailSubject","showWarning","showSummaryOfCare","showModifierDetails","modifier","assistingDoctor","noEdit","All","mainPath","openModalWindow","openDialog","dataObject","copy","classHeight","_300px","_400px","_430px","_500px","classWidth","_100px","_125px","_150px","_175px","_200px","_225px","_250px","_275px","_350px","_375px","_425px","_475px","_525px","_550px","_575px","_625px","_675px","_725px","_775px","_825px","_850px","_875px","_900px","_925px","_950px","_975px","_1000px","_1025px","_1050px","_1075px","_1100px","_1125px","_1150px","_1175px","_1200px","ConsultationReportModule","ConsultationReport","reportBody","clinicalDomain","patientService","dashboardService","isNext","reports","isAnyConsultationReport","changeScreen","way","currentReportType","NEXT","PREW","history","back","getReportBody","that","attachment","all","PracticeName","openPdf","newWindow","reportLinkFromHtmlToPdf","location","href","getReportStringType","reportType","Tenant","TenantVo","getTenantList","getTenant","createTenant","tenant","tenantRequest","TenantRequest","updateTenant","TenantId","deleteTenant","DashboardModule","tenantDomainService","providerService","patientDomain","patientEventDomain","getTenants","getPrescriptionReportPdf","reportFromHtmlToPdf","getDocumentUrl","getMedicalCertificateReport","getMedicalCertificateReportPdf","getPatientDashboard","getActiveVisit","getPatientEventByPatientId","getPatientDashboardHeader","getHealthDocToken","getPatientFamilyMembers","loadPatientFiles","getQuoteReport","getQuoteReportUrl","removeDocument","fileUrl","getDocumentInfoById","removeAvatarCache","getAvatar","getAccountFinancialInfo","loadExternalData","encodeSearchText","getProcedures","procedureSearchString","getDiagnoses","diagnosesSearchString","getDiagnosesRanking","getMedicine","medicineSearchString","getConsumable","consumableSearchString","getClinicalProcedures","encounterid","dateOfService","getClinicalDiagnoses","getClinicalDiagnosesRanking","getClinicalMedicine","getClinicalConsumable","getClinicalPrescription","getInsurerProcedures","insurerXref","getClinicalModifier","modifierSearchString","saveSelectedTemplate","selectedTemplate","getSelectedTemplate","DialogModule","dialogs","isDefined","dialogOptions","dialog","ref","loadTemplate","dialogTemplate","$new","dialogLinker","customCloseFn","close","ui","cleanup","getExistingDialog","$destroy","ShowDialogModule","errorDetails","showWarningDialog","TemplateModule","TemplatePanelController","templatePanelService","searchService","groups","buildGroups","selectGroup","$watchCollection","allows","noGroupSelected","_a","allowKey","_b","_c","group","allowParam","allowed","updateStyle","searchSelect","control","isClinical","selectTemplateItem","selectTemplate","openSubItemDialog","templateGroups","GroupTemplate","isPrescription","buildGroupTemplate","isMedicine","templs","groupSetting","Group","mixTemplateAndSubGroups","instance","practiceService","clinicalTemplateServiceNew","$log","trackingService","catchError","hasMatchingItem","arr1","arr2","retval","e1","e2","currentConsultationTab","CONSULTATION","clinicalMetricsOptions","fullSchemeName","currentDate","addTemplateToEncounter","selectHospital","populateClinicalMetrics","minAllergiesWidth","wrapperPadding","allergiesCount","patientDashboard","Allergies","Math","ceil","padding","getProcedureAndModifiers","filteredItems","LineType","minConditionWidth","conditionsCount","ChronicConditions","isNotAuxiliary","auxPractices","SpecialityCode","isEncounterChanged","save","clearEncounterCache","selectConsultationTab","METRICS","historicalMetrics","openReferralTemplates","memoryRefferalTemplates","editCommunicationItem","getCommunicationBodyById","editReferralTemplate","getReferralHtml","setCommunicationBodyById","removeLine","typeStr","isDOBValid","DateOfBirth","selectBranch","branch","BranchXRef","showLineDetails","isPricing","specificRule","medicalAidInvoice","isDiscoveryKayCare","refreshEncounterPrice","showLineItem","assistingDoctorIndicator","refreshedEncounter","updateClinicalMetrics","procedure","lineItem","LineNum","updateMedicineStatus","line","oldLine","priceEncounter","updatedLine","TotalIncVat","addModifiers","setEncounter","repeatPrescriptions","togglePrimaryDiagnosis","toggleDiagnosis","updateReferringDoctor","ReferringDoctorName","FriendlyName","ReferringDoctorPracticeNumber","updateAssistingDoctor","AssistingDoctorName","AssistingDoctorPracticeNumber","onReferringDoctorIndicatorChange","referringDoctorIndicator","isIHealthProvider","openReferringSupportingProvider","getSupportingProviders","referringDoctor","onAssistingDoctorIndicatorChange","openAssistingSupportingProvider","selectPlaceOfService","HospitalIndicator","INPATIENT_HOSPITAL","selectPatient","completeEncounter","visitOutcome","ClinicalMetrics","getClinicalMetrics","validate","consultationDate","getConsultationDate","timeOfServiceStr","ClaimAuthorizationNumber","nextStepAction","goToVisitOutcome","validPlaceOfService","hasTelehealthProcedures","m","PROCEDURES_NOT_TELEHEALT_SPECIFIC","PlaceOfService","goToNext","updateMedicationPrices","MEDICAL_INSURANCE","PatientIdentityNo","PolicyNo","medicalInsurance","loadInsurerProcedures","searchInsurerProcedures","changeEncounterType","nonMedicalInsuranceTypes","MEDICAL_AID_CLAIM","CASHCLAIM","ZEROCLAIM","applyMedicalInsuranseAllows","appendTimeOfService","ResponseMessage","changeHospitalDate","configTo","admissionDate","configFrom","dischargeDate","updateHospitalDates","switchHospitalDates","showHospitalDates","onTimeOfServiceChange","changeConsultationDate","consMoment","setConsultationDate","DATE_OUT_PATTERN","DateOfService","certificate","ExaminationDate","getSpecificRule","clickWarning","Description","clickInvalidCodeWarning","invalidCodes","Code","concat","showWaitingScreen","ResponseCode","updatePricingErrorMessage","Amount","clickPricingError","errorMessage","openSickNote","openForEdit","getListDiagnoses","goToDashboard","encounterHeader","totalPrice","getTotalPrice","editedNote","eventType","note","summaryOfCareClick","schemeRuleHeadWarning","showModifierWarning","Responses","values","v","captureDocuments","category","patientDocument","PatientDocuments","doc","Category","shift","patientFilesUrl","getTime","floor","random","capturedDocumentId","billingInstructionThumbnail","DocumentUrl","clinicalNoteThumbnail","wasInside","match","pop","splice","timePart","hour","minute","refferalTemplates","myTemplates","controlTemplate","applyUserDefinedLayout","COMMUNICATIONS","MY_TEMPLATE","getRefferalTemplates","referrals","clinicalTemplate","Caption","TemplateName","CommunicationTemplateId","Type","Communications","loadEncounter","initConsultationDate","updatePractice","initSaveTemplate","eventId","applySpecialityRules","AdmissionDateTime","DischargeDateTime","CONSULTING_ROOMS","billingIstr","clinicalnotes","avatar","ThumbnailUrl","FileName","getProviderBranches","branches","providerBranches","branchXRef","getDateOfService","specialityCode","originalEncounter","getSpecialityRuleByCode","optionId","optionValue","featuresAllows","memoryFeaturesAllows","getMedicalInsuranseAllows","insurerXRef","InsurerXRef","setMemoryInsurerProcedures","insurerProcedures","ZeroMedicine","ZeroConsumable","PriceOverride","ChronicIndicator","updateCommunicationBody","customLayoutOrder","allowedIds","newOrderItems","k","itemConfig","containerId","savePatient","selectedPatient","accountDetails","fullName","FirstName","scheme","MedicalAidName","MedicalAidPlan","MedicalAidPlanOption","IdentityNo","MergedEncounter","Errors","getEncounterByPatientEventId","encounterResponse","setOriginalEncounter","setEncounterType","IsCashAccount","chronicChecked","notAllowed","medicineItems","SchemeRule","NOT_ALLOWED","medicineSchemeWarning","gender","Gender","metrics","consDate","minutes","hours","getValidDate","consultationReports","dateStr","NOT_APPLICABLE","ALLOWED","NOT_SUPPORTED","VIEWED","DAY_CLINIC","HealthIDVisit","ValidateOptions","funderConfiguration","communicationTemplates","total","newEncounter","setPatientEvent","patientEventDetails","getPatientEvent","communicationBody","getEncounterById","PrimaryIndicator","setUpPrimaryIndicator","setUp","removeDiagnosisFromEncounter","removePrescriptionFromEncounter","removeObjFromArray","removeProcedureFromEncounter","removeModifierFromEncounter","removeLineItemFromEncounter","removeDiagnosis","lines","diags","hasModifiers","some","arr","modifierInfo","requiredParams","RequiredParameters","ImplementationStatus","prescriptionLine","priceByOne","ChargeQuan","TotalExcVat","UnitPrice","procedures","memoryInsurerProcedures","getMemoryInsurerProcedures","HealthIDViewed","mergeReports","prescriptionReport","sicknoteReport","separator","printTopIndent","prescriptionA","lastIndexOf","prescriptionB","sickNoteContent","createHiddenReportFrame","postfix","getMilliseconds","getSeconds","frameUnicId","frame","printReport","frameId","printContents","getElementById","contentWindow","setTimeout","print","ClinicalTemplateModule","setMainTemplate","getMainTemplate","setTemplates","newTemplates","execGetPracticeTemplate","isExists","loadPracticeTemplates","mergeTemplates","oldTemplate","newTemplate","mergeLineItems","removeLineFromTemplate","prescriptions","prescription","communications","InvoiceModule","setInvoice","newInvoice","loadInvoice","addTemplateToEvent","removeDiagnosisFromInvoice","removeLineItemFromInvoice","mergeHospital","invoiceService","loadInvoiceTemplates","removeTemplateFromTemplate","copyMainTemplate","findIndex","primaryD","PatientModule","patientEventID","concatPatient","surname","getPatients","patientName","getPatientsFromNationalDb","checkPatientIn","getPracticeXRef","createNewPatient","accountId","getMedicalAids","auditEvent","setPreCreatedPatient","preCreatedPatient","getPreCreatedPatient","clearPatientDetails","PatientXRef","ContactNo","EmailAddress","FileNo","MedicalAidDependentCode","parseSaId","idNumber","currentYear","getFullYear","tempDate","idDate","getDate","idMonth","getMonth","idYear","fullDate","genderCode","FunderConfiguration","SpecificRule","PracticeModule","accountDomain","signalrService","buildManualSchemes","ALL","buildSchemes","getSchemeValues","schemes","getValues","getManualSchemeValues","filterSchemesForAll","numbers","convertSchemesToArrObjects","allSchemes","selectSchemes","sc","convertSchemesToArrStrings","selectedSchemes","optionSchemes","setLocalPractice","redirectToHome","oldPractice","TreatingDoctorName","PracticeNumber","updateLocalPractice","updateLocalPracticeById","getPracticeById","loadPractice","xref","createPractice","deletePractice","getAllPractices","getProvidersPageAndSearch","saveOptions","LoginModule","LoginResult","login","username","password","clientId","headers","Content-Type","getUserDefaultPractice","practices","getPracticeDetails","getStartPage","AuthModule","TokenDetails","header","payload","tokenDetails","_loginService_","loginService","onfocus","refreshAuthorization","backPath","role","goToStartPage","roleName","startPage","RequirePasswordChange","parseProviderHomeUrl","goToPath","isAuth","doctorId","loadPracticeForUser","updatedUrl","user1","newPath","newHash","oldPath","oldHash","parseTokenDetails","splitToken","tokenHeader","atob","tokenPayload","SignalrModule","connection","getSignalRToken","accessToken","signalR","HubConnectionBuilder","withUrl","ServiceUrl","accessTokenFactory","build","$emit","log","err","App","VersionDiff","Run","versionDifference","NoDiff","showPaymentStatuses","nextRoute","currentRoute","isHomePage","isLoginPage","nextRoutePart","currentRoutePart","isSamePage","NoMandatory","Mandatory","reload","toState","toParams","quantities","amount","removeHash","goToPayments","run","ClinicalAddressBookModule","usageService","loadPracticeAddressBook","loadPracticeAddressBookFavourites","addContact","useAddressBook","userLogin","UsageModule","ActionType","NewContact","updateContact","UpdateContact","removeContact","DeleteContact","AddressBook","CreateController","addressBookService","addressBookEntity","EditController","entity","SearchController","$modalInstance","dismiss","ok","selectedContact","goToEditContact","contact","toggleFavourite","IsFavourite","favouriteContacts","loadFavourites","entities","selectContact","loadEntities","loadNextPage","allPagesLoaded","isRunningPage","goToCreateContact","setAdminRules","page","Event_1","EventResult","getEventsByNode","nodeId","getEvents","getTopEvents","getEventsByAggregatId","aggregatId","getNodes","getTenantEvents","fromDate","AuditModule","eventDomain","getEventsForAggregateId","nodes","EventController","auditService","historyIndex","newPosition","go","showEventDetails","jsonDetails","events","changeSearch","allEvents","TenantEventController","openAuditEvents","getPracticeIds","EventDetails","BucketPrefix","AggregateId","matchJSON","changeFilterByDate","setPracticeEvents","checkPracticeEvents","PracticeTenantId","setDefaultDates","endJson","encounterTemplate","templatesJSON","now","daysBefore","tommorow","add","subtract","updateNodes","node","tenantEvents","counts","CardPayment","CardPayment_1","CardReader","TransactionDetails","TransactionResult","CardPaymentStatus","CardPaymentsByDate","CardPayments","CardPaymentFilter","submitCardPayment","payment","getCardPayment","paymentId","getCardPaymentsByFilter","getCardPayments","getCardReaders","getCardReader","submitCardReader","updateCardReader","CardReaderId","deleteCardReader","CardPaymentModule","cardPaymentDomain","paymentResult","setPayment","getPayment","setPaymentResult","getPaymentResult","requestCardPayment","getCardPaymentStatus","getAllCardPayments","getAllCardPaymentsByFilter","getCardreaders","getCardreader","cardreaderId","createCardreader","cardreader","updateCardreader","deleteCardreader","PaymentStatus","TransactionStatus","StatusUtil","getPaymentName","PAYMENT_NAMES","getTransactionName","TRANSACTION_NAMES","CardPaymentController","cardPaymentService","printReceipt","mywindow","write","ClaimResponseModule","getClaimResponse","ClaimResponseType","TypeUtil","Payment","PaymentRequest","claimResponseService","getTotalClaimed","invoiceLines","hasResponse","InvoiceLineItemsWithStatusVo","patientDetails","refresh","updateClaimResponse","noValid","checkValidStatus","pay","MaPayableAmount","PatientLiable","totalInvoice","paymentRequest","placeOfService","CustomerReference","Currency","BudgetMonths","submited","INVOICE_CANCELLED","CLAIM_SENT_TO_MA","CLAIM_REJECTED","MA_RESPONSE_RECEIVED","MANUAL_PROCESSING","getClaimResponseStatus","LineItemWithStatusVos","getPlacesOfService","indicator","PaymentReceipt","PaymentResult","CardPaymentsController","$sce","showReceipt","trustAsHtml","getTransactionStatusName","s","getPaymentStatusName","updateCardpayments","cardPaymentFilter","DateFrom","DateTo","IncludeAllTransactions","includeAllTransactions","currentTenantId","cardpaymentsInMemory","changeSearchText","cardpayments","stopInterval","paymentStatus","transactionStatus","PaymentDate","getPaymentStatus","changeFilter","setDefaultFilterValues","takePayment","tenants","getTenantsAndPayments","cardPaymentResult","showPaymentResult","CustomerReceipt","HtmlText","MerchantReceipt","SignatureReceipt","transactionResult","CardReaderModule","CardReaderCreateController","saveCardreader","done","NodeId","Identifier","SerialNumber","Port","ConnectionMethod","SharedSecret","NodeVersion","CardReaderEditController","CardReadersController","cardReaderService","goToCreateCardReader","goToEditCardReader","updateCardReaders","cardreadersInMemory","cardreaders","getTenantsAndCardReaders","PasswordChangeModule","ConfirmPassword","ChangePasswordController","isAllowedBack","messages","changePasswordForm","newPassword","$error","confirmPassword","required","notMatched","oldPassword","NewPassword","OldPassword","changePassword","matched","HealthDocResponse","HealthDocEvent","clinicalReportService","inputFormat","dateFormatByMinutes","outputFormat","outputFormatTime","isEnabledHealthID","collapseSummary","collapseVisit","collapseMembers","collapseFinancial","collapseFinancialIHealth","selectedOrder","orderFormat","prescriptionDetails","familyMembers","loading","displayEncounterLink","isVirtualConsult","checkHealthDocCategory","order","orderItem","healthDocCategories","selected","filteringPatientEvents","groupCopy","thumbnailList","LastVisitDate","Age","Created","NoAllergies","AllergiesNote","ClinicalNotes","PatientDashboardEventsCount","PatientDashboardEvents","healtDocEvents","orders","ClinicalNote","Procedure","Modifier","MedicalInsuranceProcedure","Consumable","Medicine","PrescriptionLine","PathologyTest","HealthDoc","FollowUp","VisitFollowUpSmsSent","PathResultsFollowUpSmsSent","PathResultsNormalSmsSent","ProviderNote","PatientFile","orderGroups","hidePathLineHeader","getPathLogoByEvent","ParentDescription","openPdfReport","openQuoteReport","visit","getEventDetails","ParentReferenceId","DateTime","Narrative","ValueFlag","HEALTH_DOC_TYPE","PATIENT_FILE_TYPE","openPatientFiles","capturePatientFiles","openAvatarInMyPatientFiles","refreshAvatar","openPatientFileDetails","displayPatientEvents","copyEventDetails","hasPrescriptionDetails","detail","openHealthIdForPatient","openHealthID","checkGroup","orderGroupItem","openTelehealth","VideoChatLink","loadExtraData","getFinancialInfo","accountInfo","LastBenefitCheckStatus","IsSuspended","AccountLiable","financialInformationAvailable","addFamilyMember","mainPatient","toMemberDashboard","orderName","members","QuoteXRef","isSummaryCareRecordExist","healthIdProviderCredentials","healthIdSupported","medicalAidName","isHealthDocEnabled","mympsProvider","showFinancialInformation","showFinancialInformationIHealth","avatarOnError","groupedEventsByDate","groupByDate","orderBy","categories","fullList","f","newListItem","Thumbnail","setCategoriesObjects","patientEventsByDate","groupByParent","orderByParent","orderByClimeTime","checkedEvents","byParentLineNum","byParent","byEventsDate","byDate","byType","byDateTime","categoryObjects","ClinicalMessageCenterModule","currentPractice","MemoryModule","ClinicalMessageCenter","Practices","PublicKeys","Home","home","publicKeys","memoryService","clinicalMessageCenterService","showNoResultMessage","pathologyReportWorkflows","convertPathologyReportWorkflow","changeTab","addPatientReport","NavigationFrom","deliverReport","ignoreReport","PatientFullName","initTabSelection","ignoreAll","undeliveredPathResults","setAllItemsRead","PathologyReportWorkflowId","categoryName","tabselection","updatePathologyReportWorkflows","tabName","params","getParamsForReport","URGENT","pathologyReports","convert","pathologyReport","OriginalMessage","PatientReportId","PatientName","ReceivedDate","ReportDate","Departments","ReportLabName","PathLab","WorkflowStatusType","isPathologyReport","PatientDateOfBirth","ClinicalPracticesModule","clinicalPracticesService","goToPractice","ClinicalReportWorkflowModule","PathologyReportNotifications","PatalogyReportResponce","PatalogyReportResponceLink","getReportWorkflowHtml","getDoctorName","submitPathologyReportWorkflow","isHighPriority","isCallPatient","isNotifyPatient","patientCellPhone","HighPriority","NotifyPatientThatResultsNormal","FollowUpAppointmentRequired","FollowUpPatientCellphone","FollowUpText","getReportWorkflow","Reminder","Block","clinicalReportWorkflowService","reportOriginalBody","REMINDERS","NOTIFICATIONS","urgent","messageSent","desc","reportWorkflowResponse","reportWorkflow","$report","$reportContainer","head","contentDocument","getElementsByTagName","innerHTML","getPatient","getPatientsByPathologyReport","send","HtmlBody","notificationMessage","getPatientCellPhone","PatientContactNo","markReportAsRead","tabSelect","selectReminder","setRemindersToFalse","showSmsMessageIfRequired","selectReminderVal","charsLeft","generateSmsMessage","doctorName","displayNotificationsTemplate","blockIndex","patientContactNo","ClinicalReportModule","getReportHtml","ReportPatientModalModule","ReportPatientController","toPatientDashboard","ControllerAbstract","validTemplate","templateTypeChanged","groupTemplates","tempSortOrder","SortOrder","showQuantity","Quantity","templateType","openPrescription","validationOptions","openRefferalTemplates","procedureAndModifiers","$controller","initMainTemplate","ControllerEdit","TemplatesModule","loadTemplates","searchTemplates","SEARCH_FIELDS","removeClinicalTemplate","ClinicalTemplatesModule","templatesService","dynamicTemplates","templatesInMemory","initScrollingItems","templateTypes","currentTemplateType","loadMore","templatesCount","loadTemplatesPerScroll","startTemplatesCount","initTemplates","ClinicalVisitOutcomes","VisitReason","RemindItem","clinicalVisitOutcomesService","changeReason","remindPatient","updateMessage","changeItem","remindValue","NONE","clearReasonsSelected","reasonsForFollowUpVisits","FOLLOW_UP","encounterFollowUp","getEncounterFollowUp","isVisibleDate","OTHER","isDisablesReasons","remindGroups","getRemindList","patientRemindsList","showReports","createRemindPatient","getRemindItemByName","getFollowupDate","getSelectedReasons","SMS_LENGTH","remindList","reasons","remind","currentCellPhone","getListReasons","followUp","FollowUpRequired","DueDateForFollowUp","FollowUpMessage","visits","getDateFromForm","inc","nameField","TemplatesCommunicationModule","CommunicationTemplatesUpdateController","tinymceOptions","selector","plugins","toolbar","fontsize_formats","skin_url","isProd","visual","browser_spellcheck","contextmenu","statusbar","paste_data_images","valid_children","extended_valid_elements","init_instance_callback","editor","contentWraper","contentAreaContainer","iframeElement","getContent","onTemplateSelected","templateSelected","templateList","selectedTemplateId","TemplateBody","PatientList","MessageTabController","formatDate","CollectionDate","insertReport","choseReport","uri","getNumberOfList","ClinicalMetricsModule","Value","clinicalMetricsSchema","metric","groupName","TestDate","Unit","uom","validateClinicalMetrics","errors","g","form","clinicalMetricsForm","pattern","validationMessage","errorMsg","evalMetricFunction","metricPattern","groupTitle","isCollapsible","className","step","emptyValue","emptyType","condition","onchange","isCollapsed","action","clinicalMetricFuncs","PregnancyVisibilityCondition","updateBMI","w","h","sh","pow","round","CalculatedValue","changeUrine","Checked","nextElementSibling","firstElementChild","validateCompsiteSelect","Boolean","validateUrineMeasure","getMetricById","historical","Old","oldMeasure","OldMeasure","groupsToUpdate","isVisible","populateWithHistorical","functionName","args","getTempalte","HomeHeaderModule","HomeHeaderController","refreshPage","CellPhoneController","openCellPhoneDialog","ModalController","yes","no","ModalInstanceController","dialogService","download","sendEmail","printRecept","printData","displayDownload","displaySend","observeCrossMessage","removeEventListener","injectHtmlByOutUrl","addEventListener","injectHtmlByUrl","injectHtmlIntoReport","trustAsResourceUrl","appendTemplate","linkFn","reportIframe","contentHeight","reportPadding","containerPadding","iframe","NotificationModule","notificationService","doAction","parseAction","Body","notificationAction","NotificationId","markNotificationViewed","NumbersController","keyCodes","keyCode","parseKeyCode","isValidValue","typeConverting","clickButton","limit","getInputLimit","pointsInText","PeriodModule","changeDate","isFirst","updateMaxMin","from","to","tElement","tAttributes","tbody","tableBody","after","SearchPanelModule","isLoading","isButton","selectItem","notClearField","selectLineItem","lineClick","row","fields","cell","summaryPanel","SubGroup","TemplatePanelService","templatesCopy","typedTemplates","subGroups","buildSubGroups","sgroup","subGroupName","subItemName","caption","captionItems","getCaptionItems","getSubGroupByCaption","clearCaption","invoiceTemplateService","setupHospitalIndicator","setupInvoice","invoiceSent","showQuantityCalc","invoiceHeader","updateSpecificRules","eventDate","eventDateMoment","CommunicationModule","CommunicationTemplatesController","addTemplate","KeyValue","assign","EmailReportController","ContactNumber","doctorEmail","changeSendTo","patientEmail","Subject","Recipient","selectedEmails","Attachments","UseContact","openContactSearch","adaptContact","sendToMe","sendToPatient","inputCtrl","inputVal","resetSuggestedList","autocompleteKeyUp","searchvalue","suggestedContacts","contactName","OrganizationName","LetterEditorModule","LetterEditorController","tinymceModel","new_window","RefferalTemplatesModule","RefferalTemplatesController","MedicalInsuranceModule","MedicalInsuranceController","medicalInsurerXRef","Broker","openNumberDialog","patientIdentityNo","selectMedicalInsurer","medicalInsurerId","getMedicalInsurerByXref","editPatientIdentityNo","getMedicalinsurers","medicalInsurers","Xref","medicalInsurersByXref","Variable","units","Instruction","oppositeName","types","DetailsController","VConfig","instructions","createInstructions","maxQuantity","showQuantityWarning","zeroPricing","openNumbersDialog","valueName","openPriceDialog","price","openQuantityDialog","maxQuantityWarning","clickItem","groupIndex","variable","DosageUnit","DosageType","FrequencyUnit","PeriodUnit","PeriodType","additionalInst","DispensingInstructions","DurationUnit","DurationType","createDosageGroup","createFrequencyGroup","createDurationGroup","createVariables","dosageTypes","frequencyTypes","durationTypes","details","GroupsModel","ischecked","isChecked","prescriptionLines","PrescriptionHistoryController","getGroups","groupClick","prescrLines","getPrescriptionLines","$parent","checkedLines","IssuedDate","diagnisisCodes","prescLine","PrescriptionModalDetailsController","useZero","onChronicChange","Repeat","DosageUnits","FrequencyUnits","Item","turn","SicknoteController","FromDate","ToDate","initMedicalCertificate","diagnosesSelected","containsDiagnosis","encounterObj","medCer","CreatedDate","SpecificRuleWarningController","getPrice","SupportingModule","SupportingProviderController","IsNew","selectProvider","supportingProvider","ModifierModule","Checkbox","ApplyModifierController","checkboxes","getCheckboxes","updateSelectionProcedures","setItemsState","state","c","active","ch","checkbox","onSelected","AssistingController","validated","BMIController","Parameters","Length","Weight","BMI","AnaestheticController","param","FieldName","anaestheticRCF","refreshDates","newDate","oldDate","isStart","ChargeStart","ChargeEnd","refreshMinutes","initDates","chargeStart","chargeEnd","Model","ModifierController","editOptions","editMode","pages","resetPages","pageNum","SEARCH_PAGE","EDIT_PAGE","currentModifier","removePage","APPLY_PAGE","changePage","selectModifier","searchtext","noProcedures","onSelectedProceduresDone","selectedProcedures","prev","originalLineItems","hasApplyScreen","dr","applyModifiersToSelectedProcedures","indexForInsert","getModifieresCountAfterProcedures","currentPageNumb","currentPage","modifierDirective","getModifierByChargeCode","pageName","chargeCode","OthersController","UnitType","Units","unitTypes","unitType","openUnitsDialog","Required","isShowPrice","SearchModifierController","modifiers","customizeList","minLength","columnName","hstyle","clist","listItem","field","consultationReportService","reportHtml","PrescriptionController","SiknoteController","reportHeader","editHtml","editorInst","configEditor","FailedInvoices","FailedInvoicesController","retryAllAutomatic","SendingType","retry","abort","openFullText","openInvoice","HealthDocModule","isNoFile","openHealthDocs","PatientFileController","startWidth","zoom","isFit","enableZooming","zoomIn","img","currentWidth","zoomOut","fit","realSize","documentInfo","documentUrl","isImg","HealthIdModule","checkInPatientVisit","visitAction","getVersion","saveSearchText","getSearchText","getClinicalInboxCount","Collapse","clearPatients","accessDB","patientsDB","getPatientVisitType","loadAvatar","showDoctorNote","PatientAlreadyCheckedIn","PatientDetailsIncomplete","loadCheckedInPatients","actionVisit","cancelVisit","PatientEventXRef","dateMessage","cancelPatientVisit","newCheckedInPatients","backItems","inProgressPatients","goToCheckPatientData","openNotification","getNotifications","markAllNotificationsViewed","notifications","pathReportSubscription$","getClinicalMessageCount","waitingRoomSubscription$","notificationsSubscription$","collapse","waitingRoom","practicePatients","nationalPatients","inProgress","setVersionDiff","needRefresh","hbcUrl","currentDay","jsonVersion","majorIndex","minorIndex","patchIndex","newVersionArr","currentVersionArr","upgradeType","clinicalMessageCount","submitLoginForm","access_token","full_name","user_id","error_description","NotificationSendController","selectedRules","providersFilter","actions","selectRule","selectedRule","allProviders","addAction","ActionLink","Modal","removeAction","raction","setFilter","importByIds","ids","practiceIds","splittedIds","notFoundCount","notFoundIds","submitNotifications","rulesArr","file","files","formData","FormData","htmlEntities","bulkSendFromFile","NotificationXRef","Context","parseBody","BodyType","Actions","bulkSend","rules","itemsInPart","partOfNotifications","notificationBulk","notificationBulkFromFile","prop","encodeHTML","rawStr","charCodeAt","MedicalHistoryModule","getConditionCodesList","getAllergiesList","AllergyItem","updateAllergies","patientAllergies","getPatientAllergies","updatePatientNotes","patientNotes","PatientClinicalNotes","getPatientClinicalNotes","getPatientChronicConditions","getChronicCondition","getChronicConditionSearch","updateChronicConditions","patientConditions","Other","ConditionItem","medicalHistoryService","memoryClinicalNotes","memoryOther","selectedItems","memorySelectedItems","conditionItemsList","memoryConditionItemsList","goBack","isConditionsChanged","isAllergiesChanged","isNotesChanged","isOthersChanged","updatePatientAllergies","updatePatientConditions","other","patientClinicalNotes","Note","selectNone","allergiesList","allergyGroup","allergyItem","addMore","selectedConditions","conditionItem","changeOther","updateRecords","allergies","allergiesColumn","Allergen","noAllergies","conditionsFullList","conditionBaseCodes","conditionListItem","updateConditionsList","allergen","patientAllergy","capturedTime","allergie","CapturedDate","conditions","Id","Conditions","patientNote","patientCondition","conditionNewItem","searchTemplate","func","searchResults","results","searchItem","ENCOUNTER","INVOICE","ConditionsController","addCondition","PatientEventResult","PatientEvents","getPatientEvents","getPatientEventsByFilter","DaysToReturn","daysToReturn","ExcludeStatuses","excludeStatuses","PatientVisits","goToPatientTimeline","goToConsultation","notFound","patientVisitsService","keyPressed","keyEvent","altKey","Q_KEY","Q_CHAR_CODE","W_KEY","W_CHAR_CODE","loadPatientVisits","patientsCount","patientGroups","reduce","previousValue","currentValue","isOpenFilter","DAYS_IN_WEEK","getPatientVisitsQuery","statuses","excludeCancelled","UpdateAccountModalModule","UpdateAccountController","decision","Action","medicalAids","plans","configDatePicker","fileNoRegex","MIN_DATE","mainMemberDoBTemp","memberSameAsPatient","mainTemp","mainMemberDetails","newPatient","AccountId","AccountNo","MedicalAidMembershipNumber","MedicalAidRoutingCode","MedicalAidOptionCode","datePattern","isBefore","isMember","newPatientDoB","mainMemberDoB","patientAccountDetails","loadMedicalAids","updatePlanOptionDropdowns","practiceXRef","prePopulatedPatientData","formatDob","changeMainMember","medicalAid","plan","toTitleCase","submitPatient","patientIdNo","parsedDate","memberIdNo","parsedMemberDate","saIdChanged","parsedId","medicalAidChanged","maName","populateMedicalAidData","planChanged","pName","copyPatient","copyMainMemberDetails","RoutingCode","OptionCode","updateOtherPatientAccountDetails","populateRoutingCode","patientResponse","pInfo","mInfo","patientDateOfBirth","memberDateOfBirth","PowerBIModule","ReportListController","powerbiService","getReports","goToReport","ReportController","getReport","models","permissions","Permissions","tokenType","TokenType","Embed","embedUrl","filterPaneEnabled","navContentPaneEnabled","embedContainer","powerbi","embed","openPowerBI","OptionsController","removeOption","addOption","showButton","checkOptionsValid","removeRepeatOptions","convertArrToObjOptions","convertObjToArr","fillDefaultValue","optionKeys","findByKey","PracticeCreateController","savePractice","manualSelectedSchemes","manualSelectSchemes","addAllManualSchemes","medSchemes","setSpeciality","specialityRule","SpecialityDescription","Speciality","isCreate","PracticeTenantIds","specialityRules","loadSpecialityRules","REMOVE_ALL","goToSpecRule","afterSelectItem","loadSchemesForShow","PracticesController","goToEditSpecialityCode","goToEditOptions","doSearch","practicesPage","PublicKeysModule","getPublicKeys","validatePublicKey","nodePublicKey","Validated","ValidatedTime","RevokedTime","publicKeyService","validateKey","publicKey","revokeKey","updatePublicKeys","memoryPublicKeys","searchUpdate","ConsumableController","addConsumable","DiagnosisController","addDiagnosis","MIProcedureController","memoryProcedures","addMedicalInsurerProcedure","MIPROCEDURE","MedicineController","addMedicine","text-align","addPrescription","ProcedureController","addProcedure","SentInvoices","SentInvoicesController","changeSentDate","bool","load","sentDate","isDate","SpecialityRuleModule","SpecialityRuleAbsController","saveRule","ruleOptions","AvailableWards","wardsStr","removeCode","position","newItemName","o","addCode","newExclusiveCode","removeCodeGroup","addExclusiveCodeGroup","SpecialityRuleCreateController","ConsumableProcedureCode","SpecialityRuleEditController","loadRule","respOptions","defaultOpts","defaultOpt","includedOption","respOption","SpecialityRulesController","goToCreateRule","editRule","deleteRule","DefaultProcedureCode","deactivte","SpecialityRuleId","updateRules","rulesInMemory","TemplateImportModule","TemplateImportController","CLEAR_AND_IMPORT","validateMessages","MERGE","onItemsChanged","gotoMyFavorites","TemplateAbstractController","CreateTemplateController","EditTemplateController","TemplatesM","TenantModule","CreateTenantController","saveTenant","TenantXRef","EditTenantController","TenantController","editTenant","updateTenants","tenantsInMemory","TestApiModule","execGetRoutes","RoutePath","execQuery","Header","Url","testApiService","createRequest","buildUrlWithVariables","variables","headerObj","buildHeaders","urlTemp","appendResponse","showResponse","responseContainer","ERROR","appendError","appendSuccess","frameResponse","defaultUrl","POST_INDEX","PUT_INDEX","SUCCESS","updateUrls","changeUrlInput","displayedList","selectedItem","HttpMethod","methods","showPopup","supportedCopy","queryCommandSupported","formatBody","req","responseSuccess","responseError","shareLink","contextRoot","addHeader","deleteHeader","toggleDropdown","$event","stopPropagation","range","createRange","selectNode","addRange","execCommand","removeAllRanges","parse","shieldBody","urls","parseUrl","NOT_FOUND","startIndex","elements","endIndex","urlName","getDefaultUrlVariable","variableName","Plugins","getPlugin","addItem","component","getCount","TestModule","$parse","mbi","exec","eval","jsCode","plugin","processEnc","schema","enum","cashAccount","radios","comment","titleMap","Timer","TimerVo","getTimerList","getTimer","setTimer","timer","timerRequest","TimerRequest","FollowUpDateTime","CallbackCommand","cancelTimer","timerId","TimerModule","SetTimerController","timerDomainService","saveTimer","toJSON","TimerController","timers","deleteTimer","TimerId","updateTimers","timersInMemory","timersCount","Timers","InviteDoctorController","cellphone","invite","email","Email","UserAccountModule","UserAccountController","userService","editUser","showAdminLinks","openAddressBook","openNotificationsBulkSend","openTemplates","openTemplatesBulkImport","openPractices","editPractice","openPracticeOptions","openReports","openFailedInvoices","openUsers","openTenants","openCardReaders","openCardPayments","openPublicKeys","openAudit","openTenantEvents","openSpecialityRules","openTestAPI","ClaimScope","updateUsers","UserModule","UserAbsController","roles","Password","userForm","addRole","ClaimType","deleteRole","searchPractices","loadPractices","rollbackUserRoles","funcSuccess","funcError","FIELD_NOT_FILL","PASSWORD_NOT_MATCHED","clearExpirationTime","ExpirationTime","expirationTimeStr","getUsersPageAndSearch","UserCreateController","saveUser","UserEditController","PASSWORD_TO_MEET_VALIDATION","userCopy","UsersController","Username","usersPage","users","Infrastructure","NodePublic","PowerBI","PowerBIReport","WaitingRoom","FeatureType","UsageTypeUtil","getFeature","featureType","FEATURES","getAction","actionType","ACTIONS","InterceptorModule","AuthService","badChars","Authorization","Accept","rejection","BrowserModule","userAgent","navigator","browsers","UNKNOWN","InfrastructureModule","offline","responseFail","defaultFormat","Notification","transformRequest","identity","raiseNotification","CorrelationId","notificationId","FeatureUsageBody","FeatureUsage","logFeatureUsed","bodyText","PatientReport","SendEmail","Feature","getToday","EntryId","HealthDocs","ViewDocument","PatientFiles","DocumentId","System","HealthID","ViewPatient","PatientID","PatientSurname","PatientDOB","PatientMemberNumber","ViewReport","ReportName","dateTime","PathologyReport","UtilsXml","loadXMLDoc","isIE","xmlDom","ActiveXObject","async","validateOnParse","xhttp","XMLHttpRequest","responseXML","loadXMLString","xmlText","loadXML","parser","DOMParser","parseFromString","generateContent","xml","xslUrl","checkStyle","xmlDoc","xslDoc","xsltProcessor","XSLTProcessor","importStylesheet","transformToFragment","implementation","createDocument","transformNode","reg","isAmpath","ampathStylePath","lancetStylePath"],"mappings":"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","sourcesContent":["/// \r\nangular.module('DoctorApp', [\r\n 'ngRoute',\r\n 'filters',\r\n 'cfp.loadingBar',\r\n 'gd.ui.jsonexplorer',\r\n 'jackrabbitsgroup.angular-multiselect',\r\n 'ui.bootstrap',\r\n 'schemaForm',\r\n 'angular-cache',\r\n 'ui.tinymce',\r\n 'infinite-scroll',\r\n 'ngclipboard',\r\n 'multipleSelect',\r\n 'moment-picker'\r\n])\r\n .config([\r\n '$httpProvider', function ($httpProvider) {\r\n $httpProvider.interceptors.push('authInterceptorService');\r\n }\r\n])\r\n .config([\r\n 'cfpLoadingBarProvider', function (cfpLoadingBarProvider) {\r\n cfpLoadingBarProvider.includeSpinner = true;\r\n cfpLoadingBarProvider.includeBar = true;\r\n }\r\n])\r\n .config([\r\n 'CacheFactoryProvider', function (CacheFactoryProvider) {\r\n angular.extend(CacheFactoryProvider.defaults, { maxAge: 2 * 60 * 1000 });\r\n }\r\n]);\r\n/// \r\nvar Common = (function () {\r\n function Common() {\r\n }\r\n Common.isNumber = function (n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n };\r\n Common.concatWithoutDuplicates = function () {\r\n var items = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n items[_i - 0] = arguments[_i];\r\n }\r\n var res = [];\r\n for (var i = 0; i < items.length; i++) {\r\n var list = items[i];\r\n for (var j = 0; j < list.length; j++) {\r\n if (!Common.isContains(res, list[j])) {\r\n res.push(list[j]);\r\n }\r\n }\r\n }\r\n return res;\r\n };\r\n Common.getIndexBy = function (array, name, value) {\r\n for (var i = 0; i < array.length; i++) {\r\n if (array[i][name] === value) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n };\r\n Common.isContains = function (source, element) {\r\n if (Array.isArray(source)) {\r\n for (var i = 0; i < source.length; i++) {\r\n if (Array.isArray(element)) {\r\n for (var j = 0; j < element.length; j++) {\r\n if (angular.equals(source[i], element[j])) {\r\n return true;\r\n }\r\n }\r\n }\r\n else {\r\n if (angular.equals(source[i], element)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n if (typeof source == \"string\") {\r\n return source.indexOf(element) > -1;\r\n }\r\n throw new Error(\"Method Common.Contains is not defined for \" + typeof source);\r\n };\r\n Common.Enum = function (enums) {\r\n console.warn('Method is deprecated. Common.Enum');\r\n for (var i in enums) {\r\n this[i] = enums[i];\r\n }\r\n };\r\n Common.toArray = function (obj) {\r\n var res = [];\r\n Object.keys(obj)\r\n .map(function (value, index) {\r\n res[index] = { key: value, value: obj[value] };\r\n });\r\n return res;\r\n };\r\n Common.toDictionaryObject = function (array) {\r\n var res = {};\r\n array.forEach(function (i) {\r\n if (i.key != '') {\r\n res[i.key] = i.value;\r\n }\r\n });\r\n return res;\r\n };\r\n Common.parseBoolean = function (value) {\r\n if (!value) {\r\n return false;\r\n }\r\n return value.toLowerCase() === 'true';\r\n };\r\n return Common;\r\n})();\r\nangular.module('DoctorApp')\r\n .service('common', function () {\r\n return Common;\r\n});\r\nif (!String.prototype.endsWith) {\r\n String.prototype.endsWith = function (suffix) {\r\n return this.indexOf(suffix, this.length - suffix.length) !== -1;\r\n };\r\n}\r\nif (!String.prototype.startsWith) {\r\n String.prototype.startsWith = function (str) {\r\n return this.indexOf(str) === 0;\r\n };\r\n}\r\nif (!String.prototype.contains) {\r\n String.prototype.contains = function (str) {\r\n return this.indexOf(str) > -1;\r\n };\r\n}\r\nif (!String.prototype.insertAt) {\r\n String.prototype.insertAt = function (char, pos) {\r\n return this.slice(0, pos) + char + this.slice(pos);\r\n };\r\n}\r\n\r\n/// \r\nangular.module('DoctorApp')\r\n .directive('calcButton', function () {\r\n return {\r\n restrict: 'C',\r\n link: function (scope, element, attrs) {\r\n element.click(function () {\r\n scope.$apply(function () {\r\n scope.model.quantity = \"\" + scope.model.quantity + element.text();\r\n });\r\n });\r\n }\r\n };\r\n});\r\nangular.module('DoctorApp')\r\n .directive('clearIcon', [\"$compile\", function ($compile) {\r\n return {\r\n require: 'ngModel',\r\n restrict: 'EA',\r\n link: function (scope, elem, attrs) {\r\n var model = attrs.ngModel;\r\n var template = 'x';\r\n elem.parent().append($compile(template)(scope));\r\n var clearIconToggle = function (toggleParam) {\r\n if (elem.val().trim().length)\r\n elem.next().css(\"display\", \"inline\");\r\n else {\r\n if (elem.next().css(\"display\") === \"inline\")\r\n elem.next().css(\"display\", \"none\");\r\n }\r\n };\r\n var clearText = function (clearParam) {\r\n elem.val('');\r\n clearIconToggle(clearParam);\r\n };\r\n elem.on(\"focus\", function (event) {\r\n clearIconToggle(model);\r\n });\r\n elem.on(\"keyup\", function (event) {\r\n clearIconToggle(model);\r\n });\r\n elem.next().on(\"click\", function (event) {\r\n elem.val('');\r\n elem.next().css(\"display\", \"none\");\r\n });\r\n }\r\n };\r\n}]);\r\n/// \r\nangular.module('DoctorApp')\r\n .directive('iconDegreeCount', ['homeService', function () {\r\n return {\r\n scope: {\r\n count: '=',\r\n white: '=',\r\n image: '='\r\n },\r\n restrict: 'E',\r\n template: '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
',\r\n };\r\n }])\r\n .directive('ripple', ['$timeout', function ($timeout) {\r\n return {\r\n restrict: 'C',\r\n link: function (scope, element, attrs) {\r\n $(element).on('click', function (event) {\r\n event.preventDefault();\r\n var $div = $('
'), btnOffset = $(this).offset(), xPos = event.pageX - btnOffset.left, yPos = event.pageY - btnOffset.top;\r\n $div.addClass('ripple-effect');\r\n var $ripple = $(\".ripple-effect\");\r\n $ripple.css(\"height\", $(this).height());\r\n $ripple.css(\"width\", $(this).height());\r\n $div\r\n .css({\r\n top: yPos - ($ripple.height() / 2),\r\n left: xPos - ($ripple.width() / 2),\r\n background: $(this).data(\"ripple-color\")\r\n })\r\n .appendTo($(this));\r\n $timeout(function () {\r\n $div.remove();\r\n }, 1000);\r\n });\r\n }\r\n };\r\n }])\r\n .directive('patientsInWaitingRoom', ['homeService', 'locationService', '$routeParams', '$rootScope', 'modalService',\r\n function (homeService, locationService, $routeParams, $rootScope, modalService) {\r\n return {\r\n scope: {\r\n white: '='\r\n },\r\n restrict: 'EA',\r\n template: \"\\n\\t\\t\\t\\t\\t 0\\\" count=\\\"count\\\" white=\\\"white\\\" image=\\\"'styles/images/waiting-patient.png'\\\">\\n\\t\\t\\t\\t\\t\",\r\n link: function (scope, element, attr) {\r\n var practiceId = $routeParams.practiceId;\r\n var getWaitingPatients = function () {\r\n homeService.getCachedCheckInPatients(practiceId)\r\n .then(function (checkedInPatients) {\r\n scope.count = checkedInPatients.filter(function (patient) { return patient.Status === 1; }).length;\r\n });\r\n };\r\n var CheckedInPatientsUpdated$ = $rootScope.$on('CheckedInPatientsUpdated', function ($e, checkedInPatients) {\r\n scope.count = checkedInPatients.filter(function (patient) { return patient.Status === 1; }).length;\r\n });\r\n scope.count = 0;\r\n scope.$on('$destroy', function () {\r\n CheckedInPatientsUpdated$();\r\n });\r\n scope.goToHome = function () {\r\n if (practiceId) {\r\n modalService.confirm('You currently have ' + scope.count + ' patient' + (scope.count > 1 ? \"s\" : \"\") + ' in the waiting room.

Are you sure you would like to go back to the waiting room?')\r\n .then(function () {\r\n locationService.goToHome(practiceId);\r\n });\r\n }\r\n };\r\n getWaitingPatients();\r\n }\r\n };\r\n }]);\r\n/// \r\n/// \r\nvar DatePickerModule;\r\n(function (DatePickerModule) {\r\n var Config = (function () {\r\n function Config() {\r\n }\r\n Config.init = function (config) {\r\n config.format = config.format || Config.DEFAULT_FORMAT;\r\n };\r\n Config.DEFAULT_FORMAT = 'yy-mm-dd';\r\n return Config;\r\n })();\r\n DatePickerModule.Config = Config;\r\n var Link = (function () {\r\n function Link(scope, element, attrs, ngModelCtrl, transclude) {\r\n scope.config = scope.config || new Config();\r\n Config.init(scope.config);\r\n Link.init(scope, element, ngModelCtrl);\r\n }\r\n Link.init = function (scope, element, ngModelCtrl) {\r\n var input = element.find('input');\r\n var icon = element.find('.calanderico');\r\n var inputElement = angular.element(input[0]);\r\n Link.initWatcherModel(scope, ngModelCtrl, inputElement);\r\n Link.initDatePicker(scope, ngModelCtrl, inputElement, icon);\r\n Link.initWatcherConfig(scope, inputElement);\r\n };\r\n Link.initWatcherModel = function (scope, ngModelCtrl, inputElement) {\r\n var stop = scope.$watch(function () {\r\n return ngModelCtrl.$modelValue;\r\n }, function () {\r\n var date = ngModelCtrl.$modelValue;\r\n if (Link.moment.isMoment(date)) {\r\n inputElement.datepicker('setDate', date.toDate());\r\n }\r\n });\r\n };\r\n Link.initDatePicker = function (scope, ngModelCtrl, inputElement, icon) {\r\n var element = inputElement;\r\n element.datepicker({\r\n dateFormat: scope.config.format,\r\n onSelect: function (date) {\r\n scope.$apply(function () {\r\n var v_date = element.datepicker('getDate');\r\n var d = Link.moment(v_date);\r\n ngModelCtrl.$setViewValue(d);\r\n });\r\n }\r\n });\r\n icon.click(function () {\r\n inputElement.datepicker(\"show\");\r\n });\r\n };\r\n Link.initWatcherConfig = function (scope, element) {\r\n var _this = this;\r\n scope.$watch('config', function () {\r\n element.datepicker(\"option\", \"dateFormat\", scope.config.format);\r\n if (scope.config.changeMonth) {\r\n element.datepicker(\"option\", \"changeMonth\", scope.config.changeMonth);\r\n }\r\n if (scope.config.changeYear) {\r\n element.datepicker(\"option\", \"changeYear\", scope.config.changeYear);\r\n element.datepicker(\"option\", \"yearRange\", \"1930:\" + _this.moment().year());\r\n }\r\n if (scope.config.max) {\r\n element.datepicker(\"option\", \"maxDate\", scope.config.max.toDate());\r\n }\r\n if (scope.config.min) {\r\n element.datepicker(\"option\", \"minDate\", scope.config.min.toDate());\r\n }\r\n }, true);\r\n };\r\n return Link;\r\n })();\r\n var Directive = (function () {\r\n function Directive(moment) {\r\n this.template = '
' +\r\n '' +\r\n '' +\r\n '
';\r\n this.link = Link;\r\n this.require = 'ngModel';\r\n this.restrict = 'E';\r\n this.scope = {\r\n model: '=ngModel',\r\n formSubmitted: '=?',\r\n isRequired: '=?',\r\n config: '=?'\r\n };\r\n Link.moment = moment;\r\n }\r\n Directive.factory = function () {\r\n var methodFactory = function (moment) {\r\n \"ngInject\";\r\n return new Directive(moment);\r\n };\r\n methodFactory.$inject = [\"moment\"];\r\n return methodFactory;\r\n };\r\n return Directive;\r\n })();\r\n DatePickerModule.Directive = Directive;\r\n})(DatePickerModule || (DatePickerModule = {}));\r\nangular.module('DoctorApp')\r\n .directive('datePicker', DatePickerModule.Directive.factory());\r\nvar _this = this;\r\n/// \r\n/// \r\nangular.module('DoctorApp')\r\n .directive('ngPlaceholder', [\r\n '$document',\r\n function ($document) {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n placeholder: '=ngPlaceholder'\r\n },\r\n link: function (scope, elem, attr) {\r\n scope.$watch('placeholder', function () {\r\n elem[0].placeholder = scope.placeholder;\r\n });\r\n }\r\n };\r\n }\r\n])\r\n .directive('autoFocus', [\r\n '$timeout', function ($timeout) {\r\n \"use strict\";\r\n return {\r\n link: function ($scope, $element, attr) {\r\n if (attr.autoFocus === \"true\" || attr.autoFocus === '') {\r\n var timeout = parseInt(attr.autofocusTimeOut) || 1000;\r\n $timeout(function () {\r\n var scrollCont = $('.container-view');\r\n var scrollY = scrollCont.scrollTop();\r\n $element[0].focus();\r\n scrollCont.scrollTop(scrollY);\r\n }, timeout);\r\n }\r\n }\r\n };\r\n }\r\n])\r\n .directive('setPlaceholder', [\r\n '$timeout', function ($timeout) {\r\n \"use strict\";\r\n return {\r\n link: function ($scope, $element, attr) {\r\n $timeout(function () {\r\n var inputText = attr.setPlaceholder || '';\r\n $element.find('input')[0].placeholder = inputText;\r\n });\r\n }\r\n };\r\n }\r\n])\r\n .directive('slideable', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'C',\r\n compile: function (element, attr) {\r\n var contents = element.html();\r\n element.html('
' +\r\n contents +\r\n '
');\r\n return function postLink(scope, element, attrs) {\r\n attrs.duration = (!attrs.duration) ? '0.5s' : attrs.duration;\r\n attrs.easing = (!attrs.easing) ? 'ease-in-out' : attrs.easing;\r\n element.css({\r\n 'overflow': 'hidden',\r\n 'height': '0',\r\n 'transitionProperty': 'height',\r\n 'transitionDuration': attrs.duration,\r\n 'transitionTimingFunction': attrs.easing\r\n });\r\n };\r\n }\r\n };\r\n})\r\n .directive('slideToggle', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n var target = document.querySelector(attrs.slideToggle);\r\n attrs.expanded = false;\r\n element.bind('click', function () {\r\n var content = target.querySelector('.slideable_content');\r\n if (!attrs.expanded) {\r\n content.style.border = '1px solid rgba(0,0,0,0)';\r\n var y = content.clientHeight;\r\n content.style.border = 0;\r\n target.style.height = y + 'px';\r\n }\r\n else {\r\n target.style.height = '0px';\r\n }\r\n attrs.expanded = !attrs.expanded;\r\n });\r\n }\r\n };\r\n})\r\n .directive('customDatePicker', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, ngModelCtrl) {\r\n console.warn('Jquery will be remove. Main.CustomDatePicker');\r\n angular.element(element[0]).datepicker({\r\n dateFormat: 'd MM, yy ',\r\n onSelect: function (date) {\r\n scope.$apply(function () {\r\n var v_date = element.datepicker('getDate');\r\n ngModelCtrl.$setViewValue(v_date);\r\n });\r\n },\r\n maxDate: new Date()\r\n });\r\n }\r\n };\r\n})\r\n .directive('datePicker', [\r\n 'moment', function (moment) {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, ngModelCtrl) {\r\n var DATE_PATTERN_MOMENT = 'DD MMMM, YYYY';\r\n var DATE_PATTERN = 'dd MM, yy';\r\n $(element[0]).datepicker({\r\n dateFormat: DATE_PATTERN,\r\n onSelect: function (date) {\r\n scope.$apply(function () {\r\n var v_date = element.datepicker('getDate');\r\n ngModelCtrl.$setViewValue(moment(v_date).format(DATE_PATTERN_MOMENT));\r\n });\r\n },\r\n maxDate: new Date()\r\n });\r\n }\r\n };\r\n }\r\n])\r\n .directive('smartSelect', [\r\n '$filter', '$timeout', function ($filter, $timeout) {\r\n \"use strict\";\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n scope: {\r\n isDisabled: '=',\r\n isRequired: '=',\r\n items: '=',\r\n change: '&',\r\n model: '=ngModel'\r\n },\r\n template: '
' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '
    ' +\r\n '
  • All
  • ' +\r\n '
  • ' +\r\n '
  • ' +\r\n '
  • ' +\r\n '
' +\r\n '
',\r\n link: function (scope, element, attrs, ctrl) {\r\n scope.label = attrs.label;\r\n scope.option = attrs.option;\r\n scope.value = '';\r\n scope.useFirst = attrs.useFirst;\r\n scope.tab = parseInt(attrs.tabIndex);\r\n var itemsFirstAdded = false;\r\n var filterKey = {};\r\n var updateView = function () {\r\n if (scope.model === null || scope.model === undefined || scope.model === '') {\r\n scope.value = '';\r\n }\r\n else if (scope.model === '*') {\r\n scope.value = 'All';\r\n }\r\n else {\r\n filterKey[scope.option] = scope.model;\r\n var value = $filter(\"filter\")(scope.items, filterKey);\r\n if (value && value.length) {\r\n scope.value = value[0][scope.label];\r\n }\r\n }\r\n };\r\n scope.onChange = function (value) {\r\n if (attrs.ngChange) {\r\n ctrl.$setViewValue(value);\r\n }\r\n };\r\n var interval = null;\r\n scope.$watch(\"value\", function () {\r\n scope.valueCopy = scope.value;\r\n if (scope.change) {\r\n $timeout.cancel(interval);\r\n interval = $timeout(function () {\r\n interval = null;\r\n var item = $filter(\"filter\")(scope.items, scope.model)[0];\r\n if (!item || item && item[scope.label] !== scope.value) {\r\n scope.change({ data: scope.value });\r\n }\r\n }, 500);\r\n }\r\n });\r\n scope.$watch(\"showDrop\", function () {\r\n if (scope.showDrop === false) {\r\n updateView();\r\n }\r\n });\r\n scope.$watch('items', function () {\r\n if (scope.model !== undefined && scope.items && scope.items.length && !itemsFirstAdded) {\r\n updateView();\r\n itemsFirstAdded = true;\r\n }\r\n });\r\n scope.$watch('model', function () {\r\n if (scope.items && scope.items.length) {\r\n updateView();\r\n }\r\n });\r\n }\r\n };\r\n }\r\n])\r\n .directive('datepickerVisitOutcomes', [\r\n 'moment', function (moment) {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, ngModelCtrl) {\r\n console.warn('Jquery will be remove. Main.CustomDatePicker');\r\n var dateFormatMoment = \"DD/MM/YYYY\";\r\n var minDate = moment(attrs.minDate);\r\n element.datepicker({\r\n dateFormat: 'dd/mm/yy'\r\n });\r\n if (minDate.isValid()) {\r\n element.datepicker('option', 'minDate', minDate.toDate());\r\n }\r\n ngModelCtrl.$formatters.push(function (dateMoment) {\r\n return dateMoment.format(dateFormatMoment);\r\n });\r\n ngModelCtrl.$parsers.push(function (dateString) {\r\n return moment(dateString, dateFormatMoment);\r\n });\r\n }\r\n };\r\n }\r\n])\r\n .directive('ngTab', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function (scope, elem, attrs) {\r\n if (attrs.ngTab == \"last\") {\r\n elem.on('keydown', function (event) {\r\n if (event.which == 9) {\r\n event.preventDefault();\r\n var first = angular.element(\"[ng-tab=first]\");\r\n first.select();\r\n first.focus();\r\n }\r\n });\r\n }\r\n }\r\n };\r\n})\r\n .directive('ngLastDayVisitsExpand', [\r\n '$timeout', function ($timeout) {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attr) {\r\n if (scope.$last === true) {\r\n $timeout(function () {\r\n angular.element('#toggle0').click();\r\n });\r\n }\r\n }\r\n };\r\n }\r\n])\r\n .directive('consultationContainer', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attr) {\r\n angular.element('.container').addClass(\"consultation-container\");\r\n angular.element('body').addClass(\"portrait\");\r\n }\r\n };\r\n})\r\n .directive('searchContainer', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attr) {\r\n angular.element('.container').removeClass(\"consultation-container\");\r\n }\r\n };\r\n})\r\n .directive('statusicon', [\r\n 'infrastructureService', '$interval', '$rootScope', function (infrastructureService, $interval, $rootScope) {\r\n \"use strict\";\r\n return {\r\n restrict: 'C',\r\n link: function (scope, element, attrs) {\r\n var stopTime;\r\n function updateNetworkState() {\r\n var image = element.css('background-image');\r\n var i = image.indexOf('.png');\r\n infrastructureService.getNetworkState()\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n element.css('background-image', 'url(styles/images/status/3.png)');\r\n }\r\n else {\r\n var url = \"url(styles/images/status/@1.png)\".replace('@1', response.Data);\r\n element.css('background-image', url);\r\n }\r\n });\r\n }\r\n if (GlobalVar.displayNetworkStatus) {\r\n updateNetworkState();\r\n stopTime = $interval(updateNetworkState, 5000);\r\n element.on('$destroy', function () {\r\n $interval.cancel(stopTime);\r\n });\r\n }\r\n }\r\n };\r\n }\r\n])\r\n .directive('selectebleRows', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attr) {\r\n scope.$watch(function (scope) {\r\n return scope.selectedIndex;\r\n }, function (newValue, oldValue) {\r\n if (oldValue != -1) {\r\n var oldRow = $(element.children()[oldValue]);\r\n oldRow.removeClass(\"rowodd\");\r\n oldRow.addClass(\"roweven\");\r\n }\r\n if (newValue != -1) {\r\n var newRow = $(element.children()[newValue]);\r\n newRow.removeClass(\"roweven\");\r\n newRow.addClass(\"rowodd\");\r\n }\r\n });\r\n }\r\n };\r\n})\r\n .directive('thankYou', [\r\n '$rootScope', 'encounterServiceNew', 'httpService', 'showDialog', '$window', function ($rootScope, encounterServiceNew, httpService, showDialog, $window) {\r\n \"use strict\";\r\n return {\r\n restrict: 'AE',\r\n link: function (scope, element, attrs) {\r\n $rootScope.$watch('showThankYou', function (newValue, oldValue) {\r\n if (newValue) {\r\n var healthIdVisit = encounterServiceNew.getHealthIDVisit();\r\n scope.healthIDVisit = healthIdVisit;\r\n if (healthIdVisit.status === EncounterModule.Controller.NOT_VIEWED) {\r\n scope.goToHealthID = function () {\r\n httpService.get(\"v1/\" +\r\n healthIdVisit.practiceId +\r\n \"/healthid/patient/\" +\r\n healthIdVisit.patientId)\r\n .then(function (response) {\r\n $rootScope.showThankYou = false;\r\n if (!response.token) {\r\n showDialog.error(response.message);\r\n }\r\n else {\r\n var newWindow = $window.open(response.link, \"HealthID\");\r\n }\r\n })\r\n .catch(function (error) {\r\n $rootScope.showThankYou = false;\r\n });\r\n };\r\n }\r\n }\r\n });\r\n }\r\n };\r\n }\r\n])\r\n .directive('progressScreen', [\r\n '$rootScope', function ($rootScope) {\r\n \"use strict\";\r\n return {\r\n restrict: 'C',\r\n link: function (scope, element, attrs) {\r\n $rootScope.$watch(function ($rootScope) {\r\n return $rootScope.showProgressScreen;\r\n }, function (newValue, oldValue) {\r\n if (newValue) {\r\n $(element).fadeIn();\r\n }\r\n else {\r\n $(element).fadeOut();\r\n }\r\n });\r\n }\r\n };\r\n }\r\n])\r\n .directive('hideMobileKeyboard', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attr) {\r\n $(element)\r\n .on(\"focus\", function () {\r\n $(_this).blur();\r\n });\r\n }\r\n };\r\n})\r\n .directive('validateTemplateOrder', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attr) {\r\n $(element)\r\n .on(\"blur\", function () {\r\n scope.validateOrder();\r\n });\r\n }\r\n };\r\n})\r\n .directive('hideFocus', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attr) {\r\n $(element)\r\n .on(\"focus\", function () {\r\n if (scope.firstFocus) {\r\n $(_this).val(\"\");\r\n $(_this).blur();\r\n scope.firstFocus = false;\r\n }\r\n });\r\n }\r\n };\r\n})\r\n .directive('hookKeyboard', [\r\n '$document', function ($document) {\r\n \"use strict\";\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: true,\r\n link: function (scope, element, attr) {\r\n $document.on('keypress', function (e) {\r\n return false;\r\n });\r\n $document.on('keydown', function (e) {\r\n scope.$apply(scope.keyDown(e));\r\n });\r\n scope.$on('$destroy', function () {\r\n $document.off('keypress');\r\n $document.off('keydown');\r\n });\r\n }\r\n };\r\n }\r\n])\r\n .directive('selectOnClick', ['$window', function ($window) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n element.on('click', function () {\r\n if (!$window.getSelection().toString()) {\r\n _this.setSelectionRange(0, _this.value.length);\r\n }\r\n });\r\n }\r\n };\r\n }])\r\n .directive('execOnEnter', function () {\r\n return function (scope, element, attrs) {\r\n element.bind(\"keydown keypress\", function (event) {\r\n if (event.which === 13) {\r\n scope.$apply(function () {\r\n scope.$eval(attrs.execOnEnter);\r\n });\r\n event.preventDefault();\r\n }\r\n });\r\n };\r\n})\r\n .directive('stringToNumber', function () {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, ngModel) {\r\n ngModel.$parsers.push(function (value) {\r\n if (value === 0)\r\n return 0;\r\n return parseFloat(value || '');\r\n });\r\n ngModel.$formatters.push(function (value) {\r\n if (isNaN(value))\r\n return;\r\n return parseFloat(value);\r\n });\r\n }\r\n };\r\n})\r\n .directive('showTab', function () {\r\n return {\r\n link: function (scope, element, attrs) {\r\n element.click(function (e) {\r\n e.preventDefault();\r\n $(element).tabs('show');\r\n });\r\n }\r\n };\r\n})\r\n .directive('onError', function () {\r\n return {\r\n scope: {\r\n onError: '='\r\n },\r\n link: function (scope, element, attrs) {\r\n element.bind('error', function () {\r\n if (scope.onError !== undefined) {\r\n scope.$apply(function () {\r\n scope.onError = true;\r\n });\r\n }\r\n });\r\n }\r\n };\r\n})\r\n .directive('fnSrc', function () {\r\n return {\r\n scope: {\r\n fnSrc: '&',\r\n fnSrcError: '=',\r\n },\r\n link: function (scope, element, attrs) {\r\n scope.fnSrc()\r\n .then(function (url) {\r\n if (url) {\r\n element.attr(\"src\", url);\r\n scope.fnSrcError = false;\r\n }\r\n else {\r\n scope.fnSrcError = true;\r\n }\r\n });\r\n element.bind('error', function () {\r\n if (scope.fnSrcError !== undefined) {\r\n scope.$apply(function () {\r\n scope.fnSrcError = true;\r\n });\r\n }\r\n });\r\n }\r\n };\r\n})\r\n .directive('squareAvatar', function () {\r\n return {\r\n scope: {\r\n fnUrl: '&',\r\n squareAvatar: '=',\r\n srcError: '=',\r\n },\r\n template: \"\",\r\n link: function (scope, element, attrs) {\r\n var size = attrs.size || 100;\r\n var draw = function (url) {\r\n if (url) {\r\n element.css('background-image', \"url('\" + url + \"')\");\r\n element.css('background-size', \"cover\");\r\n element.css('background-position', \"center center\");\r\n element.css('width', size + 'px');\r\n element.css('height', size + 'px');\r\n scope.url = url;\r\n scope.srcError = false;\r\n }\r\n else {\r\n scope.srcError = true;\r\n }\r\n };\r\n if (scope.fnUrl && attrs.fnUrl) {\r\n scope.fnUrl().then(draw);\r\n }\r\n else {\r\n if (scope.squareAvatar) {\r\n draw(scope.squareAvatar);\r\n }\r\n scope.$watch('squareAvatar', function () {\r\n draw(scope.squareAvatar);\r\n });\r\n }\r\n element.find('img').bind('error', function () {\r\n if (scope.srcError !== undefined) {\r\n scope.$apply(function () {\r\n scope.srcError = true;\r\n });\r\n }\r\n });\r\n }\r\n };\r\n});\r\n/// \r\n/// \r\nangular.module('DoctorApp')\r\n .directive('depcodeMask', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function ($scope, element, attrs) {\r\n $(function () {\r\n $(element[0]).mask(\"99\", { placeholder: \"\" });\r\n });\r\n }\r\n };\r\n})\r\n .directive('dateMask', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function ($scope, element, attrs) {\r\n $(function () {\r\n $(element[0]).mask(\"99/99/9999\");\r\n });\r\n }\r\n };\r\n}).directive('alphaNumericMask', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function ($scope, element, attrs) {\r\n $.mask.definitions.a = \"[a-zA-Z0-9]\";\r\n $(function () {\r\n $(element[0]).mask(\"aaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\", { placeholder: \"\" });\r\n });\r\n }\r\n };\r\n})\r\n .directive('numberMaxLength', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: {\r\n pre: function (scope, element, attrs) {\r\n if (!attrs.maxlength) {\r\n return;\r\n }\r\n element.on('input', function (event) {\r\n var object = event.target;\r\n if (object.value.length > object.maxLength) {\r\n object.value = Number(object.value.slice(0, object.maxLength));\r\n }\r\n });\r\n }\r\n }\r\n };\r\n})\r\n .directive('regExInput', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n require: \"?ngPattern\",\r\n scope: { ngPattern: '=?' },\r\n link: function (scope, element) {\r\n if (!scope.ngPattern) {\r\n return;\r\n }\r\n element.bind('keypress', function (event) {\r\n var regex = new RegExp(scope.ngPattern);\r\n var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);\r\n var resultStr = event.target['value'].insertAt(key, event.target['selectionEnd']);\r\n if (!regex.test(resultStr)) {\r\n event.preventDefault();\r\n return false;\r\n }\r\n });\r\n }\r\n };\r\n})\r\n .directive('numbersMask', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function ($scope, element, attrs) {\r\n $(function () {\r\n $(element[0]).mask(\"9?9999999999999999\", { placeholder: \"\" });\r\n });\r\n }\r\n };\r\n})\r\n .directive('phoneMask', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function ($scope, element, attrs) {\r\n $(function () {\r\n $(element[0]).mask(\"9?99 999 99999999999999999999\", { placeholder: \"\" });\r\n });\r\n }\r\n };\r\n})\r\n .directive('dateTimeMask', function () {\r\n \"use strict\";\r\n return {\r\n restrict: 'A',\r\n link: function ($scope, element, attrs) {\r\n $(function () {\r\n $(element[0]).mask(\"99/99/9999 99:99\");\r\n });\r\n }\r\n };\r\n});\r\n/// \r\nangular.module('DoctorApp')\r\n .directive('passwordStrength', function () {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, elm, attrs, ctrl) {\r\n ctrl.$parsers.unshift(function (viewValue) {\r\n var containsDigitFunc = function (value) {\r\n return /[0-9]+/.test(value);\r\n };\r\n var containsSpecialSymbolsFunc = function (value) {\r\n return /[$-/:-?{-~!\"^_`\\[\\]]/g.test(value);\r\n };\r\n var containsUpperLetterFunc = function (value) {\r\n return /[A-Z]+/.test(value);\r\n };\r\n var containsLowerLetterFunc = function (value) {\r\n return /[a-z]+/.test(value);\r\n };\r\n var containsUpperLetter = containsUpperLetterFunc(viewValue);\r\n var containsLowerLetter = containsLowerLetterFunc(viewValue);\r\n var containsDigit = containsDigitFunc(viewValue);\r\n var hasSpecialSymbol = containsSpecialSymbolsFunc(viewValue);\r\n ctrl.$setValidity('containsUpperLetter', containsUpperLetter);\r\n ctrl.$setValidity('containsLowerLetter', containsLowerLetter);\r\n ctrl.$setValidity('containsDigit', containsDigit);\r\n ctrl.$setValidity('hasSpecialSymbol', hasSpecialSymbol);\r\n if (containsUpperLetter && containsLowerLetter && containsDigit && hasSpecialSymbol) {\r\n return viewValue;\r\n }\r\n else {\r\n return undefined;\r\n }\r\n });\r\n }\r\n };\r\n});\r\nvar ScrollUp;\r\n(function (ScrollUp) {\r\n var Link = (function () {\r\n function Link(scope, element, attrs) {\r\n attrs.scrollto = attrs.scrollto || '.load-line';\r\n attrs.container = attrs.container || '.container-view';\r\n scope.small = Object.getOwnPropertyNames(attrs).indexOf('small') > -1;\r\n Link.$timeout(function () {\r\n $('.scrolltop').stop(true, true).fadeOut(0);\r\n $(attrs.container)\r\n .scroll(function () {\r\n if ($(attrs.container).scrollTop() > 50) {\r\n $('.scrolltop:hidden').stop(true, true).fadeIn();\r\n }\r\n else {\r\n $('.scrolltop').stop(true, true).fadeOut();\r\n }\r\n });\r\n }, 400);\r\n $(function () {\r\n $(\".scroll\")\r\n .click(function () {\r\n $(attrs.container)\r\n .animate({\r\n scrollTop: $(attrs.scrollto).offset().top\r\n }, \"1000\");\r\n return false;\r\n });\r\n });\r\n }\r\n return Link;\r\n })();\r\n var Directive = (function () {\r\n function Directive() {\r\n }\r\n Directive.factory = function () {\r\n var methodFactory = function ($timeout) {\r\n \"ngInject\";\r\n var directive = {};\r\n Link.$timeout = $timeout;\r\n directive.restrict = 'AE';\r\n directive.scope = {};\r\n directive.link = Link;\r\n directive.template =\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n 'Top' +\r\n '
' +\r\n '
' +\r\n '
';\r\n return directive;\r\n };\r\n methodFactory.$inject = [\"$timeout\"];\r\n return methodFactory;\r\n };\r\n return Directive;\r\n })();\r\n ScrollUp.Directive = Directive;\r\n})(ScrollUp || (ScrollUp = {}));\r\nangular.module('DoctorApp')\r\n .directive('scrollUp', ScrollUp.Directive.factory());\r\n/// \r\nvar Shortcut;\r\n(function (Shortcut) {\r\n var Link = (function () {\r\n function Link(scope, element, attrs, ngModelCtrl, transclude) {\r\n if (angular.isFunction(scope.keyPress)) {\r\n Link.$document.on('keypress', function (e) {\r\n scope.keyPress({ event: e });\r\n });\r\n }\r\n if (angular.isFunction(scope.keyDown)) {\r\n Link.$document.on('keydown', function (e) {\r\n scope.keyDown({ event: e });\r\n });\r\n }\r\n scope.$on('$destroy', function () {\r\n Link.$document.off('keypress');\r\n Link.$document.off('keydown');\r\n });\r\n }\r\n return Link;\r\n })();\r\n var Directive = (function () {\r\n function Directive() {\r\n }\r\n Directive.factory = function () {\r\n var methodFactory = function ($document) {\r\n \"ngInject\";\r\n Link.$document = $document;\r\n var directive = {};\r\n directive.restrict = 'E';\r\n directive.replace = true;\r\n directive.scope = {\r\n keyDown: '&',\r\n keyPress: '&'\r\n };\r\n directive.link = Link;\r\n return directive;\r\n };\r\n methodFactory.$inject = [\"$document\"];\r\n return methodFactory;\r\n };\r\n return Directive;\r\n })();\r\n Shortcut.Directive = Directive;\r\n})(Shortcut || (Shortcut = {}));\r\nangular.module('DoctorApp')\r\n .directive('shortcut', Shortcut.Directive.factory());\r\n/// \r\n/// \r\nangular.module('filters', [])\r\n .filter('truncate', function () {\r\n 'use strict';\r\n return function (text, length, end) {\r\n if (isNaN(length)) {\r\n length = 10;\r\n }\r\n if (!text) {\r\n return '';\r\n }\r\n if (!end) {\r\n end = \"...\";\r\n }\r\n if (text.length <= length || text.length - end.length <= length) {\r\n return text;\r\n }\r\n else {\r\n return String(text).substring(0, length - end.length) + end;\r\n }\r\n };\r\n})\r\n .filter('titlecase', function () { return function (input) {\r\n if (!input) {\r\n return '';\r\n }\r\n var words = input.split(' ');\r\n for (var i = 0; i < words.length; i++) {\r\n words[i] = words[i].toLowerCase();\r\n words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1);\r\n }\r\n return words.join(' ');\r\n}; })\r\n .filter('startFrom', function () {\r\n return function (input, start) {\r\n start = +start;\r\n return input.slice(start);\r\n };\r\n})\r\n .filter('wordwrap', function () {\r\n return function (input) {\r\n var str = [];\r\n var uppers = [];\r\n var i;\r\n for (i = 1; i < input.length; i++) {\r\n var character = input[i];\r\n if (!((!isNaN(character * 1)) || (character == character.toLowerCase()))) {\r\n if (character == character.toUpperCase()) {\r\n uppers.push(i);\r\n }\r\n }\r\n }\r\n uppers.push(input.length);\r\n if (uppers.length > 1) {\r\n var start = 0;\r\n var end = uppers[0];\r\n for (i = 0; i < uppers.length; i++) {\r\n str.push(input.slice(start, end));\r\n start = uppers[i];\r\n end = uppers[i + 1];\r\n }\r\n return str.join(\" \");\r\n }\r\n return input;\r\n };\r\n})\r\n .filter('dateFormat', [\r\n 'moment', function (moment) {\r\n return function (str, firstParameter, secondParameter, isToday) {\r\n var inputPattern;\r\n var outputPattern;\r\n if (secondParameter) {\r\n inputPattern = firstParameter;\r\n outputPattern = secondParameter;\r\n }\r\n else {\r\n outputPattern = firstParameter;\r\n }\r\n var date = moment.utc(str, inputPattern);\r\n if (!date.isValid()) {\r\n return str;\r\n }\r\n if (isToday) {\r\n var today = moment.utc().startOf('day');\r\n if (date.isSame(today, 'd')) {\r\n return date.startOf('second').fromNow();\r\n }\r\n }\r\n return date.format(outputPattern);\r\n };\r\n }\r\n])\r\n .filter('dateFormatLocal', [\r\n 'moment', function (moment) {\r\n return function (str, firstParameter, secondParameter, isToday) {\r\n var inputPattern;\r\n var outputPattern;\r\n if (secondParameter) {\r\n inputPattern = firstParameter;\r\n outputPattern = secondParameter;\r\n }\r\n else {\r\n outputPattern = firstParameter;\r\n }\r\n var date = moment.utc(str, inputPattern);\r\n if (!date.isValid()) {\r\n return str;\r\n }\r\n if (isToday) {\r\n var today = moment.utc().startOf('day');\r\n if (date.isSame(today, 'd')) {\r\n return date.startOf('second').fromNow();\r\n }\r\n }\r\n return date.local().format(outputPattern);\r\n };\r\n }\r\n])\r\n .filter('splitGuid', function () {\r\n return function (input) {\r\n if (input) {\r\n input = input.replace(/-/g, ' - ');\r\n }\r\n return input;\r\n };\r\n})\r\n .filter('orderFilter', function () { return function (items, criterion, attr) {\r\n var tmp = [];\r\n for (var i in items) {\r\n var item = items[i];\r\n var searchValue = item[attr] && item[attr].split(\":\")[0];\r\n if (criterion.indexOf(searchValue) >= 0) {\r\n tmp.push(item);\r\n }\r\n }\r\n return tmp;\r\n}; })\r\n .filter('objectLength', function () { return function (object) {\r\n var count = 0;\r\n for (var i in object) {\r\n count++;\r\n }\r\n return count;\r\n}; })\r\n .filter('truncateDate', function () { return function (date) {\r\n if (date) {\r\n return date.replace(\"00:00:00\", \"\");\r\n }\r\n return '';\r\n}; })\r\n .filter('ageByBirthDay', [\r\n 'moment', function (moment) {\r\n return function (str) {\r\n var date = moment(str);\r\n if (!date.isValid()) {\r\n return str;\r\n }\r\n var diff = moment().diff(str, 'years', false);\r\n return diff > 0 ? diff + ' years' : moment().diff(str, 'month', false) + ' months';\r\n };\r\n }\r\n])\r\n .filter('birthDayToday', [\r\n 'moment', function (moment) {\r\n return function (str) {\r\n var date = moment(str);\r\n if (!date.isValid()) {\r\n return str;\r\n }\r\n var today = moment();\r\n var DOB = moment(str).year(today.year());\r\n return today.isSame(DOB, 'd');\r\n };\r\n }\r\n])\r\n .filter('divideCamel', function () { return function (text, textCase) {\r\n var dividedText = text && text.replace(/([A-Z])/g, ' $1').toString() || \"\";\r\n if (textCase === 'toUpperCase')\r\n return dividedText.toUpperCase();\r\n else if (textCase === 'toLowerCase')\r\n return dividedText.toLowerCase();\r\n else\r\n return dividedText;\r\n}; })\r\n .filter('removeHTMLTags', function () { return function (text) {\r\n if (text) {\r\n return text\r\n .replace(/<[^>]+>/gm, ' ')\r\n .replace(/\\s\\s+/g, ' ')\r\n .replace(/ /g, ' ')\r\n .replace(/[<>]/g, '');\r\n }\r\n return '';\r\n}; })\r\n .filter('fileExtension', function () { return function (filename, error) {\r\n var fileImg = \"\";\r\n var filePath = \"styles/images/file-types/\";\r\n filename = filename || \"\";\r\n if (filename.indexOf(\".pdf\") > 0) {\r\n fileImg = filePath + \"pdf.png\";\r\n }\r\n else if (filename.indexOf(\".jpg\") > 0 || filename.indexOf(\".jpeg\") > 0 || filename.indexOf(\".gif\") > 0 || filename.indexOf(\".png\") > 0) {\r\n if (error) {\r\n fileImg = filePath + \"image.png\";\r\n }\r\n }\r\n else if (filename.indexOf(\".xls\") > 0 || filename.indexOf(\".xlsx\") > 0) {\r\n fileImg = filePath + \"excel.png\";\r\n }\r\n else if (filename.indexOf(\".ppt\") > 0 || filename.indexOf(\".pptx\") > 0) {\r\n fileImg = filePath + \"powerpoint.png\";\r\n }\r\n else if (filename.indexOf(\".doc\") > 0 || filename.indexOf(\".docx\") > 0) {\r\n fileImg = filePath + \"word.png\";\r\n }\r\n else if (filename.indexOf(\".thumb\") > 0) {\r\n fileImg = filename;\r\n if (error) {\r\n fileImg = filePath + \"image.png\";\r\n }\r\n }\r\n else {\r\n fileImg = filePath + \"file.png\";\r\n }\r\n return fileImg || filename;\r\n}; })\r\n .filter('imgToThumb', function () { return function (filename) {\r\n filename = filename || \"\";\r\n if (filename.indexOf('file-types') < 0) {\r\n return filename.replace(/\\.(jpg|jpeg|png)/, '.thumb');\r\n }\r\n return filename;\r\n}; })\r\n .filter('newLineIfMultilined', function () { return function (text) {\r\n if (text.search(/\\n/ig) > -1) {\r\n text = '\\n' + text;\r\n }\r\n return text;\r\n}; });\r\n//TODO remove from global scope and add to module app\r\nvar consultationDateFormat = 'MM/dd/yyyy HH:mm:ss';\r\nvar DATE_TIME_PATTERN = 'MM/DD/YYYY HH:mm:ss';\r\nvar ServerDateFormat = 'YYYY-MM-DD[T]HH:mm:ss[Z]';\r\nvar PatientDateFormat = 'dd/MM/yyyy';\r\nvar serverDateFormat = 'YYYY-MM-DD';\r\nvar appControllers = {};\r\nvar appServices = {};\r\nvar test = \"s\";\r\nvar globalProviders = [];\r\nvar clinicalGlobalProviders = [];\r\n/// \r\nangular.module('DoctorApp')\r\n .config([\"$routeProvider\", function ($routeProvider) {\r\n \"ngInject\";\r\n $routeProvider\r\n .when('/:practiceId/home', {\r\n controller: 'HomeController',\r\n templateUrl: 'screens/home/home.html'\r\n })\r\n .when('/:practiceId/invoice/:patientVisitId', {\r\n controller: 'InvoiceController',\r\n templateUrl: 'screens/consultation/invoice/invoice.html'\r\n })\r\n .when('/:practiceId/encounter/:patientVisitId', {\r\n controller: 'EncounterController',\r\n templateUrl: 'screens/consultation/encounter/encounter.html'\r\n })\r\n .when('/:practiceId/create-patient', {\r\n controller: 'PatientCreateController',\r\n templateUrl: 'screens/patient/patient.html'\r\n })\r\n .when('/:practiceId/templates', {\r\n controller: 'TemplatesController',\r\n templateUrl: 'screens/templates/templates.html'\r\n })\r\n .when('/:practiceId/template', {\r\n controller: 'CreateTemplateController',\r\n templateUrl: 'screens/template/template.html'\r\n })\r\n .when('/:practiceId/template/:templateId', {\r\n controller: 'EditTemplateController',\r\n templateUrl: 'screens/template/template.html'\r\n })\r\n .when('/:practiceId/search-diagnosis', {\r\n controller: 'SearchDiagnosisController',\r\n templateUrl: 'screens/searches/search-diagnosis/search-diagnosis.html'\r\n })\r\n .when('/:practiceId/search-procedure', {\r\n controller: 'SearchProcedureController',\r\n templateUrl: 'screens/searches/search-procedure/search-procedure.html'\r\n })\r\n .when('/:practiceId/search-medicine', {\r\n controller: 'SearchMedicineController',\r\n templateUrl: 'screens/searches/search-medicine/search-medicine.html'\r\n })\r\n .when('/:practiceId/search-consumable', {\r\n controller: 'SearchConsumableController',\r\n templateUrl: 'screens/searches/search-consumable/search-consumable.html'\r\n })\r\n .when('/:practiceId/search-prescription', {\r\n controller: 'SearchPrescriptionController',\r\n templateUrl: 'screens/searches/search-prescription/search-prescription.html'\r\n })\r\n .when('/:practiceId/search-medical-insurer-procedure', {\r\n controller: 'SearchMIProcedureController',\r\n templateUrl: 'screens/searches/search-medical-insurer-procedure/medical-insurer-procedure.html'\r\n })\r\n .when('/login', {\r\n controller: 'LoginController',\r\n templateUrl: 'screens/login/login.html'\r\n })\r\n .when('/:practiceId/patient/:patientId', {\r\n controller: 'PatientEditController',\r\n templateUrl: 'screens/patient/patient.html'\r\n })\r\n .when('/audit', {\r\n controller: 'AuditController',\r\n templateUrl: 'screens/audit/audit.html'\r\n })\r\n .when('/audit-events', {\r\n controller: 'EventController',\r\n templateUrl: 'screens/audit/audit-events.html'\r\n })\r\n .when('/audit-events/tenantId/:tenantId/aggregateId/:aggregateId', {\r\n controller: 'EventController',\r\n templateUrl: 'screens/audit/audit-events.html'\r\n })\r\n .when('/events/:tenantId', {\r\n controller: 'TenantEventController',\r\n templateUrl: 'screens/audit/audit-tenant-events.html'\r\n })\r\n .when('/events/:tenantId/:aggregateId', {\r\n controller: 'EventController',\r\n templateUrl: 'screens/audit/audit-events.html'\r\n })\r\n .when('/events/:tenantId/from/:dateFrom/to/:dateTo', {\r\n controller: 'TenantEventController',\r\n templateUrl: 'screens/audit/audit-tenant-events.html'\r\n })\r\n .when('/:practiceId/patient-visits', {\r\n controller: 'PatientVisitsController',\r\n templateUrl: 'screens/patient-visits/patient-visits.html'\r\n })\r\n .when('/claim-response/:claimId', {\r\n controller: 'ClaimResponseController',\r\n templateUrl: 'screens/claim-response/claim-response.html'\r\n })\r\n .when('/users', {\r\n controller: 'UsersController',\r\n templateUrl: 'screens/users/users.html'\r\n })\r\n .when('/users/:practiceId', {\r\n controller: 'UsersController',\r\n templateUrl: 'screens/users/users.html'\r\n })\r\n .when('/user', {\r\n controller: 'UserCreateController',\r\n templateUrl: 'screens/user/user.html'\r\n })\r\n .when('/user/:userId', {\r\n controller: 'UserEditController',\r\n templateUrl: 'screens/user/user.html'\r\n })\r\n .when('/:practiceId/address-book', {\r\n controller: 'ClinicalAddressBookController',\r\n templateUrl: 'screens/address-book/address-book.html'\r\n })\r\n .when('/:practiceId/address-book/create', {\r\n controller: 'ClinicalAddressBookCreateController',\r\n templateUrl: 'screens/address-book/address-book-entry.html'\r\n })\r\n .when('/:practiceId/address-book/entry/:entryId', {\r\n controller: 'ClinicalAddressBookEditController',\r\n templateUrl: 'screens/address-book/address-book-entry.html'\r\n })\r\n .when('/speciality-rules', {\r\n controller: 'SpecialityRulesController',\r\n templateUrl: 'screens/speciality-rules/speciality-rules.html'\r\n })\r\n .when('/speciality-rule', {\r\n controller: 'SpecialityRuleCreateController',\r\n templateUrl: 'screens/speciality-rules/speciality-rule.html'\r\n })\r\n .when('/speciality-rule/:specialityCode', {\r\n controller: 'SpecialityRuleEditController',\r\n templateUrl: 'screens/speciality-rules/speciality-rule.html'\r\n })\r\n .when('/:practiceId/change-password/:userId', {\r\n controller: 'ChangePasswordController',\r\n templateUrl: 'screens/change-password/change-password.html'\r\n })\r\n .when('/:practiceId/account/:userId', {\r\n controller: 'UserAccountController',\r\n templateUrl: 'screens/user-account/user-account.html'\r\n })\r\n .when('/practices', {\r\n controller: 'PracticesController',\r\n templateUrl: 'screens/practices/practices.html'\r\n })\r\n .when('/practice', {\r\n controller: 'PracticeCreateController',\r\n templateUrl: 'screens/practice/practice.html'\r\n })\r\n .when('/practice/:practiceId', {\r\n controller: 'PracticeEditController',\r\n templateUrl: 'screens/practice/practice.html'\r\n })\r\n .when('/practice-options/:practiceId', {\r\n controller: 'PracticeOptionsController',\r\n templateUrl: 'screens/practice-options/practice-options.html'\r\n })\r\n .when('/public-keys', {\r\n controller: 'PublicKeysController',\r\n templateUrl: 'screens/public-keys/public-keys.html'\r\n })\r\n .when('/search-diagnosis#clinical', {\r\n controller: 'ClinicalSearchDiagnosis',\r\n templateUrl: 'screens/searches/search-diagnosis/search-diagnosis.html'\r\n })\r\n .when('/search-procedure#clinical', {\r\n controller: 'ClinicalSearchProcedure',\r\n templateUrl: 'screens/searches/search-procedure/search-procedure.html'\r\n })\r\n .when('/search-medicine#clinical', {\r\n controller: 'ClinicalSearchMedicine',\r\n templateUrl: 'screens/searches/search-medicine/search-medicine.html'\r\n })\r\n .when('/search-consumable#clinical', {\r\n controller: 'ClinicalSearchConsumable',\r\n templateUrl: 'screens/searches/search-consumable/search-consumable.html'\r\n })\r\n .when('/:practiceId/notifications-bulk-send', {\r\n controller: 'NotificationSendController',\r\n templateUrl: 'screens/notifications-bulk-send/notifications-bulk-send.html'\r\n })\r\n .when('/:practiceId/clinical-template', {\r\n controller: 'ClinicalCreateTemplateController',\r\n templateUrl: 'screens/clinical-template/clinical-template.html'\r\n })\r\n .when('/:practiceId/clinical-template/:templateId', {\r\n controller: 'ClinicalEditTemplateController',\r\n templateUrl: 'screens/clinical-template/clinical-template.html'\r\n })\r\n .when('/:practiceId/clinical-templates', {\r\n controller: 'ClinicalTemplatesController',\r\n templateUrl: 'screens/clinical-templates/clinical-templates.html'\r\n })\r\n .when('/:practiceId/template-bulk-import', {\r\n controller: 'TemplateImportModule',\r\n templateUrl: 'screens/template-bulk-import/template-bulk-import.html'\r\n })\r\n .when('/clinical-practices', {\r\n controller: 'ClinicalPractices',\r\n templateUrl: 'screens/clinical-practices/clinical-practices.html'\r\n })\r\n .when('/:practiceId/clinical-visit-outcomes', {\r\n controller: 'ClinicalVisitOutcomesController',\r\n templateUrl: 'screens/clinical-visit-outcomes/clinical-visit-outcomes.html'\r\n })\r\n .when('/:practiceId/consultation-reports/:patientId/sicknote', {\r\n controller: 'ConsultationSiknoteController',\r\n templateUrl: 'screens/consultation/reports/report-siknote.html'\r\n })\r\n .when('/:practiceId/consultation-reports/:patientId/prescription', {\r\n controller: 'ConsultationPrescriptionController',\r\n templateUrl: 'screens/consultation/reports/report-prescription.html'\r\n })\r\n .when('/:practiceId/clinical-message-center', {\r\n controller: 'ClinicalMessageCenterController',\r\n templateUrl: 'screens/clinical-message-center/clinical-message-center.html'\r\n })\r\n .when('/:practiceId/clinical-pathology-report/:reportId', {\r\n controller: 'ClinicalReport',\r\n templateUrl: 'screens/clinical-report/clinical-report.html'\r\n })\r\n .when('/:practiceId/clinical-pathology-report-workflow/:reportId/:urgent', {\r\n controller: 'ClinicalReportWorkflow',\r\n templateUrl: 'screens/clinical-report-workflow/clinical-report-workflow.html'\r\n })\r\n .when('/:practiceId/clinical-dashboard/:patientId', {\r\n controller: 'ClinicalDashboardController',\r\n templateUrl: 'screens/clinical-dashboard/dashboard.html'\r\n })\r\n .when('/:practiceId/health-id/:patientId', {\r\n controller: 'HealthIDController',\r\n templateUrl: 'screens/health-id/healthid.html'\r\n })\r\n .when('/card-readers', {\r\n controller: 'CardReadersController',\r\n templateUrl: 'screens/card-reader/card-readers.html'\r\n })\r\n .when('/card-reader', {\r\n controller: 'CardReaderCreateController',\r\n templateUrl: 'screens/card-reader/card-reader.html'\r\n })\r\n .when('/tenant/:tenantId/card-reader/:cardreaderId', {\r\n controller: 'CardReaderEditController',\r\n templateUrl: 'screens/card-reader/card-reader.html'\r\n })\r\n .when('/card-payments', {\r\n controller: 'CardPaymentsController',\r\n templateUrl: 'screens/card-payments/card-payments.html'\r\n })\r\n .when('/card-payment', {\r\n controller: 'CardPaymentController',\r\n templateUrl: 'screens/card-payments/card-payment.html'\r\n })\r\n .when('/communication-templates', {\r\n controller: 'CommunicationTemplatesUpdateController',\r\n templateUrl: 'screens/communication-template-update/communication-template-update.html'\r\n })\r\n .when('/tenants', {\r\n controller: 'TenantController',\r\n templateUrl: 'screens/tenant/tenant-list.html'\r\n })\r\n .when('/tenant', {\r\n controller: 'CreateTenantController',\r\n templateUrl: 'screens/tenant/tenant-create.html'\r\n })\r\n .when('/tenant/:tenantId', {\r\n controller: 'EditTenantController',\r\n templateUrl: 'screens/tenant/tenant-create.html'\r\n })\r\n .when('/failed-invoices', {\r\n controller: 'FailedInvoicesController',\r\n templateUrl: 'screens/failed-invoices/failed-invoices.html'\r\n })\r\n .when('/sent-invoices/:sentDate', {\r\n controller: 'SentInvoicesController',\r\n templateUrl: 'screens/sent-invoices/sent-invoices.html'\r\n })\r\n .when('/test-api/:url', {\r\n controller: 'TestApiController',\r\n templateUrl: 'screens/test-api/test-api.html'\r\n })\r\n .when('/test-api', {\r\n controller: 'TestApiController',\r\n templateUrl: 'screens/test-api/test-api.html'\r\n })\r\n .when('/timers', {\r\n controller: 'TimerController',\r\n templateUrl: 'screens/timer/timer-list.html'\r\n })\r\n .when('/timer', {\r\n controller: 'SetTimerController',\r\n templateUrl: 'screens/timer/timer-create.html'\r\n })\r\n .when('/test', {\r\n controller: 'TestController',\r\n templateUrl: 'screens/test/test.html'\r\n })\r\n .when('/:practiceId/medical-history/:patientId', {\r\n controller: 'MedicalHistoryController',\r\n templateUrl: 'screens/patient-medical-history/medical-history.html'\r\n })\r\n .when('/:practiceId/power-bi/:reportId', {\r\n controller: 'PowerBIController',\r\n templateUrl: 'screens/powerbi/powerbi.html'\r\n })\r\n .when('/:practiceId/power-bi-list/', {\r\n controller: 'PowerBIListController',\r\n templateUrl: 'screens/powerbi/powerbi-list.html'\r\n })\r\n .when('/:practiceId/health-doc/:patientId', {\r\n controller: 'HealthDocController',\r\n templateUrl: 'screens/health-doc/healthdoc.html'\r\n })\r\n .when('/:practiceId/patient-file/:documentId', {\r\n controller: 'PatientFileController',\r\n templateUrl: 'screens/health-doc/healthdoc.html'\r\n })\r\n .otherwise({ redirectTo: '/' + StorageModule.Service.EMPTY_PRACTICE_ID + '/home' });\r\n}]);\r\n/// \r\nvar StorageModule;\r\n(function (StorageModule) {\r\n var MyStorage = (function () {\r\n function MyStorage(storage) {\r\n this.storage = storage;\r\n }\r\n MyStorage.prototype.set = function (key, value) {\r\n this.storage.setItem(key, angular.toJson(value));\r\n };\r\n MyStorage.prototype.get = function (key, defaultValue) {\r\n return (angular.fromJson(this.storage.getItem(key)) || defaultValue);\r\n };\r\n MyStorage.prototype.remove = function (key) {\r\n this.storage.removeItem(key);\r\n };\r\n return MyStorage;\r\n })();\r\n StorageModule.MyStorage = MyStorage;\r\n var AuthorizationData = (function () {\r\n function AuthorizationData() {\r\n }\r\n return AuthorizationData;\r\n })();\r\n StorageModule.AuthorizationData = AuthorizationData;\r\n var User = (function () {\r\n function User() {\r\n }\r\n User.ADMIN_ROLE = 'system-admin';\r\n User.DOCTOR_ROLE = 'doctor';\r\n User.FRONT_OFFICE = 'front-office-user';\r\n User.PRACTICING_NURSE = \"practicing-nurse\";\r\n User.TRIAGE_NURSE = \"triage-nurse\";\r\n return User;\r\n })();\r\n StorageModule.User = User;\r\n var Practice = (function () {\r\n function Practice() {\r\n }\r\n return Practice;\r\n })();\r\n StorageModule.Practice = Practice;\r\n var Service = (function () {\r\n Service.$inject = [\"$window\"];\r\n function Service($window) {\r\n \"ngInject\";\r\n this.$window = $window;\r\n this.localStorage = new MyStorage($window.localStorage);\r\n this.sessionStorage = new MyStorage($window.sessionStorage);\r\n }\r\n Service.prototype.getLocalStorage = function () {\r\n return this.localStorage;\r\n };\r\n Service.prototype.getSessionStorage = function () {\r\n return this.sessionStorage;\r\n };\r\n Service.prototype.getUser = function () {\r\n return this.getLocalStorage().get(Service.USER_KEY) || {};\r\n };\r\n Service.prototype.setUser = function (user) {\r\n this.getLocalStorage().set(Service.USER_KEY, user);\r\n };\r\n Service.prototype.getPractice = function () {\r\n return this.getSessionStorage().get(Service.PRACTICE_KEY) || {};\r\n };\r\n Service.prototype.setPractice = function (practice) {\r\n this.getSessionStorage().set(Service.PRACTICE_KEY, practice);\r\n };\r\n Service.prototype.getPracticeId = function () {\r\n var practice = this.getPractice();\r\n if (practice.id) {\r\n return practice.id;\r\n }\r\n return Service.EMPTY_PRACTICE_ID;\r\n };\r\n Service.prototype.setPracticeId = function (practiceId) {\r\n var practice = this.getPractice();\r\n practice.id = practiceId;\r\n this.setPractice(practice);\r\n };\r\n Service.prototype.getAuthorizationData = function () {\r\n return this.getLocalStorage().get(Service.AUTHORIZATION_DATA) || {};\r\n };\r\n Service.prototype.setAuthorizationData = function (authData) {\r\n this.getLocalStorage().set(Service.AUTHORIZATION_DATA, authData);\r\n };\r\n Service.prototype.setBackPath = function (path) {\r\n var practice = this.getPractice();\r\n practice.path = path;\r\n this.getSessionStorage().set(Service.PRACTICE_KEY, practice);\r\n };\r\n Service.prototype.getBackPath = function () {\r\n var practice = this.getPractice();\r\n return practice.path;\r\n };\r\n Service.prototype.setBackHash = function (hash) {\r\n var practice = this.getPractice();\r\n practice.hash = hash;\r\n this.getSessionStorage().set(Service.PRACTICE_KEY, practice);\r\n };\r\n Service.prototype.getBackHash = function () {\r\n var practice = this.getPractice();\r\n return practice.hash;\r\n };\r\n Service.prototype.getEmptyPracticeId = function () {\r\n return Service.EMPTY_PRACTICE_ID;\r\n };\r\n Service.prototype.getParam = function (key) {\r\n return this.getSessionStorage().get(key);\r\n };\r\n Service.prototype.setParam = function (key, data) {\r\n this.getSessionStorage().set(key, data);\r\n };\r\n Service.prototype.clear = function () {\r\n this.getLocalStorage().remove(Service.USER_KEY);\r\n this.getLocalStorage().remove(Service.AUTHORIZATION_DATA);\r\n this.getSessionStorage().remove(Service.PRACTICE_KEY);\r\n };\r\n Service.PRACTICE_KEY = 'practice';\r\n Service.USER_KEY = 'user-details';\r\n Service.BACK_PATH_KEY = 'back-path';\r\n Service.AUTHORIZATION_DATA = 'authorization_data';\r\n Service.EMPTY_PRACTICE_ID = '00000000-0000-0000-0000-000000000001';\r\n Service.ZERO_PRACTICE_ID = '00000000-0000-0000-0000-000000000000';\r\n return Service;\r\n })();\r\n StorageModule.Service = Service;\r\n})(StorageModule || (StorageModule = {}));\r\nangular.module('DoctorApp')\r\n .service('storageService', StorageModule.Service);\r\nvar resultApi;\r\n(function (resultApi) {\r\n var ResultApi = (function () {\r\n function ResultApi(data) {\r\n this.Data = data;\r\n this.Sucess = true;\r\n this.Links = [];\r\n }\r\n return ResultApi;\r\n })();\r\n resultApi.ResultApi = ResultApi;\r\n var LinkApi = (function () {\r\n function LinkApi() {\r\n }\r\n return LinkApi;\r\n })();\r\n resultApi.LinkApi = LinkApi;\r\n})(resultApi || (resultApi = {}));\r\n/// \r\n/// \r\nvar HttpModule;\r\n(function (HttpModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"$http\", \"CacheFactory\", \"$q\", \"showDialog\", \"cfpLoadingBar\", \"promiseService\", \"$location\", \"authService\", \"storageService\"];\r\n function Service($http, CacheFactory, $q, showDialog, cfpLoadingBar, promiseService, $location, authService, storageService) {\r\n \"ngInject\";\r\n this.$http = $http;\r\n this.CacheFactory = CacheFactory;\r\n this.$q = $q;\r\n this.showDialog = showDialog;\r\n this.cfpLoadingBar = cfpLoadingBar;\r\n this.promiseService = promiseService;\r\n this.$location = $location;\r\n this.authService = authService;\r\n this.storageService = storageService;\r\n }\r\n Service.prototype.get = function (url, config, notShowError) {\r\n var _this = this;\r\n this.cfpLoadingBar.start();\r\n var cacheId = config && config.cache;\r\n if (cacheId) {\r\n config.cache = undefined;\r\n var cacheFectory = this.getCache(cacheId);\r\n var cache = cacheFectory.get(cacheId);\r\n if (cache && cache.resp) {\r\n var deferred = this.$q.defer();\r\n deferred.resolve(cache.resp);\r\n return deferred.promise\r\n .then(function (response) {\r\n return _this.handleSuccess(response);\r\n });\r\n }\r\n }\r\n var request = this.$http.get(GlobalVar.serverURL + url, config);\r\n return request\r\n .then(function (response) {\r\n if (cacheId) {\r\n cacheFectory.put(cacheId, { resp: response });\r\n }\r\n return _this.handleSuccess(response);\r\n }, function (error) {\r\n return _this.handleError(error, notShowError);\r\n });\r\n };\r\n Service.prototype.post = function (url, data, config, notShowError) {\r\n var _this = this;\r\n this.cfpLoadingBar.start();\r\n var request = this.$http.post(GlobalVar.serverURL + url, data, config);\r\n return request\r\n .then(function (response) {\r\n return _this.handleSuccess(response);\r\n }, function (error) {\r\n return _this.handleError(error, notShowError);\r\n });\r\n };\r\n Service.prototype.remove = function (url, data) {\r\n var _this = this;\r\n this.cfpLoadingBar.start();\r\n var request = this.$http({\r\n method: \"delete\",\r\n url: GlobalVar.serverURL + url,\r\n data: data\r\n });\r\n return request\r\n .then(function (response) {\r\n return _this.handleSuccess(response);\r\n }, function (error) {\r\n return _this.handleError(error);\r\n });\r\n };\r\n Service.prototype.put = function (url, data) {\r\n var _this = this;\r\n this.cfpLoadingBar.start();\r\n var request = this.$http({\r\n method: \"put\",\r\n url: GlobalVar.serverURL + url,\r\n data: data,\r\n });\r\n return request\r\n .then(function (response) {\r\n return _this.handleSuccess(response);\r\n }, function (error) {\r\n return _this.handleError(error);\r\n });\r\n };\r\n Service.prototype.handleError = function (response, notShowError) {\r\n var showError = !notShowError;\r\n this.cfpLoadingBar.complete();\r\n if (!angular.isObject(response.data) || !response.data.message) {\r\n if (angular.isNumber(response.status)) {\r\n if ((response.status == 400) || (response.status === 0) || (response.statusText === \"\")) {\r\n if (showError) {\r\n this.showDialog.error(\"Service unavailable. Please check Internet connectivity and try again.\");\r\n }\r\n return this.$q.reject(\"Service unavailable. Please check Internet connectivity and try again.\");\r\n }\r\n else if ((response.status == 500) && response.data.ExceptionMessage && response.data.Message) {\r\n if (showError) {\r\n this.showDialog.error(response.data.Message + \" \" + response.data.ExceptionMessage);\r\n }\r\n return (this.$q.reject(response.data.Message + \" \" + response.data.ExceptionMessage));\r\n }\r\n else if (response.status == 404 && !response.statusText) {\r\n if (showError) {\r\n this.showDialog.error(\"Not found.\");\r\n }\r\n }\r\n else if (response.status == 401) {\r\n var currentPath = this.$location.path();\r\n if (currentPath !== '/login') {\r\n this.showDialog.error(\"Your session has expired, please login again.\");\r\n this.authService.logOut();\r\n }\r\n }\r\n else if (response.status == 402) {\r\n if (showError) {\r\n var currentPath = this.$location.path();\r\n if (currentPath !== '/login') {\r\n this.showDialog.error(\"Unable to find active treating doctor, please contact support.\");\r\n if (this.authService.isAdmin()) {\r\n this.authService.toDefaulPath();\r\n }\r\n else {\r\n this.authService.logOut();\r\n }\r\n }\r\n }\r\n }\r\n else if (response.status == 403) {\r\n if (showError) {\r\n var currentPath = this.$location.path();\r\n this.showDialog.error(\"Access to content not allowed\");\r\n this.authService.toDefaulPath();\r\n }\r\n }\r\n else {\r\n if (showError) {\r\n this.showDialog.error(response.statusText);\r\n }\r\n }\r\n return (this.$q.reject(response.statusText));\r\n }\r\n if (showError) {\r\n this.showDialog.error(\"Internal Server Error.\");\r\n }\r\n return (this.$q.reject(\"An unknown error occurred.\"));\r\n }\r\n if (showError) {\r\n this.showDialog.error(response.data.message);\r\n }\r\n return (this.$q.reject(response.data.message));\r\n };\r\n Service.prototype.handleSuccess = function (response) {\r\n this.cfpLoadingBar.complete();\r\n return response.data;\r\n };\r\n Service.prototype.getCache = function (cacheId) {\r\n var cacheFactory = this.CacheFactory.get(cacheId);\r\n if (!cacheFactory) {\r\n return this.CacheFactory(cacheId, {\r\n maxAge: 120 * 60 * 1000,\r\n deleteOnExpire: 'aggressive',\r\n storageMode: 'memory'\r\n });\r\n }\r\n return cacheFactory;\r\n };\r\n Service.prototype.resetCache = function (cacheId) {\r\n var cache = this.getCache(cacheId);\r\n if (cache.get(cacheId)) {\r\n cache.destroy(cacheId);\r\n }\r\n };\r\n return Service;\r\n })();\r\n HttpModule.Service = Service;\r\n})(HttpModule || (HttpModule = {}));\r\nangular.module('DoctorApp')\r\n .service('httpService', HttpModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar __extends = (this && this.__extends) || function (d, b) {\r\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};\r\nvar Domain;\r\n(function (Domain) {\r\n var Patient;\r\n (function (Patient_1) {\r\n var DoctorAppSystem = 'DoctorAppUI';\r\n var PatientEvent = (function () {\r\n function PatientEvent() {\r\n this.Patient = new Patient();\r\n }\r\n return PatientEvent;\r\n })();\r\n Patient_1.PatientEvent = PatientEvent;\r\n var PatientInWaitingRoom = (function (_super) {\r\n __extends(PatientInWaitingRoom, _super);\r\n function PatientInWaitingRoom() {\r\n _super.apply(this, arguments);\r\n }\r\n return PatientInWaitingRoom;\r\n })(PatientEvent);\r\n Patient_1.PatientInWaitingRoom = PatientInWaitingRoom;\r\n var Patient = (function () {\r\n function Patient(patientId) {\r\n this.PatientId = patientId;\r\n this.PatientDetails = new PatientDetails();\r\n this.PatientAccountDetails = new PatientAccountDetails();\r\n }\r\n return Patient;\r\n })();\r\n Patient_1.Patient = Patient;\r\n var PatientDetails = (function () {\r\n function PatientDetails() {\r\n }\r\n return PatientDetails;\r\n })();\r\n Patient_1.PatientDetails = PatientDetails;\r\n var PatientAccountDetails = (function () {\r\n function PatientAccountDetails() {\r\n this.MedicalAidMainMemberDetails = new MedicalAidMainMemberDetails();\r\n }\r\n return PatientAccountDetails;\r\n })();\r\n Patient_1.PatientAccountDetails = PatientAccountDetails;\r\n var MedicalAidMainMemberDetails = (function () {\r\n function MedicalAidMainMemberDetails() {\r\n }\r\n return MedicalAidMainMemberDetails;\r\n })();\r\n Patient_1.MedicalAidMainMemberDetails = MedicalAidMainMemberDetails;\r\n var CancelPatientVisit = (function () {\r\n function CancelPatientVisit() {\r\n this.CorrelationIds = [];\r\n this.OriginatedSystem = DoctorAppSystem;\r\n }\r\n return CancelPatientVisit;\r\n })();\r\n Patient_1.CancelPatientVisit = CancelPatientVisit;\r\n var CreatePatient = (function () {\r\n function CreatePatient() {\r\n this.PatientVo = new Patient();\r\n this.CorrelationIds = [];\r\n this.OriginatedSystem = DoctorAppSystem;\r\n }\r\n return CreatePatient;\r\n })();\r\n Patient_1.CreatePatient = CreatePatient;\r\n var CheckPatientResult = (function () {\r\n function CheckPatientResult() {\r\n }\r\n return CheckPatientResult;\r\n })();\r\n Patient_1.CheckPatientResult = CheckPatientResult;\r\n var CheckInPatientVisit = (function () {\r\n function CheckInPatientVisit() {\r\n this.PatientEventDetails = new PatientEvent();\r\n this.CorrelationIds = [];\r\n this.OriginatedSystem = DoctorAppSystem;\r\n }\r\n return CheckInPatientVisit;\r\n })();\r\n Patient_1.CheckInPatientVisit = CheckInPatientVisit;\r\n var Option = (function () {\r\n function Option() {\r\n }\r\n return Option;\r\n })();\r\n Patient_1.Option = Option;\r\n var Plan = (function () {\r\n function Plan() {\r\n this.Options = [];\r\n }\r\n return Plan;\r\n })();\r\n Patient_1.Plan = Plan;\r\n var MedicalAid = (function () {\r\n function MedicalAid(name) {\r\n this.Name = name;\r\n this.Plans = [];\r\n }\r\n return MedicalAid;\r\n })();\r\n Patient_1.MedicalAid = MedicalAid;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"storageService\", \"moment\"];\r\n function Service(httpService, storageService, moment) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.storageService = storageService;\r\n this.moment = moment;\r\n }\r\n Service.prototype.getPatientById = function (practiceId, patientId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'patients/' + patientId);\r\n };\r\n Service.prototype.getPatientsByName = function (practiceId, text) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'patients/' + encodeURIComponent(text));\r\n };\r\n Service.prototype.removePatient = function (practiceId, patientId) {\r\n return this.httpService.remove(this.getUrl(practiceId) + 'patients/' + patientId);\r\n };\r\n Service.prototype.getFamilyMembers = function (practiceId, patientId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'patients/' + patientId + '/members');\r\n };\r\n Service.prototype.getMasterPatientsByName = function (practiceId, text) {\r\n return this.httpService.get('v1/' + practiceId + '/patientmaster/patients/' + encodeURIComponent(text));\r\n };\r\n Service.prototype.createPatient = function (practiceId, updateAccount, patient, looseValidation) {\r\n if (looseValidation === void 0) { looseValidation = false; }\r\n var body = {\r\n PatientVo: patient,\r\n UpdateOtherPatientsAccountDetails: updateAccount,\r\n LooseValidation: looseValidation,\r\n CorrelationIds: [],\r\n OriginatedSystem: DoctorAppSystem\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) + 'patients', body);\r\n };\r\n Service.prototype.changePatient = function (practiceId, updateAccount, patient, looseValidation) {\r\n if (looseValidation === void 0) { looseValidation = false; }\r\n var body = {\r\n PatientVo: patient,\r\n LooseValidation: looseValidation,\r\n UpdateOtherPatientsAccountDetails: updateAccount,\r\n CorrelationIds: [],\r\n OriginatedSystem: DoctorAppSystem\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) + 'patients/' + patient.PatientId, body);\r\n };\r\n Service.prototype.getPatientByAccNo = function (practiceId, accountNo) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'account/' + accountNo);\r\n };\r\n Service.prototype.cancelPatientEvent = function (practiceId, patientEventId) {\r\n var cancel = {\r\n PatientEventId: patientEventId,\r\n Reason: 'deleted by ' + this.storageService.getUser().name,\r\n OriginatedSystem: DoctorAppSystem\r\n };\r\n return this.httpService.post('v1/' + practiceId + '/patientevent/patientevents/cancelpatientvisit', cancel);\r\n };\r\n Service.prototype.checkPatientVisit = function (practiceId, checkInPatient) {\r\n var event = new PatientEvent();\r\n event.PatientEventId = '00000000-0000-0000-0000-000000000000';\r\n event.PracticeId = practiceId;\r\n event.Patient = checkInPatient;\r\n event.ScheduledTime = \"0001-01-01T00:00:00\";\r\n event.CheckInTime = this.moment().utc().format();\r\n event.CheckedIn = true;\r\n var body = new CheckInPatientVisit();\r\n body.PracticeId = practiceId;\r\n body.PatientEventDetails = event;\r\n return this.httpService.post('v1/' + practiceId + '/patientevent/patientevents/checkinpatientvisit', body);\r\n };\r\n Service.prototype.addToWaitingRoom = function (practiceId, patientId) {\r\n return this.httpService\r\n .post('v1/' + practiceId + '/patientevent/waitingroom/' + patientId + '/checkin', {});\r\n };\r\n Service.prototype.captureEncounter = function (practiceId, patientId) {\r\n return this.httpService\r\n .post('v1/' + practiceId + '/patientevent/waitingroom/' + patientId + '/capture', {});\r\n };\r\n Service.prototype.getCheckInPatients = function (practiceId) {\r\n return this.httpService.get('v1/' + practiceId + '/patientevent/waitingroom');\r\n };\r\n Service.prototype.getWaitingRoomPatients = function (practiceId) {\r\n return this.httpService.get('v1/' + practiceId + '/patientevent/waitingroom/summary').then(function (resp) {\r\n return resp.map(function (r) {\r\n var pwr = angular.extend(new PatientInWaitingRoom(), r.PatientEvent);\r\n pwr.HasQuote = r.HasQuote;\r\n pwr.HasSummmaryOfCare = r.HasSummmaryOfCare;\r\n return pwr;\r\n });\r\n });\r\n };\r\n Service.prototype.importPatientAndCheckIn = function (practiceId, patient) {\r\n var body = new CreatePatient();\r\n body.PatientVo = patient;\r\n return this.httpService.post('v1/' + practiceId + '/patientevent/patientevents/importpatientandcheckin', body);\r\n };\r\n Service.prototype.getMedSchemes = function (practiceId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'medschemes');\r\n };\r\n Service.prototype.getUrl = function (practiceId) {\r\n return 'v1/' + practiceId + '/patient/';\r\n };\r\n return Service;\r\n })();\r\n Patient_1.Service = Service;\r\n })(Patient = Domain.Patient || (Domain.Patient = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('patientDomain', Domain.Patient.Service);\r\n/// \r\n/// \r\nvar LocationModule;\r\n(function (LocationModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"$rootScope\", \"$location\"];\r\n function Service($rootScope, $location) {\r\n \"ngInject\";\r\n this.$rootScope = $rootScope;\r\n this.$location = $location;\r\n this.homePath = '/';\r\n this.practicesPath = '/practices';\r\n this.practiceCreatePath = '/practice';\r\n this.practiceEditPath = '/practice';\r\n this.practiceOptionsPath = '/practice-options';\r\n this.clinicalDashboardPath = '/clinical-dashboard';\r\n this.clinicalMessageCenter = '/clinical-message-center';\r\n this.clinicalPathalogyReport = '/clinical-pathology-report';\r\n this.clinicalPathologyReportWorkflow = '/clinical-pathology-report-workflow';\r\n this.createPatientPath = '/create-patient';\r\n this.patientVisits = '/patient-visits';\r\n this.changePatientPath = '/patient';\r\n this.loginPath = '/login';\r\n this.claimResponse = '/claim-response';\r\n this.cardReader = '/card-reader';\r\n this.visitOutcomes = '/clinical-visit-outcomes';\r\n }\r\n Service.prototype.goToHome = function (practiceId) {\r\n this.$location.path(this.homePath + practiceId + '/home');\r\n };\r\n Service.prototype.goToPractices = function () {\r\n this.$location.path(this.practicesPath);\r\n };\r\n Service.prototype.goToCreatePractice = function () {\r\n this.$location.path(this.practiceCreatePath);\r\n };\r\n Service.prototype.goToEditPractice = function (practiceId) {\r\n this.$location.path(this.practiceEditPath + '/' + practiceId);\r\n };\r\n Service.prototype.goToPracticeOptions = function (practiceId) {\r\n this.$location.path(this.practiceOptionsPath + '/' + practiceId);\r\n };\r\n Service.prototype.goToClinicalDashboard = function (practiceId, patientId) {\r\n this.$location.path('/' + practiceId + this.clinicalDashboardPath + '/' + patientId);\r\n };\r\n Service.prototype.goToClinicalMessageCenter = function (practiceId) {\r\n this.$location.path('/' + practiceId + this.clinicalMessageCenter);\r\n };\r\n Service.prototype.goToClinicalPathalogyReport = function (practiceId, pathologyReportId) {\r\n this.$location.path('/' + practiceId + this.clinicalPathalogyReport + '/' + pathologyReportId);\r\n };\r\n Service.prototype.goToClinicalPathologyReportWorkflow = function (practiceId, workflowId) {\r\n this.$location.path('/' + practiceId + this.clinicalPathologyReportWorkflow + '/' + workflowId + '/false');\r\n };\r\n Service.prototype.goToHealthId = function (practiceId, patientId) {\r\n this.$location.path('/' + practiceId + '/health-id/' + patientId);\r\n };\r\n Service.prototype.goToHealthDoc = function (practiceId, patientId) {\r\n this.$location.path('/' + practiceId + '/health-doc/' + patientId);\r\n };\r\n Service.prototype.goToPatientFile = function (practiceId, documentId) {\r\n this.$location.path('/' + practiceId + '/patient-file/' + documentId);\r\n };\r\n Service.prototype.goToClinicalVisitOutcomes = function (practiceId) {\r\n this.$location.path('/' + practiceId + this.visitOutcomes);\r\n };\r\n Service.prototype.goToConsultationReport = function (practiceId, patientId, type) {\r\n if (type === EncounterModule.ReportType.Prescription) {\r\n this.$location.path('/' + practiceId + '/consultation-reports/' + patientId + '/prescription');\r\n }\r\n else if (type === EncounterModule.ReportType.MedicalCertificate) {\r\n this.$location.path('/' + practiceId + '/consultation-reports/' + patientId + '/sicknote');\r\n }\r\n };\r\n Service.prototype.goToCreateClinicalTemplate = function (practiceId) {\r\n this.$location.path('/' + practiceId + '/clinical-template');\r\n };\r\n Service.prototype.goToEditClinicalTemplate = function (practiceId, templateId) {\r\n this.$location.path('/' + practiceId + '/clinical-template/' + templateId);\r\n };\r\n Service.prototype.goToAddressBook = function (practiceId) {\r\n this.$location.path('/' + practiceId + '/address-book');\r\n };\r\n Service.prototype.goToCreateAddressBook = function (practiceId) {\r\n this.$location.path('/' + practiceId + '/address-book/create');\r\n };\r\n Service.prototype.goToEditAddressBook = function (practiceId, entryId) {\r\n this.$location.path('/' + practiceId + '/address-book/entry/' + entryId);\r\n };\r\n Service.prototype.goToClinicalTemplates = function (practiceId, templateId) {\r\n this.$location.path('/' + practiceId + '/clinical-templates');\r\n };\r\n Service.prototype.goToTemplatesBulkImport = function (practiceId) {\r\n this.$location.path('/' + practiceId + '/template-bulk-import');\r\n };\r\n Service.prototype.goToCreatePatient = function (practiceId) {\r\n this.$location.path('/' + practiceId + this.createPatientPath);\r\n };\r\n Service.prototype.goToChangePatient = function (practiceId, patientId) {\r\n this.$location.path('/' + practiceId + this.changePatientPath + '/' + patientId);\r\n };\r\n Service.prototype.goToPatientVisits = function (practiceId) {\r\n this.$location.path('/' + practiceId + this.patientVisits);\r\n };\r\n Service.prototype.goToLogin = function () {\r\n this.$location.path(this.loginPath);\r\n };\r\n Service.prototype.gotToClaimResponse = function (claimId) {\r\n this.$location.path(this.claimResponse + '/' + claimId);\r\n };\r\n Service.prototype.goToCardReaderCreate = function () {\r\n this.$location.path(this.cardReader);\r\n };\r\n Service.prototype.gotToTestApi = function () {\r\n this.$location.path(\"/test-api\");\r\n };\r\n Service.prototype.goToSpecialityRules = function () {\r\n this.$location.path(\"/speciality-rules\");\r\n };\r\n Service.prototype.goToCreateSpecialityRule = function () {\r\n this.$location.path(\"/speciality-rule\");\r\n };\r\n Service.prototype.goToEditSpecialityRule = function (code) {\r\n this.$location.path(\"/speciality-rule/\" + code);\r\n };\r\n Service.prototype.gotToAudit = function () {\r\n this.$location.path(\"/audit\");\r\n };\r\n Service.prototype.goToPublicKeys = function () {\r\n this.$location.path(\"/public-keys\");\r\n };\r\n Service.prototype.goToCardReaders = function () {\r\n this.$location.path(\"/card-readers\");\r\n };\r\n Service.prototype.goToCardPayments = function () {\r\n this.$location.path(\"/card-payments\");\r\n };\r\n Service.prototype.goToTenants = function () {\r\n this.$location.path(\"/tenants\");\r\n };\r\n Service.prototype.goToCreateTenant = function () {\r\n this.$location.path(\"/tenant\");\r\n };\r\n Service.prototype.goToEditTenant = function (tenantId) {\r\n this.$location.path(\"/tenant/\" + tenantId);\r\n };\r\n Service.prototype.goToUsers = function (practiceId) {\r\n this.$location.path(\"/users/\" + (practiceId || ''));\r\n };\r\n Service.prototype.goToFailedInvoices = function () {\r\n this.$location.path('/failed-invoices');\r\n };\r\n Service.prototype.goToCardReaderEdit = function (tenantId, cardReaderId) {\r\n this.$location.path('/tenant/' + tenantId + \"/card-reader/\" + cardReaderId);\r\n };\r\n Service.prototype.goToInvoice = function (practiceId, patientEventId) {\r\n this.$location.path('/' + practiceId + '/invoice/' + patientEventId);\r\n };\r\n Service.prototype.goToMedicalHistory = function (practiceId, patientId) {\r\n this.$location.path('/' + practiceId + '/medical-history/' + patientId);\r\n };\r\n Service.prototype.goToEncounter = function (practiceId, patientEventId) {\r\n this.$location.path('/' + practiceId + '/encounter/' + patientEventId);\r\n };\r\n Service.prototype.goToAccount = function (practiceId, userId) {\r\n this.$location.path('/' + practiceId + '/account/' + userId);\r\n };\r\n Service.prototype.goToChangePassword = function (practiceId, userId) {\r\n this.$location.path('/' + practiceId + '/change-password/' + userId);\r\n };\r\n Service.prototype.goToNotificationsBulkSend = function (practiceId) {\r\n this.$location.path('/' + practiceId + '/notifications-bulk-send');\r\n };\r\n Service.prototype.goToTemplates = function (practiceId) {\r\n this.$location.path('/' + practiceId + '/templates');\r\n };\r\n Service.prototype.goToCreateTemplate = function (practiceId) {\r\n this.$location.path('/' + practiceId + '/template');\r\n };\r\n Service.prototype.goToEditTemplate = function (practiceId, templateId) {\r\n this.$location.path('/' + practiceId + '/template/' + templateId);\r\n };\r\n Service.prototype.setAbsoluteServerUrl = function (report) {\r\n return report && report.replace(\"{{absoluteServerUrl}}\", this.getAbsoluteServerUrl());\r\n };\r\n Service.prototype.getAbsoluteServerUrl = function () {\r\n var absoluteUrl = this.$location.absUrl();\r\n return absoluteUrl.substr(0, absoluteUrl.length - this.$location.url().length - 1);\r\n };\r\n Service.prototype.goToTenantEvents = function (tenantId, dateFrom, dateTo) {\r\n if (!dateFrom || !dateTo) {\r\n this.$location.path('/events/' + tenantId);\r\n }\r\n else {\r\n this.$location.path('/events/' + tenantId + '/from/' + dateFrom + '/to/' + dateTo);\r\n }\r\n };\r\n Service.prototype.goToAuditEvents = function (tenantId, aggregateId) {\r\n this.$location.path('/events/' + tenantId.replace(new RegExp(\":\", \"g\"), \"_\") + \"/\" + aggregateId);\r\n };\r\n Service.prototype.goToPowerBi = function (practiceId) {\r\n this.$location.path('/' + practiceId + '/power-bi-list');\r\n };\r\n Service.prototype.goToPowerBiReport = function (practiceId, reportId) {\r\n this.$location.path('/' + practiceId + '/power-bi/' + reportId);\r\n };\r\n Service.prototype.goToCreateTimer = function () {\r\n this.$location.path('/timer');\r\n };\r\n Service.prototype.goToTimers = function () {\r\n this.$location.path('/timers');\r\n };\r\n Service.prototype.goToCreateUser = function () {\r\n this.$location.path('/user');\r\n };\r\n Service.prototype.goToEditUser = function (userId) {\r\n this.$location.path('/user/' + userId);\r\n };\r\n return Service;\r\n })();\r\n LocationModule.Service = Service;\r\n})(LocationModule || (LocationModule = {}));\r\nangular.module('DoctorApp')\r\n .service('locationService', LocationModule.Service);\r\n/// \r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var Account;\r\n (function (Account) {\r\n var Claim = (function () {\r\n function Claim() {\r\n }\r\n return Claim;\r\n })();\r\n Account.Claim = Claim;\r\n var User = (function () {\r\n function User() {\r\n this.Claims = [];\r\n }\r\n return User;\r\n })();\r\n Account.User = User;\r\n var ChangeUserPassword = (function () {\r\n function ChangeUserPassword() {\r\n }\r\n return ChangeUserPassword;\r\n })();\r\n Account.ChangeUserPassword = ChangeUserPassword;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"authService\", \"$q\"];\r\n function Service(httpService, authService, $q) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.authService = authService;\r\n this.$q = $q;\r\n }\r\n Service.prototype.getPractices = function () {\r\n return this.httpService.get(this.getUrl() + '/account/practices');\r\n };\r\n Service.prototype.createUser = function (user) {\r\n return this.httpService.post(this.getUrl() + '/account/users', user);\r\n };\r\n Service.prototype.getUsers = function () {\r\n return this.httpService.get(this.getUrl() + '/account/users');\r\n };\r\n Service.prototype.getUsersPage = function (filter, pageCount, pageSize) {\r\n return this.httpService.get(this.getUrl() + '/account/users' + (filter && filter.trim() ? '/' + filter + '/search' : '') + '?$top=' + pageSize + '&$skip=' + pageCount * pageSize);\r\n };\r\n Service.prototype.updateUser = function (user) {\r\n return this.httpService.put(this.getUrl() + '/account/users/' + user.UserId, user);\r\n };\r\n Service.prototype.getUser = function (userId) {\r\n return this.httpService.get(this.getUrl() + '/account/users/' + userId);\r\n };\r\n Service.prototype.getUserByName = function (userName) {\r\n return this.httpService.get(this.getUrl() + '/account/users/byName/' + userName);\r\n };\r\n Service.prototype.deleteUser = function (userId) {\r\n return this.httpService.remove(this.getUrl() + '/account/users/' + userId);\r\n };\r\n Service.prototype.changeUserPassword = function (changeRequest) {\r\n return this.httpService.post(this.getUrl() + '/account/users/' + changeRequest.UserId + '/password', changeRequest);\r\n };\r\n Service.prototype.init = function () {\r\n return this.httpService.post(this.getUrl() + '/account/initialise');\r\n };\r\n Service.prototype.getUrl = function () {\r\n return 'v1/authentication';\r\n };\r\n return Service;\r\n })();\r\n Account.Service = Service;\r\n })(Account = Domain.Account || (Domain.Account = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('accountDomain', Domain.Account.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var Billing;\r\n (function (Billing) {\r\n var Template = (function () {\r\n function Template(templateId) {\r\n this.TemplateId = templateId;\r\n this.InvoiceLineItemsVo = new InvoiceLineItems();\r\n }\r\n return Template;\r\n })();\r\n Billing.Template = Template;\r\n var InvoiceHeader = (function () {\r\n function InvoiceHeader() {\r\n this.Diagnosis = [];\r\n }\r\n return InvoiceHeader;\r\n })();\r\n Billing.InvoiceHeader = InvoiceHeader;\r\n var Diagnosis = (function () {\r\n function Diagnosis() {\r\n }\r\n return Diagnosis;\r\n })();\r\n Billing.Diagnosis = Diagnosis;\r\n var LineItem = (function () {\r\n function LineItem() {\r\n }\r\n return LineItem;\r\n })();\r\n Billing.LineItem = LineItem;\r\n var Invoice = (function () {\r\n function Invoice() {\r\n this.Provider = new Domain.Billing.Provider();\r\n this.PatientEventDetails = new Domain.Patient.PatientEvent();\r\n this.InvoiceLineItems = new InvoiceLineItems();\r\n }\r\n return Invoice;\r\n })();\r\n Billing.Invoice = Invoice;\r\n var InvoiceLineItems = (function () {\r\n function InvoiceLineItems() {\r\n this.InvoiceHeader = new InvoiceHeader();\r\n this.LineItems = [];\r\n }\r\n return InvoiceLineItems;\r\n })();\r\n Billing.InvoiceLineItems = InvoiceLineItems;\r\n var Provider = (function () {\r\n function Provider(practiceId) {\r\n this.PracticeId = practiceId;\r\n this.NetworkedSchemes = [];\r\n this.ManualPricingSchemes = [];\r\n }\r\n return Provider;\r\n })();\r\n Billing.Provider = Provider;\r\n var SchemeObject = (function () {\r\n function SchemeObject(name) {\r\n this.name = name;\r\n }\r\n return SchemeObject;\r\n })();\r\n Billing.SchemeObject = SchemeObject;\r\n var ClaimFinancials = (function () {\r\n function ClaimFinancials() {\r\n }\r\n return ClaimFinancials;\r\n })();\r\n Billing.ClaimFinancials = ClaimFinancials;\r\n var Transaction = (function () {\r\n function Transaction() {\r\n }\r\n return Transaction;\r\n })();\r\n Billing.Transaction = Transaction;\r\n var Response = (function () {\r\n function Response() {\r\n }\r\n return Response;\r\n })();\r\n Billing.Response = Response;\r\n var LineItemFinancials = (function () {\r\n function LineItemFinancials() {\r\n }\r\n return LineItemFinancials;\r\n })();\r\n Billing.LineItemFinancials = LineItemFinancials;\r\n var SupportingProviderVo = (function () {\r\n function SupportingProviderVo() {\r\n }\r\n SupportingProviderVo.prototype.FullName = function () {\r\n return (this.Title || \"\") + \" \" + this.Name + \" \" + this.Surname;\r\n };\r\n return SupportingProviderVo;\r\n })();\r\n Billing.SupportingProviderVo = SupportingProviderVo;\r\n var ProviderBranchVo = (function () {\r\n function ProviderBranchVo() {\r\n }\r\n return ProviderBranchVo;\r\n })();\r\n Billing.ProviderBranchVo = ProviderBranchVo;\r\n var LineItemFees = (function () {\r\n function LineItemFees() {\r\n }\r\n return LineItemFees;\r\n })();\r\n Billing.LineItemFees = LineItemFees;\r\n var LineItemRef = (function () {\r\n function LineItemRef() {\r\n }\r\n return LineItemRef;\r\n })();\r\n Billing.LineItemRef = LineItemRef;\r\n var DUR = (function () {\r\n function DUR() {\r\n }\r\n return DUR;\r\n })();\r\n Billing.DUR = DUR;\r\n var LineItemInfo = (function () {\r\n function LineItemInfo() {\r\n }\r\n return LineItemInfo;\r\n })();\r\n Billing.LineItemInfo = LineItemInfo;\r\n var ClaimResponseLineItem = (function () {\r\n function ClaimResponseLineItem() {\r\n }\r\n return ClaimResponseLineItem;\r\n })();\r\n Billing.ClaimResponseLineItem = ClaimResponseLineItem;\r\n var LineItemWithStatus = (function () {\r\n function LineItemWithStatus() {\r\n }\r\n return LineItemWithStatus;\r\n })();\r\n Billing.LineItemWithStatus = LineItemWithStatus;\r\n var ClaimResponseDetails = (function () {\r\n function ClaimResponseDetails() {\r\n }\r\n return ClaimResponseDetails;\r\n })();\r\n Billing.ClaimResponseDetails = ClaimResponseDetails;\r\n var ClaimResponse = (function () {\r\n function ClaimResponse() {\r\n }\r\n return ClaimResponse;\r\n })();\r\n Billing.ClaimResponse = ClaimResponse;\r\n var InvoiceLineItemsWithStatus = (function () {\r\n function InvoiceLineItemsWithStatus() {\r\n }\r\n return InvoiceLineItemsWithStatus;\r\n })();\r\n Billing.InvoiceLineItemsWithStatus = InvoiceLineItemsWithStatus;\r\n var Event = (function () {\r\n function Event() {\r\n }\r\n return Event;\r\n })();\r\n Billing.Event = Event;\r\n var ProviderVo = (function () {\r\n function ProviderVo() {\r\n }\r\n return ProviderVo;\r\n })();\r\n Billing.ProviderVo = ProviderVo;\r\n var InvoiceSendingStatus = (function () {\r\n function InvoiceSendingStatus() {\r\n }\r\n return InvoiceSendingStatus;\r\n })();\r\n Billing.InvoiceSendingStatus = InvoiceSendingStatus;\r\n var InvoiceWithStatus = (function () {\r\n function InvoiceWithStatus() {\r\n }\r\n return InvoiceWithStatus;\r\n })();\r\n Billing.InvoiceWithStatus = InvoiceWithStatus;\r\n var SpecialityRule = (function () {\r\n function SpecialityRule() {\r\n this.MutuallyExclusiveCodes = [];\r\n this.PrefixChargeCodesOnClaim = false;\r\n }\r\n return SpecialityRule;\r\n })();\r\n Billing.SpecialityRule = SpecialityRule;\r\n var DeactivateSpecialityRule = (function () {\r\n function DeactivateSpecialityRule() {\r\n }\r\n return DeactivateSpecialityRule;\r\n })();\r\n Billing.DeactivateSpecialityRule = DeactivateSpecialityRule;\r\n var FeatureAllows = (function () {\r\n function FeatureAllows() {\r\n this.AllowDiagnosis = true;\r\n this.AllowMedicine = false;\r\n this.AllowProcedure = true;\r\n this.AllowPrescription = false;\r\n this.AllowConsumable = false;\r\n this.AllowReferralDoctor = false;\r\n this.AllowAssistingDoctor = false;\r\n this.AllowReferralLetter = false;\r\n this.AllowMyTemplates = true;\r\n this.AllowMedicalCertificate = false;\r\n this.AllowHospitalClaim = true;\r\n this.AllowDayClinicClaim = false;\r\n this.AllowMedicalInsurance = true;\r\n this.AllowClinicalMetric = false;\r\n }\r\n return FeatureAllows;\r\n })();\r\n Billing.FeatureAllows = FeatureAllows;\r\n var CommunicationTemplate = (function () {\r\n function CommunicationTemplate() {\r\n }\r\n return CommunicationTemplate;\r\n })();\r\n Billing.CommunicationTemplate = CommunicationTemplate;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"authService\"];\r\n function Service(httpService, authService) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.authService = authService;\r\n }\r\n Service.prototype.getInvoices = function () {\r\n return this.httpService.get(this.getUrl() + 'invoices');\r\n };\r\n Service.prototype.getInvoice = function (invoiceId) {\r\n return this.httpService.get(this.getUrl() + 'invoices/' + invoiceId);\r\n };\r\n Service.prototype.getInvoiceWithStatus = function (invoiceId) {\r\n return this.httpService.get(this.getUrl() + 'invoices/' + invoiceId + '/status');\r\n };\r\n Service.prototype.getTemplatesByInvoice = function (invoiceId) {\r\n return this.httpService.get(this.getUrl() + 'invoices/' + invoiceId + '/templates');\r\n };\r\n Service.prototype.getTemplates = function () {\r\n return this.httpService.get(this.getUrl() + 'invoicetemplates');\r\n };\r\n Service.prototype.getTemplate = function (templateId) {\r\n return this.httpService.get(this.getUrl() + 'invoicetemplates/' + templateId);\r\n };\r\n Service.prototype.submitInvoice = function (invoice) {\r\n var body = {\r\n InvoiceVo: invoice,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post(this.getUrl() + 'invoices/' + invoice.InvoiceId, body);\r\n };\r\n Service.prototype.saveTemplate = function (template) {\r\n var body = {\r\n InvoiceTemplateVo: template,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post(this.getUrl() + 'invoicetemplates', body);\r\n };\r\n Service.prototype.updateTemplate = function (template) {\r\n var body = {\r\n InvoiceTemplateVo: template,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post(this.getUrl() + 'invoicetemplates/' + template.TemplateId, body);\r\n };\r\n Service.prototype.removeTemplate = function (templateId) {\r\n return this.httpService.remove(this.getUrl() + 'invoicetemplates/' + templateId);\r\n };\r\n Service.prototype.mergeInvoiceHospital = function (invoiceId, invoiceLineItems) {\r\n var body = {\r\n OriginalInstruction: invoiceLineItems,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post(this.getUrl() + 'invoices/' + invoiceId + '/mergeinvoicehospitalindicator', body);\r\n };\r\n Service.prototype.mergeInvoiceLineItems = function (invoiceId, invoiceLineItems, template) {\r\n var body = {\r\n InvoiceId: invoiceId,\r\n PracticeId: this.getPracticeId,\r\n OriginalInstruction: invoiceLineItems,\r\n NewInstruction: template,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post(this.getUrl() + 'invoices/' + invoiceId + '/mergeinvoicelineitems', body);\r\n };\r\n Service.prototype.mergeTemplateLineItems = function (invoiceLineItems, template, invoiceId) {\r\n var body = {\r\n InvoiceId: invoiceId,\r\n PracticeId: this.getPracticeId,\r\n OriginalInstruction: invoiceLineItems,\r\n NewInstruction: template,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post(this.getUrl() + 'mergeinvoicelineitems', body);\r\n };\r\n Service.prototype.sendInvoiceManually = function (practiceId, invoiceid, reason) {\r\n return this.httpService.post('v1/' + practiceId + '/billing/invoices/' + invoiceid + \"/sendmanually\", {});\r\n };\r\n Service.prototype.retrySendingInvoice = function (practiceId, invoiceid, reason) {\r\n return this.httpService.post('v1/' + practiceId + '/billing/invoices/' + invoiceid + \"/retry\", { Reason: reason });\r\n };\r\n Service.prototype.abortSendingInvoice = function (practiceId, invoiceid, reason) {\r\n return this.httpService.post('v1/' + practiceId + '/billing/invoices/' + invoiceid + \"/abort\", { Reason: reason });\r\n };\r\n Service.prototype.getFailedInvoices = function () {\r\n return this.httpService.get(\"v1/billing/invoices/failed\");\r\n };\r\n Service.prototype.getSentInvoices = function (date) {\r\n return this.httpService.get(\"v1/billing/invoices/sent/sentDate/\" + date.format('YYYY-MM-DD'));\r\n };\r\n Service.prototype.getCommunicationTemplates = function () {\r\n return this.httpService.get(\"v1/infrastructure/communicationtemplates\");\r\n };\r\n Service.prototype.updateCommunicationTemplate = function (template) {\r\n return this.httpService.post('v1/infrastructure/communicationtemplates/' + template.TemplateId, template);\r\n };\r\n Service.prototype.getSpecialityRules = function () {\r\n return this.httpService.get('v1/billing/specialityrules');\r\n };\r\n Service.prototype.getSpecialityRulesByCode = function (code) {\r\n return this.httpService.get(this.getUrl() + 'specialityrules/' + code);\r\n };\r\n Service.prototype.updateSpecialityRule = function (rule) {\r\n return this.httpService.post('v1/billing/specialityrule/update', rule);\r\n };\r\n Service.prototype.deactivateSpecialityRule = function (deactivateRule) {\r\n return this.httpService.post('v1/billing/specialityrule/deactivate/', deactivateRule);\r\n };\r\n Service.prototype.createProvider = function (provider) {\r\n var body = {\r\n ProviderConfiguration: provider,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post('v1/billing/providers', body);\r\n };\r\n Service.prototype.updateProvider = function (provider) {\r\n var body = {\r\n ProviderConfiguration: provider,\r\n Reason: 'Updated from Florence UI',\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post('v1/billing/providers/' + provider.PracticeId, body);\r\n };\r\n Service.prototype.deleteProvider = function (providerId) {\r\n var body = {\r\n PracticeId: providerId,\r\n Reason: 'Deleted from Florence UI',\r\n CorrelationIds: []\r\n };\r\n return this.httpService.remove('v1/billing/providers/' + providerId, body);\r\n };\r\n Service.prototype.getProviders = function () {\r\n return this.httpService.get('v1/billing/providers');\r\n };\r\n Service.prototype.getProvidersFiltered = function (filter, pageCount, pageSize) {\r\n return this.httpService.get('v1/billing/providers/' + filter + '?$top=' + pageSize + '&$skip=' + pageCount * pageSize);\r\n };\r\n Service.prototype.getProvidersPage = function (pageCount, pageSize) {\r\n return this.httpService.get('v1/billing/providers' + '?$top=' + pageSize + '&$skip=' + pageCount * pageSize);\r\n };\r\n Service.prototype.getDoctorsByBillingNumber = function (practiceId, type) {\r\n return this.httpService.get('v1/billing/supportingproviders/' + practiceId + '/' + type);\r\n };\r\n Service.prototype.getBranches = function (practiceId) {\r\n return this.httpService.get('v1/' + practiceId + '/billing/branches');\r\n };\r\n Service.prototype.getProvider = function (practiceId) {\r\n return this.httpService.get('v1/billing/provider/' + practiceId);\r\n };\r\n Service.prototype.getProviderById = function (providerId) {\r\n return this.httpService.get('v1/billing/provider/' + providerId);\r\n };\r\n Service.prototype.setOptions = function (providerId, options) {\r\n var body = {\r\n ProviderId: providerId,\r\n Options: options,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post('v1/' + providerId + '/billing/providers/setoptions', body);\r\n };\r\n Service.prototype.setProviderOption = function (providerId, options) {\r\n var body = {\r\n Options: options,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post('v2/' + providerId + '/billing/providers/preferences', body);\r\n };\r\n Service.prototype.cancelInvoice = function (invoiceId) {\r\n return this.httpService.post(this.getUrl() + 'invoices/' + invoiceId + '/cancel');\r\n };\r\n Service.prototype.getUrl = function () {\r\n return 'v1/' + this.getPracticeId() + '/billing/';\r\n };\r\n Service.prototype.getPracticeId = function () {\r\n return this.authService.getPracticeId();\r\n };\r\n return Service;\r\n })();\r\n Billing.Service = Service;\r\n })(Billing = Domain.Billing || (Domain.Billing = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('billingDomain', Domain.Billing.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var Clinical;\r\n (function (Clinical) {\r\n var Encounter = (function () {\r\n function Encounter() {\r\n this.Provider = new Domain.Billing.Provider();\r\n this.PatientEventDetails = new Domain.Patient.PatientEvent();\r\n this.EncounterLineItems = new EncounterLineItems();\r\n this.EncounterFollowUp = new EncounterFollowUp();\r\n this.MedicationsAdministered = new MedicationPrescription();\r\n this.MedicationsDispensed = new MedicationPrescription();\r\n this.MedicationsPrescribed = new MedicationPrescription();\r\n this.MedicalCertificate = new MedicalCertificate();\r\n }\r\n return Encounter;\r\n })();\r\n Clinical.Encounter = Encounter;\r\n var MergeEncounterValidationError = (function () {\r\n function MergeEncounterValidationError() {\r\n }\r\n return MergeEncounterValidationError;\r\n })();\r\n Clinical.MergeEncounterValidationError = MergeEncounterValidationError;\r\n var MergeEncounterResult = (function () {\r\n function MergeEncounterResult() {\r\n }\r\n return MergeEncounterResult;\r\n })();\r\n Clinical.MergeEncounterResult = MergeEncounterResult;\r\n var MedicationPrescription = (function () {\r\n function MedicationPrescription() {\r\n this.Provider = new Domain.Billing.Provider();\r\n this.Patient = new Domain.Patient.Patient();\r\n this.MedicationPrescriptionLines = [];\r\n }\r\n return MedicationPrescription;\r\n })();\r\n Clinical.MedicationPrescription = MedicationPrescription;\r\n var MedicationPrescriptionLine = (function () {\r\n function MedicationPrescriptionLine() {\r\n this.Diagnosis = [];\r\n }\r\n return MedicationPrescriptionLine;\r\n })();\r\n Clinical.MedicationPrescriptionLine = MedicationPrescriptionLine;\r\n var EncounterFollowUp = (function () {\r\n function EncounterFollowUp() {\r\n this.FollowUpReasons = [];\r\n }\r\n return EncounterFollowUp;\r\n })();\r\n Clinical.EncounterFollowUp = EncounterFollowUp;\r\n var TemplateCreate = (function () {\r\n function TemplateCreate() {\r\n this.EncounterTemplate = new Template();\r\n this.CorrelationIds = [];\r\n }\r\n return TemplateCreate;\r\n })();\r\n Clinical.TemplateCreate = TemplateCreate;\r\n var Template = (function () {\r\n function Template() {\r\n this.EncounterLineItems = new EncounterLineItems();\r\n this.MedicationPrescriptionLines = [];\r\n }\r\n return Template;\r\n })();\r\n Clinical.Template = Template;\r\n var EncounterLineItems = (function () {\r\n function EncounterLineItems() {\r\n this.EncounterHeader = new EncounterHeader();\r\n this.LineItems = [];\r\n }\r\n return EncounterLineItems;\r\n })();\r\n Clinical.EncounterLineItems = EncounterLineItems;\r\n var EncounterHeader = (function () {\r\n function EncounterHeader() {\r\n this.Diagnosis = [];\r\n }\r\n return EncounterHeader;\r\n })();\r\n Clinical.EncounterHeader = EncounterHeader;\r\n var Diagnosis = (function () {\r\n function Diagnosis() {\r\n }\r\n return Diagnosis;\r\n })();\r\n Clinical.Diagnosis = Diagnosis;\r\n var LineItem = (function () {\r\n function LineItem() {\r\n }\r\n return LineItem;\r\n })();\r\n Clinical.LineItem = LineItem;\r\n var AddressBookEntry = (function () {\r\n function AddressBookEntry() {\r\n }\r\n return AddressBookEntry;\r\n })();\r\n Clinical.AddressBookEntry = AddressBookEntry;\r\n var Address = (function () {\r\n function Address() {\r\n }\r\n return Address;\r\n })();\r\n Clinical.Address = Address;\r\n var ModifierInfo = (function () {\r\n function ModifierInfo() {\r\n }\r\n return ModifierInfo;\r\n })();\r\n Clinical.ModifierInfo = ModifierInfo;\r\n var ModifierRequiredParams = (function () {\r\n function ModifierRequiredParams() {\r\n }\r\n return ModifierRequiredParams;\r\n })();\r\n Clinical.ModifierRequiredParams = ModifierRequiredParams;\r\n var MedicalCertificate = (function () {\r\n function MedicalCertificate() {\r\n this.Diagnoses = [];\r\n this.Patient = new Domain.Patient.Patient();\r\n this.Provider = new Domain.Billing.Provider();\r\n }\r\n return MedicalCertificate;\r\n })();\r\n Clinical.MedicalCertificate = MedicalCertificate;\r\n var MedicalInsurer = (function () {\r\n function MedicalInsurer() {\r\n }\r\n return MedicalInsurer;\r\n })();\r\n Clinical.MedicalInsurer = MedicalInsurer;\r\n var MedicalInsurance = (function () {\r\n function MedicalInsurance() {\r\n }\r\n return MedicalInsurance;\r\n })();\r\n Clinical.MedicalInsurance = MedicalInsurance;\r\n var ClinicalMetric = (function () {\r\n function ClinicalMetric() {\r\n }\r\n return ClinicalMetric;\r\n })();\r\n Clinical.ClinicalMetric = ClinicalMetric;\r\n var PathologyReportWorkflow = (function () {\r\n function PathologyReportWorkflow() {\r\n }\r\n return PathologyReportWorkflow;\r\n })();\r\n Clinical.PathologyReportWorkflow = PathologyReportWorkflow;\r\n var PatientPathologyResultDeliveryStatus = (function () {\r\n function PatientPathologyResultDeliveryStatus() {\r\n }\r\n return PatientPathologyResultDeliveryStatus;\r\n })();\r\n Clinical.PatientPathologyResultDeliveryStatus = PatientPathologyResultDeliveryStatus;\r\n var PatientPathologyResult = (function () {\r\n function PatientPathologyResult() {\r\n }\r\n return PatientPathologyResult;\r\n })();\r\n Clinical.PatientPathologyResult = PatientPathologyResult;\r\n var PatientDashboardEvent = (function () {\r\n function PatientDashboardEvent() {\r\n }\r\n return PatientDashboardEvent;\r\n })();\r\n Clinical.PatientDashboardEvent = PatientDashboardEvent;\r\n var PatientDashboard = (function () {\r\n function PatientDashboard() {\r\n }\r\n return PatientDashboard;\r\n })();\r\n Clinical.PatientDashboard = PatientDashboard;\r\n var PatientDocument = (function () {\r\n function PatientDocument() {\r\n }\r\n return PatientDocument;\r\n })();\r\n Clinical.PatientDocument = PatientDocument;\r\n var Provider = (function () {\r\n function Provider() {\r\n this.NetworkedSchemes = [];\r\n this.ManualPricingSchemes = [];\r\n }\r\n return Provider;\r\n })();\r\n Clinical.Provider = Provider;\r\n var Communication = (function () {\r\n function Communication() {\r\n }\r\n return Communication;\r\n })();\r\n Clinical.Communication = Communication;\r\n var ReferralTemplate = (function () {\r\n function ReferralTemplate() {\r\n }\r\n return ReferralTemplate;\r\n })();\r\n Clinical.ReferralTemplate = ReferralTemplate;\r\n (function (ReportStatusType) {\r\n ReportStatusType[ReportStatusType[\"OPEN\"] = 0] = \"OPEN\";\r\n ReportStatusType[ReportStatusType[\"READ\"] = 1] = \"READ\";\r\n ReportStatusType[ReportStatusType[\"URGENT\"] = 2] = \"URGENT\";\r\n })(Clinical.ReportStatusType || (Clinical.ReportStatusType = {}));\r\n var ReportStatusType = Clinical.ReportStatusType;\r\n var ReportStatusTypeUtil = (function () {\r\n function ReportStatusTypeUtil() {\r\n }\r\n ReportStatusTypeUtil.getName = function (statusType) {\r\n return this.NAMES[statusType];\r\n };\r\n ReportStatusTypeUtil.NAMES = [\r\n 'Open',\r\n 'Read',\r\n 'Urgent'\r\n ];\r\n return ReportStatusTypeUtil;\r\n })();\r\n Clinical.ReportStatusTypeUtil = ReportStatusTypeUtil;\r\n var PatientAllergies = (function () {\r\n function PatientAllergies() {\r\n }\r\n return PatientAllergies;\r\n })();\r\n Clinical.PatientAllergies = PatientAllergies;\r\n var PatientChronicConditions = (function () {\r\n function PatientChronicConditions() {\r\n }\r\n return PatientChronicConditions;\r\n })();\r\n Clinical.PatientChronicConditions = PatientChronicConditions;\r\n var Token = (function () {\r\n function Token() {\r\n }\r\n return Token;\r\n })();\r\n Clinical.Token = Token;\r\n var PatientCondition = (function () {\r\n function PatientCondition() {\r\n }\r\n return PatientCondition;\r\n })();\r\n Clinical.PatientCondition = PatientCondition;\r\n var Condition = (function () {\r\n function Condition() {\r\n }\r\n return Condition;\r\n })();\r\n Clinical.Condition = Condition;\r\n var Allergy = (function () {\r\n function Allergy() {\r\n }\r\n return Allergy;\r\n })();\r\n Clinical.Allergy = Allergy;\r\n var PatientAllergy = (function () {\r\n function PatientAllergy() {\r\n }\r\n return PatientAllergy;\r\n })();\r\n Clinical.PatientAllergy = PatientAllergy;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"authService\", \"moment\", \"$q\"];\r\n function Service(httpService, authService, moment, $q) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.authService = authService;\r\n this.moment = moment;\r\n this.$q = $q;\r\n }\r\n Service.prototype.getEncounters = function (practiceId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'encounters');\r\n };\r\n Service.prototype.getEncounter = function (practiceId, encounterId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'encounters/' + encounterId);\r\n };\r\n Service.prototype.getEncounterByPatientVisit = function (practiceId, patientVisitId, config, notShowError) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'encounters/bypatientvisitid/' + patientVisitId, config, notShowError);\r\n };\r\n Service.prototype.getTemplatesByEncounter = function (practiceId, encounterId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'encounters/' + encounterId + '/templates', { cache: 'getTemplatesByEncounter' + practiceId });\r\n };\r\n Service.prototype.invalidateEncounterTemplateCache = function (practiceId) {\r\n this.httpService.resetCache('getTemplatesByEncounter' + practiceId);\r\n };\r\n Service.prototype.importMultipleTemplates = function (practiceId, items, importType, onlyValidate) {\r\n var body = {\r\n RawData: items,\r\n ImportType: importType,\r\n OnlyValidate: onlyValidate\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) + 'encountertemplates/import/bulk', body);\r\n };\r\n Service.prototype.getTemplates = function (practiceId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'encountertemplates', { cache: 'getTemplatesByEncounter' + practiceId });\r\n };\r\n Service.prototype.getTemplate = function (practiceId, templateId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'encountertemplates/' + templateId);\r\n };\r\n Service.prototype.getHistoricalMetrics = function (practiceId, patientId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'patient/' + patientId + \"/metrics\");\r\n };\r\n Service.prototype.submitEncounter = function (practiceId, encounter) {\r\n var wrapper = new WrapperVo(encounter, []);\r\n return this.httpService.post(this.getUrl(practiceId) + 'encounters/' + encounter.EncounterId, wrapper);\r\n };\r\n Service.prototype.setupPrice = function (practiceId, encounter) {\r\n return this.httpService.post(this.getUrl(practiceId) + 'encounters/' + encounter.EncounterId + '/price', encounter);\r\n };\r\n Service.prototype.validateEncounter = function (practiceId, encounter) {\r\n var wrapper = new WrapperVo(encounter, []);\r\n return this.httpService.post(this.getUrl(practiceId) + 'encounters/' + encounter.EncounterId + '/validate', wrapper);\r\n };\r\n Service.prototype.mergeLineItemsByEncounter = function (practiceId, encounter, template) {\r\n var body = {\r\n EncounterId: encounter.EncounterId,\r\n OriginalInstruction: encounter,\r\n NewInstruction: template,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) +\r\n 'encounters/' +\r\n encounter.EncounterId +\r\n '/mergeencounterlineitems', body);\r\n };\r\n Service.prototype.mergeLineItemsByTemplates = function (practiceId, mainTemplate, template) {\r\n var body = {\r\n OriginalInstruction: mainTemplate,\r\n NewInstruction: template,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) +\r\n 'encountertemplates/' +\r\n mainTemplate.TemplateId +\r\n '/mergelineitems', body);\r\n };\r\n Service.prototype.getPrescriptionReport = function (practiceId, encounter, type) {\r\n if (type === void 0) { type = \"html\"; }\r\n if (type === \"pdf\") {\r\n return this.httpService.post(this.getUrl(practiceId) + \"prescription/report/\" + type, encounter, { responseType: 'arraybuffer' });\r\n }\r\n return this.httpService.post(this.getUrl(practiceId) + \"prescription/report\", encounter);\r\n };\r\n Service.prototype.getPrescriptionHistory = function (practiceId, patientId) {\r\n return this.httpService.get(this.getUrl(practiceId) +\r\n \"patient/\" +\r\n patientId +\r\n \"/encounters/withprescriptions\");\r\n };\r\n Service.prototype.getMedicacalSertificate = function (practiceId, encounter, type) {\r\n if (type === void 0) { type = \"html\"; }\r\n if (type === \"pdf\") {\r\n return this.httpService.post(this.getUrl(practiceId) + \"medicalcertificate/report/\" + type, encounter, { responseType: 'arraybuffer' });\r\n }\r\n return this.httpService.post(this.getUrl(practiceId) + \"medicalcertificate/report/\" + type, encounter);\r\n };\r\n Service.prototype.sendCommunicationByEmail = function (practiceId, patientId, body, notShowError) {\r\n return this.httpService.post(this.getUrl(practiceId) + \"patient/\" + patientId + \"/sendcommunication\", body, null, notShowError);\r\n };\r\n Service.prototype.mergeHospitalIndicator = function (practiceId, encounterId, lineItems) {\r\n var request = {\r\n OriginalInstruction: lineItems,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) +\r\n 'encounters/' +\r\n encounterId +\r\n '/mergeencounterhospitalindicator', request);\r\n };\r\n Service.prototype.mergePlaceOfService = function (practiceId, encounterId, lineItems) {\r\n var request = {\r\n OriginalInstruction: lineItems,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) +\r\n 'encounters/' +\r\n encounterId +\r\n '/changeplaceofservice', request);\r\n };\r\n Service.prototype.getAddressBook = function (practiceId, lookupfilter, pageNo, pageSize) {\r\n if (lookupfilter === void 0) { lookupfilter = ''; }\r\n return this.httpService.get(this.getUrl(practiceId) + 'addressbook/' + lookupfilter + '?$top=' + pageSize + '&$skip=' + pageNo * pageSize);\r\n };\r\n Service.prototype.getAddressBookFavourites = function (practiceId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'addressbook/favourite');\r\n };\r\n Service.prototype.getAddressBookEntry = function (practiceId, entryId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'addressbook/byId/' + entryId);\r\n };\r\n Service.prototype.addAddressBookEntry = function (practiceId, entry) {\r\n var request = {\r\n AddressBookEntry: entry\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) + 'addressbook/', request);\r\n };\r\n Service.prototype.updateAddressBookEntry = function (practiceId, entry) {\r\n var request = {\r\n AddressBookEntry: entry\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) + 'addressbook/' + entry.AddressBookEntryId, request);\r\n };\r\n Service.prototype.removeAddressBookEntry = function (practiceId, entryId) {\r\n return this.httpService.remove(this.getUrl(practiceId) + 'addressbook/' + entryId);\r\n };\r\n Service.prototype.createTemplate = function (practiceId, template) {\r\n var request = {\r\n EncounterTemplate: template,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) + 'encountertemplates', request);\r\n };\r\n Service.prototype.saveEncounter = function (practiceId, encounter) {\r\n var wrapper = new WrapperVo(encounter, []);\r\n return this.httpService.post(this.getUrl(practiceId) + 'encounters/' + encounter.EncounterId + '/save', wrapper);\r\n };\r\n Service.prototype.updateTemplate = function (practiceId, template) {\r\n var request = {\r\n EncounterTemplate: template,\r\n CorrelationIds: []\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) +\r\n 'encountertemplates/' +\r\n template.TemplateId, request);\r\n };\r\n Service.prototype.removeTemplate = function (practiceId, templateId) {\r\n return this.httpService.remove(this.getUrl(practiceId) + 'encountertemplates/' + templateId);\r\n };\r\n Service.prototype.removeTemplatesByType = function (practiceId, type) {\r\n return this.httpService.remove(this.getUrl(practiceId) + 'encountertemplates/' + type);\r\n };\r\n Service.prototype.removeTemplates = function (practiceId) {\r\n return this.httpService.remove(this.getUrl(practiceId) + 'encountertemplates/bulkdelete');\r\n };\r\n Service.prototype.getPathologyReports = function (practiceId, searchText) {\r\n return this.httpService.get(this.getUrl(practiceId) + \"pathologyreports/\" + searchText);\r\n };\r\n Service.prototype.getPathologyReportWorkflows = function (practiceId, startDate, endDate, statusType) {\r\n var query = this.getUrl(practiceId) + \"pathologyreportworkflows\";\r\n if (this.isValidMoment(startDate) && this.isValidMoment(endDate)) {\r\n query += \"/fromdate/\" + startDate.format('YYYY-MM-DD') + \"/todate/\" + endDate.format('YYYY-MM-DD');\r\n }\r\n if (!angular.isUndefined(statusType)) {\r\n query += \"/status/\" + ReportStatusTypeUtil.getName(statusType);\r\n }\r\n return this.httpService.get(query);\r\n };\r\n Service.prototype.getPathologyReportWorkflowsForProvider = function (practiceId, providerId) {\r\n var query = this.getUrl(practiceId) + \"pathologyreportworkflows/linkedpatients\";\r\n return this.httpService.get(query);\r\n };\r\n Service.prototype.getUndeliveredPathResults = function (practiceId) {\r\n var query = this.getUrl(practiceId) + \"pathologyreports/status/undelivered\";\r\n return this.httpService.get(query);\r\n };\r\n Service.prototype.getPathologyReportPatient = function (practiceId, reportId) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/pathologyreports/\" + reportId + \"/patient\");\r\n };\r\n Service.prototype.markPathologyReportsAsRead = function (practiceId, workflowIds) {\r\n return this.httpService\r\n .post(\"v1/\" + practiceId + \"/clinical/pathologyreportworkflows/\", JSON.stringify(workflowIds));\r\n };\r\n Service.prototype.getPathologyReportWorkflowsCount = function (practiceId) {\r\n var status = ReportStatusTypeUtil.getName(ReportStatusType.OPEN);\r\n var query = this.getUrl(practiceId) + \"pathologyreportworkflows/status/\" + status + \"/count\";\r\n return this.httpService.get(query);\r\n };\r\n Service.prototype.mergeReferralItemsByTemplate = function (practiceId, templateId) {\r\n return this.httpService.post(this.getUrl(practiceId) +\r\n 'encountertemplates/' +\r\n templateId +\r\n '/mergelineitems');\r\n };\r\n Service.prototype.comunnicationByEncounter = function (practiceId, encounterId, communicationId) {\r\n return this.httpService.post(this.getUrl(practiceId) +\r\n 'encounters/' +\r\n encounterId +\r\n '/communications/' +\r\n communicationId);\r\n };\r\n Service.prototype.comunnicationByIndex = function (practiceId, encounterId, communicationId, indexId) {\r\n return this.httpService.post(this.getUrl(practiceId) +\r\n 'encounters/' +\r\n encounterId +\r\n '/communications/' +\r\n communicationId +\r\n '/' +\r\n indexId);\r\n };\r\n Service.prototype.getEncounterReferrals = function (practiceId, encounterTemplateId) {\r\n return this.httpService.get(this.getUrl(practiceId) +\r\n 'encountertemplates/' +\r\n encounterTemplateId +\r\n '/referrals');\r\n };\r\n Service.prototype.refreshEncounter = function (practiceId, encounterType, encounter) {\r\n var body = {\r\n EncounterType: encounterType,\r\n Encounter: encounter\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) + 'encounters/' + encounter.EncounterId + '/refresh', body);\r\n };\r\n Service.prototype.updateEncounterCommunicationBody = function (practiceId, encounterId, communicationId, templateBody, subject) {\r\n var body = {\r\n PracticeId: practiceId,\r\n EncounterId: encounterId,\r\n CommunicationId: communicationId,\r\n Content: templateBody,\r\n Title: subject\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) +\r\n 'encounters/' +\r\n encounterId +\r\n '/communications/' +\r\n communicationId +\r\n '/0', body);\r\n };\r\n Service.prototype.deliverPathResult = function (practiceId, pathologyReportId) {\r\n var body = {\r\n PracticeId: practiceId,\r\n PathologyReportId: pathologyReportId,\r\n };\r\n return this.httpService.post(\"v1/\" + practiceId + \"/clinical/pathologyreports/\" + pathologyReportId + \"/redeliver\", body);\r\n };\r\n Service.prototype.ignorePathResult = function (practiceId, pathologyReportId) {\r\n var body = {\r\n PracticeId: practiceId,\r\n PathologyReportId: pathologyReportId,\r\n };\r\n return this.httpService.post(\"v1/\" + practiceId + \"/clinical/pathologyreports/\" + pathologyReportId + \"/ignore\", body);\r\n };\r\n Service.prototype.renderEncounterCommunication = function (practiceId, encounterId, templateId, encounter) {\r\n return this.httpService.post(this.getUrl(practiceId) +\r\n 'encounters/' +\r\n encounterId +\r\n '/communications/' +\r\n templateId, encounter);\r\n };\r\n Service.prototype.getEncounterCommunicationBody = function (practiceId, encounterId, templateId) {\r\n return this.httpService.get(this.getUrl(practiceId) +\r\n 'encounters/' +\r\n encounterId +\r\n '/communications/' +\r\n templateId +\r\n '/0');\r\n };\r\n Service.prototype.getModifierInfo = function (practiceId, code) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'modifiers/' + code + '/info', null, true);\r\n };\r\n Service.prototype.getModifierRequiredInfo = function (practiceId, code) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'modifiers/' + code + '/requiredinfo', null, true);\r\n };\r\n Service.prototype.inviteDoctor = function (practiceId, body) {\r\n return this.httpService.post(this.getUrl(practiceId) + 'referrals/invite', body);\r\n };\r\n Service.prototype.getProviderById = function (practiceId) {\r\n return this.httpService.get('v1/clinical/provider/' + practiceId);\r\n };\r\n Service.prototype.getProviders = function () {\r\n return this.httpService.get('v1/clinical/providers');\r\n };\r\n Service.prototype.isValidMoment = function (date) {\r\n return this.moment.isMoment(date) && date.isValid();\r\n };\r\n Service.prototype.getUrl = function (practiceId) {\r\n return 'v1/' + practiceId + '/clinical/';\r\n };\r\n Service.prototype.getCacheTime = function () {\r\n };\r\n Service.DATE_PATTERN = \"YYYY-MM-DD\";\r\n return Service;\r\n })();\r\n Clinical.Service = Service;\r\n var WrapperVo = (function () {\r\n function WrapperVo(encounter, correlation) {\r\n this.EncounterVo = encounter;\r\n this.CorrelationIds = correlation;\r\n }\r\n return WrapperVo;\r\n })();\r\n Clinical.WrapperVo = WrapperVo;\r\n var RequestMergeEncounter = (function () {\r\n function RequestMergeEncounter() {\r\n this.OriginalInstruction = new Encounter();\r\n this.NewInstruction = new Template();\r\n this.CorrelationIds = [];\r\n }\r\n return RequestMergeEncounter;\r\n })();\r\n Clinical.RequestMergeEncounter = RequestMergeEncounter;\r\n var RequestMergeTemplate = (function () {\r\n function RequestMergeTemplate() {\r\n this.OriginalInstruction = new Template();\r\n this.NewInstruction = new Template();\r\n this.CorrelationIds = [];\r\n }\r\n return RequestMergeTemplate;\r\n })();\r\n Clinical.RequestMergeTemplate = RequestMergeTemplate;\r\n var AccountInfo = (function () {\r\n function AccountInfo() {\r\n }\r\n return AccountInfo;\r\n })();\r\n Clinical.AccountInfo = AccountInfo;\r\n })(Clinical = Domain.Clinical || (Domain.Clinical = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('clinicalDomain', Domain.Clinical.Service);\r\nvar EventType;\r\n(function (EventType) {\r\n EventType[EventType[\"DIAGNOSIS\"] = 0] = \"DIAGNOSIS\";\r\n EventType[EventType[\"PROCEDURE\"] = 1] = \"PROCEDURE\";\r\n EventType[EventType[\"MEDICINE\"] = 2] = \"MEDICINE\";\r\n EventType[EventType[\"CONSUMABLE\"] = 3] = \"CONSUMABLE\";\r\n EventType[EventType[\"PRESCRIPTION\"] = 4] = \"PRESCRIPTION\";\r\n EventType[EventType[\"FOLLOWUP\"] = 5] = \"FOLLOWUP\";\r\n EventType[EventType[\"CLINICAL_NOTE\"] = 6] = \"CLINICAL_NOTE\";\r\n EventType[EventType[\"COMMUNICATION\"] = 7] = \"COMMUNICATION\";\r\n EventType[EventType[\"MEDICAL_INSURANCE_PROCEDURE\"] = 8] = \"MEDICAL_INSURANCE_PROCEDURE\";\r\n EventType[EventType[\"CLINICAL_METRIC\"] = 9] = \"CLINICAL_METRIC\";\r\n EventType[EventType[\"MODIFIER\"] = 10] = \"MODIFIER\";\r\n EventType[EventType[\"PROVIDER_NOTE\"] = 11] = \"PROVIDER_NOTE\";\r\n})(EventType || (EventType = {}));\r\nvar EventTypeUtil = (function () {\r\n function EventTypeUtil() {\r\n }\r\n EventTypeUtil.getTypeById = function (id) {\r\n switch (id) {\r\n case 0:\r\n return EventType.DIAGNOSIS;\r\n case 1:\r\n return EventType.PROCEDURE;\r\n case 2:\r\n return EventType.MEDICINE;\r\n case 3:\r\n return EventType.CONSUMABLE;\r\n case 4:\r\n return EventType.PRESCRIPTION;\r\n case 5:\r\n return EventType.FOLLOWUP;\r\n case 6:\r\n return EventType.CLINICAL_NOTE;\r\n case 7:\r\n return EventType.COMMUNICATION;\r\n case 8:\r\n return EventType.MEDICAL_INSURANCE_PROCEDURE;\r\n case 9:\r\n return EventType.CLINICAL_METRIC;\r\n case 10:\r\n return EventType.MODIFIER;\r\n case 11:\r\n return EventType.PROVIDER_NOTE;\r\n default:\r\n throw new Error('EventType not found.id=[' + id + ']');\r\n }\r\n };\r\n EventTypeUtil.getTypeByName = function (name) {\r\n switch (name) {\r\n case 'Diagnosis':\r\n return EventType.DIAGNOSIS;\r\n case 'Procedure':\r\n return EventType.PROCEDURE;\r\n case 'MedicalInsuranceProcedure':\r\n return EventType.MEDICAL_INSURANCE_PROCEDURE;\r\n case 'Medicine':\r\n return EventType.MEDICINE;\r\n case 'Consumable':\r\n return EventType.CONSUMABLE;\r\n case 'Prescription':\r\n return EventType.PRESCRIPTION;\r\n case 'FollowUp':\r\n return EventType.FOLLOWUP;\r\n case 'ClinicalNote':\r\n return EventType.CLINICAL_NOTE;\r\n case 'Communication':\r\n return EventType.COMMUNICATION;\r\n case 'ClinicalMetric':\r\n return EventType.CLINICAL_METRIC;\r\n case 'Modifier':\r\n return EventType.MODIFIER;\r\n case 'ProviderNote':\r\n return EventType.PROVIDER_NOTE;\r\n default:\r\n throw new Error('EventType not found.id=[' + name + ']');\r\n }\r\n };\r\n EventTypeUtil.getNameByType = function (type) {\r\n switch (type) {\r\n case EventType.DIAGNOSIS:\r\n return 'Diagnosis';\r\n case EventType.PROCEDURE:\r\n return 'Procedure';\r\n case EventType.MEDICAL_INSURANCE_PROCEDURE:\r\n return 'MedicalInsuranceProcedure';\r\n case EventType.MEDICINE:\r\n return 'Medicine';\r\n case EventType.CONSUMABLE:\r\n return 'Consumable';\r\n case EventType.PRESCRIPTION:\r\n return 'Prescription';\r\n case EventType.COMMUNICATION:\r\n return 'Communication';\r\n case EventType.CLINICAL_METRIC:\r\n return 'ClinicalMetric';\r\n case EventType.MODIFIER:\r\n return 'Modifier';\r\n case EventType.PROVIDER_NOTE:\r\n return 'ProviderNote';\r\n default:\r\n throw new Error('EventType not found.EventType=[' + type + ']');\r\n }\r\n };\r\n return EventTypeUtil;\r\n})();\r\n/// \r\n/// \r\nvar ProviderModule;\r\n(function (ProviderModule) {\r\n var Options = (function () {\r\n function Options() {\r\n }\r\n return Options;\r\n })();\r\n ProviderModule.Options = Options;\r\n var Service = (function () {\r\n Service.$inject = [\"billingDomain\"];\r\n function Service(billingDomain) {\r\n \"ngInject\";\r\n this.billingDomain = billingDomain;\r\n }\r\n Service.prototype.getProviderOptions = function (practiceId) {\r\n var _this = this;\r\n return this.billingDomain.getProvider(practiceId)\r\n .then(function (provider) {\r\n if (provider) {\r\n return _this.buildProviderOptions(provider);\r\n }\r\n return new Options();\r\n });\r\n };\r\n Service.prototype.getProvider = function (practiceId) {\r\n return this.billingDomain.getProvider(practiceId)\r\n .then(function (provider) {\r\n if (provider) {\r\n return provider;\r\n }\r\n return null;\r\n });\r\n };\r\n Service.prototype.saveProviderOption = function (practiceId, key, value) {\r\n var option = new Options();\r\n option[key] = value;\r\n return this.billingDomain.setProviderOption(practiceId, option);\r\n };\r\n Service.prototype.buildProviderOptions = function (provider) {\r\n var options = provider.Options;\r\n if (!options) {\r\n options = {};\r\n }\r\n var providerOptions = new Options();\r\n providerOptions.isEnabledForClinicalResults = true;\r\n providerOptions.isEnabledForClinicalPatientVisitOutcome = Common\r\n .parseBoolean(options.IsEnabledForClinicalPatientVisitOutcome);\r\n providerOptions.isEnabledForMedicalCertificates = Common\r\n .parseBoolean(options.IsEnabledForMedicalCertificates);\r\n providerOptions.isDisabledForDisplayingPatientFinancialInformation = Common\r\n .parseBoolean(options.IsDisabledForDisplayingPatientFinancialInformation);\r\n providerOptions.isEnabledForMedicationPrescriptions = Common\r\n .parseBoolean(options.IsEnabledForMedicationPrescriptions);\r\n providerOptions.isEnabledForDisplayingPrices = Common.parseBoolean(options.IsEnabledForDisplayingPrices) &&\r\n !((provider.PracticeXRef || '').startsWith(\"iHealth\"));\r\n providerOptions.isDispensing = provider.DispensingDoctor === 'Yes';\r\n providerOptions.healthIDProviderCredentials = options.HealthIDProviderCredentials;\r\n providerOptions.consultationCustomLayoutOrder = options.ConsultationCustomLayoutOrder;\r\n providerOptions.displayPatientTimeLine = Common.parseBoolean(options.DisplayPatientTimeLine);\r\n providerOptions.healthDocEnabled = Common.parseBoolean(options.HealthDocEnabled);\r\n providerOptions.isPowerBIEnabled = Common.parseBoolean(options.IsPowerBIEnabled);\r\n providerOptions.isHealthbridgeClinicalEnabled = Common.parseBoolean(options.IsHealthbridgeClinicalEnabled) || Common.parseBoolean(options.IsHealthbridgeClinicalLiteEnabled);\r\n providerOptions.isDrAppAccessAllowed = Common.parseBoolean(options.IsDrAppAccessAllowed);\r\n providerOptions.HomePage = options.HomePage;\r\n providerOptions.myPatientFilesEnabled = Common.parseBoolean(options.MyPatienFilesEnabled);\r\n providerOptions.lastSeenImportantNotice = options.LastSeenImportantNotice;\r\n return providerOptions;\r\n };\r\n return Service;\r\n })();\r\n ProviderModule.Service = Service;\r\n})(ProviderModule || (ProviderModule = {}));\r\nangular.module('DoctorApp')\r\n .service('providerService', ProviderModule.Service);\r\nvar SearchModule;\r\n(function (SearchModule) {\r\n (function (SearchType) {\r\n SearchType[SearchType[\"DIAGNOSIS\"] = 0] = \"DIAGNOSIS\";\r\n SearchType[SearchType[\"PROCEDURE\"] = 1] = \"PROCEDURE\";\r\n SearchType[SearchType[\"MEDICINE\"] = 2] = \"MEDICINE\";\r\n SearchType[SearchType[\"CONSUMABLE\"] = 3] = \"CONSUMABLE\";\r\n SearchType[SearchType[\"PRESCRIPTION\"] = 4] = \"PRESCRIPTION\";\r\n SearchType[SearchType[\"MIPROCEDURE\"] = 5] = \"MIPROCEDURE\";\r\n })(SearchModule.SearchType || (SearchModule.SearchType = {}));\r\n var SearchType = SearchModule.SearchType;\r\n var SearchTypeUtil = (function () {\r\n function SearchTypeUtil() {\r\n }\r\n SearchTypeUtil.getName = function (searchType) {\r\n return this.NAMES[searchType];\r\n };\r\n SearchTypeUtil.getType = function (searchType) {\r\n return this.TYPES[searchType];\r\n };\r\n SearchTypeUtil.NAMES = [\r\n 'diagnosis',\r\n 'procedure',\r\n 'medicine',\r\n 'consumable',\r\n 'prescription',\r\n 'miprocedure'\r\n ];\r\n SearchTypeUtil.TYPES = [\r\n 'AdhocDiagnosis',\r\n 'AdhocProcedure',\r\n 'AdhocMedicine',\r\n 'AdhocConsumable',\r\n 'AdhocPrescription',\r\n 'AdhocMedicalInsuranceProcedure'\r\n ];\r\n return SearchTypeUtil;\r\n })();\r\n SearchModule.SearchTypeUtil = SearchTypeUtil;\r\n})(SearchModule || (SearchModule = {}));\r\nvar TrackingModule;\r\n(function (TrackingModule) {\r\n var User = (function () {\r\n function User(options) {\r\n this.PracticeId = options.PracticeId;\r\n this.UserName = options.UserName;\r\n this.ClientVersion = options.ClientVersion;\r\n }\r\n return User;\r\n })();\r\n TrackingModule.User = User;\r\n var LineItem = (function (_super) {\r\n __extends(LineItem, _super);\r\n function LineItem(options) {\r\n _super.call(this, options);\r\n this.EncounterId = options.EncounterId;\r\n this.ItemCode = options.ItemCode;\r\n }\r\n return LineItem;\r\n })(User);\r\n TrackingModule.LineItem = LineItem;\r\n var PatientBase = (function () {\r\n function PatientBase(options) {\r\n this.PatientId = options.PatientId;\r\n }\r\n return PatientBase;\r\n })();\r\n TrackingModule.PatientBase = PatientBase;\r\n var Patient = (function (_super) {\r\n __extends(Patient, _super);\r\n function Patient(options) {\r\n _super.call(this, options);\r\n this.PatientId = options.PatientId;\r\n }\r\n return Patient;\r\n })(User);\r\n TrackingModule.Patient = Patient;\r\n var PatientEvent = (function (_super) {\r\n __extends(PatientEvent, _super);\r\n function PatientEvent(options) {\r\n _super.call(this, options);\r\n this.PatientEventId = options.PatientEventId;\r\n this.CheckInTime = options.CheckInTime;\r\n }\r\n return PatientEvent;\r\n })(Patient);\r\n TrackingModule.PatientEvent = PatientEvent;\r\n var PathReport = (function (_super) {\r\n __extends(PathReport, _super);\r\n function PathReport(options) {\r\n _super.call(this, options);\r\n this.ReportId = options.ReportId;\r\n }\r\n return PathReport;\r\n })(User);\r\n TrackingModule.PathReport = PathReport;\r\n var PathReportDashboard = (function (_super) {\r\n __extends(PathReportDashboard, _super);\r\n function PathReportDashboard(options) {\r\n _super.call(this, options);\r\n this.ReportId = options.ReportId;\r\n this.Date = options.Date;\r\n }\r\n return PathReportDashboard;\r\n })(Patient);\r\n TrackingModule.PathReportDashboard = PathReportDashboard;\r\n var DashboardLineItem = (function (_super) {\r\n __extends(DashboardLineItem, _super);\r\n function DashboardLineItem(options) {\r\n _super.call(this, options);\r\n this.PatientId = options.PatientId;\r\n this.Date = options.Date;\r\n }\r\n return DashboardLineItem;\r\n })(LineItem);\r\n TrackingModule.DashboardLineItem = DashboardLineItem;\r\n var MedicalCertificate = (function (_super) {\r\n __extends(MedicalCertificate, _super);\r\n function MedicalCertificate(options) {\r\n _super.call(this, options);\r\n this.EncounterId = options.EncounterId;\r\n this.Diagnoses = options.Diagnoses;\r\n this.Date = options.Date;\r\n }\r\n return MedicalCertificate;\r\n })(Patient);\r\n TrackingModule.MedicalCertificate = MedicalCertificate;\r\n})(TrackingModule || (TrackingModule = {}));\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar TrackingModule;\r\n(function (TrackingModule) {\r\n var type = SearchModule.SearchType;\r\n var util = SearchModule.SearchTypeUtil;\r\n var Service = (function () {\r\n Service.$inject = [\"storageService\", \"$location\"];\r\n function Service(storageService, $location) {\r\n \"ngInject\";\r\n this.storageService = storageService;\r\n this.$location = $location;\r\n this.appInsights = window['appInsights'];\r\n angular.extend(this.appInsights.config, GlobalVar.applicationInsightOptions);\r\n }\r\n Service.prototype.itemAddedToEncounter = function (encounter, template) {\r\n this.templateEvent('addedToEncounter', encounter, template);\r\n };\r\n Service.prototype.logHbcRedirect = function () {\r\n this.trackEvent('hbc_redirect', {});\r\n };\r\n Service.prototype.removedLineItemFromEncounter = function (encounter, item, type) {\r\n this.trackLineItemEvent('removedFromEncounter', encounter, item, type);\r\n };\r\n Service.prototype.openedDetailsDialog = function (encounter, item, type) {\r\n this.trackLineItemEvent('openedDetailsDialog', encounter, item, type);\r\n };\r\n Service.prototype.openedPatientDetails = function (patient) {\r\n this.patientDetailsEvent('openedPatientDetails', patient);\r\n };\r\n Service.prototype.defineUser = function (userId) {\r\n this.appInsights.setAuthenticatedUserContext(userId);\r\n };\r\n Service.prototype.editedPatientDetails = function (patient) {\r\n this.patientDetailsEvent('editedPatientDetails', patient);\r\n };\r\n Service.prototype.openedPatientDashboard = function (patientEvent) {\r\n this.patientDashboardEvent('openedPatientDashboard', patientEvent);\r\n };\r\n Service.prototype.openedPathReportWorkflow = function (reportId) {\r\n this.pathReportEvent('openedPathReportWorkflow', reportId);\r\n };\r\n Service.prototype.openedPathReport = function (reportId) {\r\n this.pathReportEvent('openedPathReport', reportId);\r\n };\r\n Service.prototype.clickedOnPatientDashboardItem = function (patientId, date, encounter, item, type) {\r\n this.trackClickedOnPatientDashboardItem('clickedOnPatientDashboardItem', patientId, date, encounter, item, type);\r\n };\r\n Service.prototype.clickedOnPatientDashboardPathReport = function (patientId, reportId, date) {\r\n this.pathReportDashboardEvent(\"clickedOnPatientDashboardPathReport\", patientId, reportId, date);\r\n };\r\n Service.prototype.clickedOnPatientDashboardMedicalCertificate = function (encounterId, patientId, description, date) {\r\n var diagnoses = this.parseMedicalCertificateDiagnosis(description);\r\n var data = new TrackingModule.MedicalCertificate({\r\n Date: date,\r\n EncounterId: encounterId,\r\n Diagnoses: diagnoses,\r\n PracticeId: this.getPracticeId(),\r\n PatientId: patientId,\r\n UserName: this.getUserName(),\r\n ClientVersion: GlobalVar.clientVersion\r\n });\r\n this.trackEvent(\"clickedOnPatientDashboardMedicalCertificate\", data);\r\n };\r\n Service.prototype.editedNotes = function (eventName, encounter) {\r\n var data = {\r\n EncounterId: encounter.EncounterId,\r\n PracticeId: encounter.PatientEventDetails.PracticeId,\r\n UserName: this.getUserName()\r\n };\r\n this.trackEvent(eventName, data);\r\n };\r\n Service.prototype.onViewChanged = function () {\r\n var viewName = this.$location.path();\r\n var url = this.$location.absUrl();\r\n var practice = this.storageService.getPractice();\r\n var properties = {\r\n practiceId: practice.id,\r\n billingPracticeNumber: practice.billingPrNo,\r\n treatingPracticeNumber: practice.treatingPrNo,\r\n practiceName: practice.name,\r\n userName: this.getUserName(),\r\n clientVersion: GlobalVar.clientVersion\r\n };\r\n this.appInsights.trackPageView(viewName, url, properties);\r\n };\r\n Service.prototype.openedPatientTelehealthFromDashboard = function (patientEvent) {\r\n this.patientDashboardEvent('virtual-consult-open', patientEvent);\r\n };\r\n Service.prototype.patientDetailsEvent = function (eventName, patient) {\r\n var data = new TrackingModule.Patient({\r\n PracticeId: patient.PracticeId,\r\n PatientId: patient.PatientId,\r\n UserName: this.getUserName(),\r\n ClientVersion: GlobalVar.clientVersion\r\n });\r\n this.trackEvent(eventName, data);\r\n };\r\n Service.prototype.patientDashboardEvent = function (eventName, patientEvent) {\r\n var data = new TrackingModule.PatientEvent({\r\n PracticeId: patientEvent.PracticeId,\r\n PatientId: patientEvent.Patient.PatientId,\r\n UserName: this.getUserName(),\r\n PatientEventId: patientEvent.PatientEventId,\r\n CheckInTime: patientEvent.CheckInTime,\r\n ClientVersion: GlobalVar.clientVersion\r\n });\r\n this.trackEvent(eventName, data);\r\n };\r\n Service.prototype.pathReportDashboardEvent = function (eventName, patientId, reportId, date) {\r\n var data = new TrackingModule.PathReportDashboard({\r\n Date: date,\r\n UserName: this.getUserName(),\r\n ReportId: reportId,\r\n PracticeId: this.getPracticeId(),\r\n PatientId: patientId,\r\n ClientVersion: GlobalVar.clientVersion\r\n });\r\n this.trackEvent(eventName, data);\r\n };\r\n Service.prototype.pathReportEvent = function (eventName, reportId) {\r\n var data = new TrackingModule.PathReport({\r\n UserName: this.getUserName(),\r\n ReportId: reportId,\r\n PracticeId: this.getPracticeId(),\r\n ClientVersion: GlobalVar.clientVersion\r\n });\r\n this.trackEvent(eventName, data);\r\n };\r\n Service.prototype.trackLineItemEvent = function (eventName, encounter, item, type) {\r\n var practiceId = '';\r\n var encounterId = '';\r\n if (encounter) {\r\n encounterId = encounter.EncounterId;\r\n if (encounter.PatientEventDetails) {\r\n practiceId = encounter.PatientEventDetails.PracticeId;\r\n }\r\n }\r\n var data = new TrackingModule.LineItem({\r\n PracticeId: practiceId,\r\n UserName: this.getUserName(),\r\n EncounterId: encounterId,\r\n ItemCode: \"\",\r\n ClientVersion: GlobalVar.clientVersion\r\n });\r\n this.lineItemEvent(eventName, data, item, type);\r\n };\r\n Service.prototype.trackClickedOnPatientDashboardItem = function (eventName, patientId, date, encounter, item, type) {\r\n var data = new TrackingModule.DashboardLineItem({\r\n Date: date,\r\n PatientId: patientId,\r\n PracticeId: encounter.PatientEventDetails.PracticeId,\r\n UserName: this.getUserName(),\r\n EncounterId: encounter.EncounterId,\r\n ItemCode: \"\",\r\n ClientVersion: GlobalVar.clientVersion\r\n });\r\n this.lineItemEvent(eventName, data, item, type);\r\n };\r\n Service.prototype.lineItemEvent = function (eventName, data, item, type) {\r\n switch (type) {\r\n case EventType.PROCEDURE:\r\n this.trackItem(eventName + 'Procedure', data, item.ChargeCode);\r\n break;\r\n case EventType.MEDICINE:\r\n this.trackItem(eventName + 'Medicine', data, item.NappiCode);\r\n break;\r\n case EventType.CONSUMABLE:\r\n this.trackItem(eventName + 'Consumable', data, item.NappiCode);\r\n break;\r\n case EventType.PRESCRIPTION:\r\n this.trackItem(eventName + 'Prescription', data, item.NappiCode);\r\n break;\r\n case EventType.DIAGNOSIS:\r\n this.trackItem(eventName + 'Diagnosis', data, item.DiagnosisCode);\r\n break;\r\n }\r\n };\r\n Service.prototype.templateEvent = function (eventName, encounter, template) {\r\n var data = new TrackingModule.LineItem({\r\n PracticeId: encounter.PatientEventDetails.PracticeId,\r\n UserName: this.getUserName(),\r\n EncounterId: encounter.EncounterId,\r\n ItemCode: \"\",\r\n ClientVersion: GlobalVar.clientVersion\r\n });\r\n switch (template.TemplateType) {\r\n case util.getType(type.PROCEDURE):\r\n this.trackItem(eventName + 'Procedure', data, template.EncounterLineItems.LineItems[0].ChargeCode);\r\n break;\r\n case util.getType(type.MEDICINE):\r\n this.trackItem(eventName + 'Medicine', data, template.EncounterLineItems.LineItems[0].NappiCode);\r\n break;\r\n case util.getType(type.CONSUMABLE):\r\n this.trackItem(eventName + 'Consumable', data, template.EncounterLineItems.LineItems[0].NappiCode);\r\n break;\r\n case util.getType(type.PRESCRIPTION):\r\n this.trackItem(eventName + 'Prescription', data, template.MedicationPrescriptionLines[0].NappiCode);\r\n break;\r\n case util.getType(type.DIAGNOSIS):\r\n this.trackItem(eventName + 'Diagnosis', data, template.EncounterLineItems.EncounterHeader.Diagnosis[0].DiagnosisCode);\r\n break;\r\n }\r\n };\r\n Service.prototype.parseMedicalCertificateDiagnosis = function (description) {\r\n var diagnosis = description.replace(/\\s+/g, \"\").replace(\"MedicalCertificate:\", \"\");\r\n return diagnosis;\r\n };\r\n Service.prototype.trackEvent = function (eventName, data) {\r\n var practice = this.storageService.getPractice();\r\n data.BillingPracticeNumber = practice.billingPrNo;\r\n data.TreatingPracticeNumber = practice.treatingPrNo;\r\n this.appInsights.trackEvent(eventName, data);\r\n };\r\n Service.prototype.trackItem = function (eventName, data, code) {\r\n data.ItemCode = code;\r\n this.trackEvent(eventName, data);\r\n };\r\n Service.prototype.getUserName = function () {\r\n return this.storageService.getUser().name;\r\n };\r\n Service.prototype.getPracticeId = function () {\r\n return this.storageService.getPracticeId();\r\n };\r\n return Service;\r\n })();\r\n TrackingModule.Service = Service;\r\n})(TrackingModule || (TrackingModule = {}));\r\nangular.module('DoctorApp')\r\n .service('trackingService', TrackingModule.Service);\r\n/// \r\n/// \r\n/// \r\nvar ModalModule;\r\n(function (ModalModule) {\r\n (function (ModalHeight) {\r\n ModalHeight[ModalHeight[\"_300px\"] = 0] = \"_300px\";\r\n ModalHeight[ModalHeight[\"_400px\"] = 1] = \"_400px\";\r\n ModalHeight[ModalHeight[\"_430px\"] = 2] = \"_430px\";\r\n ModalHeight[ModalHeight[\"_500px\"] = 3] = \"_500px\";\r\n ModalHeight[ModalHeight[\"_600px\"] = 4] = \"_600px\";\r\n ModalHeight[ModalHeight[\"_700px\"] = 5] = \"_700px\";\r\n ModalHeight[ModalHeight[\"_800px\"] = 6] = \"_800px\";\r\n })(ModalModule.ModalHeight || (ModalModule.ModalHeight = {}));\r\n var ModalHeight = ModalModule.ModalHeight;\r\n (function (ModalWidth) {\r\n ModalWidth[ModalWidth[\"_100px\"] = 0] = \"_100px\";\r\n ModalWidth[ModalWidth[\"_125px\"] = 1] = \"_125px\";\r\n ModalWidth[ModalWidth[\"_150px\"] = 2] = \"_150px\";\r\n ModalWidth[ModalWidth[\"_175px\"] = 3] = \"_175px\";\r\n ModalWidth[ModalWidth[\"_200px\"] = 4] = \"_200px\";\r\n ModalWidth[ModalWidth[\"_225px\"] = 5] = \"_225px\";\r\n ModalWidth[ModalWidth[\"_250px\"] = 6] = \"_250px\";\r\n ModalWidth[ModalWidth[\"_275px\"] = 7] = \"_275px\";\r\n ModalWidth[ModalWidth[\"_300px\"] = 8] = \"_300px\";\r\n ModalWidth[ModalWidth[\"_325px\"] = 9] = \"_325px\";\r\n ModalWidth[ModalWidth[\"_350px\"] = 10] = \"_350px\";\r\n ModalWidth[ModalWidth[\"_375px\"] = 11] = \"_375px\";\r\n ModalWidth[ModalWidth[\"_400px\"] = 12] = \"_400px\";\r\n ModalWidth[ModalWidth[\"_425px\"] = 13] = \"_425px\";\r\n ModalWidth[ModalWidth[\"_450px\"] = 14] = \"_450px\";\r\n ModalWidth[ModalWidth[\"_475px\"] = 15] = \"_475px\";\r\n ModalWidth[ModalWidth[\"_500px\"] = 16] = \"_500px\";\r\n ModalWidth[ModalWidth[\"_525px\"] = 17] = \"_525px\";\r\n ModalWidth[ModalWidth[\"_550px\"] = 18] = \"_550px\";\r\n ModalWidth[ModalWidth[\"_575px\"] = 19] = \"_575px\";\r\n ModalWidth[ModalWidth[\"_600px\"] = 20] = \"_600px\";\r\n ModalWidth[ModalWidth[\"_625px\"] = 21] = \"_625px\";\r\n ModalWidth[ModalWidth[\"_650px\"] = 22] = \"_650px\";\r\n ModalWidth[ModalWidth[\"_675px\"] = 23] = \"_675px\";\r\n ModalWidth[ModalWidth[\"_700px\"] = 24] = \"_700px\";\r\n ModalWidth[ModalWidth[\"_725px\"] = 25] = \"_725px\";\r\n ModalWidth[ModalWidth[\"_750px\"] = 26] = \"_750px\";\r\n ModalWidth[ModalWidth[\"_775px\"] = 27] = \"_775px\";\r\n ModalWidth[ModalWidth[\"_800px\"] = 28] = \"_800px\";\r\n ModalWidth[ModalWidth[\"_825px\"] = 29] = \"_825px\";\r\n ModalWidth[ModalWidth[\"_850px\"] = 30] = \"_850px\";\r\n ModalWidth[ModalWidth[\"_875px\"] = 31] = \"_875px\";\r\n ModalWidth[ModalWidth[\"_900px\"] = 32] = \"_900px\";\r\n ModalWidth[ModalWidth[\"_925px\"] = 33] = \"_925px\";\r\n ModalWidth[ModalWidth[\"_950px\"] = 34] = \"_950px\";\r\n ModalWidth[ModalWidth[\"_975px\"] = 35] = \"_975px\";\r\n ModalWidth[ModalWidth[\"_1000px\"] = 36] = \"_1000px\";\r\n ModalWidth[ModalWidth[\"_1025px\"] = 37] = \"_1025px\";\r\n ModalWidth[ModalWidth[\"_1050px\"] = 38] = \"_1050px\";\r\n ModalWidth[ModalWidth[\"_1075px\"] = 39] = \"_1075px\";\r\n ModalWidth[ModalWidth[\"_1100px\"] = 40] = \"_1100px\";\r\n ModalWidth[ModalWidth[\"_1125px\"] = 41] = \"_1125px\";\r\n ModalWidth[ModalWidth[\"_1150px\"] = 42] = \"_1150px\";\r\n ModalWidth[ModalWidth[\"_1175px\"] = 43] = \"_1175px\";\r\n ModalWidth[ModalWidth[\"_1200px\"] = 44] = \"_1200px\";\r\n })(ModalModule.ModalWidth || (ModalModule.ModalWidth = {}));\r\n var ModalWidth = ModalModule.ModalWidth;\r\n var Controller = (function () {\r\n function Controller(model, config) {\r\n this.model = model;\r\n this.config = config;\r\n }\r\n return Controller;\r\n })();\r\n ModalModule.Controller = Controller;\r\n var Config = (function () {\r\n function Config(title, url, pdf) {\r\n this.title = title;\r\n this.url = url;\r\n this.pdf = pdf;\r\n }\r\n return Config;\r\n })();\r\n ModalModule.Config = Config;\r\n var Service = (function () {\r\n Service.$inject = [\"$modal\", \"$templateCache\"];\r\n function Service($modal, $templateCache) {\r\n \"ngInject\";\r\n this.$modal = $modal;\r\n this.$templateCache = $templateCache;\r\n this.cacheParam = \"?ver=@@clientVersion\";\r\n }\r\n Service.prototype.warning = function (message, width) {\r\n var templateUrl = \"screens/components/modal/dialog/warning-dialog.html\" + this.cacheParam;\r\n var instruction = {\r\n size: \"sm\",\r\n backdrop: \"static\",\r\n templateUrl: templateUrl,\r\n controller: \"ModalController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n message: message\r\n };\r\n }\r\n }\r\n };\r\n if (width) {\r\n delete instruction.size;\r\n instruction.windowClass = ModalView.getModalWidthClass(width);\r\n }\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.confirm = function (message, width, hasClose, labels) {\r\n var templateUrl = \"screens/components/modal/dialog/confirm-dialog.html\" + this.cacheParam;\r\n var instruction = {\r\n size: \"sm\",\r\n backdrop: \"static\",\r\n templateUrl: templateUrl,\r\n controller: \"ModalController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n message: message,\r\n labels: labels,\r\n hasClose: hasClose\r\n };\r\n }\r\n }\r\n };\r\n if (width) {\r\n delete instruction.size;\r\n instruction.windowClass = ModalView.getModalWidthClass(width);\r\n }\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.leaveEncounterConfirm = function () {\r\n var templateUrl = 'screens/consultation/modal/dialog/leave-confirmation.html' + this.cacheParam;\r\n var instruction = {\r\n backdrop: 'static',\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._450px),\r\n templateUrl: templateUrl,\r\n controller: 'ModalController',\r\n resolve: {\r\n model: function () { }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.info = function (message, width) {\r\n var templateUrl = 'screens/components/modal/dialog/info-dialog.html' + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n size: \"sm\",\r\n templateUrl: templateUrl,\r\n controller: \"ModalController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n message: message\r\n };\r\n }\r\n }\r\n };\r\n if (width) {\r\n delete instruction.size;\r\n instruction.windowClass = ModalView.getModalWidthClass(width);\r\n }\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.error = function (message, width) {\r\n var template = '

Note

{{model.message}}

';\r\n var instruction = {\r\n backdrop: \"static\",\r\n size: \"sm\",\r\n template: template,\r\n controller: \"ModalController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n message: message\r\n };\r\n }\r\n }\r\n };\r\n if (width) {\r\n delete instruction.size;\r\n instruction.windowClass = ModalView.getModalWidthClass(width);\r\n }\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.cellPhone = function () {\r\n var templateUrl = \"screens/components/modal/dialog/cell-phone.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: \"cellphone-modal-window\",\r\n templateUrl: templateUrl,\r\n controller: \"CellPhoneController\",\r\n resolve: {\r\n model: function () {\r\n return {};\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.openNumbers = function (type, title, config, number, useZerro) {\r\n var templateUrl = \"screens/components/modal/dialog/numbers.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: \"numbers-modal-window\",\r\n templateUrl: templateUrl,\r\n controller: \"NumbersController\",\r\n resolve: {\r\n controller: function () {\r\n var model = { type: type, title: title, useZerro: useZerro };\r\n if (number) {\r\n angular.extend(model, { number: number });\r\n }\r\n return model;\r\n }\r\n }\r\n };\r\n if (config) {\r\n angular.extend({}, instruction, config);\r\n }\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.openDetailsItem = function (model, type, validateOptions, settings) {\r\n var config = this.getConfigForEventType(type);\r\n config.validateOptions = validateOptions;\r\n return this.openDetails(model, config, settings);\r\n };\r\n Service.prototype.openPrescriptionHistory = function (model) {\r\n var templateUrl = \"screens/consultation/modal/dialog/prescription-history.html\" + this.cacheParam;\r\n var config = new Config(\"Previously Prescribed\", templateUrl);\r\n return this.openDetails(model, config);\r\n };\r\n Service.prototype.openSupportingProvider = function (model, provider, type) {\r\n var templateUrl = \"screens/consultation/modal/dialog/supporting-provider.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._600px),\r\n templateUrl: templateUrl,\r\n controller: \"SupportingProviderController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n providers: model,\r\n provider: provider,\r\n type: type\r\n };\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.openSpecificRuleWarn = function (message, refreshPrice, width) {\r\n var templateUrl = \"screens/consultation/modal/dialog/specificrules-warning.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n size: \"sm\",\r\n templateUrl: templateUrl,\r\n controller: \"SpecificRuleWarningController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n message: message,\r\n refreshPrice: refreshPrice\r\n };\r\n }\r\n }\r\n };\r\n if (width) {\r\n delete instruction.size;\r\n instruction.windowClass = ModalView.getModalWidthClass(width);\r\n }\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.openSubTemplates = function (subGroup, setTemplate) {\r\n var templateUrl = \"screens/components/modal/dialog/sub-templates.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._800px),\r\n templateUrl: templateUrl,\r\n controller: \"ModalController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n subgroup: subGroup,\r\n setTemplate: setTemplate\r\n };\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.getReportPatients = function (patients, reportId) {\r\n var templateUrl = \"screens/clinical-report/modal/dialog/report-patient.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._600px),\r\n templateUrl: templateUrl,\r\n controller: \"ReportPatientController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n patients: patients,\r\n reportId: reportId\r\n };\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.openLetterEditor = function (communication, communicationTemplateBody) {\r\n var templateUrl = \"screens/consultation/modal/dialog/letter-editor.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._800px),\r\n templateUrl: templateUrl,\r\n controller: \"LetterEditorController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n communication: communication,\r\n templateBody: communicationTemplateBody\r\n };\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.openCommunicationTemplates = function (templates) {\r\n var templateUrl = \"screens/consultation/modal/dialog/communication-templates.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._700px),\r\n templateUrl: templateUrl,\r\n controller: \"CommunicationTemplatesController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n templates: templates\r\n };\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.openLetterTemplates = function (templates) {\r\n var templateUrl = \"screens/consultation/modal/dialog/letter-templates.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._700px),\r\n templateUrl: templateUrl,\r\n controller: \"RefferalTemplatesController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n templates: templates\r\n };\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.openAddressBookSearch = function () {\r\n var templateUrl = \"screens/address-book/modal/dialog/address-book.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._700px),\r\n templateUrl: templateUrl,\r\n controller: \"ClinicalAddressBookSearchController\"\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.showReportDialog = function (type, bodies, pdfFunction, patientId) {\r\n var wrapper = \"screens/components/modal/dialog/reports.html\";\r\n var config = this.getConfigUrlForReportType(type);\r\n var model = {\r\n type: type,\r\n templateBodies: bodies,\r\n pdfListener: pdfFunction,\r\n patientId: patientId\r\n };\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._750px),\r\n templateUrl: wrapper,\r\n controller: \"ModalInstanceController\",\r\n resolve: {\r\n controller: function () {\r\n return new Controller(model, config);\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.showCaptureHealthDocDialog = function (url, title) {\r\n var wrapper = \"screens/components/modal/dialog/capture-healthdoc.html\";\r\n var config = new Config(title, url);\r\n var model = {\r\n captureHealthDoc: true\r\n };\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: \"responsive-modal \" + ModalView.getModalHeightClass(ModalHeight._800px),\r\n templateUrl: wrapper,\r\n controller: \"ModalInstanceController\",\r\n resolve: {\r\n controller: function () {\r\n return new Controller(model, config);\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.showReceiptDialog = function (title, body) {\r\n var wrapper = \"screens/components/modal/dialog/reports.html\";\r\n var template = \"screens/components/modal/dialog/receipt-dialog.html\";\r\n var model = {\r\n receipt: {\r\n title: title,\r\n body: body\r\n }\r\n };\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._325px),\r\n templateUrl: wrapper,\r\n controller: \"ModalInstanceController\",\r\n resolve: {\r\n controller: function () {\r\n return new Controller(model, new Config(\"Receipt\", template));\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.showInviteDoctorDialog = function () {\r\n var templateUrl = \"screens/user-account/modal/dialog/invite-doctor.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._600px),\r\n templateUrl: templateUrl,\r\n controller: \"InviteDoctorController\",\r\n resolve: {\r\n model: function () {\r\n return {};\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.showMedicalInsuranceDetails = function (encounter) {\r\n var templateUrl = \"screens/consultation/modal/dialog/medical-insurance-details.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._700px),\r\n templateUrl: templateUrl,\r\n controller: \"MedicalInsuranceController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n encounter: encounter\r\n };\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.showConditionsDetails = function () {\r\n var templateUrl = \"screens/patient-medical-history/modal/dialog/conditions.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._750px),\r\n templateUrl: templateUrl,\r\n controller: \"ConditionsController\",\r\n resolve: {\r\n model: function () {\r\n return {};\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.showNotification = function (notification) {\r\n var templateUrl = \"screens/components/modal/dialog/notification.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"true\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._650px),\r\n templateUrl: templateUrl,\r\n controller: \"NotificationController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n notification: notification\r\n };\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.sendReportByEmail = function (patient, provider, attachments, emailSubject, showWarning) {\r\n if (showWarning === void 0) { showWarning = true; }\r\n var templateUrl = \"screens/consultation/modal/dialog/email-report.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._600px),\r\n templateUrl: templateUrl,\r\n controller: \"EmailReportController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n patient: patient,\r\n provider: provider,\r\n showWarning: showWarning,\r\n emailSubject: emailSubject,\r\n attachments: attachments\r\n };\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.showSummaryOfCare = function () {\r\n var templateUrl = \"screens/consultation/modal/dialog/summary-of-care.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._800px),\r\n templateUrl: templateUrl,\r\n controller: \"SummaryOFCareController\",\r\n resolve: {\r\n model: function () {\r\n return {};\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.showModifierDetails = function (encounter, modifier, assistingDoctor, noEdit) {\r\n var templateUrl = \"screens/consultation/modifiers/modal/dialog/modifier-details.html\" + this.cacheParam;\r\n var instruction = {\r\n backdrop: \"static\",\r\n windowClass: ModalView.getModalWidthClass(ModalWidth._800px),\r\n templateUrl: templateUrl,\r\n controller: \"ModifierController\",\r\n resolve: {\r\n model: function () {\r\n return {\r\n encounter: encounter,\r\n modifier: modifier,\r\n assistingDoctor: assistingDoctor,\r\n noEdit: noEdit\r\n };\r\n }\r\n }\r\n };\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.getConfigUrlForReportType = function (type) {\r\n switch (type) {\r\n case EncounterModule.ReportType.All:\r\n return new Config(\"Medical certificate and prescription reports\");\r\n case EncounterModule.ReportType.Prescription:\r\n return new Config(\"Prescription report\");\r\n case EncounterModule.ReportType.MedicalCertificate:\r\n return new Config(\"Medical certificate report\");\r\n case EncounterModule.ReportType.Communication:\r\n return new Config(\"Referral report\");\r\n }\r\n };\r\n Service.prototype.getConfigForEventType = function (type) {\r\n var mainPath = \"screens/consultation/modal/dialog/\";\r\n switch (type) {\r\n case EventType.PROCEDURE:\r\n return new Config(\"Procedure details\", mainPath + \"procedure-details.html\" + this.cacheParam);\r\n case EventType.MEDICINE:\r\n return new Config(\"Medicine details\", mainPath + \"medicine-details.html\" + this.cacheParam);\r\n case EventType.CONSUMABLE:\r\n return new Config(\"Consumable details\", mainPath + \"consumable-details.html\" + this.cacheParam);\r\n case EventType.PRESCRIPTION:\r\n return new Config(\"Prescription details\", mainPath + \"prescription-details.html\" + this.cacheParam);\r\n default:\r\n var name = EventTypeUtil.getNameByType(type);\r\n throw new Error(\"For \" + name + \" type window not found\");\r\n }\r\n };\r\n Service.prototype.openDetails = function (model, config, settings) {\r\n var wrapper = \"screens/components/modal/dialog/details.html\" + this.cacheParam;\r\n return this.openModalWindow(model, config, wrapper, settings);\r\n };\r\n Service.prototype.openDialog = function (dataObject, controller, config, settings) {\r\n var instruction = {\r\n backdrop: \"static\",\r\n size: \"md\",\r\n templateUrl: config.url,\r\n controller: controller,\r\n resolve: {\r\n model: function () {\r\n return dataObject;\r\n }\r\n }\r\n };\r\n if (settings) {\r\n angular.extend({}, instruction, settings);\r\n }\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n Service.prototype.openModalWindow = function (model, config, wrapper, settings) {\r\n model = angular.copy(model);\r\n var instruction = {\r\n backdrop: \"static\",\r\n templateUrl: wrapper,\r\n controller: \"ModalInstanceController\",\r\n resolve: {\r\n controller: function () {\r\n return new Controller(model, config);\r\n }\r\n }\r\n };\r\n if (settings) {\r\n instruction = angular.extend({}, instruction, settings);\r\n }\r\n var modalInstance = this.$modal.open(instruction);\r\n return modalInstance.result;\r\n };\r\n return Service;\r\n })();\r\n ModalModule.Service = Service;\r\n var ModalView = (function () {\r\n function ModalView() {\r\n }\r\n ModalView.getModalHeightClass = function (height) {\r\n var classHeight;\r\n switch (height) {\r\n case ModalHeight._300px:\r\n classHeight = \"custom-modal-body-height-300\";\r\n break;\r\n case ModalHeight._400px:\r\n classHeight = \"custom-modal-body-height-400\";\r\n break;\r\n case ModalHeight._430px:\r\n classHeight = \"custom-modal-body-height-430\";\r\n break;\r\n case ModalHeight._500px:\r\n classHeight = \"custom-modal-body-height-500\";\r\n break;\r\n case ModalHeight._600px:\r\n classHeight = \"custom-modal-body-height-600\";\r\n break;\r\n case ModalHeight._700px:\r\n classHeight = \"custom-modal-body-height-700\";\r\n break;\r\n case ModalHeight._800px:\r\n classHeight = \"custom-modal-body-height-800\";\r\n break;\r\n }\r\n return classHeight;\r\n };\r\n ModalView.getModalWidthClass = function (width) {\r\n var classWidth;\r\n switch (width) {\r\n case ModalWidth._100px:\r\n classWidth = \"custom-modal-width-100\";\r\n break;\r\n case ModalWidth._125px:\r\n classWidth = \"custom-modal-width-125\";\r\n break;\r\n case ModalWidth._150px:\r\n classWidth = \"custom-modal-width-150\";\r\n break;\r\n case ModalWidth._175px:\r\n classWidth = \"custom-modal-width-175\";\r\n break;\r\n case ModalWidth._200px:\r\n classWidth = \"custom-modal-width-200\";\r\n break;\r\n case ModalWidth._225px:\r\n classWidth = \"custom-modal-width-225\";\r\n break;\r\n case ModalWidth._250px:\r\n classWidth = \"custom-modal-width-250\";\r\n break;\r\n case ModalWidth._275px:\r\n classWidth = \"custom-modal-width-275\";\r\n break;\r\n case ModalWidth._300px:\r\n classWidth = \"custom-modal-width-300\";\r\n break;\r\n case ModalWidth._325px:\r\n classWidth = \"custom-modal-width-325\";\r\n break;\r\n case ModalWidth._350px:\r\n classWidth = \"custom-modal-width-350\";\r\n break;\r\n case ModalWidth._375px:\r\n classWidth = \"custom-modal-width-375\";\r\n break;\r\n case ModalWidth._400px:\r\n classWidth = \"custom-modal-width-400\";\r\n break;\r\n case ModalWidth._425px:\r\n classWidth = \"custom-modal-width-425\";\r\n break;\r\n case ModalWidth._450px:\r\n classWidth = \"custom-modal-width-450\";\r\n break;\r\n case ModalWidth._475px:\r\n classWidth = \"custom-modal-width-475\";\r\n break;\r\n case ModalWidth._500px:\r\n classWidth = \"custom-modal-width-500\";\r\n break;\r\n case ModalWidth._525px:\r\n classWidth = \"custom-modal-width-525\";\r\n break;\r\n case ModalWidth._550px:\r\n classWidth = \"custom-modal-width-550\";\r\n break;\r\n case ModalWidth._575px:\r\n classWidth = \"custom-modal-width-575\";\r\n break;\r\n case ModalWidth._600px:\r\n classWidth = \"custom-modal-width-600\";\r\n break;\r\n case ModalWidth._625px:\r\n classWidth = \"custom-modal-width-625\";\r\n break;\r\n case ModalWidth._650px:\r\n classWidth = \"custom-modal-width-650\";\r\n break;\r\n case ModalWidth._675px:\r\n classWidth = \"custom-modal-width-675\";\r\n break;\r\n case ModalWidth._700px:\r\n classWidth = \"custom-modal-width-700\";\r\n break;\r\n case ModalWidth._725px:\r\n classWidth = \"custom-modal-width-725\";\r\n break;\r\n case ModalWidth._750px:\r\n classWidth = \"custom-modal-width-750\";\r\n break;\r\n case ModalWidth._775px:\r\n classWidth = \"custom-modal-width-775\";\r\n break;\r\n case ModalWidth._800px:\r\n classWidth = \"custom-modal-width-800\";\r\n break;\r\n case ModalWidth._825px:\r\n classWidth = \"custom-modal-width-825\";\r\n break;\r\n case ModalWidth._850px:\r\n classWidth = \"custom-modal-width-850\";\r\n break;\r\n case ModalWidth._875px:\r\n classWidth = \"custom-modal-width-875\";\r\n break;\r\n case ModalWidth._900px:\r\n classWidth = \"custom-modal-width-900\";\r\n break;\r\n case ModalWidth._925px:\r\n classWidth = \"custom-modal-width-925\";\r\n break;\r\n case ModalWidth._950px:\r\n classWidth = \"custom-modal-width-950\";\r\n break;\r\n case ModalWidth._975px:\r\n classWidth = \"custom-modal-width-975\";\r\n break;\r\n case ModalWidth._1000px:\r\n classWidth = \"custom-modal-width-1000\";\r\n break;\r\n case ModalWidth._1025px:\r\n classWidth = \"custom-modal-width-1025\";\r\n break;\r\n case ModalWidth._1050px:\r\n classWidth = \"custom-modal-width-1050\";\r\n break;\r\n case ModalWidth._1075px:\r\n classWidth = \"custom-modal-width-1075\";\r\n break;\r\n case ModalWidth._1100px:\r\n classWidth = \"custom-modal-width-1100\";\r\n break;\r\n case ModalWidth._1125px:\r\n classWidth = \"custom-modal-width-1125\";\r\n break;\r\n case ModalWidth._1150px:\r\n classWidth = \"custom-modal-width-1150\";\r\n break;\r\n case ModalWidth._1175px:\r\n classWidth = \"custom-modal-width-1175\";\r\n break;\r\n case ModalWidth._1200px:\r\n classWidth = \"custom-modal-width-1200\";\r\n break;\r\n }\r\n return classWidth;\r\n };\r\n return ModalView;\r\n })();\r\n ModalModule.ModalView = ModalView;\r\n})(ModalModule || (ModalModule = {}));\r\nangular.module(\"DoctorApp\")\r\n .service(\"modalService\", ModalModule.Service);\r\n/// \r\n/// \r\nvar ConsultationReportModule;\r\n(function (ConsultationReportModule) {\r\n var ConsultationReport = (function () {\r\n function ConsultationReport(type, reportBody) {\r\n this.type = type;\r\n this.reportBody = reportBody;\r\n }\r\n return ConsultationReport;\r\n })();\r\n ConsultationReportModule.ConsultationReport = ConsultationReport;\r\n var Service = (function () {\r\n Service.$inject = [\"encounterServiceNew\", \"modalService\", \"$q\", \"clinicalDomain\", \"locationService\", \"patientService\", \"billingDomain\", \"dashboardService\", \"$location\", \"$window\"];\r\n function Service(encounterServiceNew, modalService, $q, clinicalDomain, locationService, patientService, billingDomain, dashboardService, $location, $window) {\r\n \"ngInject\";\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.modalService = modalService;\r\n this.$q = $q;\r\n this.clinicalDomain = clinicalDomain;\r\n this.locationService = locationService;\r\n this.patientService = patientService;\r\n this.billingDomain = billingDomain;\r\n this.dashboardService = dashboardService;\r\n this.$location = $location;\r\n this.$window = $window;\r\n }\r\n Service.prototype.isNext = function (type) {\r\n var reports = this.encounterServiceNew.isAnyConsultationReport();\r\n return reports.length > 0 && reports.indexOf(type) < reports.length - 1;\r\n };\r\n Service.prototype.changeScreen = function (practiceId, patientId, way, currentReportType) {\r\n var encounter = this.encounterServiceNew.getEncounter();\r\n var reports = this.encounterServiceNew.isAnyConsultationReport();\r\n if (way === Service.NEXT) {\r\n if (reports.indexOf(currentReportType) + 1 < reports.length) {\r\n this.locationService.goToConsultationReport(practiceId, patientId, reports[reports.indexOf(currentReportType) + 1]);\r\n }\r\n else {\r\n this.encounterServiceNew.submitEncounter(practiceId, encounter);\r\n }\r\n }\r\n else if (way === Service.PREW) {\r\n this.$window.history.back();\r\n }\r\n };\r\n Service.prototype.getReportBody = function (type, practiceId) {\r\n var that = this;\r\n var encounter = this.encounterServiceNew.getEncounter();\r\n if (!encounter) {\r\n return this.$q.reject();\r\n }\r\n if (type === EncounterModule.ReportType.MedicalCertificate) {\r\n return this.clinicalDomain.getMedicacalSertificate(practiceId, encounter)\r\n .then(function (response) {\r\n return that.locationService.setAbsoluteServerUrl(response.Data);\r\n });\r\n }\r\n else if (type === EncounterModule.ReportType.Prescription) {\r\n return this.clinicalDomain.getPrescriptionReport(practiceId, encounter)\r\n .then(function (response) {\r\n return that.locationService.setAbsoluteServerUrl(response.Data);\r\n });\r\n }\r\n return this.$q.reject();\r\n };\r\n Service.prototype.sendReportByEmail = function (practiceId, patientId, attachment) {\r\n var _this = this;\r\n var that = this;\r\n this.$q.all([\r\n that.patientService.getPatientById(practiceId, patientId),\r\n that.billingDomain.getProvider(practiceId)\r\n ])\r\n .then(function (response) {\r\n var patient = response[0];\r\n var provider = response[1];\r\n _this.modalService.sendReportByEmail(patient, provider, attachment, \"Documents from \" + provider.PracticeName);\r\n });\r\n };\r\n Service.prototype.openPdf = function (practiceId, report) {\r\n var newWindow = this.$window.open('about:blank', \"_blank\");\r\n this.dashboardService.reportLinkFromHtmlToPdf(practiceId, report).then(function (link) {\r\n newWindow.location.href = link;\r\n });\r\n };\r\n Service.prototype.getReportStringType = function (reportType) {\r\n if (reportType === EncounterModule.ReportType.MedicalCertificate) {\r\n return \"Medical Certificate\";\r\n }\r\n if (reportType === EncounterModule.ReportType.Prescription) {\r\n return \"Prescription\";\r\n }\r\n return \"\";\r\n };\r\n Service.PREW = \"prew\";\r\n Service.NEXT = \"next\";\r\n return Service;\r\n })();\r\n ConsultationReportModule.Service = Service;\r\n})(ConsultationReportModule || (ConsultationReportModule = {}));\r\nangular.module(\"DoctorApp\")\r\n .service(\"consultationReportService\", ConsultationReportModule.Service);\r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var Tenant;\r\n (function (Tenant) {\r\n var TenantVo = (function () {\r\n function TenantVo() {\r\n }\r\n return TenantVo;\r\n })();\r\n Tenant.TenantVo = TenantVo;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\"];\r\n function Service(httpService) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n }\r\n Service.prototype.getTenantList = function () {\r\n return this.httpService.get(this.getUrl());\r\n };\r\n Service.prototype.getTenant = function (tenantId) {\r\n return this.httpService.get(this.getUrl() + tenantId);\r\n };\r\n Service.prototype.createTenant = function (tenant) {\r\n var tenantRequest = new TenantRequest(tenant);\r\n return this.httpService.post(this.getUrl(), tenantRequest);\r\n };\r\n Service.prototype.updateTenant = function (tenant) {\r\n var tenantRequest = new TenantRequest(tenant);\r\n return this.httpService.post(this.getUrl() + tenant.TenantId, tenantRequest);\r\n };\r\n Service.prototype.deleteTenant = function (tenantId) {\r\n return this.httpService.remove(this.getUrl() + tenantId);\r\n };\r\n Service.prototype.getUrl = function () {\r\n return 'v1/infrastructure/tenant/';\r\n };\r\n return Service;\r\n })();\r\n Tenant.Service = Service;\r\n var TenantRequest = (function () {\r\n function TenantRequest(tenant) {\r\n this.TenantVo = tenant;\r\n }\r\n return TenantRequest;\r\n })();\r\n })(Tenant = Domain.Tenant || (Domain.Tenant = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('tenantDomainService', Domain.Tenant.Service);\r\n/// \r\n/// \r\n/// \r\nvar DashboardModule;\r\n(function (DashboardModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"tenantDomainService\", \"authService\", \"clinicalDomain\", \"moment\", \"providerService\", \"$http\", \"patientDomain\", \"storageService\", \"patientEventDomain\"];\r\n function Service(httpService, tenantDomainService, authService, clinicalDomain, moment, providerService, $http, patientDomain, storageService, patientEventDomain) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.tenantDomainService = tenantDomainService;\r\n this.authService = authService;\r\n this.clinicalDomain = clinicalDomain;\r\n this.moment = moment;\r\n this.providerService = providerService;\r\n this.$http = $http;\r\n this.patientDomain = patientDomain;\r\n this.storageService = storageService;\r\n this.patientEventDomain = patientEventDomain;\r\n }\r\n Service.prototype.getTenants = function () {\r\n return this.tenantDomainService.getTenantList()\r\n .then(function (response) {\r\n if (response) {\r\n return response;\r\n }\r\n return [];\r\n });\r\n };\r\n Service.prototype.getEncounter = function (practiceId, encounterId) {\r\n return this.clinicalDomain.getEncounter(practiceId, encounterId);\r\n };\r\n Service.prototype.getEncounterCommunicationBody = function (practiceId, templateId) {\r\n return this.clinicalDomain\r\n .getEncounterCommunicationBody(practiceId, '00000000-0000-0000-0000-000000000000', templateId);\r\n };\r\n Service.prototype.getPrescriptionReport = function (practiceId, encounter) {\r\n return this.clinicalDomain.getPrescriptionReport(practiceId, encounter);\r\n };\r\n Service.prototype.getPrescriptionReportPdf = function (practiceId, encounter) {\r\n return this.clinicalDomain.getPrescriptionReport(practiceId, encounter, \"pdf\");\r\n };\r\n Service.prototype.reportFromHtmlToPdf = function (html) {\r\n return this.httpService.post(\"v1/report/htmltopdf\", JSON.stringify(html), { responseType: 'blob' });\r\n };\r\n Service.prototype.reportLinkFromHtmlToPdf = function (practiceId, html) {\r\n var _this = this;\r\n return this.httpService.post(\"v1/report/savehtmltopdf\", JSON.stringify(html))\r\n .then(function (response) {\r\n return _this.getDocumentUrl(practiceId, response.Data);\r\n });\r\n };\r\n Service.prototype.getMedicalCertificateReport = function (practiceId, encounter) {\r\n return this.clinicalDomain.getMedicacalSertificate(practiceId, encounter);\r\n };\r\n Service.prototype.getMedicalCertificateReportPdf = function (practiceId, encounter) {\r\n return this.clinicalDomain.getMedicacalSertificate(practiceId, encounter, \"pdf\");\r\n };\r\n Service.prototype.getPatientDashboard = function (practiceId, patientId) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/patientdashboards/\" + patientId);\r\n };\r\n Service.prototype.getActiveVisit = function (practiceId, patientId) {\r\n return this.patientEventDomain.getPatientEventByPatientId(practiceId, patientId);\r\n };\r\n Service.prototype.getPatientDashboardHeader = function (practiceId, patientId) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/patientdashboards/\" + patientId + \"/header\");\r\n };\r\n Service.prototype.getHealthDocToken = function (practiceId) {\r\n return this.httpService.get(\"v1/infrastructure/\" + practiceId + \"/tokenproviders\");\r\n };\r\n Service.prototype.addToWaitingRoom = function (practiceId, patientId) {\r\n return this.patientDomain.addToWaitingRoom(practiceId, patientId);\r\n };\r\n Service.prototype.captureEncounter = function (practiceId, patientId) {\r\n return this.patientDomain.captureEncounter(practiceId, patientId);\r\n };\r\n Service.prototype.getPatientFamilyMembers = function (practiceId, patientId) {\r\n return this.patientDomain.getFamilyMembers(practiceId, patientId);\r\n };\r\n Service.prototype.loadPatientFiles = function (practiceId, patientId) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/patientdocument/\" + patientId);\r\n };\r\n Service.prototype.getQuoteReport = function (practiceId, patientId) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/patient/\" + patientId + \"/quote/pdf\", { responseType: 'blob' });\r\n };\r\n Service.prototype.getQuoteReportUrl = function (practiceId, patientId) {\r\n return GlobalVar.serverURL + \"v1/\" + practiceId + \"/clinical/patient/\" + patientId + \"/quote/pdf\";\r\n };\r\n Service.prototype.removeDocument = function (practiceId, documentId) {\r\n return this.httpService.remove(\"v1/\" + practiceId + \"/clinical/patientdocument/\" + documentId);\r\n };\r\n Service.prototype.getDocumentUrl = function (practiceId, fileUrl) {\r\n if (fileUrl && fileUrl.length > 0) {\r\n return GlobalVar.serverURL +\r\n \"v1/document?url=\" +\r\n fileUrl +\r\n \"&access_token=\" +\r\n this.storageService.getAuthorizationData().token +\r\n \"&practiceId=\" +\r\n practiceId;\r\n }\r\n else {\r\n return \"\";\r\n }\r\n };\r\n Service.prototype.getDocumentInfoById = function (practiceId, documentId) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/patientdocument/byId/\" + documentId);\r\n };\r\n Service.prototype.removeAvatarCache = function (practiceId, patientId) {\r\n this.httpService.resetCache('avatar-' + practiceId + ':' + patientId);\r\n };\r\n Service.prototype.getAvatar = function (practiceId, patientId) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/patientdocument/\" + patientId + '/avatar', { cache: 'avatar-' + practiceId + ':' + patientId });\r\n };\r\n Service.prototype.getAccountFinancialInfo = function (practiceId, patientId) {\r\n return this.httpService.get(\"support/\" + practiceId + \"/patient/\" + patientId + '/account/info');\r\n };\r\n Service.prototype.loadExternalData = function (practiceId, patientId) {\r\n return this.httpService.post(\"support/\" + practiceId + \"/patient/\" + patientId + '/externaldata/load');\r\n };\r\n return Service;\r\n })();\r\n DashboardModule.Service = Service;\r\n})(DashboardModule || (DashboardModule = {}));\r\nangular.module('DoctorApp')\r\n .service('dashboardService', DashboardModule.Service);\r\n/// \r\n/// \r\n/// \r\nvar SearchModule;\r\n(function (SearchModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\"];\r\n function Service(httpService) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n }\r\n Service.prototype.encodeSearchText = function (text) {\r\n return encodeURIComponent(text).replace(/%/g, '!!!');\r\n };\r\n Service.prototype.getProcedures = function (practiceId, invoiceid, procedureSearchString) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/billing/invoices/\" + invoiceid + \"/lookupprocedure/\" + this.encodeSearchText(procedureSearchString));\r\n };\r\n Service.prototype.getDiagnoses = function (practiceId, invoiceid, diagnosesSearchString) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/billing/invoices/\" + invoiceid + \"/lookupdiagnosis/\" + this.encodeSearchText(diagnosesSearchString));\r\n };\r\n Service.prototype.getDiagnosesRanking = function (practiceId, invoiceid, diagnosesSearchString) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/billing/invoices/\" + invoiceid + \"/lookupdiagnosisranking/\" + this.encodeSearchText(diagnosesSearchString));\r\n };\r\n Service.prototype.getMedicine = function (practiceId, invoiceid, medicineSearchString) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/billing/invoices/\" + invoiceid + \"/lookupmedicine/\" + this.encodeSearchText(medicineSearchString));\r\n };\r\n Service.prototype.getConsumable = function (practiceId, invoiceid, consumableSearchString) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/billing/invoices/\" + invoiceid + \"/lookupconsumable/\" + this.encodeSearchText(consumableSearchString));\r\n };\r\n Service.prototype.getClinicalProcedures = function (practiceId, encounterid, procedureSearchString, dateOfService) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/encounters/\" + encounterid + \"/lookupprocedure/\" + this.encodeSearchText(procedureSearchString) + \"/dos/\" + dateOfService);\r\n };\r\n Service.prototype.getClinicalDiagnoses = function (practiceId, encounterid, diagnosesSearchString) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/encounters/\" + encounterid + \"/lookupdiagnosis/\" + this.encodeSearchText(diagnosesSearchString));\r\n };\r\n Service.prototype.getClinicalDiagnosesRanking = function (practiceId, encounterid, diagnosesSearchString) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/encounters/\" + encounterid + \"/lookupdiagnosisranking/\" + this.encodeSearchText(diagnosesSearchString));\r\n };\r\n Service.prototype.getClinicalMedicine = function (practiceId, encounterid, medicineSearchString) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/encounters/\" + encounterid + \"/lookupmedicine/\" + this.encodeSearchText(medicineSearchString));\r\n };\r\n Service.prototype.getClinicalConsumable = function (practiceId, encounterid, consumableSearchString) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/encounters/\" + encounterid + \"/lookupconsumable/\" + this.encodeSearchText(consumableSearchString));\r\n };\r\n Service.prototype.getClinicalPrescription = function (practiceId, encounterId, text) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/encounters/\" + encounterId + \"/lookupprescription/\" + this.encodeSearchText(text));\r\n };\r\n Service.prototype.getInsurerProcedures = function (practiceId, encounterId, insurerXref) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/encounters/\" + encounterId + '/lookupmedicalinsurerprocedure/' + insurerXref);\r\n };\r\n Service.prototype.getClinicalModifier = function (practiceId, encounterId, modifierSearchString) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/encounters/\" + encounterId + '/lookupmodifier/' + this.encodeSearchText(modifierSearchString));\r\n };\r\n Service.prototype.saveSelectedTemplate = function (template) {\r\n this.selectedTemplate = template;\r\n };\r\n Service.prototype.getSelectedTemplate = function () {\r\n return this.selectedTemplate;\r\n };\r\n return Service;\r\n })();\r\n SearchModule.Service = Service;\r\n})(SearchModule || (SearchModule = {}));\r\nangular.module('DoctorApp')\r\n .service('searchService', SearchModule.Service);\r\n/// \r\nvar DialogModule;\r\n(function (DialogModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"$rootScope\", \"$q\", \"$compile\", \"$templateCache\", \"$http\"];\r\n function Service($rootScope, $q, $compile, $templateCache, $http) {\r\n \"ngInject\";\r\n this.$rootScope = $rootScope;\r\n this.$q = $q;\r\n this.$compile = $compile;\r\n this.$templateCache = $templateCache;\r\n this.$http = $http;\r\n this.dialogs = {};\r\n }\r\n Service.prototype.open = function (id, template, model, options) {\r\n var _this = this;\r\n if (!angular.isDefined(id)) {\r\n throw \"dialogService requires id in call to open\";\r\n }\r\n if (!angular.isDefined(template)) {\r\n throw \"dialogService requires template in call to open\";\r\n }\r\n if (!angular.isDefined(model)) {\r\n model = null;\r\n }\r\n var dialogOptions = {};\r\n if (angular.isDefined(options)) {\r\n angular.extend(dialogOptions, options);\r\n }\r\n var dialog = { scope: null, ref: null, deferred: this.$q.defer() };\r\n this.loadTemplate(template)\r\n .then(function (dialogTemplate) {\r\n dialog.scope = _this.$rootScope.$new();\r\n dialog.scope.model = model;\r\n var dialogLinker = _this.$compile(dialogTemplate);\r\n dialog.ref = $(dialogLinker(dialog.scope));\r\n var customCloseFn = dialogOptions.close;\r\n dialogOptions.close = function (event, ui) {\r\n if (customCloseFn) {\r\n customCloseFn(event, ui);\r\n }\r\n _this.cleanup(id);\r\n };\r\n dialog.ref.dialog(dialogOptions);\r\n dialog.ref.dialog(\"open\");\r\n _this.dialogs[id] = dialog;\r\n }, function (error) {\r\n throw error;\r\n });\r\n return dialog.deferred.promise;\r\n };\r\n Service.prototype.close = function (id, result) {\r\n var dialog = this.getExistingDialog(id);\r\n dialog.deferred.resolve(result);\r\n dialog.ref.dialog(\"close\");\r\n };\r\n Service.prototype.cancel = function (id) {\r\n var dialog = this.getExistingDialog(id);\r\n dialog.deferred.reject();\r\n dialog.ref.dialog(\"close\");\r\n };\r\n Service.prototype.loadTemplate = function (template) {\r\n var _this = this;\r\n var deferred = this.$q.defer();\r\n var html = this.$templateCache.get(template);\r\n if (angular.isDefined(html)) {\r\n html = html.trim();\r\n deferred.resolve(html);\r\n }\r\n else {\r\n return this.$http.get(template, { cache: this.$templateCache })\r\n .then(function (response) {\r\n var html = response.data;\r\n if (!html || !html.length) {\r\n return _this.$q.reject(\"Template \" + template + \" was not found\");\r\n }\r\n html = html.trim();\r\n _this.$templateCache.put(template, html);\r\n return html;\r\n }, function () {\r\n return _this.$q.reject(\"Template \" + template + \" was not found\");\r\n });\r\n }\r\n return deferred.promise;\r\n };\r\n Service.prototype.cleanup = function (id) {\r\n var dialog = this.getExistingDialog(id);\r\n dialog.deferred.reject();\r\n dialog.scope.$destroy();\r\n dialog.ref.remove();\r\n delete this.dialogs[id];\r\n };\r\n Service.prototype.getExistingDialog = function (id) {\r\n var dialog = this.dialogs[id];\r\n if (!angular.isDefined(dialog)) {\r\n throw \"DialogService does not have a reference to dialog id \" + id;\r\n }\r\n return dialog;\r\n };\r\n return Service;\r\n })();\r\n DialogModule.Service = Service;\r\n})(DialogModule || (DialogModule = {}));\r\nangular.module('DoctorApp')\r\n .service('dialogService', DialogModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ShowDialogModule;\r\n(function (ShowDialogModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"modalService\"];\r\n function Service(modalService) {\r\n \"ngInject\";\r\n this.modalService = modalService;\r\n }\r\n Service.prototype.error = function (errorDetails, width) {\r\n return this.modalService.error(errorDetails, width);\r\n };\r\n Service.prototype.info = function (message, width) {\r\n return this.modalService.info(message, width);\r\n };\r\n Service.prototype.warning = function (message) {\r\n return this.showWarningDialog(message);\r\n };\r\n Service.prototype.cellPhone = function () {\r\n return this.modalService.cellPhone();\r\n };\r\n Service.prototype.showWarningDialog = function (info) {\r\n console.warn('Method is deprecated. [show-dialog.showWarningDialog()]');\r\n return this.modalService.warning(info);\r\n };\r\n Service.prototype.confirm = function (message, width, hasClose, labels) {\r\n return this.modalService.confirm(message, width, hasClose, labels);\r\n };\r\n return Service;\r\n })();\r\n ShowDialogModule.Service = Service;\r\n})(ShowDialogModule || (ShowDialogModule = {}));\r\nangular.module('DoctorApp')\r\n .service('showDialog', ShowDialogModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar TemplateModule;\r\n(function (TemplateModule) {\r\n var TemplatePanelController = (function () {\r\n TemplatePanelController.$inject = [\"$scope\", \"$filter\", \"$location\", \"templatePanelService\", \"searchService\", \"modalService\", \"$routeParams\"];\r\n function TemplatePanelController($scope, $filter, $location, templatePanelService, searchService, modalService, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$filter = $filter;\r\n this.$location = $location;\r\n this.templatePanelService = templatePanelService;\r\n this.searchService = searchService;\r\n this.modalService = modalService;\r\n this.$routeParams = $routeParams;\r\n $scope.groups = [];\r\n $scope.$watch('list', function () {\r\n $scope.groups = _this.buildGroups($scope.list);\r\n $scope.selectGroup($scope.groups[0]);\r\n });\r\n $scope.$watchCollection('allows', function () {\r\n if ($scope.allows) {\r\n var noGroupSelected = true;\r\n for (var _i = 0, _a = Object.keys($scope.allows); _i < _a.length; _i++) {\r\n var allowKey = _a[_i];\r\n for (var _b = 0, _c = $scope.groups; _b < _c.length; _b++) {\r\n var group = _c[_b];\r\n if (group.allowParam === allowKey) {\r\n group.allowed = $scope.allows[allowKey];\r\n }\r\n if (noGroupSelected && group.allowed) {\r\n noGroupSelected = false;\r\n _this.$scope.selectGroup(group);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n this.updateStyle();\r\n $scope.selectGroup = function (group) {\r\n var groups = $scope.groups;\r\n for (var i = 0; i < groups.length; i++) {\r\n groups[i].select = false;\r\n }\r\n group.select = true;\r\n };\r\n $scope.searchSelect = function (path) {\r\n if ($scope.control.searchSelect) {\r\n $scope.control.searchSelect();\r\n }\r\n $location.path(path);\r\n if ($scope.control && $scope.control.isClinical) {\r\n $location.hash('clinical');\r\n }\r\n };\r\n $scope.selectTemplateItem = function (item) {\r\n if (item.TemplateId) {\r\n $scope.control.selectTemplate(item);\r\n }\r\n else {\r\n _this.openSubItemDialog(item);\r\n }\r\n };\r\n }\r\n TemplatePanelController.prototype.buildGroups = function (templates) {\r\n var templateGroups = [\r\n new TemplateModule.GroupTemplate('Diagnosis', '/' + this.$routeParams.practiceId + '/search-diagnosis', 'diagnosisico', \"AllowDiagnosis\"),\r\n new TemplateModule.GroupTemplate('Procedure', '/' + this.$routeParams.practiceId + '/search-procedure', 'procedureico', \"AllowProcedure\"),\r\n new TemplateModule.GroupTemplate('Medicine', '/' + this.$routeParams.practiceId + '/search-medicine', 'medicineico', \"AllowMedicine\"),\r\n new TemplateModule.GroupTemplate('Consumable', '/' + this.$routeParams.practiceId + '/search-consumable', 'consumableico', \"AllowConsumable\")\r\n ];\r\n var control = this.$scope.control;\r\n if (control.isClinical && control.isPrescription) {\r\n templateGroups.push(new TemplateModule.GroupTemplate('Prescription', '/' + this.$routeParams.practiceId + '/search-prescription', 'prescriptionico', \"AllowPrescription\"));\r\n }\r\n var res = [];\r\n for (var i = 0; i < templateGroups.length; i++) {\r\n res[i] = this.buildGroupTemplate(templates, templateGroups[i]);\r\n }\r\n return res;\r\n };\r\n TemplatePanelController.prototype.updateStyle = function () {\r\n var count = 3;\r\n var control = this.$scope.control;\r\n if (control.isMedicine) {\r\n count++;\r\n }\r\n if (control.isClinical && control.isPrescription) {\r\n count++;\r\n }\r\n var width = 100 / count;\r\n this.$scope.style = { 'width': width + '%' };\r\n };\r\n TemplatePanelController.prototype.buildGroupTemplate = function (templs, groupSetting) {\r\n var group = new TemplateModule.Group();\r\n group.templates = this.templatePanelService.mixTemplateAndSubGroups(templs, groupSetting.name);\r\n group.name = groupSetting.name;\r\n group.path = groupSetting.path;\r\n group.allowParam = groupSetting.allowParam;\r\n group.allowed = true;\r\n group.select = false;\r\n group.icon = groupSetting.icon;\r\n return group;\r\n };\r\n TemplatePanelController.prototype.openSubItemDialog = function (item) {\r\n this.modalService.openSubTemplates(item, this.$scope.control.selectTemplate);\r\n };\r\n TemplatePanelController.factory = function () {\r\n var instance = function () {\r\n var directive = {};\r\n directive.restrict = 'E';\r\n directive.scope = {\r\n list: '=',\r\n control: '=',\r\n height: '=',\r\n allows: '='\r\n };\r\n directive.templateUrl = 'screens/components/template-panel/template-panel.html';\r\n directive.controller = TemplatePanelController;\r\n return directive;\r\n };\r\n return instance;\r\n };\r\n return TemplatePanelController;\r\n })();\r\n TemplateModule.TemplatePanelController = TemplatePanelController;\r\n})(TemplateModule || (TemplateModule = {}));\r\nangular.module('DoctorApp')\r\n .directive('templatePanel', TemplateModule.TemplatePanelController.factory());\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar EncounterModule;\r\n(function (EncounterModule) {\r\n var Template = Domain.Clinical.Template;\r\n var FeatureAllows = Domain.Billing.FeatureAllows;\r\n var SupportingProviderVo = Domain.Billing.SupportingProviderVo;\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$rootScope\", \"$routeParams\", \"$location\", \"locationService\", \"encounterServiceNew\", \"practiceService\", \"clinicalTemplateServiceNew\", \"dashboardService\", \"storageService\", \"searchService\", \"showDialog\", \"$log\", \"$filter\", \"$q\", \"moment\", \"templatePanelService\", \"$compile\", \"modalService\", \"trackingService\"];\r\n function Controller($scope, $rootScope, $routeParams, $location, locationService, encounterServiceNew, practiceService, clinicalTemplateServiceNew, dashboardService, storageService, searchService, showDialog, $log, $filter, $q, moment, templatePanelService, $compile, modalService, trackingService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.locationService = locationService;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.practiceService = practiceService;\r\n this.clinicalTemplateServiceNew = clinicalTemplateServiceNew;\r\n this.dashboardService = dashboardService;\r\n this.storageService = storageService;\r\n this.searchService = searchService;\r\n this.showDialog = showDialog;\r\n this.$log = $log;\r\n this.$filter = $filter;\r\n this.$q = $q;\r\n this.moment = moment;\r\n this.templatePanelService = templatePanelService;\r\n this.$compile = $compile;\r\n this.modalService = modalService;\r\n this.trackingService = trackingService;\r\n this.catchError = function (error) {\r\n _this.$log.error(error);\r\n };\r\n this.hasMatchingItem = function (arr1, arr2) {\r\n var retval = false;\r\n arr1.forEach(function (e1) { return arr2.forEach(function (e2) {\r\n if (e1 === e2) {\r\n retval = true;\r\n }\r\n }); });\r\n return retval;\r\n };\r\n $scope.currentConsultationTab = Controller.CONSULTATION;\r\n $scope.clinicalMetricsOptions = {};\r\n $scope.fullSchemeName = \"\";\r\n this.$scope.currentDate = this.moment();\r\n $scope.selectTemplate = function (template) {\r\n if (template.TemplateId) {\r\n _this.addTemplateToEncounter(template);\r\n }\r\n else {\r\n _this.modalService.openSubTemplates(template, $scope.selectTemplate);\r\n }\r\n };\r\n $scope.selectHospital = function () {\r\n encounterServiceNew.mergePlaceOfService(_this.$routeParams.practiceId, $scope.encounter);\r\n };\r\n $scope.goToMedicalHistory = function () {\r\n _this.populateClinicalMetrics();\r\n var patientId = $scope.encounter.PatientEventDetails.Patient.PatientId;\r\n locationService.goToMedicalHistory($routeParams.practiceId, patientId);\r\n };\r\n $scope.minAllergiesWidth = function () {\r\n var wrapperPadding = 20 + 2;\r\n var allergiesCount = $scope.patientDashboard.Allergies.length;\r\n if (allergiesCount > 3) {\r\n return Math.ceil(allergiesCount / 3) * 70 + wrapperPadding;\r\n }\r\n else {\r\n var padding = allergiesCount < 3 ? 40 : 0;\r\n return Math.ceil(allergiesCount / 2) * 70 + padding;\r\n }\r\n };\r\n $scope.getProcedureAndModifiers = function (lineItems) {\r\n var filteredItems = lineItems &&\r\n lineItems.filter(function (item) { return item.LineType === \"Modifier\" ||\r\n item.LineType === \"Procedure\"; });\r\n return filteredItems;\r\n };\r\n $scope.minConditionWidth = function () {\r\n var wrapperPadding = 20 + 1;\r\n var allergiesCount = $scope.patientDashboard.Allergies &&\r\n $scope.patientDashboard.Allergies.length ||\r\n 0;\r\n var conditionsCount = $scope.patientDashboard.ChronicConditions.length;\r\n if (conditionsCount > 3 || allergiesCount) {\r\n return Math.ceil(conditionsCount / 3) * 150 + wrapperPadding;\r\n }\r\n else {\r\n var padding = conditionsCount < 3 ? 40 : 0;\r\n return Math.ceil(conditionsCount / 2) * 150 + padding;\r\n }\r\n };\r\n $scope.isNotAuxiliary = function () {\r\n var auxPractices = [\"086\", \"089\"];\r\n var encounter = $scope.encounter;\r\n if (encounter && encounter.Provider) {\r\n return auxPractices.indexOf(encounter.Provider.SpecialityCode) == -1;\r\n }\r\n return false;\r\n };\r\n $scope.back = function () {\r\n if (encounterServiceNew.isEncounterChanged()) {\r\n _this.modalService.leaveEncounterConfirm().then(function (result) {\r\n if (result) {\r\n $scope.save();\r\n }\r\n else {\r\n encounterServiceNew.clearEncounterCache();\r\n $rootScope.back();\r\n }\r\n }, function () {\r\n });\r\n }\r\n else {\r\n $rootScope.back();\r\n }\r\n };\r\n $scope.selectConsultationTab = function (tab) {\r\n $scope.currentConsultationTab = tab;\r\n if (tab === Controller.CONSULTATION) {\r\n }\r\n else if (tab === Controller.METRICS) {\r\n var patientId = _this.$scope.encounter.PatientEventDetails.Patient.PatientId;\r\n _this.encounterServiceNew.getHistoricalMetrics(_this.$routeParams.practiceId, patientId)\r\n .then(function (r) { return _this.$scope.clinicalMetricsOptions.historicalMetrics = r; });\r\n }\r\n };\r\n $scope.openReferralTemplates = function () {\r\n var templates = _this.$scope.memoryRefferalTemplates;\r\n _this.modalService.openCommunicationTemplates(templates)\r\n .then(function (template) {\r\n var items = angular.copy(template);\r\n _this.addTemplateToEncounter(items);\r\n });\r\n };\r\n $scope.editCommunicationItem = function (communication) {\r\n var practiceId = _this.$routeParams.practiceId;\r\n var templateBody = _this.encounterServiceNew.getCommunicationBodyById(communication.CommunicationId);\r\n if (!templateBody) {\r\n _this.encounterServiceNew.getReferralHtml(practiceId, $scope.encounter, communication)\r\n .then(function (response) {\r\n _this.encounterServiceNew.setCommunicationBodyById(communication.CommunicationId, response);\r\n _this.editReferralTemplate(communication);\r\n });\r\n }\r\n else {\r\n _this.editReferralTemplate(communication);\r\n }\r\n };\r\n $scope.removeLine = function (obj, typeStr) {\r\n var type = EventTypeUtil.getTypeByName(typeStr);\r\n encounterServiceNew.removeLine(_this.$scope.encounter, obj, type);\r\n };\r\n $scope.isDOBValid = function () {\r\n return _this.$scope.encounter && moment(_this.$scope.encounter.PatientEventDetails.Patient.PatientDetails.DateOfBirth) < moment();\r\n };\r\n $scope.selectBranch = function (branch) {\r\n _this.$scope.encounter.BranchXRef = branch.BranchXRef;\r\n };\r\n $scope.showLineDetails = function (obj, typeStr) {\r\n var validateOptions = {\r\n isPricing: $scope.options.isEnabledForDisplayingPrices,\r\n specificRule: $scope.specificRule,\r\n medicalAidInvoice: $scope.encounter.EncounterType === \"MedicalAidInvoice\",\r\n isDiscoveryKayCare: $scope.fullSchemeName.indexOf(\"DISCOVERY KEYCARE\") > -1,\r\n refreshPrice: $scope.refreshEncounterPrice\r\n };\r\n var type = EventTypeUtil.getTypeByName(typeStr);\r\n encounterServiceNew.showLineItem(_this.$scope, obj, type, validateOptions)\r\n .then(function (response) {\r\n if (type === EventType.MODIFIER) {\r\n var modifier = response;\r\n if (modifier && modifier.ChargeCode === '0009') {\r\n $scope.assistingDoctorIndicator = true;\r\n }\r\n encounterServiceNew.refreshEncounter($routeParams.practiceId, null, $scope.encounter)\r\n .then(function (refreshedEncounter) {\r\n if (refreshedEncounter) {\r\n $scope.encounter = refreshedEncounter;\r\n _this.updateClinicalMetrics(refreshedEncounter);\r\n }\r\n else {\r\n _this.modalService.error(\"Failed to add modifier\");\r\n }\r\n });\r\n }\r\n if (type === EventType.PROCEDURE) {\r\n var procedure = obj;\r\n $scope.encounter.EncounterLineItems.LineItems\r\n .forEach(function (lineItem) {\r\n if (lineItem.LineType === \"Modifier\" &&\r\n lineItem.LineNum === procedure.LineNum + 1) {\r\n encounterServiceNew\r\n .refreshEncounter($routeParams.practiceId, null, $scope.encounter)\r\n .then(function (refreshedEncounter) {\r\n if (refreshedEncounter) {\r\n $scope.encounter = refreshedEncounter;\r\n }\r\n else {\r\n _this.modalService.error(\"Failed to refresh price\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n _this.updateMedicineStatus();\r\n });\r\n };\r\n $scope.refreshEncounterPrice = function (line) {\r\n var oldLine = _this.$filter('filter')($scope.encounter.EncounterLineItems.LineItems, { NappiCode: line.NappiCode }, true);\r\n if (oldLine && oldLine.length > 0) {\r\n var indexOf = $scope.encounter.EncounterLineItems.LineItems.indexOf(oldLine[0]);\r\n $scope.encounter.EncounterLineItems.LineItems[indexOf] = line;\r\n }\r\n return encounterServiceNew.priceEncounter(_this.$routeParams.practiceId, $scope.encounter, line)\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n var updatedLine = _this.$filter('filter')(response.Data.EncounterLineItems.LineItems, { NappiCode: line.NappiCode }, true);\r\n if (updatedLine && updatedLine.length > 0) {\r\n line.TotalIncVat = updatedLine[0].TotalIncVat;\r\n }\r\n return updatedLine;\r\n }\r\n return null;\r\n });\r\n };\r\n $scope.addModifiers = function () {\r\n modalService.showModifierDetails($scope.encounter, null, $scope.assistingDoctor)\r\n .then(function (modifier) {\r\n if (modifier && modifier.ChargeCode === '0009') {\r\n $scope.assistingDoctorIndicator = true;\r\n }\r\n encounterServiceNew.refreshEncounter($routeParams.practiceId, null, $scope.encounter)\r\n .then(function (refreshedEncounter) {\r\n if (refreshedEncounter) {\r\n $scope.encounter = refreshedEncounter;\r\n _this.updateClinicalMetrics(refreshedEncounter);\r\n encounterServiceNew.setEncounter(refreshedEncounter);\r\n }\r\n else {\r\n _this.modalService.error(\"Failed to add modifier\");\r\n }\r\n });\r\n });\r\n };\r\n $scope.openPrescriptionHistory = function () {\r\n var patientId = $scope.encounter.PatientEventDetails.Patient.PatientId;\r\n encounterServiceNew.getPrescriptionHistory($routeParams.practiceId, patientId)\r\n .then(function (response) {\r\n _this.modalService.openPrescriptionHistory(response)\r\n .then(function (repeatPrescriptions) {\r\n var template = new Template();\r\n template.MedicationPrescriptionLines = repeatPrescriptions;\r\n template.TemplateType = \"RepeatScript\";\r\n _this.addTemplateToEncounter(template);\r\n });\r\n });\r\n };\r\n $scope.togglePrimaryDiagnosis = function (index, diagnosis) {\r\n encounterServiceNew.toggleDiagnosis($scope.encounter.EncounterLineItems.EncounterHeader.Diagnosis, index);\r\n };\r\n $scope.updateReferringDoctor = function (provider) {\r\n $scope.encounter.ReferringDoctorName = provider && provider.FriendlyName;\r\n $scope.encounter.ReferringDoctorPracticeNumber = provider && provider.TreatingPracticeNumber;\r\n };\r\n $scope.updateAssistingDoctor = function (provider) {\r\n $scope.encounter.AssistingDoctorName = provider && provider.FriendlyName;\r\n $scope.encounter.AssistingDoctorPracticeNumber = provider && provider.TreatingPracticeNumber;\r\n };\r\n $scope.onReferringDoctorIndicatorChange = function () {\r\n if ($scope.referringDoctorIndicator) {\r\n if ($scope.isIHealthProvider) {\r\n _this.openReferringSupportingProvider(null);\r\n }\r\n else {\r\n _this.encounterServiceNew.getSupportingProviders(_this.$routeParams.practiceId, \"Referring\")\r\n .then(function (providers) {\r\n _this.openReferringSupportingProvider(providers);\r\n });\r\n }\r\n }\r\n else {\r\n _this.$scope.referringDoctor = null;\r\n _this.$scope.updateReferringDoctor(null);\r\n }\r\n };\r\n $scope.onAssistingDoctorIndicatorChange = function () {\r\n if ($scope.assistingDoctorIndicator) {\r\n if ($scope.isIHealthProvider) {\r\n _this.openAssistingSupportingProvider(null);\r\n }\r\n else {\r\n _this.encounterServiceNew.getSupportingProviders(_this.$routeParams.practiceId, \"Assisting\")\r\n .then(function (providers) {\r\n _this.openAssistingSupportingProvider(providers);\r\n });\r\n }\r\n }\r\n else {\r\n _this.$scope.assistingDoctor = null;\r\n _this.$scope.updateAssistingDoctor(null);\r\n }\r\n };\r\n $scope.selectPlaceOfService = function (value) {\r\n $scope.encounter.EncounterLineItems.EncounterHeader.HospitalIndicator =\r\n value === Controller.INPATIENT_HOSPITAL;\r\n encounterServiceNew.mergePlaceOfService(_this.$routeParams.practiceId, $scope.encounter);\r\n };\r\n $scope.selectPatient = function () {\r\n _this.populateClinicalMetrics();\r\n var patientId = $scope.encounter.PatientEventDetails.Patient.PatientId;\r\n locationService.goToChangePatient($routeParams.practiceId, patientId);\r\n };\r\n $scope.completeEncounter = function (visitOutcome) {\r\n $scope.encounter.ClinicalMetrics = $scope.clinicalMetricsOptions.getClinicalMetrics();\r\n if (!$scope.clinicalMetricsOptions.validate()) {\r\n return;\r\n }\r\n var consultationDate = moment(_this.encounterServiceNew.getConsultationDate());\r\n var diff = moment().diff(consultationDate, 'days');\r\n if (!_this.$scope.timeOfServiceStr && diff > 0) {\r\n showDialog.warning(\"Please capture the Time of Service for the patient visit.\");\r\n return;\r\n }\r\n if ($scope.referringDoctorIndicator) {\r\n if (!$scope.encounter.ReferringDoctorName ||\r\n !$scope.encounter.ReferringDoctorPracticeNumber) {\r\n showDialog.warning(\"Please provide correct referring doctor’s details\");\r\n return;\r\n }\r\n }\r\n else {\r\n $scope.encounter.ReferringDoctorName = null;\r\n $scope.encounter.ReferringDoctorPracticeNumber = null;\r\n }\r\n if ($scope.assistingDoctorIndicator) {\r\n if (!$scope.encounter.AssistingDoctorName ||\r\n !$scope.encounter.AssistingDoctorPracticeNumber) {\r\n showDialog.warning(\"Please provide correct assisting doctor’s details\");\r\n return;\r\n }\r\n }\r\n else {\r\n $scope.encounter.AssistingDoctorName = null;\r\n $scope.encounter.AssistingDoctorPracticeNumber = null;\r\n }\r\n if ($scope.encounter.EncounterLineItems.EncounterHeader.HospitalIndicator &&\r\n !$scope.encounter.EncounterLineItems.EncounterHeader.ClaimAuthorizationNumber) {\r\n showDialog.warning(\"Please provide authorization number\");\r\n return;\r\n }\r\n var nextStepAction = function (goToVisitOutcome, validPlaceOfService) {\r\n if (validPlaceOfService === void 0) { validPlaceOfService = true; }\r\n var hasTelehealthProcedures = _this.hasMatchingItem($scope.encounter.EncounterLineItems.LineItems.map(function (m) { return m.ChargeCode; }), Controller.PROCEDURES_NOT_TELEHEALT_SPECIFIC);\r\n if (validPlaceOfService && hasTelehealthProcedures && _this.$scope.encounter.EncounterLineItems.EncounterHeader.PlaceOfService !== 2) {\r\n showDialog.confirm(\"Would you like to change the place of service to Telehealth?\", null, false, ['Yes', 'No'])\r\n .then(function () {\r\n _this.$scope.encounter.EncounterLineItems.EncounterHeader.PlaceOfService = 2;\r\n nextStepAction(visitOutcome, false);\r\n }).catch(function () { return nextStepAction(visitOutcome, false); });\r\n }\r\n else {\r\n if (goToVisitOutcome) {\r\n _this.goToNext();\r\n }\r\n else {\r\n _this.submitEncounter();\r\n }\r\n }\r\n };\r\n _this.updateMedicationPrices();\r\n if (_this.$scope.encounter.EncounterType === Controller.MEDICAL_INSURANCE) {\r\n if (!$scope.encounter.MedicalInsurance.PatientIdentityNo ||\r\n !$scope.encounter.MedicalInsurance.PolicyNo ||\r\n $scope.encounter.MedicalInsurance.MedicalInsurer == null) {\r\n modalService.showMedicalInsuranceDetails(_this.$scope.encounter)\r\n .then(function (medicalInsurance) {\r\n _this.$scope.encounter.MedicalInsurance = medicalInsurance;\r\n _this.encounterServiceNew.setEncounter(_this.$scope.encounter);\r\n nextStepAction(visitOutcome);\r\n });\r\n }\r\n else {\r\n nextStepAction(visitOutcome);\r\n }\r\n }\r\n else if (_this.$scope.encounter.EncounterLineItems.LineItems.length === 0 ||\r\n _this.$filter('filter')(_this.$scope.encounter.EncounterLineItems.LineItems, { LineType: EventTypeUtil.getNameByType(EventType.PROCEDURE) }, false).length ===\r\n 0) {\r\n showDialog.confirm(\"You have not selected any procedures for this patient. If you proceed an invoice \" +\r\n \"will not be created and this patient will not be billed. Would you like to continue?\")\r\n .then(function () {\r\n nextStepAction(visitOutcome);\r\n });\r\n }\r\n else {\r\n nextStepAction(visitOutcome);\r\n }\r\n };\r\n $scope.loadInsurerProcedures = function () {\r\n var encounter = _this.$scope.encounter;\r\n modalService.showMedicalInsuranceDetails(encounter)\r\n .then(function (medicalInsurance) {\r\n $scope.encounter.MedicalInsurance = medicalInsurance;\r\n _this.getInsurerProcedures();\r\n });\r\n };\r\n $scope.showMedicalInsuranceDetails = function () {\r\n modalService.showMedicalInsuranceDetails(_this.$scope.encounter)\r\n .then(function (medicalInsurance) {\r\n if (!angular.equals($scope.encounter.MedicalInsurance, medicalInsurance)) {\r\n $scope.encounter.MedicalInsurance = medicalInsurance;\r\n encounterServiceNew.refreshEncounter($routeParams.practiceId, $scope.encounterType, $scope.encounter)\r\n .then(function (encounter) {\r\n $scope.encounter = encounter;\r\n _this.getInsurerProcedures();\r\n });\r\n }\r\n });\r\n };\r\n $scope.searchInsurerProcedures = function () {\r\n $location.path('/' + _this.$routeParams.practiceId + '/search-medical-insurer-procedure');\r\n $location.hash('clinical');\r\n };\r\n $scope.changeEncounterType = function () {\r\n var nonMedicalInsuranceTypes = [\r\n Controller.MEDICAL_AID_CLAIM,\r\n Controller.CASHCLAIM,\r\n Controller.ZEROCLAIM\r\n ];\r\n if (nonMedicalInsuranceTypes.indexOf($scope.encounterType) > -1 &&\r\n nonMedicalInsuranceTypes.indexOf($scope.encounter.EncounterType) > -1) {\r\n $scope.encounter.EncounterType = $scope.encounterType;\r\n }\r\n else {\r\n modalService.confirm(\"The invoice type has changed to \" +\r\n $scope.encounterType.replace(/([A-Z])/g, ' $1').toLowerCase() +\r\n \"

All captured information will be cleared.\" +\r\n \"

Click OK to continue\", ModalModule.ModalWidth._400px)\r\n .then(function () {\r\n encounterServiceNew.refreshEncounter($routeParams.practiceId, $scope.encounterType, $scope.encounter)\r\n .then(function (encounter) {\r\n $scope.encounter = encounter;\r\n _this.encounterServiceNew.setEncounter(_this.$scope.encounter);\r\n _this.getInsurerProcedures();\r\n _this.applyMedicalInsuranseAllows();\r\n });\r\n })\r\n .catch(function () {\r\n $scope.encounterType = $scope.encounter.EncounterType;\r\n });\r\n }\r\n };\r\n $scope.save = function () {\r\n _this.appendTimeOfService();\r\n $scope.encounter.ClinicalMetrics = $scope.clinicalMetricsOptions.getClinicalMetrics();\r\n _this.encounterServiceNew.saveEncounter(_this.$routeParams.practiceId, $scope.encounter)\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n encounterServiceNew.clearEncounterCache();\r\n locationService.goToHome(_this.$routeParams.practiceId);\r\n }\r\n else {\r\n showDialog.error(response.ResponseMessage, ModalModule.ModalWidth._500px);\r\n }\r\n })\r\n .catch(function (error) {\r\n showDialog.error(error, ModalModule.ModalWidth._500px);\r\n });\r\n };\r\n $scope.changeHospitalDate = function (first) {\r\n if (first) {\r\n $scope.configTo.min = $scope.admissionDate;\r\n }\r\n else {\r\n $scope.configFrom.max = $scope.dischargeDate;\r\n }\r\n _this.updateHospitalDates();\r\n };\r\n $scope.switchHospitalDates = function () {\r\n $scope.showHospitalDates = !$scope.showHospitalDates;\r\n if ($scope.showHospitalDates) {\r\n _this.$scope.admissionDate = _this.encounterServiceNew.getConsultationDate();\r\n _this.$scope.dischargeDate = _this.encounterServiceNew.getConsultationDate();\r\n }\r\n else {\r\n _this.$scope.admissionDate = null;\r\n _this.$scope.dischargeDate = null;\r\n }\r\n _this.updateHospitalDates();\r\n };\r\n $scope.onTimeOfServiceChange = function (newValue, oldValue) {\r\n _this.appendTimeOfService();\r\n };\r\n $scope.changeConsultationDate = function (date) {\r\n var consMoment = moment(new Date(date));\r\n encounterServiceNew.setConsultationDate(consMoment);\r\n $scope.consultationDate = consMoment.format(Controller.DATE_OUT_PATTERN);\r\n $scope.encounter.EncounterLineItems.EncounterHeader.DateOfService = consMoment.format();\r\n _this.appendTimeOfService();\r\n var certificate = $scope.encounter.MedicalCertificate;\r\n if (certificate) {\r\n certificate.ExaminationDate = consMoment.format();\r\n }\r\n _this.encounterServiceNew.getSpecificRule(_this.$routeParams.practiceId, $scope.encounter.PatientEventDetails.Patient.PatientId, consMoment.format('YYYY-MM-DD'))\r\n .then(function (response) {\r\n _this.$scope.specificRule = response.Data;\r\n });\r\n };\r\n $scope.clickWarning = function () {\r\n if ($scope.specificRule) {\r\n showDialog.warning($scope.specificRule.Description);\r\n }\r\n };\r\n $scope.clickInvalidCodeWarning = function () {\r\n showDialog.warning(\"The following code(s) are no longer valid: \" +\r\n \"
\" +\r\n $scope.invalidCodes.map(function (item) {\r\n return item.Code + \" \" + item.Description.slice(0, 20).concat('...');\r\n })\r\n .join(\"
\"));\r\n };\r\n $scope.refreshPrice = function () {\r\n $rootScope.showWaitingScreen = true;\r\n _this.updateMedicationPrices();\r\n encounterServiceNew.priceEncounter(_this.$routeParams.practiceId, $scope.encounter)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n if (response.ResponseCode === 500) {\r\n $scope.updatePricingErrorMessage = \"Unable to price invoice, please try again later\";\r\n }\r\n else if (response.ResponseCode === 400 || response.ResponseCode > 500) {\r\n $scope.updatePricingErrorMessage = response.ResponseMessage;\r\n }\r\n _this.modalService.error($scope.updatePricingErrorMessage);\r\n $scope.encounter.EncounterLineItems.LineItems\r\n .filter(function (item) { return item.LineType === \"Procedure\"; })\r\n .forEach(function (procedure) {\r\n procedure.Amount = 0;\r\n });\r\n }\r\n else {\r\n $scope.updatePricingErrorMessage = \"\";\r\n }\r\n })\r\n .finally(function () {\r\n $rootScope.showWaitingScreen = false;\r\n });\r\n };\r\n $scope.clickPricingError = function (errorMessage) {\r\n _this.modalService.error(errorMessage);\r\n };\r\n $scope.openSickNote = function (openForEdit) {\r\n if (!openForEdit && $scope.encounter.MedicalCertificate) {\r\n $scope.encounter.MedicalCertificate = null;\r\n return;\r\n }\r\n encounterServiceNew.openSickNote($scope.encounter)\r\n .then(function (encounter) {\r\n $scope.encounter.MedicalCertificate = encounter.MedicalCertificate;\r\n });\r\n };\r\n $scope.getListDiagnoses = function () {\r\n var diagnoses = $scope.encounter.MedicalCertificate.Diagnoses;\r\n if (diagnoses) {\r\n return diagnoses.map(function (item) {\r\n return item.DiagnosisCode;\r\n })\r\n .join(',');\r\n }\r\n return '';\r\n };\r\n $scope.goToDashboard = function () {\r\n _this.populateClinicalMetrics();\r\n trackingService.openedPatientDashboard($scope.encounter.PatientEventDetails);\r\n locationService.goToClinicalDashboard($routeParams.practiceId, $scope.encounter.PatientEventDetails.Patient.PatientId);\r\n };\r\n $scope.$watch('encounter.EncounterLineItems.EncounterHeader.HospitalIndicator', function () {\r\n var encounterHeader = $scope.encounter.EncounterLineItems.EncounterHeader;\r\n var date = _this.encounterServiceNew.getConsultationDate();\r\n if (encounterHeader.HospitalIndicator) {\r\n _this.updateHospitalDates();\r\n var configFrom = new DatePickerModule.Config();\r\n configFrom.format = 'dd MM, yy';\r\n configFrom.max = _this.$scope.dischargeDate;\r\n _this.$scope.configFrom = configFrom;\r\n var configTo = new DatePickerModule.Config();\r\n configTo.format = 'dd MM, yy';\r\n configTo.min = _this.$scope.admissionDate;\r\n _this.$scope.configTo = configTo;\r\n }\r\n });\r\n $scope.$watchCollection('encounter.EncounterLineItems.LineItems', function () {\r\n $scope.totalPrice = encounterServiceNew\r\n .getTotalPrice($scope.encounter.EncounterLineItems.LineItems);\r\n _this.updateMedicineStatus();\r\n });\r\n $scope.editedNote = function (eventType, note) {\r\n if (note) {\r\n trackingService.editedNotes(eventType, $scope.encounter);\r\n }\r\n };\r\n $scope.summaryOfCareClick = function (value, type) {\r\n var message = '';\r\n switch (type) {\r\n case 'ChronicConditions':\r\n message = '
' + value.join(', ') + '
';\r\n break;\r\n case 'Allergies':\r\n message = '
' + value.join(', ') + '
';\r\n break;\r\n case 'AllergiesNote':\r\n message = '
' + value + '
';\r\n break;\r\n case 'ClinicalNotes':\r\n message = '
' + value + '
';\r\n break;\r\n default:\r\n return;\r\n }\r\n if (message.length > 6) {\r\n _this.modalService.info(message, ModalModule.ModalWidth._600px);\r\n }\r\n };\r\n $scope.schemeRuleHeadWarning = function () {\r\n modalService.warning('Your visit contains one or more medicine items that are not on ' +\r\n 'the Discovery KeyCare acute formulary. Please check your ' +\r\n 'medicine items for more information.', ModalModule.ModalWidth._500px);\r\n };\r\n $scope.showModifierWarning = function (line) {\r\n var keys = Object.keys(line.Responses);\r\n var values = keys.map(function (v) { return line.Responses[v]; });\r\n showDialog.warning(values.join());\r\n };\r\n $scope.captureDocuments = function (first) {\r\n var token = _this.storageService.getAuthorizationData().token;\r\n var category = first ? 'Billing Instruction' : 'Clinical Notes';\r\n var patientDocument = $scope.encounter.PatientDocuments &&\r\n $scope.encounter.PatientDocuments.filter(function (doc) { return doc.Category === category; }).shift();\r\n var url = GlobalVar.patientFilesUrl +\r\n \"deeplink-login\" +\r\n \"?practice_id=\" +\r\n $routeParams.practiceId +\r\n \"&patient_id=\" +\r\n $scope.encounter.PatientEventDetails.Patient.PatientId +\r\n \"&category=\" +\r\n category +\r\n \"&reference_id=\" +\r\n $scope.encounter.EncounterId +\r\n \"&token=\" +\r\n token +\r\n \"&random=\" +\r\n (new Date()).getTime() +\r\n Math.floor(Math.random() * 1000000);\r\n var showCaptureHealthDocDialog = function () {\r\n modalService.showCaptureHealthDocDialog(url, \"myPatientFiles\")\r\n .then(function (capturedDocumentId) {\r\n if (capturedDocumentId) {\r\n return _this.dashboardService.getDocumentInfoById($routeParams.practiceId, capturedDocumentId);\r\n }\r\n return null;\r\n })\r\n .then(function (document) {\r\n if (document) {\r\n if (first) {\r\n $scope.billingInstructionThumbnail =\r\n _this.dashboardService.getDocumentUrl(_this.$routeParams.practiceId, document.DocumentUrl);\r\n }\r\n else {\r\n $scope.clinicalNoteThumbnail =\r\n _this.dashboardService.getDocumentUrl(_this.$routeParams.practiceId, document.DocumentUrl);\r\n }\r\n if (!$scope.encounter.PatientDocuments) {\r\n $scope.encounter.PatientDocuments = [];\r\n }\r\n var wasInside = false;\r\n $scope.encounter.PatientDocuments.map(function (doc) {\r\n if (doc.Category === category) {\r\n wasInside = true;\r\n return {\r\n Category: category,\r\n DocumentUrl: document.DocumentUrl\r\n };\r\n }\r\n return doc;\r\n });\r\n if (!wasInside) {\r\n $scope.encounter.PatientDocuments.push(angular.extend(new Domain.Clinical.PatientDocument, {\r\n Category: category,\r\n DocumentUrl: document.DocumentUrl\r\n }));\r\n }\r\n }\r\n });\r\n };\r\n if (patientDocument && patientDocument.DocumentUrl) {\r\n modalService\r\n .confirm(\"Previously attached image will be replaced with newly uploaded.
Are you sure you want to continue?\")\r\n .then(function () {\r\n return _this.dashboardService.removeDocument($routeParams.practiceId, patientDocument.DocumentUrl.match(/(\\/.*?(\\/))(.*?)(?=\\.)/).pop());\r\n })\r\n .then(function () {\r\n if (first) {\r\n $scope.billingInstructionThumbnail = \"\";\r\n }\r\n else {\r\n $scope.clinicalNoteThumbnail = \"\";\r\n }\r\n $scope.encounter.PatientDocuments.splice($scope.encounter.PatientDocuments.indexOf(patientDocument), 1);\r\n showCaptureHealthDocDialog();\r\n });\r\n }\r\n else {\r\n showCaptureHealthDocDialog();\r\n }\r\n };\r\n this.init();\r\n }\r\n Controller.prototype.appendTimeOfService = function () {\r\n var consultationDate = this.moment(this.encounterServiceNew.getConsultationDate()).local();\r\n if (this.$scope.timeOfServiceStr) {\r\n var timePart = this.moment.utc(this.$scope.timeOfServiceStr, ['h:m a', 'H:m']);\r\n consultationDate.hour(timePart.hour()).minute(timePart.minute());\r\n this.encounterServiceNew.setConsultationDate(consultationDate);\r\n this.$scope.encounter.EncounterLineItems.EncounterHeader.DateOfService = consultationDate.utc().format(ServerDateFormat);\r\n }\r\n };\r\n Controller.prototype.init = function () {\r\n var _this = this;\r\n this.$rootScope.showProgressScreen = true;\r\n this.$scope.refferalTemplates = [];\r\n this.$scope.myTemplates = [];\r\n this.$scope.templates = [];\r\n this.$scope.encounter = new Domain.Clinical.Encounter();\r\n this.$scope.totalPrice = 0;\r\n var patientEventId = this.$routeParams.patientVisitId;\r\n this.encounterServiceNew.getProvider(this.$routeParams.practiceId)\r\n .then(function (provider) {\r\n _this.$scope.isIHealthProvider = (provider.PracticeXRef || '').startsWith(\"iHealth\");\r\n return _this.encounterServiceNew.getProviderOptions(provider);\r\n })\r\n .then(function (options) {\r\n _this.$scope.options = options;\r\n _this.$scope.controlTemplate = {\r\n selectTemplate: function (template) {\r\n _this.$scope.selectTemplate(template);\r\n },\r\n searchSelect: function () {\r\n _this.populateClinicalMetrics();\r\n },\r\n isMedicine: options.isDispensing,\r\n isClinical: true,\r\n isPrescription: options.isEnabledForMedicationPrescriptions\r\n };\r\n _this.$scope.myPatientFilesEnabled = options.myPatientFilesEnabled;\r\n _this.applyUserDefinedLayout();\r\n });\r\n this.clinicalTemplateServiceNew.getTemplatesByEncounter(this.$routeParams.practiceId, patientEventId)\r\n .then(function (templates) {\r\n _this.$scope.templates = templates;\r\n _this.$scope.memoryRefferalTemplates = _this\r\n .$filter('filter')(templates, { TemplateType: Controller.COMMUNICATIONS }, true);\r\n var myTemplates = templates.filter(function (template) { return template.TemplateType === Controller.MY_TEMPLATE; });\r\n _this.$scope.myTemplates = _this.templatePanelService.mixTemplateAndSubGroups(myTemplates, Controller.MY_TEMPLATE);\r\n _this.encounterServiceNew.getRefferalTemplates(_this.$routeParams.practiceId, '00000000-0000-0000-0000-000000000000')\r\n .then(function (referrals) {\r\n var template = referrals[0];\r\n var clinicalTemplate = new Domain.Clinical.Template();\r\n clinicalTemplate.Caption = template.TemplateName;\r\n clinicalTemplate.Description = \"Built-in Referral\";\r\n clinicalTemplate.TemplateId = '00000000-0000-0000-0000-100000000000';\r\n clinicalTemplate.PracticeId = template.PracticeId;\r\n clinicalTemplate.TemplateType = template.TemplateName;\r\n var communication = new Domain.Clinical.Communication();\r\n communication.CommunicationTemplateId = template.TemplateId;\r\n communication.CommunicationId = '00000000-0000-0000-0000-000000000000';\r\n communication.Type = template.TemplateName;\r\n communication.Title = template.TemplateName;\r\n clinicalTemplate.Communications = [communication];\r\n _this.$scope.memoryRefferalTemplates.push(clinicalTemplate);\r\n });\r\n })\r\n .catch(this.catchError);\r\n this.loadEncounter(patientEventId)\r\n .then(function (encounter) {\r\n _this.$scope.encounter = encounter;\r\n _this.updateAccount(encounter.PatientEventDetails);\r\n _this.updateClinicalMetrics(encounter);\r\n _this.initConsultationDate(encounter);\r\n _this.updatePractice(encounter);\r\n _this.initSaveTemplate();\r\n _this.searchService.eventId = encounter.EncounterId;\r\n _this.getInsurerProcedures();\r\n _this.applySpecialityRules()\r\n .finally(function () {\r\n _this.$rootScope.showProgressScreen = false;\r\n });\r\n var patientId = encounter.PatientEventDetails.Patient.PatientId;\r\n _this.$scope.referringDoctorIndicator = encounter.ReferringDoctorName != null ||\r\n encounter.ReferringDoctorPracticeNumber != null;\r\n _this.$scope.referringDoctor = new SupportingProviderVo();\r\n _this.$scope.referringDoctor.FriendlyName = encounter.ReferringDoctorName;\r\n _this.$scope.referringDoctor.TreatingPracticeNumber = encounter.ReferringDoctorPracticeNumber;\r\n if (encounter.EncounterLineItems.EncounterHeader.HospitalIndicator) {\r\n var admissionDate = encounter.EncounterLineItems.EncounterHeader.AdmissionDateTime;\r\n var dischargeDate = encounter.EncounterLineItems.EncounterHeader.DischargeDateTime;\r\n _this.$scope.admissionDate = admissionDate ? _this.moment(admissionDate) : null;\r\n _this.$scope.dischargeDate = dischargeDate ? _this.moment(dischargeDate) : null;\r\n _this.$scope.showHospitalDates = !!(admissionDate || dischargeDate);\r\n encounter.EncounterLineItems.EncounterHeader.PlaceOfService = Controller.INPATIENT_HOSPITAL;\r\n }\r\n if (!encounter.EncounterLineItems.EncounterHeader.PlaceOfService) {\r\n encounter.EncounterLineItems.EncounterHeader.PlaceOfService = Controller.CONSULTING_ROOMS;\r\n }\r\n _this.$scope.assistingDoctorIndicator = encounter.AssistingDoctorName != null ||\r\n encounter.AssistingDoctorPracticeNumber != null;\r\n _this.$scope.assistingDoctor = new SupportingProviderVo();\r\n _this.$scope.assistingDoctor.FriendlyName = encounter.AssistingDoctorName;\r\n _this.$scope.assistingDoctor.TreatingPracticeNumber = encounter.AssistingDoctorPracticeNumber;\r\n if (_this.$scope.encounter.PatientDocuments) {\r\n var billingIstr = _this.$scope.encounter.PatientDocuments\r\n .filter(function (doc) { return doc.Category === 'Billing Instruction'; })\r\n .shift();\r\n var clinicalnotes = _this.$scope.encounter.PatientDocuments\r\n .filter(function (doc) { return doc.Category === 'Clinical Notes'; })\r\n .shift();\r\n _this.$scope.billingInstructionThumbnail = billingIstr\r\n ? _this.dashboardService.getDocumentUrl(_this.$routeParams.practiceId, billingIstr.DocumentUrl)\r\n : '';\r\n _this.$scope.clinicalNoteThumbnail = clinicalnotes\r\n ? _this.dashboardService.getDocumentUrl(_this.$routeParams.practiceId, clinicalnotes.DocumentUrl)\r\n : '';\r\n }\r\n _this.dashboardService.getAvatar(_this.$routeParams.practiceId, _this.$scope.encounter.PatientEventDetails.Patient.PatientId)\r\n .then(function (patientDocument) {\r\n if (patientDocument) {\r\n _this.$scope.avatar = _this.dashboardService.getDocumentUrl(_this.$scope.encounter.PatientEventDetails.Patient.PatientId, patientDocument.ThumbnailUrl) + \"&r=\" + patientDocument.FileName;\r\n }\r\n });\r\n _this.encounterServiceNew.getProviderBranches(_this.$routeParams.practiceId).then(function (branches) {\r\n _this.$scope.providerBranches = branches;\r\n if (branches.length > 0) {\r\n _this.$scope.encounter.BranchXRef = _this.$scope.encounter.BranchXRef || _this.$scope.providerBranches[0].BranchXRef;\r\n _this.$scope.branchXRef = _this.$scope.encounter.BranchXRef;\r\n for (var i = 0; i < _this.$scope.providerBranches.length; i++) {\r\n var branch = _this.$scope.providerBranches[i];\r\n if (branch.BranchXRef == _this.$scope.branchXRef) {\r\n }\r\n }\r\n }\r\n });\r\n return _this.encounterServiceNew.getSpecificRule(_this.$routeParams.practiceId, patientId, _this.getDateOfService(encounter).format('YYYY-MM-DD'));\r\n })\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n _this.$scope.specificRule = response.Data;\r\n }\r\n else {\r\n _this.$log.error(response);\r\n }\r\n })\r\n .catch(function (e) {\r\n _this.$rootScope.showProgressScreen = false;\r\n _this.catchError(e);\r\n });\r\n };\r\n Controller.prototype.applySpecialityRules = function () {\r\n var _this = this;\r\n var specialityCode = this.encounterServiceNew.originalEncounter.Provider.SpecialityCode;\r\n return this.encounterServiceNew.getSpecialityRuleByCode(specialityCode)\r\n .then(function (response) {\r\n var allows = new FeatureAllows();\r\n if (response && response.Options) {\r\n for (var optionId in response.Options) {\r\n var optionValue = response.Options[optionId];\r\n if (allows.hasOwnProperty(optionId)) {\r\n allows[optionId] = optionValue.toLowerCase() === \"true\";\r\n }\r\n }\r\n }\r\n _this.$scope.featuresAllows = allows;\r\n _this.$scope.memoryFeaturesAllows = allows;\r\n _this.applyMedicalInsuranseAllows();\r\n });\r\n };\r\n Controller.prototype.applyMedicalInsuranseAllows = function () {\r\n if (this.$scope.encounter.EncounterType === Controller.MEDICAL_INSURANCE) {\r\n this.$scope.featuresAllows = this.encounterServiceNew.getMedicalInsuranseAllows();\r\n }\r\n else {\r\n this.$scope.featuresAllows = this.$scope.memoryFeaturesAllows;\r\n }\r\n };\r\n Controller.prototype.getInsurerProcedures = function () {\r\n var _this = this;\r\n if (this.$scope.encounter.EncounterType === Controller.MEDICAL_INSURANCE &&\r\n this.$scope.encounter.MedicalInsurance) {\r\n var insurerXRef = null;\r\n if (this.$scope.encounter.MedicalInsurance.MedicalInsurer != null) {\r\n insurerXRef = this.$scope.encounter.MedicalInsurance.MedicalInsurer.InsurerXRef;\r\n }\r\n this.encounterServiceNew.getInsurerProcedures(this.$routeParams.practiceId, this.$scope.encounter.EncounterId, insurerXRef).then(function (response) {\r\n _this.encounterServiceNew.setMemoryInsurerProcedures(response);\r\n _this.$scope.insurerProcedures = response;\r\n });\r\n }\r\n };\r\n Controller.prototype.openReferringSupportingProvider = function (providers) {\r\n var _this = this;\r\n this.modalService\r\n .openSupportingProvider(providers, this.$scope.referringDoctor, \"Referring Provider\")\r\n .then(function (provider) {\r\n _this.$scope.referringDoctor = provider;\r\n _this.$scope.updateReferringDoctor(provider);\r\n });\r\n };\r\n Controller.prototype.openAssistingSupportingProvider = function (providers) {\r\n var _this = this;\r\n this.modalService\r\n .openSupportingProvider(providers, this.$scope.assistingDoctor, \"Assisting Provider\")\r\n .then(function (provider) {\r\n _this.$scope.assistingDoctor = provider;\r\n _this.$scope.updateAssistingDoctor(provider);\r\n });\r\n };\r\n Controller.prototype.populateClinicalMetrics = function () {\r\n this.$scope.encounter.ClinicalMetrics = this.$scope.clinicalMetricsOptions.getClinicalMetrics();\r\n };\r\n Controller.prototype.updateMedicationPrices = function () {\r\n var lineItems = this.$scope.encounter.EncounterLineItems.LineItems;\r\n if (this.$scope.specificRule && lineItems) {\r\n for (var i = 0; i < lineItems.length; i++) {\r\n if (lineItems[i].LineType === \"Medicine\" && this.$scope.specificRule.ZeroMedicine ||\r\n lineItems[i].LineType === \"Consumable\" && this.$scope.specificRule.ZeroConsumable) {\r\n if (lineItems[i].TotalIncVat === 0) {\r\n lineItems[i].PriceOverride = !lineItems[i].ChronicIndicator;\r\n lineItems[i].TotalIncVat = 0.00;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n Controller.prototype.editReferralTemplate = function (communication) {\r\n var _this = this;\r\n var communicationTemplateBody = this.encounterServiceNew\r\n .getCommunicationBodyById(communication.CommunicationId);\r\n this.modalService.openLetterEditor(communication, communicationTemplateBody)\r\n .then(function (response) {\r\n var practiceId = _this.$scope.encounter.PatientEventDetails.PracticeId;\r\n _this.encounterServiceNew\r\n .setCommunicationBodyById(communication.CommunicationId, response.templateBody);\r\n communication.Title = response.communication.Title;\r\n _this.encounterServiceNew.updateCommunicationBody(practiceId, _this.$scope.encounter.EncounterId, communication);\r\n });\r\n };\r\n Controller.prototype.applyUserDefinedLayout = function () {\r\n var options = this.$scope.options;\r\n var customLayoutOrder = options.consultationCustomLayoutOrder || '';\r\n var items = customLayoutOrder.split(\",\");\r\n var allowedIds = ['1', '2', '3', '4'];\r\n if (items.length !== 4) {\r\n items = allowedIds;\r\n }\r\n var newOrderItems = [];\r\n for (var k = 0; k < items.length; k++) {\r\n var itemConfig = items[k].split(\":\");\r\n var containerId = itemConfig[0].trim();\r\n var height = itemConfig.length === 2 ? parseInt(itemConfig[1]) : 0;\r\n if (allowedIds.indexOf(containerId) !== -1) {\r\n newOrderItems.push({ id: containerId, height: height });\r\n }\r\n }\r\n this.$scope.customLayoutOrder = newOrderItems;\r\n };\r\n Controller.prototype.updateAccount = function (patientEvent) {\r\n var _this = this;\r\n var savePatient = this.$rootScope.selectedPatient;\r\n if (savePatient) {\r\n patientEvent.Patient = savePatient;\r\n }\r\n var patient = patientEvent.Patient;\r\n this.$scope.accountDetails = patient.PatientAccountDetails;\r\n this.$scope.fullName = patient.PatientDetails.FirstName + ' ' + patient.PatientDetails.Surname;\r\n var scheme = '';\r\n if (patient.PatientAccountDetails) {\r\n scheme = patient.PatientAccountDetails.MedicalAidName;\r\n if (patient.PatientAccountDetails.MedicalAidPlan) {\r\n scheme = scheme.concat(\" / \" + patient.PatientAccountDetails.MedicalAidPlan);\r\n if (patient.PatientAccountDetails.MedicalAidPlanOption) {\r\n scheme = scheme.concat(\" / \" + patient.PatientAccountDetails.MedicalAidPlanOption);\r\n }\r\n }\r\n }\r\n if (this.$scope.encounter.MedicalInsurance && patient.PatientDetails.IdentityNo) {\r\n this.$scope.encounter.MedicalInsurance.PatientIdentityNo = patient.PatientDetails.IdentityNo;\r\n }\r\n this.$scope.fullSchemeName = scheme || \"\";\r\n this.dashboardService.getPatientDashboardHeader(this.$routeParams.practiceId, patient.PatientId)\r\n .then(function (response) {\r\n if (response) {\r\n _this.$scope.patientDashboard = response;\r\n }\r\n });\r\n };\r\n Controller.prototype.initSaveTemplate = function () {\r\n var selectedTemplate = this.searchService.getSelectedTemplate();\r\n if (selectedTemplate) {\r\n this.addTemplateToEncounter(selectedTemplate);\r\n }\r\n };\r\n Controller.prototype.addTemplateToEncounter = function (template) {\r\n var _this = this;\r\n return this.encounterServiceNew.addTemplateToEncounter(this.$routeParams.practiceId, this.$scope.encounter, template)\r\n .then(function (result) {\r\n _this.$scope.encounter = result.MergedEncounter;\r\n _this.$scope.encounter.ClinicalMetrics = _this.$scope.clinicalMetricsOptions.getClinicalMetrics();\r\n _this.encounterServiceNew.setEncounter(_this.$scope.encounter);\r\n _this.$scope.invalidCodes = result.Errors;\r\n _this.searchService.saveSelectedTemplate(null);\r\n if (template.Communications != null && template.Communications.length > 0) {\r\n var communication = _this.$scope.encounter.Communications[_this.$scope.encounter.Communications.length - 1];\r\n _this.$scope.editCommunicationItem(communication);\r\n }\r\n return _this.$scope.encounter;\r\n });\r\n };\r\n Controller.prototype.loadEncounter = function (patientEventId) {\r\n var _this = this;\r\n var practiceId = this.$routeParams.practiceId;\r\n return this.encounterServiceNew.getEncounterByPatientEventId(practiceId, patientEventId, true)\r\n .then(function (encounterResponse) {\r\n var encounter = _this.encounterServiceNew.getEncounter();\r\n if (encounter &&\r\n encounter.PatientEventDetails.PatientEventId === patientEventId &&\r\n encounter.EncounterId === encounterResponse.EncounterId) {\r\n encounter.PatientEventDetails = encounterResponse.PatientEventDetails;\r\n return _this.$q.when(encounter);\r\n }\r\n _this.encounterServiceNew.clearEncounterCache();\r\n _this.encounterServiceNew.setEncounter(encounterResponse);\r\n _this.encounterServiceNew.setOriginalEncounter(encounterResponse);\r\n return encounterResponse;\r\n })\r\n .catch(function (error) {\r\n _this.$log.error(error);\r\n _this.locationService.goToInvoice(practiceId, patientEventId);\r\n return null;\r\n });\r\n };\r\n Controller.prototype.updatePractice = function (encounter) {\r\n var patient = this.$rootScope.selectedPatient;\r\n if (patient) {\r\n encounter.PatientEventDetails.Patient = patient;\r\n this.$rootScope.selectedPatient = null;\r\n }\r\n this.setEncounterType(encounter);\r\n };\r\n Controller.prototype.setEncounterType = function (encounter) {\r\n if (!encounter.EncounterType) {\r\n encounter.EncounterType = Controller.MEDICAL_AID_CLAIM;\r\n }\r\n if (encounter.PatientEventDetails.Patient.PatientAccountDetails.IsCashAccount &&\r\n encounter.EncounterType == Controller.MEDICAL_AID_CLAIM) {\r\n encounter.EncounterType = Controller.CASHCLAIM;\r\n }\r\n this.$scope.encounterType = encounter.EncounterType;\r\n };\r\n Controller.prototype.updateMedicineStatus = function () {\r\n var chronicChecked = 0;\r\n var notAllowed = 0;\r\n var medicineItems = this.$filter('filter')(this.$scope.encounter.EncounterLineItems.LineItems, { LineType: EventTypeUtil.getNameByType(EventType.MEDICINE) });\r\n for (var _i = 0; _i < medicineItems.length; _i++) {\r\n var lineItem = medicineItems[_i];\r\n if (lineItem.SchemeRule === Controller.NOT_ALLOWED) {\r\n notAllowed++;\r\n if (lineItem.ChronicIndicator) {\r\n chronicChecked++;\r\n }\r\n }\r\n }\r\n this.$scope.medicineSchemeWarning = !(chronicChecked === notAllowed) && notAllowed > 0;\r\n };\r\n Controller.prototype.updateClinicalMetrics = function (encounter) {\r\n this.$scope.clinicalMetricsOptions.gender =\r\n this.$scope.encounter.PatientEventDetails.Patient.PatientDetails.Gender;\r\n this.$scope.clinicalMetricsOptions.metrics = this.$scope.encounter.ClinicalMetrics;\r\n };\r\n Controller.prototype.initConsultationDate = function (encounter) {\r\n var consDate = this.encounterServiceNew.getConsultationDate();\r\n if (!consDate) {\r\n consDate = this.getDateOfService(encounter);\r\n this.encounterServiceNew.setConsultationDate(consDate);\r\n }\r\n this.$scope.timeOfServiceStr = consDate.minutes() == 0 && consDate.hours() == 0 ? \"\" : consDate.local().format('LT');\r\n this.$scope.consultationDate = consDate.local().format(Controller.DATE_OUT_PATTERN);\r\n };\r\n Controller.prototype.updateHospitalDates = function () {\r\n if (this.$scope.admissionDate && this.$scope.admissionDate.isValid()) {\r\n this.$scope.encounter.EncounterLineItems.EncounterHeader.AdmissionDateTime =\r\n this.$scope.admissionDate.hours(12).minutes(0).format();\r\n }\r\n else {\r\n this.$scope.encounter.EncounterLineItems.EncounterHeader.AdmissionDateTime = null;\r\n }\r\n if (this.$scope.dischargeDate && this.$scope.dischargeDate.isValid()) {\r\n this.$scope.encounter.EncounterLineItems.EncounterHeader.DischargeDateTime =\r\n this.$scope.dischargeDate.hours(13).minutes(0).format();\r\n }\r\n else {\r\n this.$scope.encounter.EncounterLineItems.EncounterHeader.DischargeDateTime = null;\r\n }\r\n };\r\n Controller.prototype.getDateOfService = function (encounter) {\r\n var dateOfService = this.getValidDate(encounter.EncounterLineItems.EncounterHeader.DateOfService);\r\n if (!dateOfService && encounter && encounter.PatientEventDetails) {\r\n var event = encounter.PatientEventDetails;\r\n dateOfService = this.getValidDate(event.CheckInTime) || this.getValidDate(event.ScheduledTime);\r\n }\r\n if (dateOfService) {\r\n return dateOfService;\r\n }\r\n return this.moment.utc();\r\n };\r\n Controller.prototype.goToNext = function () {\r\n var _this = this;\r\n this.encounterServiceNew.next(this.$routeParams.practiceId, this.$scope.encounter)\r\n .catch(function (error) {\r\n _this.showDialog.error(error.ResponseMessage)\r\n .then(function () {\r\n if (error.ResponseCode === 511) {\r\n var patientId = _this.$scope.encounter.PatientEventDetails.Patient.PatientId;\r\n _this.locationService.goToChangePatient(_this.$routeParams.practiceId, patientId);\r\n }\r\n });\r\n });\r\n };\r\n Controller.prototype.submitEncounter = function () {\r\n var _this = this;\r\n var encounter = this.$scope.encounter;\r\n var practiceId = this.$routeParams.practiceId;\r\n var patientId = encounter.PatientEventDetails.Patient.PatientId;\r\n var consultationReports = this.encounterServiceNew.isAnyConsultationReport(encounter);\r\n if (consultationReports.length > 0) {\r\n this.locationService.goToConsultationReport(practiceId, patientId, consultationReports[0]);\r\n }\r\n else {\r\n this.encounterServiceNew.submitEncounter(practiceId, encounter)\r\n .then(function () {\r\n _this.locationService.goToHome(practiceId);\r\n })\r\n .catch(function (error) {\r\n _this.showDialog.error(error, ModalModule.ModalWidth._500px);\r\n });\r\n }\r\n };\r\n Controller.prototype.getValidDate = function (dateStr) {\r\n var date = this.moment.utc(dateStr);\r\n if (date.isValid()) {\r\n return date;\r\n }\r\n };\r\n Controller.MY_TEMPLATE = 'MyTemplate';\r\n Controller.COMMUNICATIONS = 'Communications';\r\n Controller.DATE_OUT_PATTERN = 'D MMMM, YYYY';\r\n Controller.MEDICAL_AID_CLAIM = 'MedicalAidInvoice';\r\n Controller.CASHCLAIM = 'CashInvoice';\r\n Controller.ZEROCLAIM = 'NoChargeInvoice';\r\n Controller.MEDICAL_INSURANCE = 'MedicalInsurance';\r\n Controller.NOT_ALLOWED = 'not allowed';\r\n Controller.NOT_APPLICABLE = 'not applicable';\r\n Controller.ALLOWED = 'allowed';\r\n Controller.NOT_SUPPORTED = 'not supported';\r\n Controller.VIEWED = 'viewed';\r\n Controller.NOT_VIEWED = 'not viewed';\r\n Controller.CONSULTATION = \"consultation\";\r\n Controller.METRICS = \"clinical metrics\";\r\n Controller.CONSULTING_ROOMS = 11;\r\n Controller.INPATIENT_HOSPITAL = 21;\r\n Controller.DAY_CLINIC = 24;\r\n Controller.PROCEDURES_NOT_TELEHEALT_SPECIFIC = ['0130', 'VCONM', 'VCOMS', 'VCOMSC'];\r\n return Controller;\r\n })();\r\n EncounterModule.Controller = Controller;\r\n})(EncounterModule || (EncounterModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('EncounterController', EncounterModule.Controller);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar EncounterModule;\r\n(function (EncounterModule) {\r\n var FeatureAllows = Domain.Billing.FeatureAllows;\r\n (function (ReportType) {\r\n ReportType[ReportType[\"All\"] = 0] = \"All\";\r\n ReportType[ReportType[\"Prescription\"] = 1] = \"Prescription\";\r\n ReportType[ReportType[\"MedicalCertificate\"] = 2] = \"MedicalCertificate\";\r\n ReportType[ReportType[\"Communication\"] = 3] = \"Communication\";\r\n })(EncounterModule.ReportType || (EncounterModule.ReportType = {}));\r\n var ReportType = EncounterModule.ReportType;\r\n var HealthIDVisit = (function () {\r\n function HealthIDVisit() {\r\n this.practiceId = '';\r\n this.patientId = '';\r\n this.status = EncounterModule.Controller.NOT_SUPPORTED;\r\n }\r\n return HealthIDVisit;\r\n })();\r\n EncounterModule.HealthIDVisit = HealthIDVisit;\r\n var ValidateOptions = (function () {\r\n function ValidateOptions() {\r\n }\r\n return ValidateOptions;\r\n })();\r\n EncounterModule.ValidateOptions = ValidateOptions;\r\n var Service = (function () {\r\n Service.$inject = [\"clinicalDomain\", \"modalService\", \"locationService\", \"$timeout\", \"dashboardService\", \"$window\", \"searchService\", \"$rootScope\", \"$q\", \"billingDomain\", \"funderConfiguration\", \"providerService\", \"showDialog\", \"trackingService\"];\r\n function Service(clinicalDomain, modalService, locationService, $timeout, dashboardService, $window, searchService, $rootScope, $q, billingDomain, funderConfiguration, providerService, showDialog, trackingService) {\r\n \"ngInject\";\r\n this.clinicalDomain = clinicalDomain;\r\n this.modalService = modalService;\r\n this.locationService = locationService;\r\n this.$timeout = $timeout;\r\n this.dashboardService = dashboardService;\r\n this.$window = $window;\r\n this.searchService = searchService;\r\n this.$rootScope = $rootScope;\r\n this.$q = $q;\r\n this.billingDomain = billingDomain;\r\n this.funderConfiguration = funderConfiguration;\r\n this.providerService = providerService;\r\n this.showDialog = showDialog;\r\n this.trackingService = trackingService;\r\n this.communicationTemplates = [];\r\n this.healthIDVisit = new HealthIDVisit();\r\n }\r\n Service.prototype.getProviderOptions = function (provider) {\r\n return this.providerService.buildProviderOptions(provider);\r\n };\r\n Service.prototype.getProvider = function (providerId) {\r\n return this.billingDomain.getProvider(providerId);\r\n };\r\n Service.prototype.getTotalPrice = function (lineItems) {\r\n if (!lineItems) {\r\n return 0;\r\n }\r\n var total = 0;\r\n for (var i = 0; i < lineItems.length; i++) {\r\n if (lineItems[i].Amount) {\r\n total += lineItems[i].Amount;\r\n }\r\n else if (lineItems[i].TotalIncVat) {\r\n total += lineItems[i].TotalIncVat;\r\n }\r\n }\r\n return total;\r\n };\r\n Service.prototype.clearEncounterCache = function () {\r\n this.setEncounter(null);\r\n this.setOriginalEncounter(null);\r\n this.setConsultationDate(null);\r\n this.setMemoryInsurerProcedures(null);\r\n };\r\n Service.prototype.setConsultationDate = function (date) {\r\n this.consultationDate = date;\r\n };\r\n Service.prototype.getConsultationDate = function () {\r\n return this.consultationDate;\r\n };\r\n Service.prototype.setEncounter = function (newEncounter) {\r\n this.encounter = newEncounter;\r\n };\r\n Service.prototype.setOriginalEncounter = function (newEncounter) {\r\n this.originalEncounter = angular.copy(newEncounter);\r\n };\r\n Service.prototype.isEncounterChanged = function () {\r\n return this.originalEncounter.Status !== \"Finalised\" &&\r\n this.originalEncounter.Status !== \"Cancelled\" &&\r\n this.originalEncounter.Status !== \"Completed\" &&\r\n !angular.equals(this.encounter, this.originalEncounter);\r\n };\r\n Service.prototype.getEncounter = function () {\r\n return this.encounter;\r\n };\r\n Service.prototype.setPatientEvent = function (patientEventDetails) {\r\n this.patientEventDetails = patientEventDetails;\r\n };\r\n Service.prototype.getPatientEvent = function () {\r\n return this.patientEventDetails;\r\n };\r\n Service.prototype.getRefferalTemplates = function (practiceId, encounterId) {\r\n return this.clinicalDomain.getEncounterReferrals(practiceId, encounterId);\r\n };\r\n Service.prototype.getReferralHtml = function (practiceId, encounter, communication) {\r\n return this.clinicalDomain\r\n .renderEncounterCommunication(practiceId, encounter.EncounterId, communication.CommunicationId, encounter)\r\n .then(function (response) {\r\n return response.Data;\r\n });\r\n };\r\n Service.prototype.updateCommunicationBody = function (practiceId, encounterId, communication) {\r\n var communicationBody = this.getCommunicationBodyById(communication.CommunicationId);\r\n return this.clinicalDomain\r\n .updateEncounterCommunicationBody(practiceId, encounterId, communication.CommunicationId, communicationBody, communication.Title)\r\n .then(function (response) {\r\n return response.Data;\r\n });\r\n };\r\n Service.prototype.getCommunicationBodyById = function (communicationId) {\r\n return this.communicationTemplates[communicationId];\r\n };\r\n Service.prototype.setCommunicationBodyById = function (communicationId, templateBody) {\r\n this.communicationTemplates[communicationId] = templateBody;\r\n };\r\n Service.prototype.getTemplatesByEncounter = function (practiceId, encounterId) {\r\n return this.clinicalDomain.getTemplatesByEncounter(practiceId, encounterId);\r\n };\r\n Service.prototype.getSupportingProviders = function (practiceId, type) {\r\n return this.billingDomain.getDoctorsByBillingNumber(practiceId, type);\r\n };\r\n Service.prototype.getProviderBranches = function (practiceId) {\r\n return this.billingDomain.getBranches(practiceId);\r\n };\r\n Service.prototype.getEncounterByPatientEventId = function (practiceId, patientEventId, notShowError) {\r\n return this.clinicalDomain.getEncounterByPatientVisit(practiceId, patientEventId, null, notShowError);\r\n };\r\n Service.prototype.getEncounterById = function (practiceId, encounterId) {\r\n return this.clinicalDomain.getEncounter(practiceId, encounterId);\r\n };\r\n Service.prototype.getHistoricalMetrics = function (practiceId, patientId) {\r\n return this.clinicalDomain.getHistoricalMetrics(practiceId, patientId);\r\n };\r\n Service.prototype.addTemplateToEncounter = function (practiceId, encounter, template) {\r\n var _this = this;\r\n if (template.TemplateType === 'Diagnosis' && template.EncounterLineItems.EncounterHeader) {\r\n var diagnoses = template.EncounterLineItems.EncounterHeader.Diagnosis;\r\n for (var i = 0; i < diagnoses.length; i++) {\r\n diagnoses[i].PrimaryIndicator = false;\r\n }\r\n }\r\n return this.clinicalDomain.mergeLineItemsByEncounter(practiceId, encounter, template)\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n _this.trackingService.itemAddedToEncounter(encounter, template);\r\n _this.setUpPrimaryIndicator(response.Data.MergedEncounter.EncounterLineItems.EncounterHeader\r\n .Diagnosis);\r\n return response.Data;\r\n }\r\n return null;\r\n });\r\n };\r\n Service.prototype.setUpPrimaryIndicator = function (diagnoses) {\r\n if (diagnoses) {\r\n var setUp = false;\r\n for (var i = 0; i < diagnoses.length; i++) {\r\n if (diagnoses[i].PrimaryIndicator) {\r\n if (setUp) {\r\n diagnoses[i].PrimaryIndicator = false;\r\n }\r\n setUp = true;\r\n }\r\n }\r\n if (!setUp && diagnoses.length) {\r\n diagnoses[0].PrimaryIndicator = true;\r\n }\r\n }\r\n };\r\n Service.prototype.removeLine = function (encounter, obj, type) {\r\n switch (type) {\r\n case EventType.DIAGNOSIS:\r\n this.removeDiagnosisFromEncounter(encounter, obj);\r\n break;\r\n case EventType.PRESCRIPTION:\r\n this.removePrescriptionFromEncounter(encounter, obj);\r\n break;\r\n case EventType.COMMUNICATION:\r\n this.removeObjFromArray(encounter.Communications, obj);\r\n break;\r\n case EventType.PROCEDURE:\r\n this.removeProcedureFromEncounter(encounter, obj);\r\n break;\r\n case EventType.MODIFIER:\r\n this.removeModifierFromEncounter(encounter, obj);\r\n break;\r\n default:\r\n this.removeLineItemFromEncounter(encounter, obj);\r\n }\r\n this.setEncounter(encounter);\r\n this.trackingService.removedLineItemFromEncounter(encounter, obj, type);\r\n };\r\n Service.prototype.removeDiagnosisFromEncounter = function (encounter, diagnosis) {\r\n var diagnoses = encounter.EncounterLineItems.EncounterHeader.Diagnosis;\r\n this.removeObjFromArray(diagnoses, diagnosis);\r\n if (diagnosis.PrimaryIndicator && diagnoses.length) {\r\n diagnoses[0].PrimaryIndicator = true;\r\n }\r\n if (encounter.MedicalCertificate) {\r\n this.removeDiagnosis(encounter.MedicalCertificate.Diagnoses, diagnosis);\r\n }\r\n if (encounter.MedicationsPrescribed) {\r\n var lines = encounter.MedicationsPrescribed.MedicationPrescriptionLines;\r\n for (var i = 0; i < lines.length; i++) {\r\n var diags = lines[i].Diagnosis;\r\n this.removeDiagnosis(diags, diagnosis);\r\n }\r\n }\r\n };\r\n Service.prototype.removeModifierFromEncounter = function (encounter, line) {\r\n var lines = encounter.EncounterLineItems.LineItems;\r\n for (var i = 0; i < lines.length; i++) {\r\n if (lines[i].LineType === \"Procedure\" || lines[i].LineType === \"Modifier\") {\r\n lines[i].Amount = 0;\r\n lines[i].TotalIncVat = 0;\r\n lines[i].PriceOverride = lines[i].LineType === \"Procedure\" ? false : lines[i].PriceOverride;\r\n }\r\n }\r\n this.removeObjFromArray(lines, line);\r\n };\r\n Service.prototype.removeProcedureFromEncounter = function (encounter, line) {\r\n var _this = this;\r\n var lines = encounter.EncounterLineItems.LineItems;\r\n var items = [line];\r\n for (var i = lines.indexOf(line) + 1; i < lines.length; i++) {\r\n if (lines[i].LineType === \"Modifier\") {\r\n items.push(lines[i]);\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n var hasModifiers = items.some(function (item) { return item.LineType === \"Modifier\"; });\r\n if (hasModifiers) {\r\n this.modalService.confirm(\"Removing this procedure will also remove the modifiers associated to them\")\r\n .then(function () {\r\n for (var j = 0; j < items.length; j++) {\r\n _this.removeObjFromArray(lines, items[j]);\r\n }\r\n });\r\n }\r\n else {\r\n this.removeObjFromArray(lines, line);\r\n }\r\n };\r\n Service.prototype.removeLineItemFromEncounter = function (encounter, line) {\r\n var lines = encounter.EncounterLineItems.LineItems;\r\n this.removeObjFromArray(lines, line);\r\n };\r\n Service.prototype.removePrescriptionFromEncounter = function (encounter, line) {\r\n var lines = encounter.MedicationsPrescribed.MedicationPrescriptionLines;\r\n this.removeObjFromArray(lines, line);\r\n };\r\n Service.prototype.removeObjFromArray = function (arr, obj) {\r\n var index = arr.indexOf(obj);\r\n if (index > -1) {\r\n arr.splice(index, 1);\r\n }\r\n };\r\n Service.prototype.removeDiagnosis = function (diagnoses, diagnosis) {\r\n for (var i = 0; i < diagnoses.length; i++) {\r\n if (diagnoses[i].DiagnosisCode == diagnosis.DiagnosisCode) {\r\n diagnoses.splice(i, 1);\r\n break;\r\n }\r\n }\r\n };\r\n Service.prototype.getPrescriptionHistory = function (practiceId, patientId) {\r\n return this.clinicalDomain.getPrescriptionHistory(practiceId, patientId);\r\n };\r\n Service.prototype.showLineItem = function ($scope, obj, type, validateOptions) {\r\n var _this = this;\r\n switch (type) {\r\n case EventType.MODIFIER:\r\n this.trackingService.openedDetailsDialog(this.encounter, obj, type);\r\n if (obj) {\r\n return this.clinicalDomain.getModifierInfo(this.encounter.PatientEventDetails.PracticeId, obj.ChargeCode)\r\n .then(function (modifierInfo) {\r\n var requiredParams = modifierInfo.RequiredParameters;\r\n if (!((modifierInfo.ImplementationStatus === \"Calculated\" ||\r\n modifierInfo.ImplementationStatus === \"Parameters\") &&\r\n requiredParams.length === 0)) {\r\n return _this.modalService.showModifierDetails(_this.encounter, obj, $scope.assistingDoctor);\r\n }\r\n _this.modalService.error(\"No additional modifier data required\");\r\n }, function () {\r\n return _this.modalService.showModifierDetails(_this.encounter, obj, $scope.assistingDoctor);\r\n });\r\n }\r\n return this.modalService.showModifierDetails(this.encounter, null, $scope.assistingDoctor);\r\n case EventType.PRESCRIPTION:\r\n var prescriptionLine = obj;\r\n this.trackingService.openedDetailsDialog(this.encounter, obj, type);\r\n this.modalService\r\n .openDetailsItem(prescriptionLine, type, validateOptions)\r\n .then(function (model) {\r\n angular.extend(prescriptionLine, model);\r\n });\r\n break;\r\n case EventType.DIAGNOSIS:\r\n break;\r\n default:\r\n var line = obj;\r\n this.trackingService.openedDetailsDialog(this.encounter, obj, type);\r\n return this.modalService\r\n .openDetailsItem(line, type, validateOptions)\r\n .then(function (model) {\r\n if (!model.PriceOverride) {\r\n if (model.LineType === 'Procedure') {\r\n var priceByOne = line.TotalIncVat / line.ChargeQuan;\r\n model.TotalIncVat = priceByOne * model.ChargeQuan;\r\n model.Amount = priceByOne * model.ChargeQuan;\r\n }\r\n else {\r\n model.TotalIncVat = line.TotalExcVat || model.TotalIncVat || 0;\r\n model.UnitPrice = line.UnitPrice || model.UnitPrice || 0;\r\n model.TotalExcVat = model.TotalExcVat || model.TotalExcVat || 0;\r\n }\r\n }\r\n angular.extend(line, model);\r\n $scope.totalPrice = _this\r\n .getTotalPrice(_this.encounter.EncounterLineItems.LineItems);\r\n return line;\r\n });\r\n }\r\n return this.$q.reject();\r\n };\r\n Service.prototype.toggleDiagnosis = function (diagnoses, index) {\r\n for (var i = 0; i < diagnoses.length; i++) {\r\n diagnoses[i].PrimaryIndicator = false;\r\n }\r\n diagnoses[index].PrimaryIndicator = true;\r\n this.$timeout(function () {\r\n var diagnosis = angular.copy(diagnoses[index]);\r\n diagnoses.splice(index, 1);\r\n diagnoses.unshift(diagnosis);\r\n }, 400);\r\n };\r\n Service.prototype.mergePlaceOfService = function (practiceId, encounter) {\r\n return this.clinicalDomain\r\n .mergePlaceOfService(practiceId, encounter.EncounterId, encounter.EncounterLineItems)\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n encounter.EncounterLineItems = response.Data;\r\n return encounter;\r\n }\r\n });\r\n };\r\n Service.prototype.setMemoryInsurerProcedures = function (procedures) {\r\n this.memoryInsurerProcedures = procedures;\r\n };\r\n Service.prototype.getMemoryInsurerProcedures = function () {\r\n return this.memoryInsurerProcedures;\r\n };\r\n Service.prototype.getInsurerProcedures = function (practiceId, encounterId, insurerXref) {\r\n return this.searchService.getInsurerProcedures(practiceId, encounterId, insurerXref);\r\n };\r\n Service.prototype.refreshEncounter = function (practiceId, encounterType, encounter) {\r\n return this.clinicalDomain.refreshEncounter(practiceId, encounterType, encounter)\r\n .then(function (response) {\r\n if (response.Sucess === true) {\r\n encounter = response.Data;\r\n return encounter;\r\n }\r\n });\r\n };\r\n Service.prototype.submitEncounter = function (practiceId, encounter) {\r\n var _this = this;\r\n var that = this;\r\n that.$rootScope.showProgressScreen = true;\r\n return this.clinicalDomain.submitEncounter(practiceId, encounter)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n return that.$q.reject(response.ResponseMessage);\r\n }\r\n else {\r\n that.$rootScope.showThankYou = true;\r\n _this.healthIDVisit.status = response.Data.HealthIDViewed;\r\n if (encounter && encounter.EncounterType === 'MedicalInsurance') {\r\n _this.healthIDVisit.status = EncounterModule.Controller.NOT_SUPPORTED;\r\n }\r\n _this.healthIDVisit.practiceId = practiceId;\r\n _this.healthIDVisit.patientId = encounter.PatientEventDetails.Patient.PatientId;\r\n that.setConsultationDate(null);\r\n that.setEncounter(null);\r\n return response.Data;\r\n }\r\n })\r\n .finally(function () {\r\n that.$rootScope.showProgressScreen = false;\r\n });\r\n };\r\n Service.prototype.getHealthIDVisit = function () {\r\n return this.healthIDVisit;\r\n };\r\n Service.prototype.saveEncounter = function (practiceId, encounter) {\r\n return this.clinicalDomain.saveEncounter(practiceId, encounter);\r\n };\r\n Service.prototype.priceEncounter = function (practiceId, encounter, lineItem) {\r\n return this.clinicalDomain.setupPrice(practiceId, encounter)\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n var encounterResponse = response.Data;\r\n if (lineItem) {\r\n for (var item in encounter.EncounterLineItems.LineItems) {\r\n if (encounter.EncounterLineItems.LineItems[item].NappiCode === lineItem.NappiCode) {\r\n encounter.EncounterLineItems.LineItems[item] = encounterResponse.EncounterLineItems.LineItems\r\n .filter(function (i) { return i.NappiCode === lineItem.NappiCode; }).pop();\r\n }\r\n }\r\n }\r\n else {\r\n encounter.EncounterLineItems.LineItems = encounterResponse.EncounterLineItems.LineItems;\r\n }\r\n }\r\n return response;\r\n });\r\n };\r\n Service.prototype.getSpecialityRuleByCode = function (code) {\r\n return this.billingDomain.getSpecialityRulesByCode(code);\r\n };\r\n Service.prototype.next = function (practiceId, encounter) {\r\n var _this = this;\r\n var that = this;\r\n return this.clinicalDomain.validateEncounter(practiceId, encounter)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n if (response.ResponseCode === 530) {\r\n _this.showDialog\r\n .confirm(\"You have already completed a patient visit for this patient on the selected day. \" +\r\n \"You may continue to finalise this encounter, \" +\r\n \"which may result in a duplicate invoice and claim being sent. Would you like to continue?\")\r\n .then(function () {\r\n that.locationService.goToClinicalVisitOutcomes(practiceId);\r\n });\r\n }\r\n else {\r\n return that.$q.reject(response);\r\n }\r\n }\r\n else {\r\n var data = response.Data;\r\n that.locationService.goToClinicalVisitOutcomes(practiceId);\r\n }\r\n });\r\n };\r\n Service.prototype.getMedicalInsuranseAllows = function () {\r\n var allows = new FeatureAllows();\r\n allows.AllowMedicine = false;\r\n allows.AllowConsumable = false;\r\n allows.AllowPrescription = false;\r\n allows.AllowDiagnosis = false;\r\n allows.AllowProcedure = false;\r\n allows.AllowMyTemplates = false;\r\n allows.AllowMedicalInsurance = true;\r\n return allows;\r\n };\r\n Service.prototype.openSickNote = function (encounter) {\r\n var config = new ModalModule.Config('Sick note', 'screens/consultation/modal/dialog/sicknote-details.html');\r\n return this.modalService.openDetails(encounter, config);\r\n };\r\n Service.prototype.isAnyConsultationReport = function (encounter) {\r\n var reports = [];\r\n encounter = encounter || this.getEncounter();\r\n if (encounter) {\r\n if (encounter.MedicationsPrescribed &&\r\n encounter.MedicationsPrescribed.MedicationPrescriptionLines &&\r\n encounter.MedicationsPrescribed.MedicationPrescriptionLines.length) {\r\n reports.push(ReportType.Prescription);\r\n }\r\n if (encounter.MedicalCertificate) {\r\n reports.push(ReportType.MedicalCertificate);\r\n }\r\n return reports;\r\n }\r\n return [];\r\n };\r\n Service.prototype.mergeReports = function (prescriptionReport, sicknoteReport) {\r\n var separator = '
';\r\n var printTopIndent = '
';\r\n var prescriptionA = prescriptionReport.substr(0, prescriptionReport.lastIndexOf(\"\"));\r\n var prescriptionB = prescriptionReport.substr(prescriptionReport.lastIndexOf(\"\"));\r\n var sickNoteContent = sicknoteReport.substr(sicknoteReport.lastIndexOf(\"\") + 6, sicknoteReport.length -\r\n sicknoteReport.substr(0, sicknoteReport.lastIndexOf(\"\") + 6).length -\r\n sicknoteReport.substr(sicknoteReport.lastIndexOf(\"\")).length);\r\n return prescriptionA + separator + printTopIndent + sickNoteContent + prescriptionB;\r\n };\r\n Service.prototype.createHiddenReportFrame = function (data) {\r\n var container = angular.element('.container');\r\n var date = new Date();\r\n var postfix = date.getMilliseconds() + '' + date.getSeconds();\r\n var frameUnicId = 'print_frame' + postfix;\r\n var frame = '';\r\n container.append(frame);\r\n var report = angular.element('#' + frameUnicId);\r\n this.$timeout(function () {\r\n var body = report.contents().find('body');\r\n body.html(data);\r\n }, 100);\r\n return frameUnicId;\r\n };\r\n Service.prototype.printReport = function (frameId) {\r\n var report = angular.element('#' + frameId);\r\n var printContents = document.getElementById(frameId).contentWindow;\r\n setTimeout(function () {\r\n printContents.focus();\r\n }, 50);\r\n setTimeout(function () {\r\n printContents.print();\r\n report.remove();\r\n }, 100);\r\n };\r\n Service.prototype.getSpecificRule = function (practiceId, code, dateOfService) {\r\n return this.funderConfiguration.getSpecificRule(practiceId, code, dateOfService);\r\n };\r\n Service.DATE_PATTERN = \"YYYY-MM-DD\";\r\n return Service;\r\n })();\r\n EncounterModule.Service = Service;\r\n})(EncounterModule || (EncounterModule = {}));\r\nangular.module('DoctorApp')\r\n .service('encounterServiceNew', EncounterModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalTemplateModule;\r\n(function (ClinicalTemplateModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"$q\", \"clinicalDomain\"];\r\n function Service(httpService, $q, clinicalDomain) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.$q = $q;\r\n this.clinicalDomain = clinicalDomain;\r\n this.encounter = new Domain.Clinical.Encounter();\r\n this.templates = [];\r\n }\r\n Service.prototype.setMainTemplate = function (mainTemplate) {\r\n this.mainTemplate = mainTemplate;\r\n };\r\n Service.prototype.getMainTemplate = function () {\r\n return this.mainTemplate;\r\n };\r\n Service.prototype.setTemplates = function (newTemplates) {\r\n this.templates = newTemplates;\r\n };\r\n Service.prototype.getTemplates = function () {\r\n return this.templates;\r\n };\r\n Service.prototype.execGetPracticeTemplate = function (practiceId, templateId) {\r\n var isExists = !!this.mainTemplate;\r\n if (isExists) {\r\n var deferred = this.$q.defer();\r\n deferred.resolve(this.mainTemplate);\r\n return deferred.promise;\r\n }\r\n return this.clinicalDomain.getTemplate(practiceId, templateId);\r\n };\r\n Service.prototype.getTemplatesByEncounter = function (practiceId, encounterId) {\r\n return this.clinicalDomain.getTemplatesByEncounter(practiceId, encounterId);\r\n };\r\n Service.prototype.loadPracticeTemplates = function (practiceId) {\r\n this.clinicalDomain.invalidateEncounterTemplateCache(practiceId);\r\n return this.clinicalDomain.getTemplates(practiceId);\r\n };\r\n Service.prototype.saveTemplate = function (practiceId, template) {\r\n return this.clinicalDomain.createTemplate(practiceId, template);\r\n };\r\n Service.prototype.updateTemplate = function (practiceId, template) {\r\n return this.clinicalDomain.updateTemplate(practiceId, template);\r\n };\r\n Service.prototype.removeTemplate = function (practiceId, template) {\r\n return this.clinicalDomain.removeTemplate(practiceId, template.TemplateId);\r\n };\r\n Service.prototype.removeTemplatesByType = function (practiceId, type) {\r\n return this.clinicalDomain.removeTemplatesByType(practiceId, type);\r\n };\r\n Service.prototype.removeTemplates = function (practiceId) {\r\n return this.clinicalDomain.removeTemplates(practiceId);\r\n };\r\n Service.prototype.mergeTemplates = function (practiceId, oldTemplate, newTemplate) {\r\n return this.mergeLineItems(practiceId, oldTemplate, newTemplate);\r\n };\r\n Service.prototype.mergeLineItems = function (practiceId, mainTemplate, template) {\r\n return this.clinicalDomain.mergeLineItemsByTemplates(practiceId, mainTemplate, template);\r\n };\r\n Service.prototype.removeLineFromTemplate = function (mainTemplate, obj, type) {\r\n switch (type) {\r\n case EventType.DIAGNOSIS:\r\n var diagnoses = mainTemplate.EncounterLineItems.EncounterHeader.Diagnosis;\r\n var diagnosis = obj;\r\n this.removeObjFromArray(diagnoses, diagnosis);\r\n if (diagnosis.PrimaryIndicator && diagnoses.length) {\r\n diagnoses[0].PrimaryIndicator = true;\r\n }\r\n break;\r\n case EventType.PRESCRIPTION:\r\n var prescriptions = mainTemplate.MedicationPrescriptionLines;\r\n var prescription = obj;\r\n this.removeObjFromArray(prescriptions, prescription);\r\n break;\r\n case EventType.COMMUNICATION:\r\n var communications = mainTemplate.Communications;\r\n var communication = obj;\r\n this.removeObjFromArray(communications, communication);\r\n break;\r\n default:\r\n var lines = mainTemplate.EncounterLineItems.LineItems;\r\n var line = obj;\r\n this.removeObjFromArray(lines, line);\r\n }\r\n };\r\n Service.prototype.removeObjFromArray = function (arr, obj) {\r\n var index = arr.indexOf(obj);\r\n if (index > -1) {\r\n arr.splice(index, 1);\r\n }\r\n };\r\n return Service;\r\n })();\r\n ClinicalTemplateModule.Service = Service;\r\n})(ClinicalTemplateModule || (ClinicalTemplateModule = {}));\r\nangular.module('DoctorApp')\r\n .service('clinicalTemplateServiceNew', ClinicalTemplateModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar InvoiceModule;\r\n(function (InvoiceModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"billingDomain\", \"funderConfiguration\", \"moment\"];\r\n function Service(billingDomain, funderConfiguration, moment) {\r\n \"ngInject\";\r\n this.billingDomain = billingDomain;\r\n this.funderConfiguration = funderConfiguration;\r\n this.moment = moment;\r\n }\r\n Service.prototype.setConsultationDate = function (date) {\r\n this.consultationDate = date;\r\n };\r\n Service.prototype.getConsultationDate = function () {\r\n return this.consultationDate;\r\n };\r\n Service.prototype.setInvoice = function (newInvoice) {\r\n this.invoice = newInvoice;\r\n };\r\n Service.prototype.getInvoice = function () {\r\n return this.invoice;\r\n };\r\n Service.prototype.loadInvoice = function (patientEventId) {\r\n return this.billingDomain.getInvoice(patientEventId);\r\n };\r\n Service.prototype.addTemplateToEvent = function (invoice, template) {\r\n if (template.InvoiceLineItemsVo && template.InvoiceLineItemsVo.InvoiceHeader) {\r\n var diagnoses = template.InvoiceLineItemsVo.InvoiceHeader.Diagnosis;\r\n for (var i = 0; i < diagnoses.length; i++) {\r\n diagnoses[i].PrimaryIndicator = false;\r\n }\r\n }\r\n var that = this;\r\n return this.mergeInvoiceLineItems(invoice.InvoiceId, invoice.InvoiceLineItems, template)\r\n .then(function (response) {\r\n if (response.Sucess == true) {\r\n that.setUpPrimaryIndicator(response.Data.InvoiceHeader.Diagnosis);\r\n invoice.InvoiceLineItems = response.Data;\r\n return invoice;\r\n }\r\n });\r\n };\r\n Service.prototype.setUpPrimaryIndicator = function (diagnoses) {\r\n var setUp = false;\r\n for (var i = 0; i < diagnoses.length; i++) {\r\n if (diagnoses[i].PrimaryIndicator) {\r\n if (setUp) {\r\n diagnoses[i].PrimaryIndicator = false;\r\n }\r\n setUp = true;\r\n }\r\n }\r\n if (!setUp && diagnoses.length) {\r\n diagnoses[0].PrimaryIndicator = true;\r\n }\r\n };\r\n Service.prototype.removeDiagnosisFromInvoice = function (invoice, diagnosis) {\r\n var diagnoses = invoice.InvoiceLineItems.InvoiceHeader.Diagnosis;\r\n this.removeObjFromArray(diagnoses, diagnosis);\r\n if (diagnosis.PrimaryIndicator && diagnoses.length) {\r\n diagnoses[0].PrimaryIndicator = true;\r\n }\r\n };\r\n Service.prototype.removeLineItemFromInvoice = function (invoice, line) {\r\n var lines = invoice.InvoiceLineItems.LineItems;\r\n this.removeObjFromArray(lines, line);\r\n };\r\n Service.prototype.removeObjFromArray = function (arr, obj) {\r\n var index = arr.indexOf(obj);\r\n if (index > -1) {\r\n arr.splice(index, 1);\r\n }\r\n };\r\n Service.prototype.mergeInvoiceLineItems = function (invoiceId, invoiceLineItems, template) {\r\n return this.billingDomain.mergeInvoiceLineItems(invoiceId, invoiceLineItems, template);\r\n };\r\n Service.prototype.mergeHospital = function (invoice) {\r\n return this.billingDomain.mergeInvoiceHospital(invoice.InvoiceId, invoice.InvoiceLineItems)\r\n .then(function (response) {\r\n invoice.InvoiceLineItems = response.Data;\r\n return invoice;\r\n });\r\n };\r\n Service.prototype.submitInvoice = function (invoice) {\r\n return this.billingDomain.submitInvoice(invoice);\r\n };\r\n Service.prototype.getSpecificRule = function (practiceId, code) {\r\n return this.funderConfiguration.getSpecificRule(practiceId, code, null);\r\n };\r\n return Service;\r\n })();\r\n InvoiceModule.Service = Service;\r\n})(InvoiceModule || (InvoiceModule = {}));\r\nangular.module('DoctorApp')\r\n .service('invoiceService', InvoiceModule.Service);\r\n/// \r\n/// \r\n/// \r\nvar TemplateModule;\r\n(function (TemplateModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"$q\", \"invoiceService\", \"billingDomain\"];\r\n function Service(httpService, $q, invoiceService, billingDomain) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.$q = $q;\r\n this.invoiceService = invoiceService;\r\n this.billingDomain = billingDomain;\r\n }\r\n Service.prototype.setMainTemplate = function (template) {\r\n this.mainTemplate = template;\r\n };\r\n Service.prototype.getMainTemplate = function () {\r\n return this.mainTemplate;\r\n };\r\n Service.prototype.execGetPracticeTemplate = function (templateId) {\r\n return this.billingDomain.getTemplate(templateId);\r\n };\r\n Service.prototype.loadInvoiceTemplates = function (invoiceId) {\r\n return this.billingDomain.getTemplatesByInvoice(invoiceId);\r\n };\r\n Service.prototype.loadPracticeTemplates = function () {\r\n return this.billingDomain.getTemplates();\r\n };\r\n Service.prototype.saveTemplate = function (template) {\r\n return this.billingDomain.saveTemplate(template);\r\n };\r\n Service.prototype.updateTemplate = function (template) {\r\n return this.billingDomain.updateTemplate(template);\r\n };\r\n Service.prototype.removeTemplate = function (template) {\r\n return this.billingDomain.removeTemplate(template.TemplateId);\r\n };\r\n Service.prototype.mergeTemplates = function (mainTemplate, newTemplate) {\r\n return this.billingDomain.mergeTemplateLineItems(mainTemplate.InvoiceLineItemsVo, newTemplate)\r\n .then(function (response) {\r\n mainTemplate.InvoiceLineItemsVo = response.Data;\r\n });\r\n };\r\n Service.prototype.removeTemplateFromTemplate = function (mainTemplate, template, type) {\r\n var copyMainTemplate = angular.copy(mainTemplate);\r\n var invoiceLineItems = copyMainTemplate.InvoiceLineItemsVo;\r\n var findIndex = -1;\r\n if (type == \"Diagnosis\") {\r\n var diagnosis = invoiceLineItems.InvoiceHeader.Diagnosis;\r\n var primaryD = false;\r\n for (var i = 0; i < diagnosis.length; i++) {\r\n if (template.DiagnosisCode == diagnosis[i].DiagnosisCode) {\r\n primaryD = template.PrimaryIndicator === true;\r\n findIndex = i;\r\n break;\r\n }\r\n }\r\n if (findIndex !== -1) {\r\n diagnosis.splice(findIndex, 1);\r\n if (diagnosis[0]) {\r\n diagnosis[0].PrimaryIndicator = primaryD;\r\n }\r\n }\r\n }\r\n else {\r\n var lineItems = invoiceLineItems.LineItems;\r\n for (i = 0; i < lineItems.length; i++) {\r\n if (template.NappiCode == lineItems[i].NappiCode) {\r\n findIndex = i;\r\n break;\r\n }\r\n }\r\n if (findIndex !== -1) {\r\n lineItems.splice(findIndex, 1);\r\n }\r\n }\r\n return copyMainTemplate;\r\n };\r\n return Service;\r\n })();\r\n TemplateModule.Service = Service;\r\n})(TemplateModule || (TemplateModule = {}));\r\nangular.module('DoctorApp')\r\n .service('invoiceTemplateService', TemplateModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar PatientModule;\r\n(function (PatientModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"invoiceService\", \"encounterServiceNew\", \"locationService\", \"patientDomain\", \"billingDomain\"];\r\n function Service(invoiceService, encounterServiceNew, locationService, patientDomain, billingDomain) {\r\n \"ngInject\";\r\n this.invoiceService = invoiceService;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.locationService = locationService;\r\n this.patientDomain = patientDomain;\r\n this.billingDomain = billingDomain;\r\n this.patientEventID = '';\r\n }\r\n Service.prototype.concatPatient = function (name, surname) {\r\n return name + ' ' + surname;\r\n };\r\n Service.prototype.getPatients = function (practiceId, patientName) {\r\n return this.patientDomain.getPatientsByName(practiceId, patientName);\r\n };\r\n Service.prototype.getPatientsFromNationalDb = function (practiceId, patientName) {\r\n return this.patientDomain.getMasterPatientsByName(practiceId, patientName);\r\n };\r\n Service.prototype.checkPatientIn = function (practiceId, patient) {\r\n return this.patientDomain.checkPatientVisit(practiceId, patient);\r\n };\r\n Service.prototype.claimResponse = function (patientEvent) {\r\n var _this = this;\r\n return this.billingDomain.getInvoice(patientEvent.PatientEventId)\r\n .then(function (newInvoice) {\r\n _this.locationService.gotToClaimResponse(newInvoice.InvoiceId);\r\n });\r\n };\r\n Service.prototype.getPracticeXRef = function (providerId) {\r\n return this.billingDomain.getProvider(providerId)\r\n .then(function (provider) {\r\n return provider.PracticeXRef;\r\n });\r\n };\r\n Service.prototype.cancelPatientEvent = function (practiceId, patientEvent) {\r\n return this.patientDomain.cancelPatientEvent(practiceId, patientEvent.PatientEventId);\r\n };\r\n Service.prototype.createNewPatient = function (practiceId, updateAccount, patient, looseValidation) {\r\n if (looseValidation === void 0) { looseValidation = false; }\r\n return this.patientDomain.createPatient(practiceId, updateAccount === 1, patient, looseValidation);\r\n };\r\n Service.prototype.changePatient = function (practiceId, updateAccount, patient, looseValidation) {\r\n if (looseValidation === void 0) { looseValidation = false; }\r\n return this.patientDomain.changePatient(practiceId, updateAccount === 1, patient, looseValidation);\r\n };\r\n Service.prototype.getPatientById = function (practiceId, patientId) {\r\n return this.patientDomain.getPatientById(practiceId, patientId);\r\n };\r\n Service.prototype.getPatientByAccNo = function (practiceId, accountId) {\r\n return this.patientDomain.getPatientByAccNo(practiceId, accountId);\r\n };\r\n Service.prototype.addToWaitingRoom = function (practiceId, patientId) {\r\n return this.patientDomain.addToWaitingRoom(practiceId, patientId);\r\n };\r\n Service.prototype.getMedicalAids = function (practiceId) {\r\n return this.patientDomain.getMedSchemes(practiceId);\r\n };\r\n Service.prototype.removePatient = function (practiceId, patient) {\r\n return this.patientDomain.removePatient(practiceId, patient.PatientId);\r\n };\r\n Service.prototype.auditEvent = function (practiceId, patientEvent) {\r\n var _this = this;\r\n this.encounterServiceNew.getEncounterByPatientEventId(practiceId, patientEvent.PatientEventId)\r\n .then(function (response) {\r\n _this.locationService.goToAuditEvents(patientEvent.PracticeId, response.EncounterId);\r\n });\r\n };\r\n Service.prototype.setPreCreatedPatient = function (patient) {\r\n this.preCreatedPatient = patient;\r\n };\r\n Service.prototype.getPreCreatedPatient = function () {\r\n return this.preCreatedPatient;\r\n };\r\n Service.prototype.clearPatientDetails = function (patient) {\r\n patient.PatientXRef = null;\r\n patient.PatientId = \"\";\r\n patient.PatientDetails.FirstName = \"\";\r\n patient.PatientDetails.Surname = \"\";\r\n patient.PatientDetails.DateOfBirth = \"\";\r\n patient.PatientDetails.ContactNo = \"\";\r\n patient.PatientDetails.IdentityNo = \"\";\r\n patient.PatientDetails.EmailAddress = \"\";\r\n patient.PatientDetails.Gender = \"Male\";\r\n patient.PatientDetails.Title = \"Mr\";\r\n patient.FileNo = \"\";\r\n patient.PatientAccountDetails.MedicalAidDependentCode = \"\";\r\n return patient;\r\n };\r\n Service.prototype.parseSaId = function (id) {\r\n var idNumber = id || \"\";\r\n var year = +(idNumber.substr(0, 2));\r\n var currentYear = +(new Date().getFullYear().toString().substr(2, 2));\r\n var tempDate = new Date(year <= currentYear ? 2000 + year : year, idNumber.substr(2, 2) - 1, idNumber.substr(4, 2));\r\n var idDate = tempDate.getDate();\r\n var idMonth = tempDate.getMonth() + 1;\r\n var idYear = tempDate.getFullYear();\r\n var fullDate = idYear +\r\n \"/\" +\r\n (idMonth < 10 ? '0' + idMonth : idMonth) +\r\n \"/\" +\r\n (idDate < 10 ? '0' + idDate : idDate);\r\n var genderCode = idNumber.substr(6, 4);\r\n var gender = parseInt(genderCode) < 5000 ? \"Female\" : \"Male\";\r\n return { date: fullDate, gender: gender };\r\n };\r\n return Service;\r\n })();\r\n PatientModule.Service = Service;\r\n})(PatientModule || (PatientModule = {}));\r\nangular.module('DoctorApp')\r\n .service('patientService', PatientModule.Service);\r\n/// \r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var FunderConfiguration;\r\n (function (FunderConfiguration) {\r\n var SpecificRule = (function () {\r\n function SpecificRule() {\r\n }\r\n return SpecificRule;\r\n })();\r\n FunderConfiguration.SpecificRule = SpecificRule;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"authService\"];\r\n function Service(httpService, authService) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.authService = authService;\r\n }\r\n Service.prototype.getSpecificRule = function (practiceId, patientId, dateOfService) {\r\n return this.httpService.get('v1/' + practiceId + '/patient/funderconfigurations/specificrules/' + patientId + '/' + dateOfService);\r\n };\r\n return Service;\r\n })();\r\n FunderConfiguration.Service = Service;\r\n })(FunderConfiguration = Domain.FunderConfiguration || (Domain.FunderConfiguration = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('funderConfiguration', Domain.FunderConfiguration.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar PracticeModule;\r\n(function (PracticeModule) {\r\n var SchemeObject = Domain.Billing.SchemeObject;\r\n var Option = (function () {\r\n function Option(number, name, item) {\r\n this.val = number;\r\n this.name = name;\r\n this.item = item;\r\n }\r\n return Option;\r\n })();\r\n PracticeModule.Option = Option;\r\n var Service = (function () {\r\n Service.$inject = [\"billingDomain\", \"accountDomain\", \"patientDomain\", \"locationService\", \"$rootScope\", \"storageService\", \"signalrService\", \"providerService\"];\r\n function Service(billingDomain, accountDomain, patientDomain, locationService, $rootScope, storageService, signalrService, providerService) {\r\n \"ngInject\";\r\n this.billingDomain = billingDomain;\r\n this.accountDomain = accountDomain;\r\n this.patientDomain = patientDomain;\r\n this.locationService = locationService;\r\n this.$rootScope = $rootScope;\r\n this.storageService = storageService;\r\n this.signalrService = signalrService;\r\n this.providerService = providerService;\r\n }\r\n Service.prototype.getMedSchemes = function (practiceId) {\r\n return this.patientDomain.getMedSchemes(practiceId);\r\n };\r\n Service.prototype.buildManualSchemes = function (items) {\r\n items = angular.copy(items);\r\n items.unshift(new Domain.Patient.MedicalAid(Service.ALL));\r\n return this.buildSchemes(items);\r\n };\r\n Service.prototype.buildSchemes = function (items) {\r\n var res = [];\r\n for (var i = 0; i < items.length; i++) {\r\n res[i] = new Option(i, items[i].Name, items[i]);\r\n }\r\n return res;\r\n };\r\n Service.prototype.getSchemeValues = function (schemes, options) {\r\n return this.getValues(schemes, options);\r\n };\r\n Service.prototype.getManualSchemeValues = function (schemes, options) {\r\n var values = this.getValues(schemes, options);\r\n return this.filterSchemesForAll(values);\r\n };\r\n Service.prototype.getValues = function (numbers, options) {\r\n var res = [];\r\n for (var i = 0; i < numbers.length; i++) {\r\n var number = numbers[i];\r\n for (var j = 0; j < options.length; j++) {\r\n if (number == options[j].val) {\r\n res[res.length] = options[j].name;\r\n break;\r\n }\r\n }\r\n }\r\n return res;\r\n };\r\n Service.prototype.filterSchemesForAll = function (schemes) {\r\n for (var i = 0; i < schemes.length; i++) {\r\n if (schemes[i] === Service.ALL) {\r\n return ['*'];\r\n }\r\n }\r\n return schemes;\r\n };\r\n Service.prototype.convertSchemesToArrObjects = function (allSchemes, selectSchemes) {\r\n var res = [];\r\n for (var i = 0; i < allSchemes.length; i++) {\r\n for (var j = 0; j < selectSchemes.length; j++) {\r\n var sc = allSchemes[i] == \"*\" ? \"ALL\" : allSchemes[i];\r\n if (sc == selectSchemes[j].name) {\r\n res[res.length] = new SchemeObject(selectSchemes[j].name);\r\n }\r\n }\r\n }\r\n return res;\r\n };\r\n Service.prototype.convertSchemesToArrStrings = function (selectedSchemes, optionSchemes) {\r\n var res = [];\r\n for (var i = 0; i < selectedSchemes.length; i++) {\r\n var sc = (selectedSchemes[i].name === 'ALL') ? \"*\" : selectedSchemes[i].name;\r\n if (sc == \"*\") {\r\n res = [];\r\n res.push(sc);\r\n break;\r\n }\r\n for (var j = 0; j < optionSchemes.length; j++) {\r\n if (sc == optionSchemes[j].name) {\r\n res.push(optionSchemes[j].name);\r\n break;\r\n }\r\n }\r\n }\r\n return res;\r\n };\r\n Service.prototype.setLocalPractice = function (practice, redirectToHome) {\r\n console.warn('Method is deprecated. practice-service.setLocalPractice');\r\n if (practice) {\r\n var oldPractice = this.storageService.getPractice();\r\n oldPractice.id = practice.PracticeId;\r\n oldPractice.name = practice.TreatingDoctorName;\r\n oldPractice.billingPrNo = practice.PracticeNumber;\r\n oldPractice.treatingPrNo = practice.TreatingPracticeNumber;\r\n this.storageService.setPractice(oldPractice);\r\n }\r\n this.updateLocalPractice(practice.PracticeId, redirectToHome);\r\n };\r\n Service.prototype.updateLocalPractice = function (practiceId, redirectToHome) {\r\n var _this = this;\r\n this.providerService.getProviderOptions(practiceId)\r\n .then(function (options) {\r\n _this.$rootScope.isClinical = options.isEnabledForClinicalResults;\r\n });\r\n this.signalrService.setPractice(practiceId);\r\n if (redirectToHome) {\r\n this.locationService.goToHome(practiceId);\r\n }\r\n };\r\n Service.prototype.updateLocalPracticeById = function (practiceId) {\r\n var _this = this;\r\n return this.getPracticeById(practiceId)\r\n .then(function (loadPractice) {\r\n var practice = _this.storageService.getPractice();\r\n if (loadPractice) {\r\n practice.id = loadPractice.PracticeId;\r\n practice.xref = loadPractice.PracticeXRef;\r\n practice.treatingPrNo = loadPractice.TreatingPracticeNumber;\r\n practice.billingPrNo = loadPractice.PracticeNumber;\r\n practice.name = loadPractice.TreatingDoctorName || loadPractice.PracticeName;\r\n }\r\n else {\r\n practice.id = _this.storageService.getEmptyPracticeId();\r\n practice.name = '';\r\n }\r\n _this.storageService.setPractice(practice);\r\n return practice;\r\n });\r\n };\r\n Service.prototype.getSpecialityRules = function () {\r\n return this.billingDomain.getSpecialityRules();\r\n };\r\n Service.prototype.createPractice = function (practice) {\r\n return this.billingDomain.createProvider(practice);\r\n };\r\n Service.prototype.updatePractice = function (Practice) {\r\n return this.billingDomain.updateProvider(Practice);\r\n };\r\n Service.prototype.deletePractice = function (practiceId) {\r\n return this.billingDomain.deleteProvider(practiceId);\r\n };\r\n Service.prototype.getPractices = function () {\r\n return this.accountDomain.getPractices();\r\n };\r\n Service.prototype.getAllPractices = function () {\r\n return this.billingDomain.getProviders();\r\n };\r\n Service.prototype.getCommunicationTemplates = function () {\r\n return this.billingDomain.getCommunicationTemplates();\r\n };\r\n Service.prototype.updateCommunicationTemplate = function (template) {\r\n return this.billingDomain.updateCommunicationTemplate(template);\r\n };\r\n Service.prototype.getProvidersPage = function (pageCount, pageSize) {\r\n return this.billingDomain.getProvidersPage(pageCount, pageSize);\r\n };\r\n Service.prototype.getProvidersPageAndSearch = function (search, pageCount, pageSize) {\r\n if (search) {\r\n return this.billingDomain.getProvidersFiltered(search, pageCount, pageSize);\r\n }\r\n return this.getProvidersPage(pageCount, pageSize);\r\n };\r\n Service.prototype.getPracticeById = function (practiceId) {\r\n return this.billingDomain.getProviderById(practiceId);\r\n };\r\n Service.prototype.saveOptions = function (providerId, options) {\r\n return this.billingDomain.setOptions(providerId, options);\r\n };\r\n Service.ALL = 'ALL';\r\n return Service;\r\n })();\r\n PracticeModule.Service = Service;\r\n})(PracticeModule || (PracticeModule = {}));\r\nangular.module('DoctorApp')\r\n .service('practiceService', PracticeModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar LoginModule;\r\n(function (LoginModule) {\r\n var LoginResult = (function () {\r\n function LoginResult() {\r\n }\r\n return LoginResult;\r\n })();\r\n LoginModule.LoginResult = LoginResult;\r\n var Service = (function () {\r\n Service.$inject = [\"practiceService\", \"storageService\", \"$http\", \"$q\", \"accountDomain\", \"providerService\"];\r\n function Service(practiceService, storageService, $http, $q, accountDomain, providerService) {\r\n \"ngInject\";\r\n this.practiceService = practiceService;\r\n this.storageService = storageService;\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.accountDomain = accountDomain;\r\n this.providerService = providerService;\r\n }\r\n Service.prototype.login = function (username, password) {\r\n var url = GlobalVar.serverURL;\r\n var clientId = GlobalVar.clientId;\r\n var body = \"grant_type=password&username=\" + username +\r\n \"&password=\" + password +\r\n \"&client_id=\" + clientId;\r\n return this.$http.post(url + 'v1/authentication/account/login', body, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } });\r\n };\r\n Service.prototype.getUser = function (userId) {\r\n return this.accountDomain.getUser(userId);\r\n };\r\n Service.prototype.getUserDefaultPractice = function () {\r\n return this.practiceService.getPractices()\r\n .then(function (practices) {\r\n if (practices.length) {\r\n return practices[0];\r\n }\r\n return null;\r\n });\r\n };\r\n Service.prototype.getPracticeDetails = function (practiceId) {\r\n return this.practiceService.getPracticeById(practiceId);\r\n };\r\n Service.prototype.getStartPage = function (practiceId) {\r\n return this.providerService.getProviderOptions(practiceId)\r\n .then(function (options) {\r\n return options.HomePage;\r\n });\r\n };\r\n return Service;\r\n })();\r\n LoginModule.Service = Service;\r\n})(LoginModule || (LoginModule = {}));\r\nangular.module('DoctorApp')\r\n .service('loginService', LoginModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar AuthModule;\r\n(function (AuthModule) {\r\n var TokenDetails = (function () {\r\n function TokenDetails(header, payload, tokenDetails) {\r\n this.header = header;\r\n this.payload = payload;\r\n this.tokenDetails = tokenDetails;\r\n }\r\n return TokenDetails;\r\n })();\r\n AuthModule.TokenDetails = TokenDetails;\r\n var Service = (function () {\r\n Service.$inject = [\"storageService\", \"$window\", \"$location\", \"locationService\", \"showDialog\", \"$log\", \"$rootScope\"];\r\n function Service(storageService, $window, $location, locationService, showDialog, $log, $rootScope) {\r\n \"ngInject\";\r\n this.storageService = storageService;\r\n this.$window = $window;\r\n this.$location = $location;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.$log = $log;\r\n this.$rootScope = $rootScope;\r\n }\r\n Service.prototype.init = function (_loginService_) {\r\n var _this = this;\r\n this.loginService = _loginService_;\r\n this.$window.onfocus = function () {\r\n _this.$rootScope.$apply(function () {\r\n _this.refreshAuthorization();\r\n });\r\n };\r\n this.refreshAuthorization();\r\n };\r\n Service.prototype.toDefaulPath = function (backPath) {\r\n var user = this.storageService.getUser();\r\n var practiceId, isAdmin;\r\n if (user.role) {\r\n practiceId = user.role[0].split('/')[0];\r\n isAdmin = user.role[0].split('/')[1] === StorageModule.User.ADMIN_ROLE;\r\n }\r\n else {\r\n practiceId = this.storageService.getPracticeId();\r\n isAdmin = practiceId === StorageModule.Service.EMPTY_PRACTICE_ID;\r\n }\r\n if (backPath && backPath !== '/') {\r\n this.$location.path(backPath);\r\n return;\r\n }\r\n if (isAdmin) {\r\n this.locationService.goToAccount(StorageModule.Service.EMPTY_PRACTICE_ID, user.userId);\r\n }\r\n else {\r\n this.locationService.goToHome(practiceId);\r\n }\r\n };\r\n Service.prototype.goToStartPage = function () {\r\n var _this = this;\r\n var user = this.storageService.getUser();\r\n var backPath = this.storageService.getBackPath();\r\n if (user && user.role) {\r\n var practiceId = user.role[0].split('/')[0];\r\n var roleName = user.role[0].split('/')[1];\r\n if (roleName === StorageModule.User.ADMIN_ROLE) {\r\n this.toDefaulPath(backPath);\r\n return;\r\n }\r\n this.loginService.getStartPage(practiceId)\r\n .then(function (startPage) {\r\n _this.loginService.getUser(user.userId)\r\n .then(function (user) {\r\n if (user.RequirePasswordChange) {\r\n _this.locationService.goToChangePassword(practiceId, user.UserId);\r\n }\r\n else {\r\n if (startPage) {\r\n _this.$location.path(_this.parseProviderHomeUrl(startPage));\r\n }\r\n else {\r\n _this.toDefaulPath(backPath);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n this.toDefaulPath(backPath);\r\n }\r\n };\r\n Service.prototype.logOut = function () {\r\n this.storageService.clear();\r\n this.goToPath(this.locationService.loginPath, '');\r\n };\r\n Service.prototype.refreshAuthorization = function () {\r\n var _this = this;\r\n var user = this.storageService.getUser();\r\n if (!user || !user.isAuth) {\r\n this.goToPath(this.locationService.loginPath, '');\r\n return;\r\n }\r\n var doctorId = this.storageService.getPractice().id;\r\n if (doctorId) {\r\n if (this.$location.path() === this.locationService.loginPath) {\r\n var backPath = this.storageService.getBackPath() || this.locationService.homePath;\r\n this.goToPath(backPath, this.storageService.getBackHash());\r\n }\r\n }\r\n else {\r\n this.goToPath(this.locationService.loginPath, '');\r\n this.loginService.getUserDefaultPractice()\r\n .then(function (practiceId) {\r\n if (!practiceId) {\r\n _this.showDialog.error(\"Unable to find active treating doctor, please contact support.\");\r\n _this.storageService.clear();\r\n }\r\n else {\r\n _this.loginService.getPracticeDetails(practiceId).then(function (practice) {\r\n _this.loadPracticeForUser(practice);\r\n _this.goToStartPage();\r\n });\r\n }\r\n })\r\n .catch(function () {\r\n var user = _this.storageService.getUser();\r\n _this.$log.error('Failed to find practice for [' + user.name + '] user');\r\n _this.goToPath(_this.locationService.loginPath, '');\r\n });\r\n }\r\n };\r\n Service.prototype.parseProviderHomeUrl = function (url) {\r\n var user = this.storageService.getUser();\r\n var updatedUrl = url.replace(':practiceId', this.getPracticeId());\r\n updatedUrl = updatedUrl.replace(':userId', user.userId);\r\n return updatedUrl;\r\n };\r\n Service.prototype.isAdmin = function () {\r\n var user1 = this.storageService.getUser();\r\n return user1 && user1.role.length > 0 && user1.role[0].split('/')[1] === StorageModule.User.ADMIN_ROLE;\r\n };\r\n Service.prototype.loadPracticeForUser = function (loadPractice) {\r\n var practice = this.storageService.getPractice();\r\n if (loadPractice) {\r\n practice.id = loadPractice.PracticeId;\r\n practice.xref = loadPractice.PracticeXRef;\r\n practice.billingPrNo = loadPractice.PracticeNumber;\r\n practice.treatingPrNo = loadPractice.TreatingPracticeNumber;\r\n practice.name = loadPractice.TreatingDoctorName || loadPractice.PracticeName;\r\n }\r\n this.storageService.setPractice(practice);\r\n };\r\n Service.prototype.goToPath = function (newPath, newHash) {\r\n var oldPath = this.$location.path();\r\n if (oldPath === newPath) {\r\n return;\r\n }\r\n if (newPath === this.locationService.loginPath) {\r\n var oldHash = this.$location.hash();\r\n this.storageService.setBackPath(oldPath);\r\n this.storageService.setBackHash(oldHash);\r\n }\r\n this.$location.path(newPath);\r\n this.$location.hash(newHash);\r\n };\r\n Service.prototype.getPracticeId = function () {\r\n return this.storageService.getPracticeId();\r\n };\r\n Service.prototype.parseTokenDetails = function (tokenDetails) {\r\n var splitToken = tokenDetails.split('.');\r\n var tokenHeader = angular.fromJson(atob(splitToken[0]));\r\n var tokenPayload = angular.fromJson(atob(splitToken[1]));\r\n if (!(tokenPayload.role instanceof Array)) {\r\n tokenPayload.role = [tokenPayload.role];\r\n }\r\n return new TokenDetails(tokenHeader, tokenPayload, tokenDetails);\r\n };\r\n return Service;\r\n })();\r\n AuthModule.Service = Service;\r\n})(AuthModule || (AuthModule = {}));\r\nangular.module('DoctorApp')\r\n .service('authService', AuthModule.Service);\r\n/// \r\nvar SignalrModule;\r\n(function (SignalrModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"$rootScope\", \"httpService\", \"$q\"];\r\n function Service($rootScope, httpService, $q) {\r\n \"ngInject\";\r\n this.$rootScope = $rootScope;\r\n this.httpService = httpService;\r\n this.$q = $q;\r\n }\r\n Service.prototype.setPractice = function (practiceId) {\r\n if (practiceId && this.practiceId !== practiceId) {\r\n this.practiceId = practiceId;\r\n this.init();\r\n }\r\n };\r\n Service.prototype.init = function () {\r\n var _this = this;\r\n if (this.connection) {\r\n this.connection.stop();\r\n }\r\n this.getSignalRToken(this.practiceId, 'signalr')\r\n .then(function (accessToken) {\r\n _this.connection = new signalR.HubConnectionBuilder()\r\n .withUrl(accessToken.ServiceUrl, { accessTokenFactory: function () { return accessToken.Token; } })\r\n .build();\r\n _this.connection.on(\"processMessage\", function (data) {\r\n if (data) {\r\n switch (data.Type) {\r\n case \"WaitingRoomUpdated\":\r\n _this.$rootScope.$emit('WaitingRoomUpdated');\r\n break;\r\n case \"NotificationsUpdated\":\r\n _this.$rootScope.$emit('NotificationsUpdated');\r\n break;\r\n case \"EncounterTemplateUpdated\":\r\n _this.$rootScope.$emit('EncounterTemplateUpdated');\r\n break;\r\n case \"PathReportReceived\":\r\n _this.$rootScope.$emit('PathReportReceived');\r\n break;\r\n }\r\n }\r\n });\r\n _this.connection.start()\r\n .then(function (res) { console.log(res); })\r\n .catch(function (err) { console.error(err.toString()); });\r\n });\r\n };\r\n Service.prototype.getSignalRToken = function (practiceId, type) {\r\n return this.httpService.get(\"v1/infrastructure/\" + practiceId + \"/tokenproviders/\" + type);\r\n };\r\n return Service;\r\n })();\r\n SignalrModule.Service = Service;\r\n})(SignalrModule || (SignalrModule = {}));\r\nangular.module('DoctorApp')\r\n .service('signalrService', SignalrModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar App;\r\n(function (App) {\r\n (function (VersionDiff) {\r\n VersionDiff[VersionDiff[\"Mandatory\"] = 0] = \"Mandatory\";\r\n VersionDiff[VersionDiff[\"NoMandatory\"] = 1] = \"NoMandatory\";\r\n VersionDiff[VersionDiff[\"NoDiff\"] = 2] = \"NoDiff\";\r\n })(App.VersionDiff || (App.VersionDiff = {}));\r\n var VersionDiff = App.VersionDiff;\r\n var Run = (function () {\r\n Run.$inject = [\"$rootScope\", \"$location\", \"locationService\", \"authService\", \"patientService\", \"showDialog\", \"signalrService\", \"$window\", \"loginService\", \"$templateCache\", \"trackingService\", \"storageService\"];\r\n function Run($rootScope, $location, locationService, authService, patientService, showDialog, signalrService, $window, loginService, $templateCache, trackingService, storageService) {\r\n \"ngInject\";\r\n $rootScope.versionDifference = VersionDiff.NoDiff;\r\n $rootScope.showPaymentStatuses = false;\r\n $rootScope.showProgressScreen = false;\r\n $rootScope.showWaitingScreen = false;\r\n $rootScope.showThankYou = false;\r\n authService.init(loginService);\r\n $rootScope.$on('$locationChangeStart', function (event, nextRoute, currentRoute) {\r\n var user = storageService.getUser();\r\n var practiceId = user && user.role && user.role[0].split('/')[0];\r\n var isHomePage = nextRoute.search('home') > -1;\r\n var isLoginPage = nextRoute.search('login') > -1;\r\n var nextRoutePart = nextRoute.match(/#\\/[\\w-]+\\/[\\w-]+/);\r\n var currentRoutePart = currentRoute.match(/#\\/[\\w-]+\\/[\\w-]+/);\r\n var isSamePage = nextRoutePart && currentRoutePart && nextRoutePart[0] === currentRoutePart[0];\r\n if (practiceId !== '*') {\r\n signalrService.setPractice(practiceId);\r\n if ($rootScope.versionDifference === VersionDiff.NoMandatory && !isHomePage && !isLoginPage && !isSamePage) {\r\n showDialog.confirm('There is currently a new version available. In order to avoid issues and errors, we highly recommend that you refresh now', null, false, ['Ok', 'Ignore'])\r\n .then(function () {\r\n window.location.reload(true);\r\n });\r\n }\r\n else if ($rootScope.versionDifference === VersionDiff.Mandatory && !isHomePage && !isLoginPage && !isSamePage) {\r\n event.preventDefault();\r\n showDialog.info('There is a new version available. You will need to update in order to continue working.')\r\n .then(function () {\r\n window.location.reload(true);\r\n });\r\n }\r\n }\r\n else if ($location.path() === '/') {\r\n event.preventDefault();\r\n authService.goToStartPage();\r\n }\r\n });\r\n $rootScope.$on('$stateChangeStart', function (event, toState, toParams) {\r\n authService.refreshAuthorization();\r\n });\r\n $rootScope.logOut = function () {\r\n var message = \"Are you sure want to log out ?\";\r\n showDialog.confirm(message)\r\n .then(function () {\r\n authService.logOut();\r\n });\r\n };\r\n $rootScope.quantities = [\r\n { amount: 1 }, { amount: 2 }, { amount: 3 }, { amount: 4 }, { amount: 5 }, { amount: 6 }, { amount: 7 },\r\n { amount: 8 }, { amount: 9 }, { amount: 10 }\r\n ];\r\n $rootScope.back = function (removeHash) {\r\n $window.history.back();\r\n };\r\n $rootScope.goToHome = function () {\r\n $rootScope.showThankYou = false;\r\n locationService.goToHome(authService.getPracticeId());\r\n };\r\n $rootScope.goToPayments = function () {\r\n $rootScope.showThankYou = false;\r\n locationService.goToCardPayments();\r\n };\r\n $templateCache.put(\"template/modal/window.html\", \"
\\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"\");\r\n $rootScope.$on('$locationChangeSuccess', function () {\r\n trackingService.onViewChanged();\r\n });\r\n }\r\n return Run;\r\n })();\r\n App.Run = Run;\r\n})(App || (App = {}));\r\nangular.module('DoctorApp')\r\n .run(App.Run);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalAddressBookModule;\r\n(function (ClinicalAddressBookModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"$q\", \"usageService\", \"storageService\", \"clinicalDomain\"];\r\n function Service(httpService, $q, usageService, storageService, clinicalDomain) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.$q = $q;\r\n this.usageService = usageService;\r\n this.storageService = storageService;\r\n this.clinicalDomain = clinicalDomain;\r\n this.templates = [];\r\n }\r\n Service.prototype.loadPracticeAddressBook = function (practiceId, lookupfilter, pageNo, pageSize) {\r\n if (pageNo === void 0) { pageNo = 0; }\r\n if (pageSize === void 0) { pageSize = 10; }\r\n return this.clinicalDomain.getAddressBook(practiceId, lookupfilter, pageNo, pageSize);\r\n };\r\n Service.prototype.loadPracticeAddressBookFavourites = function (practiceId) {\r\n return this.clinicalDomain.getAddressBookFavourites(practiceId);\r\n };\r\n Service.prototype.getAddressBookEntry = function (practiceId, entryId) {\r\n return this.clinicalDomain.getAddressBookEntry(practiceId, entryId);\r\n };\r\n Service.prototype.addContact = function (practiceId, entry) {\r\n this.usageService.useAddressBook(practiceId, this.storageService.getUser().userLogin, UsageModule.ActionType.NewContact, entry);\r\n return this.clinicalDomain.addAddressBookEntry(practiceId, entry);\r\n };\r\n Service.prototype.updateContact = function (practiceId, entry) {\r\n this.usageService.useAddressBook(practiceId, this.storageService.getUser().userLogin, UsageModule.ActionType.UpdateContact, entry);\r\n return this.clinicalDomain.updateAddressBookEntry(practiceId, entry);\r\n };\r\n Service.prototype.removeContact = function (practiceId, entry) {\r\n this.usageService.useAddressBook(practiceId, this.storageService.getUser().userLogin, UsageModule.ActionType.DeleteContact, entry);\r\n return this.clinicalDomain.removeAddressBookEntry(practiceId, entry.AddressBookEntryId);\r\n };\r\n return Service;\r\n })();\r\n ClinicalAddressBookModule.Service = Service;\r\n})(ClinicalAddressBookModule || (ClinicalAddressBookModule = {}));\r\nangular.module('DoctorApp')\r\n .service('addressBookService', ClinicalAddressBookModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalAddressBookModule;\r\n(function (ClinicalAddressBookModule) {\r\n var AddressBook = Domain.Clinical.AddressBookEntry;\r\n var CreateController = (function () {\r\n CreateController.$inject = [\"$scope\", \"$rootScope\", \"$routeParams\", \"locationService\", \"storageService\", \"addressBookService\", \"showDialog\"];\r\n function CreateController($scope, $rootScope, $routeParams, locationService, storageService, addressBookService, showDialog) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.locationService = locationService;\r\n this.storageService = storageService;\r\n this.addressBookService = addressBookService;\r\n this.showDialog = showDialog;\r\n this.$scope.addressBookEntity = new AddressBook();\r\n $scope.save = function (isValid) {\r\n if (isValid) {\r\n addressBookService.addContact($routeParams.practiceId, _this.$scope.addressBookEntity).then(function () {\r\n $rootScope.back();\r\n });\r\n }\r\n else {\r\n showDialog.error(\"Please enter valid info in the highlighted fields\");\r\n }\r\n };\r\n }\r\n return CreateController;\r\n })();\r\n ClinicalAddressBookModule.CreateController = CreateController;\r\n})(ClinicalAddressBookModule || (ClinicalAddressBookModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalAddressBookCreateController', ClinicalAddressBookModule.CreateController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalAddressBookModule;\r\n(function (ClinicalAddressBookModule) {\r\n var EditController = (function () {\r\n EditController.$inject = [\"$scope\", \"$rootScope\", \"$routeParams\", \"locationService\", \"storageService\", \"addressBookService\", \"showDialog\"];\r\n function EditController($scope, $rootScope, $routeParams, locationService, storageService, addressBookService, showDialog) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.locationService = locationService;\r\n this.storageService = storageService;\r\n this.addressBookService = addressBookService;\r\n this.showDialog = showDialog;\r\n var entryId = this.$routeParams.entryId;\r\n this.addressBookService.getAddressBookEntry(this.$routeParams.practiceId, entryId)\r\n .then(function (entity) {\r\n _this.$scope.addressBookEntity = entity;\r\n });\r\n $scope.save = function (isValid) {\r\n if (isValid) {\r\n addressBookService.updateContact($routeParams.practiceId, _this.$scope.addressBookEntity).then(function () {\r\n $rootScope.back();\r\n });\r\n }\r\n else {\r\n showDialog.error(\"Please enter valid info in the highlighted fields\");\r\n }\r\n };\r\n }\r\n return EditController;\r\n })();\r\n ClinicalAddressBookModule.EditController = EditController;\r\n})(ClinicalAddressBookModule || (ClinicalAddressBookModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalAddressBookEditController', ClinicalAddressBookModule.EditController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalAddressBookModule;\r\n(function (ClinicalAddressBookModule) {\r\n var SearchController = (function () {\r\n SearchController.$inject = [\"$scope\", \"$rootScope\", \"$routeParams\", \"locationService\", \"addressBookService\", \"showDialog\", \"$modalInstance\"];\r\n function SearchController($scope, $rootScope, $routeParams, locationService, addressBookService, showDialog, $modalInstance) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.locationService = locationService;\r\n this.addressBookService = addressBookService;\r\n this.showDialog = showDialog;\r\n this.$modalInstance = $modalInstance;\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss('cancel');\r\n };\r\n $scope.ok = function () {\r\n $modalInstance.close($scope.selectedContact);\r\n };\r\n $scope.goToEditContact = function (contact) {\r\n locationService.goToEditAddressBook($routeParams.practiceId, contact.AddressBookEntryId);\r\n };\r\n $scope.toggleFavourite = function (entry) {\r\n if (!entry.IsFavourite && $scope.favouriteContacts.length >= 5) {\r\n showDialog.info(\"You can't have more than 5 favourite contacts.\");\r\n return;\r\n }\r\n entry.IsFavourite = !entry.IsFavourite;\r\n _this.addressBookService.updateContact($routeParams.practiceId, entry).then(function () {\r\n if (_this.$scope.searchText) {\r\n _this.$scope.search();\r\n }\r\n else {\r\n _this.loadFavourites();\r\n }\r\n });\r\n };\r\n $scope.search = function () {\r\n if (_this.$scope.searchText) {\r\n _this.addressBookService.loadPracticeAddressBook(_this.$routeParams.practiceId, _this.$scope.searchText)\r\n .then(function (entities) {\r\n _this.$scope.entities = entities;\r\n });\r\n }\r\n else {\r\n _this.$scope.entities = _this.$scope.favouriteContacts;\r\n }\r\n };\r\n $scope.selectContact = function (entry) {\r\n $scope.selectedContact = entry;\r\n };\r\n $scope.removeContact = function (entry) {\r\n showDialog.confirm('Are you sure want to delete contact: ' + entry.Name + ' ' + entry.Surname)\r\n .then(function () { return _this.addressBookService.removeContact($routeParams.practiceId, entry); })\r\n .catch(function () {\r\n })\r\n .then(function () {\r\n _this.init();\r\n })\r\n .catch(function (error) {\r\n showDialog.error(error);\r\n });\r\n };\r\n $scope.$on('$routeChangeStart', function () {\r\n $modalInstance.close();\r\n });\r\n this.init();\r\n }\r\n SearchController.prototype.init = function () {\r\n this.loadFavourites();\r\n };\r\n SearchController.prototype.loadFavourites = function () {\r\n var _this = this;\r\n this.addressBookService.loadPracticeAddressBookFavourites(this.$routeParams.practiceId)\r\n .then(function (entities) {\r\n _this.$scope.favouriteContacts = entities;\r\n _this.$scope.entities = _this.$scope.favouriteContacts;\r\n });\r\n };\r\n return SearchController;\r\n })();\r\n ClinicalAddressBookModule.SearchController = SearchController;\r\n})(ClinicalAddressBookModule || (ClinicalAddressBookModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalAddressBookSearchController', ClinicalAddressBookModule.SearchController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalAddressBookModule;\r\n(function (ClinicalAddressBookModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$rootScope\", \"$routeParams\", \"locationService\", \"storageService\", \"addressBookService\", \"showDialog\"];\r\n function Controller($scope, $rootScope, $routeParams, locationService, storageService, addressBookService, showDialog) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.locationService = locationService;\r\n this.storageService = storageService;\r\n this.addressBookService = addressBookService;\r\n this.showDialog = showDialog;\r\n $scope.search = function () {\r\n _this.$scope.entities = [];\r\n $scope.pageNo = 0;\r\n _this.loadEntities();\r\n };\r\n $scope.loadNextPage = function () {\r\n if (!$scope.allPagesLoaded && !$scope.isRunningPage) {\r\n $scope.pageNo = $scope.pageNo + 1;\r\n $scope.isRunningPage = true;\r\n _this.loadEntities();\r\n }\r\n };\r\n $scope.goToEditContact = function (contact) {\r\n locationService.goToEditAddressBook($routeParams.practiceId, contact.AddressBookEntryId);\r\n };\r\n $scope.toggleFavourite = function (entry) {\r\n if (!entry.IsFavourite && $scope.favouriteContacts.length >= 5) {\r\n showDialog.info(\"You can't have more than 5 favourite contacts.\");\r\n return;\r\n }\r\n entry.IsFavourite = !entry.IsFavourite;\r\n _this.addressBookService.updateContact($routeParams.practiceId, entry).then(function () {\r\n _this.loadFavourites();\r\n });\r\n };\r\n $scope.goToCreateContact = function () {\r\n locationService.goToCreateAddressBook($routeParams.practiceId);\r\n };\r\n $scope.removeContact = function (entry) {\r\n showDialog.confirm('Are you sure want to delete contact: ' + entry.Name + ' ' + entry.Surname)\r\n .then(function () { return _this.addressBookService.removeContact($routeParams.practiceId, entry); })\r\n .catch(function () {\r\n })\r\n .then(function () {\r\n _this.loadEntities();\r\n })\r\n .catch(function (error) {\r\n showDialog.error(error);\r\n });\r\n };\r\n this.init();\r\n }\r\n Controller.prototype.init = function () {\r\n this.$scope.entities = [];\r\n this.$scope.searchText = '';\r\n this.$scope.pageSize = 10;\r\n this.$scope.pageNo = 0;\r\n this.$scope.allPagesLoaded = false;\r\n this.loadFavourites();\r\n this.$scope.search();\r\n this.setAdminRules();\r\n };\r\n Controller.prototype.loadFavourites = function () {\r\n var _this = this;\r\n this.addressBookService.loadPracticeAddressBookFavourites(this.$routeParams.practiceId)\r\n .then(function (entities) {\r\n _this.$scope.favouriteContacts = entities;\r\n });\r\n };\r\n Controller.prototype.loadEntities = function () {\r\n var _this = this;\r\n this.addressBookService.loadPracticeAddressBook(this.$routeParams.practiceId, this.$scope.searchText, this.$scope.pageNo, this.$scope.pageSize)\r\n .then(function (page) {\r\n if (page) {\r\n for (var i = 0; i < page.length; i++) {\r\n _this.$scope.entities.push(page[i]);\r\n }\r\n }\r\n _this.$scope.allPagesLoaded = !page || page.length !== _this.$scope.pageSize;\r\n _this.$scope.isRunningPage = false;\r\n });\r\n };\r\n Controller.prototype.setAdminRules = function () {\r\n var user = this.storageService.getUser();\r\n this.$scope.isAdmin = user.role.indexOf('*') > -1;\r\n };\r\n return Controller;\r\n })();\r\n ClinicalAddressBookModule.Controller = Controller;\r\n})(ClinicalAddressBookModule || (ClinicalAddressBookModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalAddressBookController', ClinicalAddressBookModule.Controller);\r\n/// \r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var Event;\r\n (function (Event_1) {\r\n var Event = (function () {\r\n function Event() {\r\n this.CorrelationIds = [];\r\n }\r\n return Event;\r\n })();\r\n Event_1.Event = Event;\r\n var EventResult = (function () {\r\n function EventResult() {\r\n }\r\n return EventResult;\r\n })();\r\n Event_1.EventResult = EventResult;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"authService\", \"$q\"];\r\n function Service(httpService, authService, $q) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.authService = authService;\r\n this.$q = $q;\r\n }\r\n Service.prototype.getEventsByNode = function (nodeId, count) {\r\n return this.httpService.get(this.getUrl() + 'nodes/' + nodeId + '/events/top/' + count);\r\n };\r\n Service.prototype.getEvents = function () {\r\n return this.httpService.get(this.getUrl() + 'events');\r\n };\r\n Service.prototype.getTopEvents = function (count) {\r\n return this.httpService.get(this.getUrl() + 'events' + '?$top=' + count);\r\n };\r\n Service.prototype.getEventsByAggregatId = function (tenantId, aggregatId) {\r\n return this.httpService.get('v1/' + tenantId + '/audit/events/' + aggregatId);\r\n };\r\n Service.prototype.getNodes = function () {\r\n return this.httpService.get(this.getUrl() + 'nodes');\r\n };\r\n Service.prototype.getTenantEvents = function (tenantId, fromDate, toDate) {\r\n return this.httpService.get(this.getUrl() + 'events/' + tenantId + '/from/' + fromDate + '/to/' + toDate);\r\n };\r\n Service.prototype.getUrl = function () {\r\n return 'v1/audit/';\r\n };\r\n return Service;\r\n })();\r\n Event_1.Service = Service;\r\n })(Event = Domain.Event || (Domain.Event = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('eventDomain', Domain.Event.Service);\r\n/// \r\n/// \r\nvar AuditModule;\r\n(function (AuditModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"billingDomain\", \"eventDomain\"];\r\n function Service(httpService, billingDomain, eventDomain) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.billingDomain = billingDomain;\r\n this.eventDomain = eventDomain;\r\n }\r\n Service.prototype.getEvents = function (nodeId, count) {\r\n if (nodeId === Service.ALL || !nodeId) {\r\n return this.eventDomain.getTopEvents(count);\r\n }\r\n return this.eventDomain.getEventsByNode(nodeId, count);\r\n };\r\n Service.prototype.getEventsForAggregateId = function (tenantId, aggregateId) {\r\n return this.eventDomain.getEventsByAggregatId(tenantId, aggregateId);\r\n };\r\n Service.prototype.getNodes = function () {\r\n return this.eventDomain.getNodes()\r\n .then(function (nodes) {\r\n var result = nodes;\r\n result.unshift(Service.ALL);\r\n return result;\r\n });\r\n };\r\n Service.prototype.getProvider = function (practiceId) {\r\n return this.billingDomain.getProvider(practiceId);\r\n };\r\n Service.ALL = 'All';\r\n return Service;\r\n })();\r\n AuditModule.Service = Service;\r\n})(AuditModule || (AuditModule = {}));\r\nangular.module('DoctorApp')\r\n .service('auditService', AuditModule.Service);\r\n/// \r\n/// \r\n/// \r\nvar AuditModule;\r\n(function (AuditModule) {\r\n var EventController = (function () {\r\n EventController.$inject = [\"$rootScope\", \"$scope\", \"auditService\", \"$filter\", \"locationService\", \"$routeParams\"];\r\n function EventController($rootScope, $scope, auditService, $filter, locationService, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.auditService = auditService;\r\n this.$filter = $filter;\r\n this.locationService = locationService;\r\n this.$routeParams = $routeParams;\r\n $scope.tenantId = $routeParams.tenantId;\r\n $scope.aggregateId = $routeParams.aggregateId;\r\n $scope.historyIndex = window.history.length;\r\n $scope.back = function () {\r\n var newPosition = window.history.length;\r\n window.history.go(-(newPosition - $scope.historyIndex + 1));\r\n };\r\n $scope.search = function () {\r\n locationService.goToAuditEvents($scope.tenantId, $scope.aggregateId);\r\n if (_this.$scope.tenantId === $routeParams.tenantId &&\r\n _this.$scope.aggregateId === $routeParams.aggregateId) {\r\n _this.search();\r\n }\r\n };\r\n $scope.showEventDetails = function (index) {\r\n $scope.jsonDetails = $scope.events[index];\r\n $scope.selectedIndex = index;\r\n };\r\n $scope.changeSearch = function (text) {\r\n var events = text ? $filter('filter')(_this.allEvents, text) : _this.allEvents;\r\n $scope.events = events.slice(0, $scope.count);\r\n };\r\n this.init();\r\n }\r\n EventController.prototype.init = function () {\r\n this.$scope.events = [];\r\n this.$scope.searchText = \"\";\r\n this.$scope.jsonDetails = {};\r\n this.search();\r\n };\r\n EventController.prototype.search = function () {\r\n var _this = this;\r\n if (this.$scope.tenantId && this.$scope.aggregateId) {\r\n this.auditService.getEventsForAggregateId(this.$scope.tenantId, this.$scope.aggregateId)\r\n .then(function (events) {\r\n _this.allEvents = events;\r\n _this.$scope.changeSearch();\r\n _this.$scope.showEventDetails(0);\r\n });\r\n }\r\n };\r\n return EventController;\r\n })();\r\n AuditModule.EventController = EventController;\r\n})(AuditModule || (AuditModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('EventController', AuditModule.EventController);\r\n/// \r\n/// \r\n/// \r\nvar AuditModule;\r\n(function (AuditModule) {\r\n var TenantEventController = (function () {\r\n TenantEventController.$inject = [\"$rootScope\", \"$scope\", \"auditService\", \"$filter\", \"moment\", \"eventDomain\", \"locationService\", \"$routeParams\"];\r\n function TenantEventController($rootScope, $scope, auditService, $filter, moment, eventDomain, locationService, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.auditService = auditService;\r\n this.$filter = $filter;\r\n this.moment = moment;\r\n this.eventDomain = eventDomain;\r\n this.locationService = locationService;\r\n this.$routeParams = $routeParams;\r\n $scope.tenantId = $routeParams.tenantId;\r\n $scope.historyIndex = window.history.length;\r\n $scope.back = function () {\r\n var newPosition = window.history.length;\r\n window.history.go(-(newPosition - $scope.historyIndex + 1));\r\n };\r\n $scope.goToTenantEvents = function () {\r\n var dateFrom = _this.moment(_this.$scope.dateFrom).format(serverDateFormat);\r\n var dateTo = _this.moment(_this.$scope.dateTo).format(serverDateFormat);\r\n locationService.goToTenantEvents($scope.tenantId, dateFrom, dateTo);\r\n };\r\n $scope.showEventDetails = function (index) {\r\n if ($scope.events.length) {\r\n $scope.jsonDetails = $scope.events[index];\r\n $scope.selectedIndex = index;\r\n }\r\n };\r\n $scope.openAuditEvents = function (event) {\r\n var practices = [];\r\n _this.getPracticeIds(event, practices);\r\n var practiceId = practices.length && practices[0] || StorageModule.Service.EMPTY_PRACTICE_ID;\r\n _this.locationService.goToAuditEvents(event.EventDetails.BucketPrefix + \":\" + practiceId, event.EventDetails.AggregateId);\r\n };\r\n $scope.changeSearch = function (text) {\r\n var events = text ? $filter('filter')(_this.allEvents, text) : _this.allEvents;\r\n $scope.events = events.slice(0, $scope.count);\r\n $scope.showEventDetails(0);\r\n if (text && text === 'EncounterTemplate') {\r\n _this.matchJSON('EncounterTemplate');\r\n }\r\n };\r\n $scope.changeFilterByDate = function (first) {\r\n if (first) {\r\n $scope.configTo.min = $scope.dateFrom;\r\n }\r\n else {\r\n $scope.configFrom.max = $scope.dateTo;\r\n }\r\n };\r\n $scope.setPracticeEvents = function (checkPracticeEvents) {\r\n if (checkPracticeEvents) {\r\n $scope.tenantId = $scope.provider.PracticeTenantId;\r\n }\r\n else {\r\n $scope.tenantId = $scope.provider.PracticeId;\r\n }\r\n };\r\n this.init();\r\n }\r\n TenantEventController.prototype.init = function () {\r\n var _this = this;\r\n this.$scope.events = [];\r\n this.$scope.searchText = \"\";\r\n this.$scope.jsonDetails = {};\r\n this.$scope.checkPracticeEvents = false;\r\n this.setDefaultDates();\r\n this.search();\r\n var practiceId = this.$routeParams.tenantId.substring(this.$routeParams.tenantId.lastIndexOf(\"_\") + 1);\r\n this.auditService.getProvider(practiceId)\r\n .then(function (provider) {\r\n if (provider) {\r\n _this.$scope.provider = provider;\r\n _this.$scope.checkPracticeEvents = _this.$scope.tenantId === _this.$scope.provider.PracticeTenantId;\r\n }\r\n });\r\n };\r\n TenantEventController.prototype.matchJSON = function (item) {\r\n var endJson = [];\r\n for (var _i = 0, _a = this.$scope.events; _i < _a.length; _i++) {\r\n var event = _a[_i];\r\n var encounterTemplate = event.EventDetails[item];\r\n endJson.push(encounterTemplate);\r\n this.$scope.templatesJSON = JSON.stringify(endJson);\r\n }\r\n };\r\n TenantEventController.prototype.setDefaultDates = function () {\r\n if (!this.$routeParams.dateFrom || !this.$routeParams.dateTo) {\r\n var now = this.moment.utc();\r\n var daysBefore = 1;\r\n var tommorow = 1;\r\n now.add(tommorow, 'days');\r\n this.$scope.dateTo = this.moment(now);\r\n this.$scope.dateFrom = now.subtract(daysBefore + tommorow, 'days');\r\n }\r\n else {\r\n this.$scope.dateTo = this.moment(this.$routeParams.dateTo);\r\n this.$scope.dateFrom = this.moment(this.$routeParams.dateFrom);\r\n }\r\n var dateFormat = 'dd MM, yy';\r\n var configFrom = new DatePickerModule.Config();\r\n configFrom.format = dateFormat;\r\n configFrom.max = this.$scope.dateTo;\r\n this.$scope.configFrom = configFrom;\r\n var configTo = new DatePickerModule.Config();\r\n configTo.format = dateFormat;\r\n configTo.min = this.$scope.dateFrom;\r\n this.$scope.configTo = configTo;\r\n };\r\n TenantEventController.prototype.getPracticeIds = function (event, result) {\r\n if (event) {\r\n if (event.hasOwnProperty('PracticeId')) {\r\n result.push(event['PracticeId']);\r\n }\r\n for (var i = 0; i < Object.keys(event).length; i++) {\r\n if (typeof event[Object.keys(event)[i]] == \"object\") {\r\n this.getPracticeIds(event[Object.keys(event)[i]], result);\r\n }\r\n }\r\n }\r\n };\r\n TenantEventController.prototype.search = function () {\r\n var _this = this;\r\n if (this.$scope.tenantId && this.$scope.dateFrom && this.$scope.dateTo) {\r\n var dateFrom = this.moment(this.$scope.dateFrom).format(serverDateFormat);\r\n var dateTo = this.moment(this.$scope.dateTo).format(serverDateFormat);\r\n this.eventDomain.getTenantEvents(this.$scope.tenantId, dateFrom, dateTo)\r\n .then(function (events) {\r\n _this.allEvents = events;\r\n _this.$scope.changeSearch();\r\n _this.$scope.showEventDetails(0);\r\n });\r\n }\r\n };\r\n return TenantEventController;\r\n })();\r\n AuditModule.TenantEventController = TenantEventController;\r\n})(AuditModule || (AuditModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('TenantEventController', AuditModule.TenantEventController);\r\n/// \r\n/// \r\n/// \r\nvar AuditModule;\r\n(function (AuditModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$rootScope\", \"$scope\", \"auditService\", \"$filter\", \"locationService\"];\r\n function Controller($rootScope, $scope, auditService, $filter, locationService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.auditService = auditService;\r\n this.$filter = $filter;\r\n this.locationService = locationService;\r\n $scope.historyIndex = window.history.length;\r\n $scope.back = function () {\r\n var newPosition = window.history.length;\r\n window.history.go(-(newPosition - $scope.historyIndex + 1));\r\n };\r\n $scope.updateNodes = function () {\r\n _this.auditService.getNodes()\r\n .then(function (nodes) {\r\n $scope.nodes = nodes;\r\n $scope.node = nodes[0];\r\n $scope.getEvents();\r\n });\r\n };\r\n $scope.tenantEvents = function (event) {\r\n var practices = [];\r\n _this.getPracticeIds(event, practices);\r\n var practiceId = practices.length && practices[0] || StorageModule.Service.EMPTY_PRACTICE_ID;\r\n locationService.goToTenantEvents(practiceId);\r\n };\r\n $scope.getEvents = function () {\r\n auditService.getEvents($scope.node, $scope.count)\r\n .then(function (events) {\r\n _this.allEvents = events;\r\n $scope.changeSearch($scope.searchText);\r\n _this.$scope.showEventDetails(0);\r\n });\r\n };\r\n $scope.showEventDetails = function (index) {\r\n $scope.jsonDetails = $scope.events[index];\r\n $scope.selectedIndex = index;\r\n };\r\n $scope.openAuditEvents = function (event) {\r\n var practices = [];\r\n _this.getPracticeIds(event, practices);\r\n var practiceId = practices.length && practices[0] || StorageModule.Service.ZERO_PRACTICE_ID;\r\n _this.locationService.goToAuditEvents(event.EventDetails.BucketPrefix + \":\" + practiceId, event.EventDetails.AggregateId);\r\n };\r\n $scope.changeSearch = function (text) {\r\n var events = text ? $filter('filter')(_this.allEvents, text) : _this.allEvents;\r\n $scope.events = events.slice(0, $scope.count);\r\n _this.$scope.showEventDetails(0);\r\n };\r\n this.init();\r\n }\r\n Controller.prototype.init = function () {\r\n this.$scope.nodes = [];\r\n this.$scope.events = [];\r\n this.$scope.node = 0;\r\n this.$scope.searchText = \"\";\r\n this.$scope.jsonDetails = {};\r\n this.$scope.counts = [200, 500, 1000, 5000, 10000];\r\n this.$scope.count = this.$scope.counts[0];\r\n this.$scope.updateNodes();\r\n };\r\n Controller.prototype.getPracticeIds = function (event, result) {\r\n if (event) {\r\n if (event.hasOwnProperty('PracticeId')) {\r\n result.push(event['PracticeId']);\r\n }\r\n else if (event.hasOwnProperty('TenantId')) {\r\n result.push(event['TenantId']);\r\n }\r\n else if (event.hasOwnProperty('PracticeTenantId')) {\r\n result.push(event['PracticeTenantId']);\r\n }\r\n for (var i = 0; i < Object.keys(event).length; i++) {\r\n if (typeof event[Object.keys(event)[i]] == \"object\") {\r\n this.getPracticeIds(event[Object.keys(event)[i]], result);\r\n }\r\n }\r\n }\r\n };\r\n return Controller;\r\n })();\r\n AuditModule.Controller = Controller;\r\n})(AuditModule || (AuditModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('AuditController', AuditModule.Controller);\r\n/// \r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var CardPayment;\r\n (function (CardPayment_1) {\r\n var CardReader = (function () {\r\n function CardReader() {\r\n }\r\n return CardReader;\r\n })();\r\n CardPayment_1.CardReader = CardReader;\r\n var TransactionDetails = (function () {\r\n function TransactionDetails() {\r\n }\r\n return TransactionDetails;\r\n })();\r\n CardPayment_1.TransactionDetails = TransactionDetails;\r\n var TransactionResult = (function () {\r\n function TransactionResult() {\r\n }\r\n return TransactionResult;\r\n })();\r\n CardPayment_1.TransactionResult = TransactionResult;\r\n var CardPayment = (function () {\r\n function CardPayment() {\r\n this.CardReader = new CardReader();\r\n this.TransactionDetails = new TransactionDetails();\r\n this.TransactionResult = new TransactionResult();\r\n }\r\n return CardPayment;\r\n })();\r\n CardPayment_1.CardPayment = CardPayment;\r\n var CardPaymentStatus = (function () {\r\n function CardPaymentStatus() {\r\n this.CardPayment = new CardPayment();\r\n }\r\n return CardPaymentStatus;\r\n })();\r\n CardPayment_1.CardPaymentStatus = CardPaymentStatus;\r\n var CardPaymentsByDate = (function () {\r\n function CardPaymentsByDate() {\r\n this.CardPayments = [];\r\n }\r\n return CardPaymentsByDate;\r\n })();\r\n CardPayment_1.CardPaymentsByDate = CardPaymentsByDate;\r\n var CardPaymentFilter = (function () {\r\n function CardPaymentFilter() {\r\n }\r\n return CardPaymentFilter;\r\n })();\r\n CardPayment_1.CardPaymentFilter = CardPaymentFilter;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"authService\", \"$q\"];\r\n function Service(httpService, authService, $q) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.authService = authService;\r\n this.$q = $q;\r\n }\r\n Service.prototype.submitCardPayment = function (payment) {\r\n var tenantId = payment.TenantId;\r\n return this.httpService.post(\"v1/\" + tenantId + \"/cardprocessing/cardpayments\", payment);\r\n };\r\n Service.prototype.getCardPayment = function (tenantId, paymentId) {\r\n return this.httpService.get(\"v1/\" + tenantId + \"/cardprocessing/cardpayments/\" + paymentId);\r\n };\r\n Service.prototype.getCardPaymentsByFilter = function (tenantId, filter) {\r\n return this.httpService.post(\"v1/\" + tenantId + \"/cardprocessing/cardpayments/filter\", filter);\r\n };\r\n Service.prototype.getCardPayments = function (tenantId) {\r\n return this.httpService.get(\"v1/\" + tenantId + \"/cardprocessing/cardpayments\");\r\n };\r\n Service.prototype.getCardReaders = function (tenantId) {\r\n return this.httpService.get(\"v1/\" + tenantId + \"/cardprocessing/cardreaders\");\r\n };\r\n Service.prototype.getCardReader = function (tenantId, cardReaderId) {\r\n return this.httpService.get(\"v1/\" + tenantId + \"/cardprocessing/cardreaders/\" + cardReaderId);\r\n };\r\n Service.prototype.submitCardReader = function (cardReader) {\r\n var tenantId = cardReader.TenantId;\r\n return this.httpService.post(\"v1/\" + tenantId + \"/cardprocessing/cardreaders\", cardReader);\r\n };\r\n Service.prototype.updateCardReader = function (cardReader) {\r\n var tenantId = cardReader.TenantId;\r\n return this.httpService.post(\"v1/\" + tenantId + \"/cardprocessing/cardreaders/\" + cardReader.CardReaderId, cardReader);\r\n };\r\n Service.prototype.deleteCardReader = function (tenantId, cardReaderId) {\r\n return this.httpService.remove(\"v1/\" + tenantId + \"/cardprocessing/cardreaders/\" + cardReaderId);\r\n };\r\n return Service;\r\n })();\r\n CardPayment_1.Service = Service;\r\n })(CardPayment = Domain.CardPayment || (Domain.CardPayment = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('cardPaymentDomain', Domain.CardPayment.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar CardPaymentModule;\r\n(function (CardPaymentModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"authService\", \"cardPaymentDomain\"];\r\n function Service(httpService, authService, cardPaymentDomain) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.authService = authService;\r\n this.cardPaymentDomain = cardPaymentDomain;\r\n this.paymentResult = null;\r\n this.payment = null;\r\n }\r\n Service.prototype.setPayment = function (payment) {\r\n this.payment = payment;\r\n };\r\n Service.prototype.getPayment = function () {\r\n return this.payment;\r\n };\r\n Service.prototype.setPaymentResult = function (payment) {\r\n this.paymentResult = payment;\r\n };\r\n Service.prototype.getPaymentResult = function () {\r\n return this.paymentResult;\r\n };\r\n Service.prototype.requestCardPayment = function (payment) {\r\n return this.cardPaymentDomain.submitCardPayment(payment);\r\n };\r\n Service.prototype.getCardPaymentStatus = function (tenantId, paymentId) {\r\n return this.cardPaymentDomain.getCardPayment(tenantId, paymentId);\r\n };\r\n Service.prototype.getAllCardPayments = function (tenantId) {\r\n return this.cardPaymentDomain.getCardPayments(tenantId);\r\n };\r\n Service.prototype.getAllCardPaymentsByFilter = function (tenantId, filter) {\r\n return this.cardPaymentDomain.getCardPaymentsByFilter(tenantId, filter);\r\n };\r\n Service.prototype.getCardreaders = function (tenantId) {\r\n return this.cardPaymentDomain.getCardReaders(tenantId);\r\n };\r\n Service.prototype.getCardreader = function (tenantId, cardreaderId) {\r\n return this.cardPaymentDomain.getCardReader(tenantId, cardreaderId);\r\n };\r\n Service.prototype.createCardreader = function (cardreader) {\r\n return this.cardPaymentDomain.submitCardReader(cardreader);\r\n };\r\n Service.prototype.updateCardreader = function (cardreader) {\r\n return this.cardPaymentDomain.updateCardReader(cardreader);\r\n };\r\n Service.prototype.deleteCardreader = function (tenantId, cardReaderId) {\r\n return this.cardPaymentDomain.deleteCardReader(tenantId, cardReaderId);\r\n };\r\n return Service;\r\n })();\r\n CardPaymentModule.Service = Service;\r\n})(CardPaymentModule || (CardPaymentModule = {}));\r\nangular.module('DoctorApp')\r\n .service('cardPaymentService', CardPaymentModule.Service);\r\nvar CardPaymentModule;\r\n(function (CardPaymentModule) {\r\n (function (PaymentStatus) {\r\n PaymentStatus[PaymentStatus[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\r\n PaymentStatus[PaymentStatus[\"PAYMENT_REQUESTED\"] = 1] = \"PAYMENT_REQUESTED\";\r\n PaymentStatus[PaymentStatus[\"PAYMENT_INITIATED\"] = 2] = \"PAYMENT_INITIATED\";\r\n PaymentStatus[PaymentStatus[\"PAYMENT_IN_PROGRESS\"] = 3] = \"PAYMENT_IN_PROGRESS\";\r\n PaymentStatus[PaymentStatus[\"PAYMENT_FAILED\"] = 4] = \"PAYMENT_FAILED\";\r\n PaymentStatus[PaymentStatus[\"PAYMENT_FINALISED\"] = 5] = \"PAYMENT_FINALISED\";\r\n })(CardPaymentModule.PaymentStatus || (CardPaymentModule.PaymentStatus = {}));\r\n var PaymentStatus = CardPaymentModule.PaymentStatus;\r\n (function (TransactionStatus) {\r\n TransactionStatus[TransactionStatus[\"UNDEFINED\"] = 0] = \"UNDEFINED\";\r\n TransactionStatus[TransactionStatus[\"AUTHORISED\"] = 1] = \"AUTHORISED\";\r\n TransactionStatus[TransactionStatus[\"DECLINED\"] = 2] = \"DECLINED\";\r\n TransactionStatus[TransactionStatus[\"PROCESSED\"] = 3] = \"PROCESSED\";\r\n TransactionStatus[TransactionStatus[\"FAILED\"] = 4] = \"FAILED\";\r\n TransactionStatus[TransactionStatus[\"CANCELLED\"] = 5] = \"CANCELLED\";\r\n })(CardPaymentModule.TransactionStatus || (CardPaymentModule.TransactionStatus = {}));\r\n var TransactionStatus = CardPaymentModule.TransactionStatus;\r\n var StatusUtil = (function () {\r\n function StatusUtil() {\r\n }\r\n StatusUtil.getPaymentName = function (status) {\r\n return this.PAYMENT_NAMES[status] || this.PAYMENT_NAMES[0];\r\n };\r\n StatusUtil.getTransactionName = function (status) {\r\n return this.TRANSACTION_NAMES[status] || this.TRANSACTION_NAMES[0];\r\n };\r\n StatusUtil.PAYMENT_NAMES = [\r\n \"Unknown\",\r\n \"PaymentRequested\",\r\n \"PaymentInitiated\",\r\n \"PaymentInProgress\",\r\n \"PaymentFailed\",\r\n \"PaymentFinalised\",\r\n ];\r\n StatusUtil.TRANSACTION_NAMES = [\r\n \"Undefined\",\r\n \"Authorised\",\r\n \"Declined\",\r\n \"Processed\",\r\n \"Failed\",\r\n \"Cancelled\",\r\n ];\r\n return StatusUtil;\r\n })();\r\n CardPaymentModule.StatusUtil = StatusUtil;\r\n})(CardPaymentModule || (CardPaymentModule = {}));\r\n/// \r\n/// \r\n/// \r\nvar CardPaymentModule;\r\n(function (CardPaymentModule) {\r\n var CardPaymentController = (function () {\r\n CardPaymentController.$inject = [\"$scope\", \"$rootScope\", \"locationService\", \"cardPaymentService\"];\r\n function CardPaymentController($scope, $rootScope, locationService, cardPaymentService) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.locationService = locationService;\r\n this.cardPaymentService = cardPaymentService;\r\n if (!$scope.paymentResult) {\r\n locationService.goToHome(StorageModule.Service.EMPTY_PRACTICE_ID);\r\n }\r\n $scope.printReceipt = function (receipt) {\r\n var mywindow = window.open('', 'my div', 'height=400,width=200');\r\n mywindow.document.write(receipt);\r\n mywindow.document.close();\r\n mywindow.focus();\r\n mywindow.print();\r\n mywindow.close();\r\n };\r\n this.init();\r\n }\r\n CardPaymentController.prototype.init = function () {\r\n this.$scope.title = 'Card payment details';\r\n this.$scope.paymentResult = this.cardPaymentService.getPaymentResult();\r\n };\r\n return CardPaymentController;\r\n })();\r\n CardPaymentModule.CardPaymentController = CardPaymentController;\r\n})(CardPaymentModule || (CardPaymentModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('CardPaymentController', CardPaymentModule.CardPaymentController);\r\n/// \r\n/// \r\nvar ClaimResponseModule;\r\n(function (ClaimResponseModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"billingDomain\"];\r\n function Service(httpService, billingDomain) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.billingDomain = billingDomain;\r\n }\r\n Service.prototype.getClaimResponse = function (invoiceId) {\r\n return this.billingDomain.getInvoiceWithStatus(invoiceId);\r\n };\r\n Service.prototype.getInvoices = function () {\r\n return this.billingDomain.getInvoices();\r\n };\r\n Service.prototype.cancelInvoice = function (invoiceId) {\r\n return this.billingDomain.cancelInvoice(invoiceId);\r\n };\r\n return Service;\r\n })();\r\n ClaimResponseModule.Service = Service;\r\n})(ClaimResponseModule || (ClaimResponseModule = {}));\r\nangular.module('DoctorApp')\r\n .service('claimResponseService', ClaimResponseModule.Service);\r\nvar ClaimResponseModule;\r\n(function (ClaimResponseModule) {\r\n (function (ClaimResponseType) {\r\n ClaimResponseType[ClaimResponseType[\"CREATED\"] = 0] = \"CREATED\";\r\n ClaimResponseType[ClaimResponseType[\"UPDATED\"] = 1] = \"UPDATED\";\r\n ClaimResponseType[ClaimResponseType[\"SUBMITTED\"] = 2] = \"SUBMITTED\";\r\n ClaimResponseType[ClaimResponseType[\"PRICED\"] = 3] = \"PRICED\";\r\n ClaimResponseType[ClaimResponseType[\"FINALIZED\"] = 4] = \"FINALIZED\";\r\n ClaimResponseType[ClaimResponseType[\"CLAIM_SENT_TO_MA\"] = 5] = \"CLAIM_SENT_TO_MA\";\r\n ClaimResponseType[ClaimResponseType[\"CLAIM_REJECTED\"] = 6] = \"CLAIM_REJECTED\";\r\n ClaimResponseType[ClaimResponseType[\"MA_RESPONSE_RECEIVED\"] = 7] = \"MA_RESPONSE_RECEIVED\";\r\n ClaimResponseType[ClaimResponseType[\"MANUAL_PROCESSING\"] = 8] = \"MANUAL_PROCESSING\";\r\n ClaimResponseType[ClaimResponseType[\"INVOICE_CANCELLED\"] = 9] = \"INVOICE_CANCELLED\";\r\n ClaimResponseType[ClaimResponseType[\"INVOICE_FORWARDED_TO_EXTERNAL_SYSTEM\"] = 10] = \"INVOICE_FORWARDED_TO_EXTERNAL_SYSTEM\";\r\n ClaimResponseType[ClaimResponseType[\"CLAIM_REVERSAL_SENT\"] = 11] = \"CLAIM_REVERSAL_SENT\";\r\n })(ClaimResponseModule.ClaimResponseType || (ClaimResponseModule.ClaimResponseType = {}));\r\n var ClaimResponseType = ClaimResponseModule.ClaimResponseType;\r\n var TypeUtil = (function () {\r\n function TypeUtil() {\r\n }\r\n TypeUtil.NAMES = [\r\n \"Created\",\r\n \"Updated\",\r\n \"Submitted\",\r\n \"Priced\",\r\n \"Finalized\",\r\n \"Claim Sent to MA\",\r\n \"Claim Rejected\",\r\n \"MA Response Received\",\r\n \"Manual Processing\",\r\n \"Invoice Cancelled\",\r\n \"Invoice forwarded to external system\",\r\n \"Claim Reversal Sent\"\r\n ];\r\n return TypeUtil;\r\n })();\r\n ClaimResponseModule.TypeUtil = TypeUtil;\r\n})(ClaimResponseModule || (ClaimResponseModule = {}));\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClaimResponseModule;\r\n(function (ClaimResponseModule) {\r\n var TransactionDetails = (function () {\r\n function TransactionDetails() {\r\n }\r\n return TransactionDetails;\r\n })();\r\n ClaimResponseModule.TransactionDetails = TransactionDetails;\r\n var Payment = (function () {\r\n function Payment() {\r\n this.TransactionDetails = new ClaimResponseModule.TransactionDetails();\r\n }\r\n return Payment;\r\n })();\r\n ClaimResponseModule.Payment = Payment;\r\n var PaymentRequest = (function () {\r\n function PaymentRequest() {\r\n this.payment = new ClaimResponseModule.Payment();\r\n }\r\n return PaymentRequest;\r\n })();\r\n ClaimResponseModule.PaymentRequest = PaymentRequest;\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$rootScope\", \"claimResponseService\", \"locationService\", \"showDialog\", \"patientService\", \"$filter\", \"modalService\", \"cardPaymentService\", \"$routeParams\"];\r\n function Controller($scope, $rootScope, claimResponseService, locationService, showDialog, patientService, $filter, modalService, cardPaymentService, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.claimResponseService = claimResponseService;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.patientService = patientService;\r\n this.$filter = $filter;\r\n this.modalService = modalService;\r\n this.cardPaymentService = cardPaymentService;\r\n this.$routeParams = $routeParams;\r\n this.getTotalClaimed = function () {\r\n var total = 0;\r\n for (var i = 0; i < _this.$scope.invoiceLines.length; i++) {\r\n total += Number(_this.$scope.invoiceLines[i].TotalIncVat);\r\n }\r\n return total;\r\n };\r\n $scope.hasResponse = function () {\r\n return $scope.invoice.InvoiceLineItemsWithStatusVo !== undefined;\r\n };\r\n $scope.concatPatient = function (patientDetails) {\r\n var result = (patientDetails.FirstName || '') + ' ' + (patientDetails.Surname || '');\r\n return $filter('truncate')($filter('titlecase')(result), 50);\r\n };\r\n $scope.refresh = function () {\r\n _this.updateClaimResponse(_this.claimId);\r\n };\r\n $scope.cancelInvoice = function () {\r\n var noValid = _this.checkValidStatus($scope.invoice.Status);\r\n if (noValid) {\r\n showDialog.info(noValid);\r\n }\r\n else {\r\n showDialog.confirm(\"Do you want to cancel this invoice ?\")\r\n .then(function () {\r\n return claimResponseService.cancelInvoice($scope.invoice.InvoiceId);\r\n })\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.info(response.ResponseMessage);\r\n }\r\n else {\r\n showDialog.info(\"Invoice was canceled.\");\r\n $scope.refresh();\r\n }\r\n });\r\n }\r\n };\r\n $scope.$watch('paymentRequest.submited', function (newValue) {\r\n if (newValue) {\r\n cardPaymentService.setPayment($scope.invoice);\r\n locationService.goToCardPayments();\r\n }\r\n });\r\n $scope.pay = function () {\r\n var invoice = $scope.invoice.InvoiceLineItemsWithStatusVo;\r\n var amount = (invoice.MaPayableAmount + invoice.PatientLiable == 0) ? $scope.totalInvoice : invoice.PatientLiable;\r\n if (amount) {\r\n _this.paymentRequest.payment.TransactionDetails.Amount = amount;\r\n }\r\n modalService.openNumbers('int', 'Manual payment')\r\n .then(function (res) {\r\n _this.paymentRequest.payment.TransactionDetails.Amount = res;\r\n });\r\n };\r\n this.init();\r\n }\r\n Controller.prototype.init = function () {\r\n this.claimId = this.$routeParams.claimId;\r\n this.$scope.invoice = new Domain.Billing.InvoiceWithStatus();\r\n this.$scope.invoiceLines = [];\r\n this.$scope.status = '';\r\n this.$scope.placeOfService = '';\r\n this.$scope.totalInvoice = 0;\r\n var request = new ClaimResponseModule.PaymentRequest();\r\n request.payment.CustomerReference = 'Customer reference';\r\n request.payment.TransactionDetails.Amount = 0;\r\n request.payment.TransactionDetails.Currency = 'ZAR';\r\n request.payment.TransactionDetails.BudgetMonths = 0;\r\n request.submited = false;\r\n this.paymentRequest = request;\r\n this.updateClaimResponse(this.claimId);\r\n };\r\n Controller.prototype.checkValidStatus = function (status) {\r\n switch (status) {\r\n case ClaimResponseModule.ClaimResponseType.INVOICE_CANCELLED:\r\n return 'The invoice has already been canceled and cannot be canceled again.';\r\n case ClaimResponseModule.ClaimResponseType.CLAIM_SENT_TO_MA:\r\n case ClaimResponseModule.ClaimResponseType.CLAIM_REJECTED:\r\n case ClaimResponseModule.ClaimResponseType.MA_RESPONSE_RECEIVED:\r\n case ClaimResponseModule.ClaimResponseType.MANUAL_PROCESSING:\r\n return null;\r\n default:\r\n return 'The invoice cannot be canceled before sending it. To cancel invoice please cancel patient visit.';\r\n }\r\n };\r\n Controller.prototype.getClaimResponseStatus = function (status) {\r\n return ClaimResponseModule.TypeUtil.NAMES[status];\r\n };\r\n Controller.prototype.updateClaimResponse = function (claimId) {\r\n var _this = this;\r\n this.$scope.invoice = new Domain.Billing.InvoiceWithStatus();\r\n this.$scope.invoiceLines = [];\r\n this.$scope.status = '';\r\n this.$scope.placeOfService = '';\r\n this.$scope.totalInvoice = 0;\r\n this.claimResponseService.getClaimResponse(claimId)\r\n .then(function (response) {\r\n _this.$scope.invoice = response;\r\n _this.$scope.invoiceLines = response.InvoiceLineItemsWithStatusVo.LineItemWithStatusVos;\r\n _this.$scope.placeOfService = _this.getPlacesOfService(_this.$scope.invoice.InvoiceLineItemsWithStatusVo.InvoiceHeader.HospitalIndicator);\r\n _this.$scope.status = _this.getClaimResponseStatus(_this.$scope.invoice.Status);\r\n _this.$scope.totalInvoice = _this.getTotalClaimed();\r\n });\r\n };\r\n Controller.prototype.getPlacesOfService = function (indicator) {\r\n if (indicator) {\r\n return \"Hospital\";\r\n }\r\n return \"Practice\";\r\n };\r\n return Controller;\r\n })();\r\n ClaimResponseModule.Controller = Controller;\r\n})(ClaimResponseModule || (ClaimResponseModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClaimResponseController', ClaimResponseModule.Controller);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar CardPaymentModule;\r\n(function (CardPaymentModule) {\r\n var PaymentReceipt = (function () {\r\n function PaymentReceipt() {\r\n }\r\n return PaymentReceipt;\r\n })();\r\n CardPaymentModule.PaymentReceipt = PaymentReceipt;\r\n var PaymentResult = (function () {\r\n function PaymentResult() {\r\n }\r\n return PaymentResult;\r\n })();\r\n CardPaymentModule.PaymentResult = PaymentResult;\r\n var CardPaymentsController = (function () {\r\n CardPaymentsController.$inject = [\"$scope\", \"$rootScope\", \"cardPaymentService\", \"locationService\", \"modalService\", \"$filter\", \"$sce\", \"$interval\", \"$routeParams\", \"tenantDomainService\", \"moment\"];\r\n function CardPaymentsController($scope, $rootScope, cardPaymentService, locationService, modalService, $filter, $sce, $interval, $routeParams, tenantDomainService, moment) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.cardPaymentService = cardPaymentService;\r\n this.locationService = locationService;\r\n this.modalService = modalService;\r\n this.$filter = $filter;\r\n this.$sce = $sce;\r\n this.$interval = $interval;\r\n this.$routeParams = $routeParams;\r\n this.tenantDomainService = tenantDomainService;\r\n this.moment = moment;\r\n $scope.showReceipt = function (title, receipt) {\r\n var body = $sce.trustAsHtml(receipt);\r\n modalService.showReceiptDialog(title, body);\r\n };\r\n $scope.getTransactionStatusName = function (s) {\r\n return CardPaymentModule.StatusUtil.getTransactionName(s);\r\n };\r\n $scope.getPaymentStatusName = function (s) {\r\n return CardPaymentModule.StatusUtil.getPaymentName(s);\r\n };\r\n $scope.updateCardpayments = function () {\r\n var cardPaymentFilter = new Domain.CardPayment.CardPaymentFilter();\r\n cardPaymentFilter.DateFrom = $scope.dateFrom.format();\r\n cardPaymentFilter.DateTo = $scope.dateTo.format();\r\n cardPaymentFilter.IncludeAllTransactions = $scope.includeAllTransactions;\r\n cardPaymentService.getAllCardPaymentsByFilter($scope.currentTenantId, cardPaymentFilter)\r\n .then(function (response) {\r\n $scope.cardpaymentsInMemory = response;\r\n $scope.changeSearchText($scope.searchText);\r\n });\r\n };\r\n $scope.changeSearchText = function (text) {\r\n $scope.cardpayments = text\r\n ? $filter('filter')($scope.cardpaymentsInMemory, text)\r\n : $scope.cardpaymentsInMemory;\r\n };\r\n $scope.stopInterval = function () {\r\n if (angular.isDefined(_this.stop)) {\r\n $rootScope.showPaymentStatuses = false;\r\n $rootScope.paymentStatus = \"\";\r\n $rootScope.transactionStatus = \"\";\r\n $rootScope.showProgressScreen = false;\r\n $interval.cancel(_this.stop);\r\n _this.stop = undefined;\r\n }\r\n };\r\n $scope.$watch(function (scope) {\r\n return _this.paymentRequest.submited;\r\n }, function (newValue, oldValue) {\r\n if (newValue) {\r\n $scope.pay();\r\n }\r\n });\r\n $scope.pay = function () {\r\n cardPaymentService.setPayment(null);\r\n _this.paymentRequest.submited = false;\r\n $rootScope.showProgressScreen = true;\r\n _this.paymentRequest.payment.PaymentDate = _this.moment().format();\r\n _this.paymentRequest.payment.TenantId = $scope.currentTenantId;\r\n var tenantId = $scope.currentTenantId;\r\n cardPaymentService.requestCardPayment(_this.paymentRequest.payment)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n $rootScope.showProgressScreen = false;\r\n modalService.error(\"Failed to make payment: \" + response.ResponseMessage);\r\n }\r\n else {\r\n var paymentId = response.Data;\r\n _this.stop = _this.$interval(function (index) {\r\n _this.getPaymentStatus(tenantId, paymentId);\r\n }, 3000, 60, true);\r\n $scope.$on('$destroy', function () {\r\n $scope.stopInterval();\r\n });\r\n }\r\n });\r\n };\r\n $scope.changeFilterByDate = function (first) {\r\n if (first) {\r\n $scope.configTo.min = $scope.dateFrom;\r\n }\r\n else {\r\n $scope.configFrom.max = $scope.dateTo;\r\n }\r\n $scope.updateCardpayments();\r\n };\r\n var that = this;\r\n $scope.changeFilter = function () {\r\n that.setDefaultFilterValues();\r\n $scope.updateCardpayments();\r\n };\r\n $scope.takePayment = function () {\r\n _this.modalService.openNumbers('int', 'Manual payment')\r\n .then(function (res) {\r\n _this.paymentRequest.payment.TransactionDetails.Amount = res;\r\n $scope.pay();\r\n });\r\n };\r\n this.init();\r\n }\r\n CardPaymentsController.prototype.init = function () {\r\n this.$scope.currentTenantId = \"\";\r\n this.$scope.tenants = [];\r\n this.$scope.cardpaymentsInMemory = [];\r\n this.$scope.cardpayments = [];\r\n this.$scope.searchText = '';\r\n this.cardPaymentService.setPaymentResult(null);\r\n this.setDefaultFilterValues();\r\n var request = new ClaimResponseModule.PaymentRequest();\r\n request.payment.CustomerReference = 'CR22222';\r\n request.payment.TransactionDetails.Amount = 0;\r\n request.payment.TransactionDetails.Currency = 'ZAR';\r\n request.payment.TransactionDetails.BudgetMonths = 0;\r\n request.submited = false;\r\n this.paymentRequest = request;\r\n var payment = this.cardPaymentService.getPayment();\r\n if (payment) {\r\n this.paymentRequest = payment;\r\n this.$scope.pay();\r\n }\r\n else {\r\n this.getTenantsAndPayments();\r\n }\r\n };\r\n CardPaymentsController.prototype.setDefaultFilterValues = function () {\r\n var now = this.moment.utc();\r\n this.$scope.dateTo = this.moment(now);\r\n this.$scope.dateFrom = now.subtract(30, 'days');\r\n var configFrom = new DatePickerModule.Config();\r\n configFrom.format = CardPaymentsController.DATE_PATTERN;\r\n configFrom.max = this.$scope.dateTo;\r\n this.$scope.configFrom = configFrom;\r\n var configTo = new DatePickerModule.Config();\r\n configTo.format = CardPaymentsController.DATE_PATTERN;\r\n configTo.min = this.$scope.dateFrom;\r\n this.$scope.configTo = configTo;\r\n this.$scope.includeAllTransactions = false;\r\n };\r\n CardPaymentsController.prototype.getPaymentStatus = function (tenantId, paymentId) {\r\n var _this = this;\r\n this.cardPaymentService.getCardPaymentStatus(tenantId, paymentId)\r\n .then(function (cardPaymentResult) {\r\n _this.$rootScope.showPaymentStatuses = true;\r\n _this.$rootScope.paymentStatus = _this.$scope.getPaymentStatusName(cardPaymentResult.Status);\r\n _this.$rootScope.transactionStatus = (cardPaymentResult.CardPayment.TransactionResult)\r\n ? _this.$scope\r\n .getTransactionStatusName(cardPaymentResult.CardPayment.TransactionResult.TransactionStatus)\r\n : _this.$scope.getTransactionStatusName(0);\r\n if (cardPaymentResult.Status == 4 || cardPaymentResult.Status == 5) {\r\n _this.$scope.stopInterval();\r\n _this.showPaymentResult(cardPaymentResult);\r\n }\r\n });\r\n };\r\n CardPaymentsController.prototype.getTenantsAndPayments = function () {\r\n var _this = this;\r\n this.tenantDomainService.getTenantList()\r\n .then(function (response) {\r\n if (response) {\r\n _this.$scope.tenants = response;\r\n if (response.length > 0) {\r\n _this.$scope.currentTenantId = response[0].TenantId;\r\n _this.$scope.updateCardpayments();\r\n }\r\n }\r\n });\r\n };\r\n CardPaymentsController.prototype.showPaymentResult = function (result) {\r\n var paymentResult = {\r\n \"PaymentStatus\": this.$scope.getPaymentStatusName(result.Status),\r\n \"TransactionStatus\": this.$scope\r\n .getTransactionStatusName(result.CardPayment.TransactionResult.TransactionStatus),\r\n \"CustomerReceipt\": {\r\n \"HtmlText\": \"\",\r\n \"Object\": \"\"\r\n },\r\n \"MerchantReceipt\": {\r\n \"HtmlText\": \"\",\r\n \"Object\": \"\"\r\n },\r\n \"SignatureReceipt\": {\r\n \"HtmlText\": \"\",\r\n \"Object\": \"\"\r\n }\r\n };\r\n var transactionResult = result.CardPayment.TransactionResult;\r\n if (transactionResult) {\r\n if (transactionResult.CustomerReceipt) {\r\n paymentResult.CustomerReceipt.HtmlText = transactionResult.CustomerReceipt;\r\n paymentResult.CustomerReceipt.Object = this.$sce.trustAsHtml(transactionResult.CustomerReceipt);\r\n }\r\n if (transactionResult.MerchantReceipt) {\r\n paymentResult.MerchantReceipt.HtmlText = transactionResult.MerchantReceipt;\r\n paymentResult.MerchantReceipt.Object = this.$sce.trustAsHtml(transactionResult.MerchantReceipt);\r\n }\r\n if (transactionResult.SignatureReceipt) {\r\n paymentResult.SignatureReceipt.HtmlText = transactionResult.SignatureReceipt;\r\n paymentResult.SignatureReceipt.Object = this.$sce.trustAsHtml(transactionResult.SignatureReceipt);\r\n }\r\n }\r\n this.cardPaymentService.setPaymentResult(paymentResult);\r\n this.locationService.goToCardPayments();\r\n };\r\n CardPaymentsController.DATE_PATTERN = 'dd MM, yy';\r\n return CardPaymentsController;\r\n })();\r\n CardPaymentModule.CardPaymentsController = CardPaymentsController;\r\n})(CardPaymentModule || (CardPaymentModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('CardPaymentsController', CardPaymentModule.CardPaymentsController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar CardReaderModule;\r\n(function (CardReaderModule) {\r\n var CardReaderCreateController = (function () {\r\n CardReaderCreateController.$inject = [\"$scope\", \"locationService\", \"showDialog\", \"cardPaymentService\", \"tenantDomainService\"];\r\n function CardReaderCreateController($scope, locationService, showDialog, cardPaymentService, tenantDomainService) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.cardPaymentService = cardPaymentService;\r\n this.tenantDomainService = tenantDomainService;\r\n $scope.create = true;\r\n $scope.title = 'Create card reader';\r\n $scope.tenants = [];\r\n $scope.done = function (isValid) {\r\n if (isValid) {\r\n saveCardreader($scope.cardreader);\r\n }\r\n };\r\n function getTenants() {\r\n tenantDomainService.getTenantList().then(function (response) {\r\n $scope.tenants = response;\r\n });\r\n }\r\n function saveCardreader(cardreader) {\r\n cardPaymentService.createCardreader(cardreader).then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n showDialog.info(\"The new card reader was successfully created.\");\r\n locationService.goToCardPayments();\r\n }\r\n });\r\n }\r\n (function init() {\r\n $scope.cardreader = {\r\n \"CardReaderId\": \"\",\r\n \"TenantId\": \"\",\r\n \"NodeId\": 0,\r\n \"Identifier\": \"\",\r\n \"SerialNumber\": \"\",\r\n \"Address\": \"\",\r\n \"Port\": \"\",\r\n \"ConnectionMethod\": 1,\r\n \"SharedSecret\": \"\",\r\n \"NodeVersion\": \"\"\r\n };\r\n getTenants();\r\n })();\r\n }\r\n return CardReaderCreateController;\r\n })();\r\n CardReaderModule.CardReaderCreateController = CardReaderCreateController;\r\n})(CardReaderModule || (CardReaderModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('CardReaderCreateController', CardReaderModule.CardReaderCreateController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar CardReaderModule;\r\n(function (CardReaderModule) {\r\n var CardReaderEditController = (function () {\r\n CardReaderEditController.$inject = [\"$scope\", \"locationService\", \"showDialog\", \"cardPaymentService\", \"$routeParams\", \"tenantDomainService\"];\r\n function CardReaderEditController($scope, locationService, showDialog, cardPaymentService, $routeParams, tenantDomainService) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.cardPaymentService = cardPaymentService;\r\n this.$routeParams = $routeParams;\r\n this.tenantDomainService = tenantDomainService;\r\n $scope.title = 'Edit card reader';\r\n $scope.tenants = [];\r\n $scope.done = function (isValid) {\r\n if (isValid) {\r\n if ($scope.cardreader.ConnectionMethod == 5) {\r\n $scope.cardreader.Address = \"\";\r\n }\r\n saveCardreader($scope.cardreader);\r\n }\r\n };\r\n function getTenants() {\r\n tenantDomainService.getTenantList().then(function (response) {\r\n $scope.tenants = response;\r\n });\r\n }\r\n function saveCardreader(cardreader) {\r\n cardPaymentService.updateCardreader(cardreader).then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n locationService.goToCardPayments();\r\n }\r\n });\r\n }\r\n (function init() {\r\n getTenants();\r\n cardPaymentService.getCardreader($routeParams.tenantId, $routeParams.cardreaderId).then(function (response) {\r\n if (response) {\r\n $scope.cardreader = response;\r\n }\r\n else {\r\n locationService.goToCardPayments();\r\n }\r\n });\r\n })();\r\n }\r\n return CardReaderEditController;\r\n })();\r\n CardReaderModule.CardReaderEditController = CardReaderEditController;\r\n})(CardReaderModule || (CardReaderModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('CardReaderEditController', CardReaderModule.CardReaderEditController);\r\n/// \r\n/// \r\n/// \r\nvar CardReaderModule;\r\n(function (CardReaderModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"tenantDomainService\"];\r\n function Service(httpService, tenantDomainService) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.tenantDomainService = tenantDomainService;\r\n }\r\n Service.prototype.getTenants = function () {\r\n return this.tenantDomainService.getTenantList()\r\n .then(function (response) {\r\n if (response) {\r\n return response;\r\n }\r\n return [];\r\n });\r\n };\r\n return Service;\r\n })();\r\n CardReaderModule.Service = Service;\r\n})(CardReaderModule || (CardReaderModule = {}));\r\nangular.module('DoctorApp')\r\n .service('cardReaderService', CardReaderModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar CardReaderModule;\r\n(function (CardReaderModule) {\r\n var CardReadersController = (function () {\r\n CardReadersController.$inject = [\"$scope\", \"$rootScope\", \"cardPaymentService\", \"showDialog\", \"$filter\", \"locationService\", \"cardReaderService\"];\r\n function CardReadersController($scope, $rootScope, cardPaymentService, showDialog, $filter, locationService, cardReaderService) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.cardPaymentService = cardPaymentService;\r\n this.showDialog = showDialog;\r\n this.$filter = $filter;\r\n this.locationService = locationService;\r\n this.cardReaderService = cardReaderService;\r\n $scope.goToCreateCardReader = function () {\r\n locationService.goToCardReaderCreate();\r\n };\r\n $scope.goToEditCardReader = function (cardreader) {\r\n locationService.goToCardReaderEdit(cardreader.TenantId, cardreader.CardReaderId);\r\n };\r\n $scope.deleteCardReader = function (cardReader) {\r\n showDialog.confirm(\"Are you sure want to delete card reader: \" + cardReader.Identifier)\r\n .then(function () {\r\n return cardPaymentService.deleteCardreader(cardReader.TenantId, cardReader.CardReaderId);\r\n })\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n $scope.updateCardReaders();\r\n showDialog.info(\"The card reader: \" + cardReader.Identifier + \" was successfully deleted.\");\r\n }\r\n });\r\n };\r\n $scope.updateCardReaders = function () {\r\n cardPaymentService.getCardreaders($scope.currentTenantId)\r\n .then(function (response) {\r\n $scope.cardreadersInMemory = response;\r\n $scope.changeSearchText($scope.searchText);\r\n });\r\n };\r\n $scope.changeSearchText = function (text) {\r\n $scope.cardreaders = text ? $filter('filter')($scope.cardreadersInMemory, text) : $scope.cardreadersInMemory;\r\n };\r\n this.init();\r\n }\r\n CardReadersController.prototype.init = function () {\r\n this.$scope.currentTenantId = \"\";\r\n this.$scope.tenants = [];\r\n this.$scope.cardreaders = [];\r\n this.$scope.cardreadersInMemory = [];\r\n this.$scope.searchText = '';\r\n this.getTenantsAndCardReaders();\r\n };\r\n CardReadersController.prototype.getTenantsAndCardReaders = function () {\r\n var _this = this;\r\n this.cardReaderService.getTenants()\r\n .then(function (response) {\r\n _this.$scope.tenants = response;\r\n if (response.length) {\r\n _this.$scope.currentTenantId = response[0].TenantId;\r\n _this.$scope.updateCardReaders();\r\n }\r\n });\r\n };\r\n return CardReadersController;\r\n })();\r\n CardReaderModule.CardReadersController = CardReadersController;\r\n})(CardReaderModule || (CardReaderModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('CardReadersController', CardReaderModule.CardReadersController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar PasswordChangeModule;\r\n(function (PasswordChangeModule) {\r\n var ConfirmPassword = (function () {\r\n function ConfirmPassword() {\r\n }\r\n return ConfirmPassword;\r\n })();\r\n PasswordChangeModule.ConfirmPassword = ConfirmPassword;\r\n var ChangePasswordController = (function () {\r\n ChangePasswordController.$inject = [\"$scope\", \"$rootScope\", \"showDialog\", \"$routeParams\", \"storageService\", \"locationService\", \"accountDomain\"];\r\n function ChangePasswordController($scope, $rootScope, showDialog, $routeParams, storageService, locationService, accountDomain) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.showDialog = showDialog;\r\n this.$routeParams = $routeParams;\r\n this.storageService = storageService;\r\n this.locationService = locationService;\r\n this.accountDomain = accountDomain;\r\n $scope.userId = $routeParams.userId;\r\n $scope.back = function () {\r\n if ($scope.isAllowedBack === false) {\r\n storageService.clear();\r\n }\r\n $rootScope.back();\r\n };\r\n $scope.ok = function (isValid) {\r\n var messages = [];\r\n if ($scope.changePasswordForm.newPassword.$error.hasSpecialSymbol) {\r\n messages.push('- At least one special character');\r\n }\r\n if ($scope.changePasswordForm.newPassword.$error.containsDigit) {\r\n messages.push('- At least one digit');\r\n }\r\n if ($scope.changePasswordForm.newPassword.$error.containsLowerLetter) {\r\n messages.push('- At least one Lowercase letter');\r\n }\r\n if ($scope.changePasswordForm.newPassword.$error.containsUpperLetter) {\r\n messages.push('- At least one Uppercase letter');\r\n }\r\n if (!isValid) {\r\n if (messages.length > 0) {\r\n showDialog.error(\"Please enter a valid password to meet the following rules:\\n\" + messages.join('\\n'), ModalModule.ModalWidth._375px);\r\n }\r\n else if ($scope.changePasswordForm.confirmPassword.$error.required ||\r\n $scope.changePasswordForm.confirmPassword.$error.notMatched) {\r\n showDialog.error(\"Please enter valid confirm password.\");\r\n }\r\n return;\r\n }\r\n if ($scope.user.oldPassword && $scope.user.newPassword) {\r\n var request = new Domain.Account.ChangeUserPassword();\r\n request.UserId = $scope.userId;\r\n request.NewPassword = $scope.user.newPassword;\r\n request.OldPassword = $scope.user.oldPassword;\r\n _this.accountDomain.changeUserPassword(request)\r\n .then(function () {\r\n _this.locationService.goToHome($routeParams.practiceId);\r\n });\r\n }\r\n };\r\n $scope.changePassword = function () {\r\n if ($scope.user && $scope.user.confirmPassword) {\r\n $scope.changePasswordForm.confirmPassword.matched = $scope.user.confirmPassword === $scope.user.newPassword;\r\n $scope.changePasswordForm.confirmPassword.$setValidity('notMatched', $scope.changePasswordForm.confirmPassword.matched);\r\n }\r\n };\r\n this.accountDomain.getUser($routeParams.userId)\r\n .then(function (user) {\r\n $scope.isAllowedBack = !user.RequirePasswordChange;\r\n });\r\n $scope.user = {\r\n oldPassword: \"\",\r\n newPassword: \"\",\r\n confirmPassword: \"\"\r\n };\r\n }\r\n return ChangePasswordController;\r\n })();\r\n PasswordChangeModule.ChangePasswordController = ChangePasswordController;\r\n})(PasswordChangeModule || (PasswordChangeModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ChangePasswordController', PasswordChangeModule.ChangePasswordController);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar DashboardModule;\r\n(function (DashboardModule) {\r\n var PatientDashboardEvent = Domain.Clinical.PatientDashboardEvent;\r\n var HealthDocResponse = (function () {\r\n function HealthDocResponse() {\r\n }\r\n return HealthDocResponse;\r\n })();\r\n DashboardModule.HealthDocResponse = HealthDocResponse;\r\n var HealthDocEvent = (function (_super) {\r\n __extends(HealthDocEvent, _super);\r\n function HealthDocEvent() {\r\n _super.apply(this, arguments);\r\n }\r\n return HealthDocEvent;\r\n })(PatientDashboardEvent);\r\n DashboardModule.HealthDocEvent = HealthDocEvent;\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$http\", \"$filter\", \"$rootScope\", \"$routeParams\", \"$window\", \"$log\", \"httpService\", \"encounterServiceNew\", \"clinicalReportService\", \"showDialog\", \"moment\", \"$q\", \"dashboardService\", \"patientService\", \"locationService\", \"providerService\", \"trackingService\", \"storageService\", \"modalService\", \"usageService\"];\r\n function Controller($scope, $http, $filter, $rootScope, $routeParams, $window, $log, httpService, encounterServiceNew, clinicalReportService, showDialog, moment, $q, dashboardService, patientService, locationService, providerService, trackingService, storageService, modalService, usageService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$http = $http;\r\n this.$filter = $filter;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.$window = $window;\r\n this.$log = $log;\r\n this.httpService = httpService;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.clinicalReportService = clinicalReportService;\r\n this.showDialog = showDialog;\r\n this.moment = moment;\r\n this.$q = $q;\r\n this.dashboardService = dashboardService;\r\n this.patientService = patientService;\r\n this.locationService = locationService;\r\n this.providerService = providerService;\r\n this.trackingService = trackingService;\r\n this.storageService = storageService;\r\n this.modalService = modalService;\r\n this.usageService = usageService;\r\n $scope.inputFormat = 'YYYY-MM-DD HH:mm:ss';\r\n $scope.dateFormatByMinutes = 'YYYY-MM-DD HH:mm';\r\n $scope.outputFormat = 'DD MMM, YYYY';\r\n $scope.outputFormatTime = 'LT';\r\n $scope.isEnabledHealthID = false;\r\n $scope.collapseSummary = true;\r\n $scope.collapseVisit = true;\r\n $scope.collapseMembers = true;\r\n $scope.collapseFinancial = true;\r\n $scope.collapseFinancialIHealth = true;\r\n $scope.selectedOrder = [];\r\n $scope.orderFormat = 'Type';\r\n $scope.prescriptionDetails = [];\r\n $scope.familyMembers = [];\r\n $scope.loading = true;\r\n $scope.displayEncounterLink = encounterServiceNew.getPatientEvent() != null;\r\n $scope.isVirtualConsult = false;\r\n $scope.checkHealthDocCategory = function (order) {\r\n for (var orderItem in $scope.healthDocCategories) {\r\n $scope.healthDocCategories[orderItem]\r\n .selected = order.name === $scope.healthDocCategories[orderItem].name;\r\n }\r\n var groups = [];\r\n _this.filteringPatientEvents();\r\n if (order.name !== 'All') {\r\n for (var _i = 0, _a = $scope.groups; _i < _a.length; _i++) {\r\n var group = _a[_i];\r\n var groupCopy = angular.copy(group);\r\n groupCopy.thumbnailList = $filter('filter')(groupCopy.thumbnailList, function (value) {\r\n return value.Code === order.name || value.Category === order.name;\r\n });\r\n if (groupCopy.thumbnailList.length) {\r\n groups.push(groupCopy);\r\n }\r\n }\r\n $scope.groups = groups;\r\n }\r\n };\r\n $scope.patient = {\r\n PracticeId: '',\r\n PatientId: '',\r\n FirstName: '',\r\n Surname: '',\r\n MedicalAidName: '',\r\n IdentityNo: '',\r\n DateOfBirth: '',\r\n LastVisitDate: '',\r\n Age: 0,\r\n Created: false,\r\n Allergies: [],\r\n NoAllergies: false,\r\n ChronicConditions: [],\r\n AllergiesNote: '',\r\n ClinicalNotes: '',\r\n PatientDashboardEventsCount: 0,\r\n PatientDashboardEvents: []\r\n };\r\n $scope.healtDocEvents = [];\r\n $scope.orders = {\r\n Diagnosis: { name: 'Diagnosis', value: 0 },\r\n ClinicalNote: { name: 'ClinicalNote', value: 1 },\r\n Procedure: { name: 'Procedure', value: 2 },\r\n Modifier: { name: 'Modifier', value: 2 },\r\n MedicalInsuranceProcedure: { name: 'MedicalInsuranceProcedure', value: 3 },\r\n Consumable: { name: 'Consumable', value: 4 },\r\n Medicine: { name: 'Medicine', value: 5 },\r\n PrescriptionLine: { name: 'PrescriptionLine', value: 6 },\r\n MedicalCertificate: { name: 'MedicalCertificate', value: 7 },\r\n PathologyTest: { name: 'PathologyTest', value: 8 },\r\n HealthDoc: { name: 'HealthDoc', value: 9 },\r\n Communication: { name: 'Communication', value: 10 },\r\n FollowUp: { name: 'FollowUp', value: 11 },\r\n VisitFollowUpSmsSent: { name: 'VisitFollowUpSmsSent', value: 12 },\r\n PathResultsFollowUpSmsSent: { name: 'PathResultsFollowUpSmsSent', value: 12 },\r\n PathResultsNormalSmsSent: { name: 'PathResultsNormalSmsSent', value: 12 },\r\n ClinicalMetric: { name: 'ClinicalMetric', value: 13 },\r\n ProviderNote: { name: 'ProviderNote', value: 14 },\r\n PatientFile: { name: 'PatientFile', value: 15 },\r\n };\r\n $scope.orderGroups = [\r\n {\r\n name: 'All',\r\n data: [\r\n $scope.orders['Procedure'],\r\n $scope.orders['MedicalInsuranceProcedure'],\r\n $scope.orders['Modifier'],\r\n $scope.orders['Consumable'],\r\n $scope.orders['Diagnosis'],\r\n $scope.orders['ClinicalNote'],\r\n $scope.orders['ProviderNote'],\r\n $scope.orders['FollowUp'],\r\n $scope.orders['PrescriptionLine'],\r\n $scope.orders['MedicalCertificate'],\r\n $scope.orders['Medicine'],\r\n $scope.orders['PathologyTest'],\r\n $scope.orders['Communication'],\r\n $scope.orders['HealthDoc'],\r\n $scope.orders['PatientFile'],\r\n $scope.orders['VisitFollowUpSmsSent'],\r\n $scope.orders['PathResultsFollowUpSmsSent'],\r\n $scope.orders['PathResultsNormalSmsSent'],\r\n $scope.orders['ClinicalMetric']\r\n ],\r\n selected: true\r\n },\r\n { name: 'Dx', selected: false, data: [$scope.orders['Diagnosis']] },\r\n { name: 'Notes', selected: false, data: [$scope.orders['ClinicalNote'], $scope.orders['ProviderNote']] },\r\n { name: 'Clinical metrics', selected: false, data: [$scope.orders['ClinicalMetric']] },\r\n {\r\n name: 'Rx',\r\n selected: false,\r\n data: [\r\n $scope.orders['Medicine'], $scope.orders['PrescriptionLine']\r\n ]\r\n },\r\n { name: 'Lab', selected: false, data: [$scope.orders['PathologyTest']] },\r\n { name: 'Documents', selected: false, data: [$scope.orders['HealthDoc'], $scope.orders['PatientFile']] }\r\n ];\r\n $scope.hidePathLineHeader = function (name) {\r\n return !name.toLowerCase().contains('ampath') &&\r\n !name.toLowerCase().contains('lancet') &&\r\n !name.toLowerCase().contains('drs dietrich');\r\n };\r\n $scope.getPathLogoByEvent = function (event) {\r\n if (event.ParentDescription.toLowerCase().contains('ampath'))\r\n return 'ampath';\r\n if (event.ParentDescription.toLowerCase().contains('lancet'))\r\n return 'lancet';\r\n return 'pathcare';\r\n };\r\n $scope.selectPatient = function () {\r\n var patientId = $scope.patient.PatientId;\r\n locationService.goToChangePatient($routeParams.practiceId, patientId);\r\n };\r\n $scope.openPdfReport = function (report) {\r\n var newWindow = _this.$window.open('about:blank', \"_blank\");\r\n _this.dashboardService.reportLinkFromHtmlToPdf($routeParams.practiceId, report).then(function (link) {\r\n newWindow.location.href = link;\r\n });\r\n };\r\n $scope.openQuoteReport = function () {\r\n var token = _this.storageService.getAuthorizationData().token;\r\n var url = _this.dashboardService.getQuoteReportUrl($routeParams.practiceId, $scope.visit.Patient.PatientXRef);\r\n _this.$window.open(url + \"?access_token=\" + token, \"_blank\");\r\n };\r\n $scope.getEventDetails = function (event) {\r\n switch (event.Type) {\r\n case \"PrescriptionLine\":\r\n dashboardService.getEncounter($routeParams.practiceId, event.ParentReferenceId)\r\n .then(function (encounter) {\r\n dashboardService.getPrescriptionReport($routeParams.practiceId, encounter)\r\n .then(function (response) {\r\n var report = locationService.setAbsoluteServerUrl(response.Data);\r\n modalService.showReportDialog(EncounterModule.ReportType.Prescription, [report], function (report) {\r\n $scope.openPdfReport(report);\r\n }, $scope.patient.PatientId);\r\n trackingService.clickedOnPatientDashboardItem($routeParams.practiceId, event.DateTime, encounter, { NappiCode: event.Code }, EventTypeUtil.getTypeByName('Prescription'));\r\n });\r\n });\r\n break;\r\n case \"MedicalCertificate\":\r\n dashboardService.getEncounter($routeParams.practiceId, event.ParentReferenceId)\r\n .then(function (encounter) {\r\n dashboardService.getMedicalCertificateReport($routeParams.practiceId, encounter)\r\n .then(function (response) {\r\n var report = locationService.setAbsoluteServerUrl(response.Data);\r\n modalService.showReportDialog(EncounterModule.ReportType.MedicalCertificate, [report], function (report) {\r\n $scope.openPdfReport(report);\r\n }, $scope.patient.PatientId);\r\n trackingService.clickedOnPatientDashboardMedicalCertificate(event.ParentReferenceId, $routeParams.practiceId, event.Narrative, event.DateTime);\r\n });\r\n });\r\n break;\r\n case \"FollowUp\":\r\n case \"ClinicalNote\":\r\n case \"Diagnosis\":\r\n case \"Procedure\":\r\n case \"Modifier\":\r\n case \"MedicalInsuranceProcedure\":\r\n case \"Medicine\":\r\n case \"Consumable\":\r\n if (event.ValueFlag == \"mymps\") {\r\n showDialog.info(\"This clinical information was imported from Mymps and no further details are available.\");\r\n }\r\n else {\r\n dashboardService.getEncounter($routeParams.practiceId, event.ParentReferenceId)\r\n .then(function (encounter) {\r\n var item = {\r\n ChargeCode: event.Code,\r\n NappiCode: event.Code,\r\n DiagnosisCode: event.Code\r\n };\r\n trackingService.clickedOnPatientDashboardItem($routeParams.practiceId, event.DateTime, encounter, item, EventTypeUtil.getTypeByName(event.Type));\r\n locationService.goToEncounter(encounter.PatientEventDetails.PracticeId, encounter.PatientEventDetails.PatientEventId);\r\n });\r\n }\r\n break;\r\n case \"PathResultsFollowUpSmsSent\":\r\n case \"PathResultsNormalSmsSent\":\r\n case \"VisitFollowUpSmsSent\":\r\n showDialog.info(\"SMS sent to patient: \" + event.Description);\r\n break;\r\n case \"Communication\":\r\n dashboardService.getEncounterCommunicationBody($routeParams.practiceId, event.ParentReferenceId)\r\n .then(function (body) {\r\n modalService.showReportDialog(EncounterModule.ReportType.Communication, [body], function (body) {\r\n $scope.openPdfReport(body);\r\n }, $scope.patient.PatientId);\r\n });\r\n break;\r\n case \"PathologyTest\":\r\n trackingService.clickedOnPatientDashboardPathReport($routeParams.practiceId, event.PathologyReportId, event.DateTime);\r\n usageService.openedPathReport($routeParams.practiceId, event.PathologyReportId, event.DateTime);\r\n locationService.goToClinicalPathalogyReport($routeParams.practiceId, event.PathologyReportId);\r\n break;\r\n case Controller.HEALTH_DOC_TYPE:\r\n storageService.setParam(Controller.HEALTH_DOC_TYPE, event);\r\n locationService.goToHealthDoc($routeParams.practiceId, $routeParams.patientId);\r\n break;\r\n case Controller.PATIENT_FILE_TYPE:\r\n locationService.goToPatientFile($routeParams.practiceId, event.ParentReferenceId);\r\n usageService.openPatientFiles($routeParams.practiceId, event.PatientId, event.ParentReferenceId, storageService.getUser().userLogin);\r\n break;\r\n }\r\n };\r\n $scope.captureDocuments = function () {\r\n if ($scope.myPatientFilesEnabled) {\r\n $scope.capturePatientFiles();\r\n }\r\n };\r\n $scope.openAvatarInMyPatientFiles = function () {\r\n var token = _this.storageService.getAuthorizationData().token;\r\n var url = GlobalVar.patientFilesUrl +\r\n \"deeplink-login\" +\r\n \"?navigateTo=page-capture-avatar\" +\r\n \"&practice_id=\" +\r\n $routeParams.practiceId +\r\n \"&patient_id=\" +\r\n $routeParams.patientId +\r\n \"&token=\" +\r\n token;\r\n modalService.showCaptureHealthDocDialog(url, 'Patient Picture')\r\n .then(function () {\r\n _this.dashboardService.removeAvatarCache(_this.$routeParams.practiceId, _this.$routeParams.patientId);\r\n _this.refreshAvatar();\r\n });\r\n };\r\n $scope.openPatientFileDetails = function (item) {\r\n var token = _this.storageService.getAuthorizationData().token;\r\n var url = GlobalVar.patientFilesUrl +\r\n \"deeplink-login\" +\r\n \"?navigateTo=page-document-preview\" +\r\n \"&practice_id=\" +\r\n $routeParams.practiceId +\r\n \"&patient_id=\" +\r\n item.PatientId +\r\n \"&token=\" +\r\n token +\r\n \"&document_id=\" +\r\n item.ParentReferenceId;\r\n var newWindow = _this.$window.open(url, \"_blank\");\r\n };\r\n $scope.capturePatientFiles = function () {\r\n var token = _this.storageService.getAuthorizationData().token;\r\n var url = GlobalVar.patientFilesUrl +\r\n \"deeplink-login\" +\r\n \"?practice_id=\" +\r\n $routeParams.practiceId +\r\n \"&patient_id=\" +\r\n $scope.patient.PatientId +\r\n \"&token=\" +\r\n token +\r\n \"&random=\" +\r\n (new Date()).getTime() +\r\n Math.floor(Math.random() * 1000000);\r\n \"\";\r\n modalService.showCaptureHealthDocDialog(url, 'Capture myPatientFiles')\r\n .then(function () {\r\n return _this.dashboardService.getPatientDashboard($routeParams.practiceId, $scope.patient.PatientId);\r\n })\r\n .then(function (response) {\r\n if (response) {\r\n _this.$scope.patient = response;\r\n _this.displayPatientEvents();\r\n }\r\n });\r\n };\r\n $scope.isDOBValid = function () {\r\n return _this.$scope.patient && moment(_this.$scope.patient.DateOfBirth) < moment();\r\n };\r\n $scope.copyEventDetails = function (event) {\r\n $scope.prescriptionDetails.push(event);\r\n };\r\n $scope.hasPrescriptionDetails = function (event) {\r\n for (var _i = 0, _a = $scope.prescriptionDetails; _i < _a.length; _i++) {\r\n var detail = _a[_i];\r\n if (event.ParentReferenceId === detail.ParentReferenceId &&\r\n event.Narrative === detail.Narrative) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n $scope.goToHealthId = function () {\r\n _this.openHealthIdForPatient($routeParams.practiceId, $scope.patient.PatientId);\r\n usageService.openHealthID($routeParams.practiceId, $routeParams.patientId);\r\n };\r\n $scope.goToMedicalHistory = function () {\r\n locationService.goToMedicalHistory($routeParams.practiceId, $scope.patient.PatientId);\r\n };\r\n $scope.goToEncounter = function () {\r\n dashboardService.captureEncounter($routeParams.practiceId, $scope.patient.PatientId)\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n locationService.goToEncounter($routeParams.practiceId, response.Data.PatientEventId);\r\n }\r\n else {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n });\r\n };\r\n $scope.goToHome = function () {\r\n locationService.goToHome($routeParams.practiceId);\r\n };\r\n $scope.checkGroup = function (orderGroupItem) {\r\n for (var group in $scope.orderGroups) {\r\n $scope.orderGroups[group].selected = $scope.orderGroups[group].name === orderGroupItem.name;\r\n }\r\n $scope.selectedOrder = [];\r\n for (var _i = 0, _a = orderGroupItem.data; _i < _a.length; _i++) {\r\n var order = _a[_i];\r\n $scope.selectedOrder.push(order.name);\r\n }\r\n _this.filteringPatientEvents();\r\n };\r\n $scope.openTelehealth = function () {\r\n if (!_this.$scope.isVirtualConsult) {\r\n return;\r\n }\r\n window.open(_this.$scope.visit.VideoChatLink);\r\n trackingService.openedPatientTelehealthFromDashboard(_this.$scope.visit);\r\n };\r\n this.$scope.loadExtraData = function () {\r\n _this.dashboardService.loadExternalData($routeParams.practiceId, $routeParams.patientId)\r\n .then(function (res) {\r\n _this.dashboardService.getPatientDashboard(_this.$routeParams.practiceId, _this.$routeParams.patientId)\r\n .then(function (response) {\r\n if (response) {\r\n _this.$scope.patient = response;\r\n _this.displayPatientEvents();\r\n }\r\n });\r\n });\r\n };\r\n this.$scope.getFinancialInfo = function () {\r\n _this.dashboardService.getAccountFinancialInfo($routeParams.practiceId, $routeParams.patientId)\r\n .then(function (info) {\r\n _this.$scope.accountInfo = info;\r\n _this.$scope.collapseFinancial = !(info && (info.LastBenefitCheckStatus || info.IsSuspended ||\r\n info.AccountLiable > 0));\r\n _this.$scope.financialInformationAvailable = !_this.$scope.collapseFinancial;\r\n });\r\n };\r\n $scope.addFamilyMember = function () {\r\n _this.patientService.getPatientById($routeParams.practiceId, $routeParams.patientId)\r\n .then(function (mainPatient) {\r\n var patient = _this.patientService.clearPatientDetails(mainPatient);\r\n _this.patientService.setPreCreatedPatient(patient);\r\n locationService.goToCreatePatient($routeParams.practiceId);\r\n });\r\n };\r\n $scope.toMemberDashboard = function (patient) {\r\n clinicalReportService.getPatientDashboard($routeParams.practiceId, patient.PatientId);\r\n };\r\n this.init();\r\n }\r\n Controller.prototype.init = function () {\r\n var _this = this;\r\n for (var orderName in this.$scope.orders) {\r\n this.$scope.selectedOrder.push(orderName);\r\n }\r\n this.dashboardService.getPatientFamilyMembers(this.$routeParams.practiceId, this.$routeParams.patientId)\r\n .then(function (members) {\r\n if (members) {\r\n _this.$scope.collapseMembers = !members.length;\r\n _this.$scope.familyMembers = _this\r\n .$filter('orderBy')(members, 'PatientAccountDetails.MedicalAidDependentCode');\r\n }\r\n });\r\n this.patientService.getPatientById(this.$routeParams.practiceId, this.$routeParams.patientId)\r\n .then(function (patient) {\r\n var scheme = '';\r\n if (patient.PatientAccountDetails) {\r\n scheme = patient.PatientAccountDetails.MedicalAidName;\r\n if (patient.PatientAccountDetails.MedicalAidPlan) {\r\n scheme = scheme.concat(\" / \" + patient.PatientAccountDetails.MedicalAidPlan);\r\n if (patient.PatientAccountDetails.MedicalAidPlanOption) {\r\n scheme = scheme.concat(\" / \" + patient.PatientAccountDetails.MedicalAidPlanOption);\r\n }\r\n }\r\n }\r\n _this.$scope.fullSchemeName = scheme;\r\n });\r\n this.dashboardService.getActiveVisit(this.$routeParams.practiceId, this.$routeParams.patientId)\r\n .then(function (visit) {\r\n _this.$scope.collapseFinancialIHealth = !(visit && visit.QuoteXRef);\r\n _this.$scope.financialInformationAvailable = !_this.$scope.collapseFinancialIHealth;\r\n _this.$scope.isVirtualConsult = !!visit.VideoChatLink;\r\n if (visit) {\r\n _this.$scope.visit = visit;\r\n }\r\n });\r\n this.refreshAvatar();\r\n this.dashboardService.getPatientDashboard(this.$routeParams.practiceId, this.$routeParams.patientId)\r\n .then(function (response) {\r\n if (response) {\r\n _this.$scope.patient = response;\r\n _this.$scope.isSummaryCareRecordExist =\r\n !!(response.AllergiesNote ||\r\n response.ClinicalNotes ||\r\n response.NoAllergies ||\r\n response.Allergies && response.Allergies.length ||\r\n response.ChronicConditions && response.ChronicConditions.length);\r\n _this.$scope.collapseSummary = !_this.$scope.isSummaryCareRecordExist;\r\n _this.providerService.getProvider(_this.$routeParams.practiceId)\r\n .then(function (provider) {\r\n var options = provider && _this.providerService.buildProviderOptions(provider);\r\n var healthIdProviderCredentials = options.healthIDProviderCredentials;\r\n if (healthIdProviderCredentials) {\r\n var healthIdSupported = [\r\n 'ANGLO MEDICAL SCHEME', 'ANGLO VAAL', 'BANKMED', 'BANKMED ISOLESO',\r\n 'BMW EMPLOYEES MEDICAL', 'DISCOVERY', 'DISCOVERY ISOLESO', 'DISCOVERY KEYCARE',\r\n 'DISCOVERY PRIMARY', 'DISCOVERY DRC', 'LA HEALTH', 'LONMIN', 'MEDIMED',\r\n 'MALCOR', 'MALCOR ENABLEMED', 'NASPERS', 'QUANTUM', 'REMEDI',\r\n 'REMEDI PPN', 'RETAIL MEDICAL AID', 'SAB MEDICAL SCHEME', 'TFG MEDICAL SCHEME', 'TSOGO SUN GROUP',\r\n 'UNIVERSITY OF KZN', 'WITSMED', 'WITSMED ISOLESO'\r\n ];\r\n var medicalAidName = _this.$scope.patient.MedicalAidName;\r\n _this.$scope.isEnabledHealthID = healthIdSupported.indexOf(medicalAidName) !== -1;\r\n }\r\n _this.$scope.isHealthDocEnabled = options.healthDocEnabled;\r\n _this.$scope.myPatientFilesEnabled = options.myPatientFilesEnabled;\r\n _this.$scope.mympsProvider = provider.PracticeXRef && !provider.PracticeXRef.contains(\"iHealth\");\r\n _this.$scope.showFinancialInformation = !options.isDisabledForDisplayingPatientFinancialInformation &&\r\n _this.$scope.mympsProvider;\r\n if (_this.$scope.showFinancialInformation) {\r\n _this.$scope.getFinancialInfo();\r\n }\r\n _this.$scope.showFinancialInformationIHealth = provider.PracticeXRef && provider.PracticeXRef.contains(\"iHealth\");\r\n if (options.healthDocEnabled) {\r\n _this.displayPatientEvents();\r\n }\r\n else {\r\n _this.displayPatientEvents();\r\n }\r\n });\r\n }\r\n else {\r\n _this.$scope.loading = false;\r\n }\r\n });\r\n };\r\n Controller.prototype.openHealthIdForPatient = function (practiceId, patientId) {\r\n var _this = this;\r\n this.providerService.getProviderOptions(practiceId)\r\n .then(function (options) {\r\n var healthIdProviderCredentials = options.healthIDProviderCredentials;\r\n if (healthIdProviderCredentials) {\r\n _this.httpService.get(\"v1/\" +\r\n practiceId +\r\n \"/healthid/patient/\" +\r\n patientId)\r\n .then(function (response) {\r\n if (!response.token) {\r\n _this.showDialog.error(response.message);\r\n }\r\n else {\r\n var newWindow = _this.$window.open(response.link, \"HealthID\");\r\n }\r\n });\r\n }\r\n });\r\n };\r\n Controller.prototype.refreshAvatar = function () {\r\n var _this = this;\r\n this.dashboardService.getAvatar(this.$routeParams.practiceId, this.$routeParams.patientId)\r\n .then(function (patientDocument) {\r\n if (patientDocument) {\r\n _this.$scope.avatar = _this.dashboardService.getDocumentUrl(_this.$routeParams.practiceId, patientDocument.ThumbnailUrl) + \"&r=\" + patientDocument.FileName;\r\n _this.$scope.avatarOnError = false;\r\n }\r\n });\r\n };\r\n Controller.prototype.displayPatientEvents = function () {\r\n var _this = this;\r\n this.$scope.collapseVisit = false;\r\n var allEvents = this.$scope.patient.PatientDashboardEvents.concat(this.$scope.healtDocEvents);\r\n var groupedEventsByDate = this.groupByDate(allEvents, 'DateTime');\r\n var groups = this.orderBy(this.toArray(groupedEventsByDate));\r\n var categories = [];\r\n for (var key in groups) {\r\n var item = groups[key];\r\n var fullList = item.list;\r\n item.list = this.$filter('filter')(fullList, function (f) {\r\n return f.Type !== Controller.HEALTH_DOC_TYPE && f.Type !== Controller.PATIENT_FILE_TYPE;\r\n });\r\n item.thumbnailList = this.$filter('filter')(fullList, function (f) {\r\n return f.Type === Controller.HEALTH_DOC_TYPE || f.Type === Controller.PATIENT_FILE_TYPE;\r\n }).map(function (list) {\r\n if (list.Type === Controller.PATIENT_FILE_TYPE) {\r\n var newListItem = angular.copy(list);\r\n if (categories.indexOf(list.Code) === -1) {\r\n categories.push(list.Code);\r\n }\r\n newListItem.Thumbnail = _this.dashboardService.getDocumentUrl(_this.$routeParams.practiceId, list.Thumbnail || list.Narrative);\r\n return newListItem;\r\n }\r\n else {\r\n return list;\r\n }\r\n });\r\n }\r\n this.$scope.healthDocCategories = this.setCategoriesObjects(categories);\r\n this.$scope.patientEventsByDate = groups;\r\n this.filteringPatientEvents();\r\n };\r\n Controller.prototype.groupByParent = function (arr) {\r\n var res = {};\r\n for (var i = 0; i < arr.length; i++) {\r\n var value = arr[i][\"ParentDescription\"] || '';\r\n if (!res[value]) {\r\n res[value] = [];\r\n }\r\n var group = res[value];\r\n group[group.length] = arr[i];\r\n }\r\n return this.toArray(res);\r\n };\r\n Controller.prototype.groupByDate = function (arr, name) {\r\n var res = {};\r\n for (var i = 0; i < arr.length; i++) {\r\n var value = arr[i][name];\r\n value = this.moment.utc(value).format(this.$scope.dateFormatByMinutes);\r\n if (!res[value]) {\r\n res[value] = [];\r\n }\r\n var group = res[value];\r\n group[group.length] = arr[i];\r\n }\r\n return res;\r\n };\r\n Controller.prototype.orderByParent = function (groups) {\r\n for (var i = 0; i < groups.length; i++) {\r\n groups[i].list = this.$filter('orderBy')(groups[i].list, \"ParentReferenceId\");\r\n }\r\n return groups;\r\n };\r\n Controller.prototype.orderByClimeTime = function (groups) {\r\n var _this = this;\r\n var that = this;\r\n for (var i = 0; i < groups.length; i++) {\r\n groups[i].list = this.$filter('orderBy')(groups[i].list, function (value) {\r\n var date = moment(value.DateTime, that.$scope.inputFormat);\r\n if (date.isValid) {\r\n return date.format('X');\r\n }\r\n _this.$log.error('Date[' +\r\n value.name +\r\n '] not valid for pattern[' +\r\n that.$scope.inputFormat +\r\n ']');\r\n return moment().format('X');\r\n });\r\n }\r\n return groups;\r\n };\r\n Controller.prototype.filteringPatientEvents = function () {\r\n var group = angular.copy(this.$scope.patientEventsByDate);\r\n var checkedEvents = [];\r\n for (var i = 0; i < group.length; i++) {\r\n var filteredItems = this.$filter('orderFilter')(group[i].list, this.$scope.selectedOrder, this.$scope.orderFormat);\r\n group[i].list = this.groupByParent(filteredItems);\r\n group[i].thumbnailList = this.$filter('orderFilter')(group[i].thumbnailList, this.$scope.selectedOrder, this.$scope.orderFormat);\r\n if (Object.keys(group[i].list).length > 0 || Object.keys(group[i].thumbnailList).length > 0) {\r\n checkedEvents.push(group[i]);\r\n }\r\n }\r\n this.$scope.loading = false;\r\n this.$scope.groups = checkedEvents;\r\n };\r\n Controller.prototype.toArray = function (obj) {\r\n var res = [];\r\n Object.keys(obj)\r\n .map(function (value, index) {\r\n res[index] = { name: value, list: obj[value] };\r\n });\r\n return res;\r\n };\r\n Controller.prototype.orderBy = function (groups) {\r\n var _this = this;\r\n var that = this;\r\n var byParentLineNum = function (value) {\r\n return value.Type === 'Diagnosis' || value[\"ParentLineNum\"];\r\n };\r\n var byParent = \"ParentReferenceId\";\r\n var byEventsDate = function (value) {\r\n var date = moment(value.name, ServerDateFormat);\r\n if (date.isValid) {\r\n return date.format();\r\n }\r\n _this.$log.error('Date[' + value.name + '] not valid for pattern[' + ServerDateFormat + ']');\r\n return moment().format('X');\r\n };\r\n var byDate = function (value) {\r\n var date = moment(value.DateTime, that.$scope.inputFormat);\r\n if (date.isValid) {\r\n return date.format('X');\r\n }\r\n _this.$log.error('Date[' + value.name + '] not valid for pattern[' + that.$scope.inputFormat + ']');\r\n return moment().format('X');\r\n };\r\n var byType = function (value) {\r\n var order = _this.$scope.orders[value.Type.split(\":\")[0]];\r\n if (angular.isUndefined(order)) {\r\n _this.$log.warn('Order for [' + value.Type + '] not set');\r\n return 99;\r\n }\r\n return order.value;\r\n };\r\n var byDateTime = function (value) {\r\n var date = moment(value.DateTime, that.$scope.inputFormat);\r\n if (date.isValid) {\r\n return date.format('X');\r\n }\r\n _this.$log.error('Date[' + value.name + '] not valid for pattern[' + that.$scope.inputFormat + ']');\r\n return moment().format('X');\r\n };\r\n groups = this.$filter('orderBy')(groups, byEventsDate, true);\r\n for (var i = 0; i < groups.length; i++) {\r\n groups[i].list = this.$filter('orderBy')(groups[i].list, [byDate, byParent, byParentLineNum, byType, byDateTime]);\r\n }\r\n return groups;\r\n };\r\n Controller.prototype.setCategoriesObjects = function (categories) {\r\n var categoryObjects = [];\r\n for (var _i = 0; _i < categories.length; _i++) {\r\n var category = categories[_i];\r\n categoryObjects.push({\r\n name: category,\r\n selected: false\r\n });\r\n }\r\n if (categories.length > 1) {\r\n categoryObjects.unshift({ name: 'All', selected: true });\r\n }\r\n else if (categories.length === 1) {\r\n categoryObjects[0].selected = true;\r\n }\r\n return categoryObjects;\r\n };\r\n Controller.HEALTH_DOC_TYPE = \"HealthDoc\";\r\n Controller.PATIENT_FILE_TYPE = \"PatientFile\";\r\n return Controller;\r\n })();\r\n DashboardModule.Controller = Controller;\r\n})(DashboardModule || (DashboardModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalDashboardController', DashboardModule.Controller);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalMessageCenterModule;\r\n(function (ClinicalMessageCenterModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"$filter\", \"$routeParams\", \"authService\", \"$rootScope\", \"clinicalDomain\"];\r\n function Service(httpService, $filter, $routeParams, authService, $rootScope, clinicalDomain) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.$filter = $filter;\r\n this.$routeParams = $routeParams;\r\n this.authService = authService;\r\n this.$rootScope = $rootScope;\r\n this.clinicalDomain = clinicalDomain;\r\n this.currentPractice = null;\r\n }\r\n Service.prototype.getPathologyReports = function (practiceId, searchText) {\r\n return this.clinicalDomain.getPathologyReports(practiceId, searchText);\r\n };\r\n Service.prototype.getPathologyReportWorkflows = function (practiceId, startDate, endDate, statusType) {\r\n return this.clinicalDomain.getPathologyReportWorkflows(practiceId, startDate, endDate, statusType);\r\n };\r\n Service.prototype.getPathologyReportWorkflowsForProvider = function (practiceId) {\r\n return this.clinicalDomain.getPathologyReportWorkflowsForProvider(practiceId, practiceId);\r\n };\r\n Service.prototype.getUndeliveredPathResults = function (practiceId) {\r\n return this.clinicalDomain.getUndeliveredPathResults(practiceId);\r\n };\r\n Service.prototype.getPathologyReportPatient = function (practiceId, reportId) {\r\n return this.clinicalDomain.getPathologyReportPatient(practiceId, reportId);\r\n };\r\n Service.prototype.markPathologyReportsAsRead = function (practiceId, workflowIds) {\r\n return this.clinicalDomain.markPathologyReportsAsRead(practiceId, workflowIds);\r\n };\r\n Service.prototype.deliverPathResult = function (practiceId, pathologyReportId) {\r\n return this.clinicalDomain.deliverPathResult(practiceId, pathologyReportId);\r\n };\r\n Service.prototype.ignorePathResult = function (practiceId, pathologyReportId) {\r\n return this.clinicalDomain.ignorePathResult(practiceId, pathologyReportId);\r\n };\r\n return Service;\r\n })();\r\n ClinicalMessageCenterModule.Service = Service;\r\n})(ClinicalMessageCenterModule || (ClinicalMessageCenterModule = {}));\r\nangular.module('DoctorApp')\r\n .service('clinicalMessageCenterService', ClinicalMessageCenterModule.Service);\r\n/// \r\nvar MemoryModule;\r\n(function (MemoryModule) {\r\n var ClinicalMessageCenter = (function () {\r\n function ClinicalMessageCenter() {\r\n }\r\n return ClinicalMessageCenter;\r\n })();\r\n MemoryModule.ClinicalMessageCenter = ClinicalMessageCenter;\r\n var Practices = (function () {\r\n function Practices() {\r\n }\r\n return Practices;\r\n })();\r\n MemoryModule.Practices = Practices;\r\n var PublicKeys = (function () {\r\n function PublicKeys() {\r\n }\r\n return PublicKeys;\r\n })();\r\n MemoryModule.PublicKeys = PublicKeys;\r\n var Home = (function () {\r\n function Home() {\r\n }\r\n return Home;\r\n })();\r\n MemoryModule.Home = Home;\r\n var Service = (function () {\r\n function Service() {\r\n this.clinicalMessageCenter = new ClinicalMessageCenter();\r\n this.practices = new Practices();\r\n this.home = new Home();\r\n this.publicKeys = new PublicKeys();\r\n }\r\n return Service;\r\n })();\r\n MemoryModule.Service = Service;\r\n})(MemoryModule || (MemoryModule = {}));\r\nangular.module('DoctorApp')\r\n .service('memoryService', MemoryModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalMessageCenterModule;\r\n(function (ClinicalMessageCenterModule) {\r\n var ReportStatusType = Domain.Clinical.ReportStatusType;\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$filter\", \"$location\", \"locationService\", \"showDialog\", \"memoryService\", \"moment\", \"clinicalMessageCenterService\", \"storageService\", \"patientService\", \"$routeParams\"];\r\n function Controller($scope, $filter, $location, locationService, showDialog, memoryService, moment, clinicalMessageCenterService, storageService, patientService, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$filter = $filter;\r\n this.$location = $location;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.memoryService = memoryService;\r\n this.moment = moment;\r\n this.clinicalMessageCenterService = clinicalMessageCenterService;\r\n this.storageService = storageService;\r\n this.patientService = patientService;\r\n this.$routeParams = $routeParams;\r\n $scope.search = function (searchText) {\r\n memoryService.clinicalMessageCenter.searchText = searchText;\r\n $scope.showNoResultMessage = false;\r\n if (!searchText) {\r\n $scope.pathologyReportWorkflows = [];\r\n return;\r\n }\r\n clinicalMessageCenterService.getPathologyReports($routeParams.practiceId, searchText)\r\n .then(function (response) {\r\n $scope.pathologyReportWorkflows = _this.convertPathologyReportWorkflow(response);\r\n $scope.showNoResultMessage = !response.length;\r\n });\r\n };\r\n $scope.changeTab = function (tab) {\r\n $location.hash(tab);\r\n };\r\n $scope.back = function () {\r\n $location.hash(\"\");\r\n locationService.goToHome($routeParams.practiceId);\r\n };\r\n $scope.addPatientReport = function (report) {\r\n _this.clinicalMessageCenterService.getPathologyReportPatient($routeParams.practiceId, report.PathologyReportId)\r\n .then(function (patient) {\r\n if (patient) {\r\n patient.NavigationFrom = \"UndeliveredPathReports\";\r\n _this.patientService.setPreCreatedPatient(patient);\r\n locationService.goToCreatePatient($routeParams.practiceId);\r\n }\r\n });\r\n };\r\n $scope.deliverReport = function (report) {\r\n _this.clinicalMessageCenterService.deliverPathResult($routeParams.practiceId, report.PathologyReportId)\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n locationService.goToClinicalPathologyReportWorkflow($routeParams.practiceId, response.Data);\r\n }\r\n else {\r\n _this.showDialog.showWarningDialog(response.ResponseMessage);\r\n }\r\n });\r\n };\r\n $scope.ignoreReport = function (report) {\r\n showDialog.confirm('Are you sure you want to ignore report for ' + report.PatientFullName + '?')\r\n .then(function () {\r\n _this.clinicalMessageCenterService.ignorePathResult($routeParams.practiceId, report.PathologyReportId)\r\n .then(function () { return _this.initTabSelection(); });\r\n });\r\n };\r\n $scope.ignoreAll = function () {\r\n var items = _this.$scope.undeliveredPathResults;\r\n if (items.length > 0) {\r\n showDialog.confirm('Are you sure you want to ignore all undelivered reports?')\r\n .then(function () {\r\n for (var i = 0; i < items.length; i++) {\r\n var reportId = items[i].PathologyReportId;\r\n _this.clinicalMessageCenterService.ignorePathResult(_this.$routeParams.practiceId, reportId)\r\n .then(function () { return _this.initTabSelection(); });\r\n }\r\n });\r\n }\r\n };\r\n $scope.setAllItemsRead = function () {\r\n var items = _this.$scope.pathologyReportWorkflows.map(function (r) { return r.PathologyReportWorkflowId; });\r\n if (items.length) {\r\n var tab = _this.$location.hash();\r\n var categoryName = \"All unread\";\r\n switch (tab) {\r\n case 'day':\r\n categoryName = \"Today's unread\";\r\n break;\r\n case 'week':\r\n categoryName = \"This week’s unread\";\r\n break;\r\n }\r\n showDialog.confirm('Are you sure you want to mark as read \"' + categoryName + '\" reports?')\r\n .then(function () {\r\n _this.clinicalMessageCenterService.markPathologyReportsAsRead(_this.$routeParams.practiceId, items)\r\n .then(function () { return _this.initTabSelection(); });\r\n });\r\n }\r\n };\r\n this.initTabSelection();\r\n }\r\n Controller.prototype.initTabSelection = function () {\r\n var tab = this.$location.hash();\r\n if (!tab) {\r\n tab = 'week';\r\n this.$location.hash(tab);\r\n return;\r\n }\r\n this.$scope.tabselection = tab;\r\n if (tab == 'search') {\r\n this.$scope.searchText = this.memoryService.clinicalMessageCenter.searchText;\r\n this.$scope.search(this.$scope.searchText);\r\n return;\r\n }\r\n this.updatePathologyReportWorkflows(tab);\r\n };\r\n Controller.prototype.updatePathologyReportWorkflows = function (tabName) {\r\n var _this = this;\r\n this.$scope.showNoResultMessage = false;\r\n if (tabName == \"mypatients\") {\r\n this.clinicalMessageCenterService.getPathologyReportWorkflowsForProvider(this.$routeParams.practiceId)\r\n .then(function (response) {\r\n _this.$scope.pathologyReportWorkflows = response;\r\n _this.$scope.showNoResultMessage = !response.length;\r\n });\r\n }\r\n else if (tabName == \"undelivered\") {\r\n this.clinicalMessageCenterService.getUndeliveredPathResults(this.$routeParams.practiceId)\r\n .then(function (response) {\r\n _this.$scope.undeliveredPathResults = response;\r\n _this.$scope.showNoResultMessage = !response.length;\r\n });\r\n }\r\n else {\r\n var params = this.getParamsForReport(tabName);\r\n this.clinicalMessageCenterService.getPathologyReportWorkflows(this.$routeParams.practiceId, params.startDate, params.endDate, params.statusType)\r\n .then(function (response) {\r\n _this.$scope.pathologyReportWorkflows = response;\r\n _this.$scope.showNoResultMessage = !response.length;\r\n });\r\n }\r\n };\r\n Controller.prototype.getParamsForReport = function (tabName) {\r\n var res = {};\r\n res.statusType = ReportStatusType.OPEN;\r\n if (tabName == \"day\") {\r\n res.startDate = this.moment();\r\n res.endDate = this.moment().add(1, 'days');\r\n }\r\n if (tabName == \"week\") {\r\n res.startDate = this.moment().subtract(7, 'days');\r\n res.endDate = this.moment().add(1, 'days');\r\n }\r\n if (tabName == 'urgent') {\r\n res.statusType = ReportStatusType.URGENT;\r\n }\r\n return res;\r\n };\r\n Controller.prototype.convertPathologyReportWorkflow = function (pathologyReports) {\r\n var res = [];\r\n for (var i = 0; i < pathologyReports.length; i++) {\r\n res[res.length] = this.convert(pathologyReports[i]);\r\n }\r\n return res;\r\n };\r\n Controller.prototype.convert = function (pathologyReport) {\r\n return {\r\n OriginalMessage: null,\r\n PathologyReportWorkflowId: pathologyReport.PatientReportId,\r\n PatientName: pathologyReport.PatientFullName,\r\n ReceivedDate: pathologyReport.ReportDate,\r\n Departments: pathologyReport.Departments,\r\n ReportLabName: pathologyReport.PathLab,\r\n WorkflowStatusType: null,\r\n isPathologyReport: true,\r\n PatientDateOfBirth: pathologyReport.PatientDateOfBirth\r\n };\r\n };\r\n return Controller;\r\n })();\r\n ClinicalMessageCenterModule.Controller = Controller;\r\n})(ClinicalMessageCenterModule || (ClinicalMessageCenterModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalMessageCenterController', ClinicalMessageCenterModule.Controller);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalPracticesModule;\r\n(function (ClinicalPracticesModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"locationService\", \"storageService\", \"$rootScope\", \"clinicalDomain\", \"accountDomain\", \"providerService\"];\r\n function Service(locationService, storageService, $rootScope, clinicalDomain, accountDomain, providerService) {\r\n \"ngInject\";\r\n this.locationService = locationService;\r\n this.storageService = storageService;\r\n this.$rootScope = $rootScope;\r\n this.clinicalDomain = clinicalDomain;\r\n this.accountDomain = accountDomain;\r\n this.providerService = providerService;\r\n this.currentPractice = null;\r\n }\r\n Service.prototype.setLocalPractice = function (practice, redirectToHome) {\r\n if (practice) {\r\n var oldPractice = this.storageService.getPractice();\r\n oldPractice.id = practice.PracticeId;\r\n oldPractice.name = practice.PracticeName;\r\n this.storageService.setPractice(oldPractice);\r\n }\r\n this.updateLocalPractice(practice.PracticeId, redirectToHome);\r\n };\r\n Service.prototype.updateLocalPractice = function (practiceId, redirectToHome) {\r\n var _this = this;\r\n console.warn('Method is deprecated. [clinical-practices-service.updateLocalPractice]');\r\n this.providerService.getProviderOptions(practiceId)\r\n .then(function (options) {\r\n _this.$rootScope.isClinical = options.isEnabledForClinicalResults;\r\n });\r\n if (redirectToHome) {\r\n this.locationService.goToHome(practiceId);\r\n }\r\n };\r\n Service.prototype.getPractices = function () {\r\n return this.accountDomain.getPractices();\r\n };\r\n Service.prototype.getAllPractices = function () {\r\n return this.clinicalDomain.getProviders();\r\n };\r\n Service.prototype.getPracticeById = function (practiceId) {\r\n return this.clinicalDomain.getProviderById(practiceId);\r\n };\r\n return Service;\r\n })();\r\n ClinicalPracticesModule.Service = Service;\r\n})(ClinicalPracticesModule || (ClinicalPracticesModule = {}));\r\nangular.module('DoctorApp')\r\n .service('clinicalPracticesService', ClinicalPracticesModule.Service);\r\n/// \r\n/// \r\nvar ClinicalPracticesModule;\r\n(function (ClinicalPracticesModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"clinicalPracticesService\"];\r\n function Controller($scope, clinicalPracticesService) {\r\n \"ngInject\";\r\n $scope.practices = [];\r\n $scope.getPractices = function () {\r\n clinicalPracticesService.getAllPractices()\r\n .then(function (response) {\r\n if (response) {\r\n $scope.practices = response;\r\n }\r\n });\r\n };\r\n $scope.goToPractice = function (practice) {\r\n };\r\n $scope.init = function () {\r\n $scope.getPractices();\r\n };\r\n }\r\n return Controller;\r\n })();\r\n ClinicalPracticesModule.Controller = Controller;\r\n})(ClinicalPracticesModule || (ClinicalPracticesModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalPractices', ClinicalPracticesModule.Controller);\r\n/// \r\n/// \r\n/// \r\nvar ClinicalReportWorkflowModule;\r\n(function (ClinicalReportWorkflowModule) {\r\n var PathologyReportNotifications = (function () {\r\n function PathologyReportNotifications() {\r\n }\r\n return PathologyReportNotifications;\r\n })();\r\n ClinicalReportWorkflowModule.PathologyReportNotifications = PathologyReportNotifications;\r\n var PatalogyReportResponce = (function () {\r\n function PatalogyReportResponce() {\r\n }\r\n return PatalogyReportResponce;\r\n })();\r\n ClinicalReportWorkflowModule.PatalogyReportResponce = PatalogyReportResponce;\r\n var PatalogyReportResponceLink = (function () {\r\n function PatalogyReportResponceLink() {\r\n }\r\n return PatalogyReportResponceLink;\r\n })();\r\n ClinicalReportWorkflowModule.PatalogyReportResponceLink = PatalogyReportResponceLink;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"billingDomain\"];\r\n function Service(httpService, billingDomain) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.billingDomain = billingDomain;\r\n }\r\n Service.prototype.getReportWorkflowHtml = function (practiceId, reportId) {\r\n return (this.httpService\r\n .get(\"v1/\" + practiceId + \"/clinical/pathologyreportworkflows/\" + reportId + \"/html\"));\r\n };\r\n Service.prototype.getDoctorName = function (practiceId) {\r\n return this.billingDomain.getProvider(practiceId).then(function (s) { return s.TreatingDoctorName; });\r\n };\r\n Service.prototype.getProvider = function (practiceId) {\r\n return this.billingDomain.getProvider(practiceId);\r\n };\r\n Service.prototype.submitPathologyReportWorkflow = function (practiceId, workflowId, isHighPriority, isCallPatient, isNotifyPatient, patientCellPhone, message) {\r\n var body = {\r\n PracticeId: practiceId,\r\n PathologyReportWorkflowId: workflowId,\r\n HighPriority: isHighPriority,\r\n NotifyPatientThatResultsNormal: isNotifyPatient,\r\n FollowUpAppointmentRequired: isCallPatient,\r\n FollowUpPatientCellphone: patientCellPhone,\r\n FollowUpText: message\r\n };\r\n return (this.httpService\r\n .post(\"v1/\" + practiceId + \"/clinical/pathologyreportworkflows/\" + workflowId, body));\r\n };\r\n Service.prototype.getReportWorkflow = function (practiceId, workflowId) {\r\n return (this.httpService.get(\"v1/\" + practiceId + \"/clinical/pathologyreportworkflows/\" + workflowId));\r\n };\r\n return Service;\r\n })();\r\n ClinicalReportWorkflowModule.Service = Service;\r\n})(ClinicalReportWorkflowModule || (ClinicalReportWorkflowModule = {}));\r\nangular.module('DoctorApp')\r\n .service('clinicalReportWorkflowService', ClinicalReportWorkflowModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalReportWorkflowModule;\r\n(function (ClinicalReportWorkflowModule) {\r\n var Reminder = (function () {\r\n function Reminder() {\r\n }\r\n return Reminder;\r\n })();\r\n ClinicalReportWorkflowModule.Reminder = Reminder;\r\n var Block = (function () {\r\n function Block() {\r\n }\r\n return Block;\r\n })();\r\n ClinicalReportWorkflowModule.Block = Block;\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$location\", \"locationService\", \"showDialog\", \"clinicalReportWorkflowService\", \"clinicalReportService\", \"$timeout\", \"dashboardService\", \"$window\", \"$routeParams\", \"modalService\", \"memoryService\", \"$q\", \"$filter\"];\r\n function Controller($scope, $location, locationService, showDialog, clinicalReportWorkflowService, clinicalReportService, $timeout, dashboardService, $window, $routeParams, modalService, memoryService, $q, $filter) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.clinicalReportWorkflowService = clinicalReportWorkflowService;\r\n this.clinicalReportService = clinicalReportService;\r\n this.$timeout = $timeout;\r\n this.dashboardService = dashboardService;\r\n this.$window = $window;\r\n this.$routeParams = $routeParams;\r\n this.modalService = modalService;\r\n this.memoryService = memoryService;\r\n this.$q = $q;\r\n this.$filter = $filter;\r\n var template = '';\r\n $('#report-container').append(template);\r\n var that = this;\r\n var REMINDERS = 0;\r\n var NOTIFICATIONS = 1;\r\n var reportId = $routeParams.reportId;\r\n var urgent = $routeParams.urgent == 'true';\r\n var reportOriginalBody;\r\n $scope.messageSent = false;\r\n $scope.list = [\r\n {\r\n name: 'Reminders',\r\n icon: 'glyphicon-repeat',\r\n items: [\r\n { val: urgent, desc: \"follow up later\" }\r\n ]\r\n }, {\r\n name: 'SMS patient',\r\n icon: 'glyphicon-envelope',\r\n items: [\r\n { val: false, desc: \"set up appointment\" },\r\n { val: false, desc: \"notify results are normal\" }\r\n ]\r\n }\r\n ];\r\n clinicalReportWorkflowService.getReportWorkflow($routeParams.practiceId, reportId)\r\n .then(function (reportWorkflowResponse) {\r\n $scope.reportWorkflow = reportWorkflowResponse;\r\n var html = reportWorkflowResponse.OriginalMessage;\r\n var style = html.contains('ampath') ? 'ampath-report' : 'lancet-report';\r\n var $report = $('#frame-report');\r\n var $reportContainer = $('#report-container');\r\n $reportContainer.addClass(style);\r\n reportOriginalBody = html;\r\n var body = $report.contents().find('body');\r\n body.html(html);\r\n });\r\n ;\r\n $scope.printReport = function () {\r\n var mywindow = window.open('', 'my div', 'height=500,width=840');\r\n var head = '' +\r\n document.getElementById('frame-report').contentDocument.getElementsByTagName('head')[0].innerHTML +\r\n '';\r\n var body = '' +\r\n document.getElementById('frame-report').contentDocument.getElementsByTagName('body')[0].innerHTML +\r\n '';\r\n mywindow.document.open();\r\n mywindow.document.write(head);\r\n mywindow.document.write(body);\r\n _this.$timeout(function () {\r\n mywindow.document.close();\r\n mywindow.focus();\r\n mywindow.print();\r\n mywindow.close();\r\n }, 100);\r\n };\r\n $scope.getPatient = function () {\r\n if ($scope.reportWorkflow) {\r\n clinicalReportService\r\n .getPatientsByPathologyReport($routeParams.practiceId, $scope.reportWorkflow.PathologyReportId)\r\n .then(function (patients) {\r\n if (patients.length === 1) {\r\n var patient = patients[0];\r\n _this.clinicalReportService.getPatientDashboard($routeParams.practiceId, patient.PatientId);\r\n }\r\n else {\r\n _this.modalService.getReportPatients(patients, $scope.reportWorkflow.PathologyReportId);\r\n }\r\n });\r\n }\r\n };\r\n $scope.send = function () {\r\n _this.clinicalReportWorkflowService.getProvider(_this.$routeParams.practiceId).then(function (provider) {\r\n var patient = new Domain.Patient.Patient();\r\n patient.PatientId = $scope.reportWorkflow.PathologyReportId;\r\n patient.PatientDetails = new Domain.Patient.PatientDetails();\r\n patient.PatientDetails.FirstName = $scope.reportWorkflow.PatientName;\r\n patient.PatientDetails.Surname = \"\";\r\n _this.modalService.sendReportByEmail(patient, provider, [\r\n {\r\n Title: \"Pathology Result\",\r\n Type: \"Pathology Report\",\r\n HtmlBody: reportOriginalBody\r\n }\r\n ], \"Pathology results from \" + provider.PracticeName, false);\r\n });\r\n };\r\n $scope.done = function () {\r\n var isHighPriority = $scope.list[REMINDERS].items[0].val;\r\n var isNotifyPatient = $scope.list[NOTIFICATIONS].items[0].val;\r\n var isCallPatient = $scope.list[NOTIFICATIONS].items[1].val;\r\n if (isNotifyPatient || isCallPatient) {\r\n var notificationMessage = $scope.notificationMessage;\r\n that.getPatientCellPhone($scope.reportWorkflow.PatientContactNo)\r\n .then(function (cellPhone) {\r\n that.markReportAsRead(reportId, isHighPriority, isNotifyPatient, isCallPatient, cellPhone, notificationMessage);\r\n });\r\n }\r\n else {\r\n that.markReportAsRead(reportId, isHighPriority, isNotifyPatient, isCallPatient, \"\", \"\")\r\n .then(function () {\r\n that.$scope.back();\r\n });\r\n }\r\n };\r\n $scope.save = function () {\r\n var newWindow = _this.$window.open('about:blank', \"_blank\");\r\n _this.dashboardService.reportLinkFromHtmlToPdf($routeParams.practiceId, reportOriginalBody).then(function (link) {\r\n newWindow.location.href = link;\r\n });\r\n };\r\n $scope.back = function () {\r\n var tab = memoryService.clinicalMessageCenter.tabSelect;\r\n $location.hash(tab);\r\n locationService.goToClinicalMessageCenter($routeParams.practiceId);\r\n };\r\n $scope.selectReminder = function (j, i) {\r\n var val = angular.copy($scope.list[j].items[i].val);\r\n that.setRemindersToFalse($scope.list, j);\r\n $scope.list[j].items[i].val = !val;\r\n _this.showSmsMessageIfRequired();\r\n };\r\n $scope.selectReminderVal = function (j, i) {\r\n var val = angular.copy($scope.list[j].items[i].val);\r\n that.setRemindersToFalse($scope.list, j);\r\n $scope.list[j].items[i].val = val;\r\n _this.showSmsMessageIfRequired();\r\n };\r\n $scope.$watch('notificationMessage', function () {\r\n if ($scope.notificationMessage) {\r\n $scope.charsLeft = 160 - $scope.notificationMessage.length;\r\n }\r\n });\r\n }\r\n Controller.prototype.generateSmsMessage = function (doctorName) {\r\n if (!this.$scope.reportWorkflow) {\r\n return '';\r\n }\r\n var patientName = this.$filter('titlecase')(this.$scope.reportWorkflow.PatientName.replace(' ', ' '));\r\n var isNotifyPatient = this.$scope.list[1].items[0].val;\r\n var message = \"Hi {0}, {1} has received your pathology results which are normal. \" +\r\n \"Should further results be received Dr will contact you.\";\r\n if (isNotifyPatient) {\r\n message = \"Hi {0}, {1} has received your pathology results. \" +\r\n \"Please go to see the Doctor for a follow up visit. Thank you\";\r\n }\r\n message = message.replace(\"{0}\", patientName).replace(\"{1}\", doctorName);\r\n return message.substring(0, 160);\r\n };\r\n Controller.prototype.showSmsMessageIfRequired = function () {\r\n var _this = this;\r\n this.$scope.displayNotificationsTemplate = this.$scope.list[1].items[0].val ||\r\n this.$scope.list[1].items[1].val;\r\n if (this.$scope.displayNotificationsTemplate) {\r\n if (this.$scope.doctorName) {\r\n this.$scope.notificationMessage = this.generateSmsMessage(this.$scope.doctorName);\r\n }\r\n else {\r\n this.clinicalReportWorkflowService.getDoctorName(this.$routeParams.practiceId).then(function (doctorName) {\r\n _this.$scope.notificationMessage = _this.generateSmsMessage(doctorName || '');\r\n _this.$scope.doctorName = doctorName;\r\n });\r\n }\r\n }\r\n };\r\n Controller.prototype.setRemindersToFalse = function (list, blockIndex) {\r\n var items = list[blockIndex].items;\r\n for (var i = 0; i < items.length; i++) {\r\n items[i].val = false;\r\n }\r\n };\r\n Controller.prototype.getPatientCellPhone = function (patientContactNo) {\r\n if (patientContactNo) {\r\n return this.$q.when(patientContactNo);\r\n }\r\n else {\r\n return this.showDialog.cellPhone()\r\n .then(function (cellPhone) {\r\n if (cellPhone) {\r\n return cellPhone;\r\n }\r\n });\r\n }\r\n };\r\n Controller.prototype.markReportAsRead = function (reportId, isHighPriority, isNotifyPatient, isCallPatient, patientCellPhone, message) {\r\n var that = this;\r\n return that.clinicalReportWorkflowService\r\n .submitPathologyReportWorkflow(this.$routeParams.practiceId, reportId, isHighPriority, isNotifyPatient, isCallPatient, patientCellPhone, message)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n that.showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n that.$scope.messageSent = true;\r\n }\r\n });\r\n };\r\n return Controller;\r\n })();\r\n ClinicalReportWorkflowModule.Controller = Controller;\r\n})(ClinicalReportWorkflowModule || (ClinicalReportWorkflowModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalReportWorkflow', ClinicalReportWorkflowModule.Controller);\r\n/// \r\n/// \r\n/// \r\nvar ClinicalReportModule;\r\n(function (ClinicalReportModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"providerService\", \"billingDomain\", \"locationService\"];\r\n function Service(httpService, providerService, billingDomain, locationService) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.providerService = providerService;\r\n this.billingDomain = billingDomain;\r\n this.locationService = locationService;\r\n }\r\n Service.prototype.getReportHtml = function (practiceId, reportId) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/pathologyreports/\" + reportId + \"/html\");\r\n };\r\n Service.prototype.getProvider = function (practiceId) {\r\n return this.billingDomain.getProvider(practiceId);\r\n };\r\n Service.prototype.getPatientsByPathologyReport = function (practiceId, reportId) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/pathologyreports/\" + reportId + \"/linkedpatients\");\r\n };\r\n Service.prototype.getPathologyReportPatient = function (practiceId, reportId) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/clinical/pathologyreports/\" + reportId + \"/patient\");\r\n };\r\n Service.prototype.getPatientDashboard = function (practiceId, patientId) {\r\n var _this = this;\r\n this.providerService.getProviderOptions(practiceId)\r\n .then(function (options) {\r\n if (options.isEnabledForClinicalResults) {\r\n _this.locationService.goToClinicalDashboard(practiceId, patientId);\r\n }\r\n else {\r\n _this.locationService.goToInvoice(practiceId, patientId);\r\n }\r\n });\r\n };\r\n return Service;\r\n })();\r\n ClinicalReportModule.Service = Service;\r\n})(ClinicalReportModule || (ClinicalReportModule = {}));\r\nangular.module('DoctorApp')\r\n .service('clinicalReportService', ClinicalReportModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalReportModule;\r\n(function (ClinicalReportModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$rootScope\", \"clinicalReportService\", \"$routeParams\", \"dashboardService\", \"$window\", \"$timeout\", \"modalService\"];\r\n function Controller($scope, $rootScope, clinicalReportService, $routeParams, dashboardService, $window, $timeout, modalService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.clinicalReportService = clinicalReportService;\r\n this.$routeParams = $routeParams;\r\n this.dashboardService = dashboardService;\r\n this.$window = $window;\r\n this.$timeout = $timeout;\r\n this.modalService = modalService;\r\n var reportId = $routeParams.reportId;\r\n var reportOriginalBody;\r\n var template = '';\r\n $('#report-container').append(template);\r\n clinicalReportService.getReportHtml($routeParams.practiceId, reportId)\r\n .then(function (html) {\r\n var style = html.contains('ampath') ? 'ampath-report' : 'lancet-report';\r\n var $report = $('#frame-report');\r\n var $reportContainer = $('#report-container');\r\n $reportContainer.addClass(style);\r\n reportOriginalBody = html;\r\n var body = $report.contents().find('body');\r\n body.html(html);\r\n });\r\n $scope.getPatient = function () {\r\n clinicalReportService.getPatientsByPathologyReport($routeParams.practiceId, $routeParams.reportId)\r\n .then(function (patients) {\r\n if (patients.length === 1) {\r\n var patient = patients[0];\r\n _this.clinicalReportService.getPatientDashboard(_this.$routeParams.practiceId, patient.PatientId);\r\n }\r\n else {\r\n _this.modalService.getReportPatients(patients, reportId);\r\n }\r\n });\r\n };\r\n $scope.send = function () {\r\n _this.clinicalReportService.getProvider(_this.$routeParams.practiceId).then(function (provider) {\r\n _this.clinicalReportService.getPathologyReportPatient(_this.$routeParams.practiceId, _this.$routeParams.reportId)\r\n .then(function (patient) {\r\n _this.modalService.sendReportByEmail(patient, provider, [\r\n {\r\n Title: \"Pathology Result\",\r\n Type: \"Pathology Report\",\r\n HtmlBody: reportOriginalBody\r\n }\r\n ], \"Pathology results from \" + provider.PracticeName, false);\r\n });\r\n });\r\n };\r\n $scope.printReport = function () {\r\n var mywindow = window.open('', 'my div', 'height=500,width=840');\r\n var head = '' +\r\n document.getElementById('frame-report').contentDocument.getElementsByTagName('head')[0].innerHTML +\r\n '';\r\n var body = '' +\r\n document.getElementById('frame-report').contentDocument.getElementsByTagName('body')[0].innerHTML +\r\n '';\r\n mywindow.document.open();\r\n mywindow.document.write(head);\r\n mywindow.document.write(body);\r\n _this.$timeout(function () {\r\n mywindow.document.close();\r\n mywindow.focus();\r\n mywindow.print();\r\n mywindow.close();\r\n }, 100);\r\n };\r\n $scope.save = function () {\r\n var newWindow = _this.$window.open('about:blank', \"_blank\");\r\n _this.dashboardService.reportLinkFromHtmlToPdf($routeParams.practiceId, reportOriginalBody).then(function (link) {\r\n newWindow.location.href = link;\r\n });\r\n };\r\n $scope.historyIndex = window.history.length;\r\n $scope.back = function () {\r\n var newPosition = window.history.length;\r\n window.history.go(-(newPosition - $scope.historyIndex + 1));\r\n };\r\n }\r\n return Controller;\r\n })();\r\n ClinicalReportModule.Controller = Controller;\r\n})(ClinicalReportModule || (ClinicalReportModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalReport', ClinicalReportModule.Controller);\r\nvar ReportPatientModalModule;\r\n(function (ReportPatientModalModule) {\r\n var ReportPatientController = (function () {\r\n ReportPatientController.$inject = [\"model\", \"$scope\", \"patientService\", \"clinicalReportService\", \"locationService\", \"$filter\", \"$modalInstance\", \"$routeParams\"];\r\n function ReportPatientController(model, $scope, patientService, clinicalReportService, locationService, $filter, $modalInstance, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.patientService = patientService;\r\n this.clinicalReportService = clinicalReportService;\r\n this.locationService = locationService;\r\n this.$filter = $filter;\r\n this.$modalInstance = $modalInstance;\r\n this.$routeParams = $routeParams;\r\n $scope.patients = this.getPatients(model.patients);\r\n $scope.toPatientDashboard = function (patient) {\r\n clinicalReportService.getPatientDashboard($routeParams.practiceId, patient.PatientId);\r\n $scope.cancel();\r\n };\r\n $scope.createNewPatient = function () {\r\n _this.clinicalReportService.getPathologyReportPatient($routeParams.practiceId, model.reportId)\r\n .then(function (patient) {\r\n if (patient) {\r\n _this.patientService.setPreCreatedPatient(patient);\r\n locationService.goToCreatePatient($routeParams.practiceId);\r\n $scope.cancel();\r\n }\r\n });\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss();\r\n };\r\n }\r\n ReportPatientController.prototype.getPatients = function (patients) {\r\n for (var _i = 0; _i < patients.length; _i++) {\r\n var patient = patients[_i];\r\n patient.DateOfBirth = moment.utc(patient.DateOfBirth).format('DD/MM/YYYY');\r\n patient.LastVisitDate = patient.LastVisitDate &&\r\n moment.utc(patient.LastVisitDate).format(DATE_TIME_PATTERN);\r\n }\r\n return patients;\r\n };\r\n return ReportPatientController;\r\n })();\r\n ReportPatientModalModule.ReportPatientController = ReportPatientController;\r\n})(ReportPatientModalModule || (ReportPatientModalModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ReportPatientController', ReportPatientModalModule.ReportPatientController);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalTemplateModule;\r\n(function (ClinicalTemplateModule) {\r\n var ControllerAbstract = (function () {\r\n ControllerAbstract.$inject = [\"$scope\", \"$rootScope\", \"showDialog\", \"$filter\", \"searchService\", \"clinicalTemplateServiceNew\", \"modalService\", \"encounterServiceNew\", \"clinicalDomain\", \"$routeParams\"];\r\n function ControllerAbstract($scope, $rootScope, showDialog, $filter, searchService, clinicalTemplateServiceNew, modalService, encounterServiceNew, clinicalDomain, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.showDialog = showDialog;\r\n this.$filter = $filter;\r\n this.searchService = searchService;\r\n this.clinicalTemplateServiceNew = clinicalTemplateServiceNew;\r\n this.modalService = modalService;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.clinicalDomain = clinicalDomain;\r\n this.$routeParams = $routeParams;\r\n var that = this;\r\n $scope.controlTemplate = {\r\n selectTemplate: function (template) {\r\n $scope.selectTemplate(template);\r\n },\r\n isClinical: true,\r\n isMedicine: true,\r\n isPrescription: true\r\n };\r\n $scope.saveTemplate = function () {\r\n var error = that.validTemplate($scope.mainTemplate);\r\n if (error) {\r\n showDialog.error(error);\r\n }\r\n else {\r\n var request = $scope.create\r\n ? clinicalTemplateServiceNew.saveTemplate($routeParams.practiceId, $scope.mainTemplate)\r\n : clinicalTemplateServiceNew.updateTemplate($routeParams.practiceId, $scope.mainTemplate);\r\n request.then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n clinicalDomain.invalidateEncounterTemplateCache($routeParams.practiceId);\r\n clinicalTemplateServiceNew.setMainTemplate(null);\r\n $rootScope.back();\r\n }\r\n });\r\n }\r\n };\r\n $scope.templateTypeChanged = function () {\r\n var groupTemplates = $filter('filter')($scope.templates, { TemplateType: $scope.mainTemplate.TemplateType });\r\n groupTemplates = $filter('orderBy')(groupTemplates, '-SortOrder');\r\n $scope.tempSortOrder = groupTemplates[0] ? (1 + groupTemplates[0].SortOrder) : 0;\r\n $scope.mainTemplate.SortOrder = $scope.tempSortOrder;\r\n };\r\n $scope.removeTemplate = function (template, type) {\r\n var eventType = EventTypeUtil.getTypeByName(type);\r\n clinicalTemplateServiceNew.removeLineFromTemplate($scope.mainTemplate, template, eventType);\r\n };\r\n $scope.selectTemplate = function (template) {\r\n clinicalTemplateServiceNew.mergeTemplates($routeParams.practiceId, $scope.mainTemplate, template)\r\n .then(function (response) {\r\n if (response.Data) {\r\n $scope.mainTemplate = response.Data;\r\n clinicalTemplateServiceNew.setMainTemplate($scope.mainTemplate);\r\n }\r\n else if (response.ResponseCode === 500) {\r\n _this.showDialog.error(response.ResponseMessage);\r\n }\r\n });\r\n };\r\n $scope.showQuantity = function (item) {\r\n modalService.openNumbers('int', 'Enter prescription')\r\n .then(function (res) {\r\n item.Quantity = res;\r\n });\r\n };\r\n $scope.validateOrder = function () {\r\n var templateType = $scope.mainTemplate.TemplateType;\r\n var error = that.validateOrder($scope.mainTemplate, templateType, $scope.templates);\r\n if (error) {\r\n $scope.mainTemplate.SortOrder = $scope.tempSortOrder;\r\n showDialog.error(error);\r\n }\r\n };\r\n $scope.openPrescription = function (prescription) {\r\n var validationOptions = new EncounterModule.ValidateOptions();\r\n validationOptions.isPricing = false;\r\n modalService.openDetailsItem(prescription, EventType.PRESCRIPTION, validationOptions).then(function (response) {\r\n angular.extend(prescription, response);\r\n });\r\n };\r\n $scope.showLineDetails = function (obj, typeStr) {\r\n var validationOptions = new EncounterModule.ValidateOptions();\r\n validationOptions.isPricing = true;\r\n var type = EventTypeUtil.getTypeByName(typeStr);\r\n encounterServiceNew.showLineItem($scope, obj, type, validationOptions);\r\n };\r\n $scope.openRefferalTemplates = function () {\r\n var templateId = _this.$routeParams.templateId || '00000000-0000-0000-0000-000000000000';\r\n _this.encounterServiceNew.getRefferalTemplates(_this.$routeParams.practiceId, templateId)\r\n .then(function (templates) {\r\n return _this.modalService.openLetterTemplates(templates);\r\n })\r\n .then(function (template) {\r\n var clinicalTemplate = new Domain.Clinical.Template();\r\n clinicalTemplate.TemplateId = template.TemplateId;\r\n clinicalTemplate.PracticeId = template.PracticeId;\r\n clinicalTemplate.TemplateType = template.TemplateName;\r\n var communication = new Domain.Clinical.Communication();\r\n communication.CommunicationTemplateId = template.TemplateId;\r\n communication.CommunicationId = '00000000-0000-0000-0000-000000000000';\r\n communication.Type = template.TemplateName;\r\n communication.Title = template.TemplateName;\r\n clinicalTemplate.Communications = [communication];\r\n _this.$scope.selectTemplate(clinicalTemplate);\r\n });\r\n };\r\n $scope.addModifiers = function () {\r\n var encounter = new Domain.Clinical.Encounter();\r\n encounter.EncounterId = '00000000-0000-0000-0000-000000000000';\r\n encounter.EncounterLineItems.LineItems = $scope.mainTemplate.EncounterLineItems.LineItems;\r\n modalService.showModifierDetails(encounter, null, null, true);\r\n };\r\n $scope.$watchCollection('mainTemplate.EncounterLineItems.LineItems', function () {\r\n if ($scope.mainTemplate) {\r\n var lineItems = $scope.mainTemplate.EncounterLineItems.LineItems;\r\n $scope.procedureAndModifiers = lineItems &&\r\n lineItems.filter(function (item) { return item.LineType === \"Modifier\" ||\r\n item.LineType === \"Procedure\"; });\r\n }\r\n });\r\n }\r\n ControllerAbstract.prototype.validTemplate = function (template) {\r\n if (!template.SortOrder && template.SortOrder !== 0) {\r\n return \"Sort order is empty!\";\r\n }\r\n else {\r\n var templateType = this.$scope.mainTemplate.TemplateType;\r\n return this.validateOrder(this.$scope.mainTemplate, templateType, this.$scope.templates);\r\n }\r\n };\r\n ControllerAbstract.prototype.validateOrder = function (mainTemplate, templateType, templates) {\r\n var order = mainTemplate.SortOrder;\r\n var groupTemplates = this.$filter('filter')(templates, { TemplateType: templateType });\r\n if (groupTemplates.length && order != this.$scope.tempSortOrder) {\r\n for (var i = 0; i < groupTemplates.length; i++) {\r\n var template = groupTemplates[i];\r\n if (template.TemplateId != mainTemplate.TemplateId && template.SortOrder == order) {\r\n return \"This order number already used by template : \" + groupTemplates[i].Caption;\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n ControllerAbstract.prototype.updateTemplate = function () {\r\n var _this = this;\r\n var saveTemplate = this.searchService.getSelectedTemplate();\r\n if (saveTemplate) {\r\n this.clinicalTemplateServiceNew\r\n .mergeTemplates(this.$routeParams.practiceId, this.$scope.mainTemplate, saveTemplate)\r\n .then(function (template) {\r\n _this.$scope.mainTemplate = template.Data;\r\n _this.clinicalTemplateServiceNew.setMainTemplate(template.Data);\r\n _this.searchService.eventId = template.TemplateId;\r\n _this.searchService.saveSelectedTemplate(null);\r\n });\r\n }\r\n };\r\n ControllerAbstract.prototype.init = function () {\r\n this.$scope.templates = [];\r\n };\r\n return ControllerAbstract;\r\n })();\r\n ClinicalTemplateModule.ControllerAbstract = ControllerAbstract;\r\n})(ClinicalTemplateModule || (ClinicalTemplateModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalTemplateAbstractController', ClinicalTemplateModule.ControllerAbstract);\r\n/// \r\n/// \r\nvar ClinicalTemplateModule;\r\n(function (ClinicalTemplateModule) {\r\n var CreateController = (function () {\r\n CreateController.$inject = [\"$scope\", \"$controller\", \"$routeParams\"];\r\n function CreateController($scope, $controller, $routeParams) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$controller = $controller;\r\n this.$routeParams = $routeParams;\r\n this.parent = $controller('ClinicalTemplateAbstractController', { $scope: $scope });\r\n angular.extend(this, this.parent);\r\n this.init();\r\n }\r\n CreateController.prototype.init = function () {\r\n var that = this;\r\n that.parent.init();\r\n that.parent.clinicalTemplateServiceNew.loadPracticeTemplates(this.$routeParams.practiceId)\r\n .then(function (templates) {\r\n that.$scope.templates = templates;\r\n });\r\n that.initMainTemplate();\r\n that.$scope.create = true;\r\n };\r\n CreateController.prototype.initMainTemplate = function () {\r\n var that = this;\r\n var saveTemplate = that.parent.clinicalTemplateServiceNew.getMainTemplate();\r\n if (!saveTemplate || !saveTemplate.EncounterLineItems) {\r\n saveTemplate = new Domain.Clinical.Template();\r\n that.$scope.mainTemplate = saveTemplate;\r\n that.parent.clinicalTemplateServiceNew.setMainTemplate(saveTemplate);\r\n }\r\n else {\r\n that.$scope.mainTemplate = saveTemplate;\r\n }\r\n that.$scope.mainTemplate.TemplateId = '00000000-0000-0000-0000-000000000000';\r\n that.$scope.mainTemplate.TemplateType = 'MyTemplate';\r\n that.$scope.tempSortOrder = that.$scope.mainTemplate.SortOrder;\r\n that.parent.updateTemplate();\r\n };\r\n return CreateController;\r\n })();\r\n ClinicalTemplateModule.CreateController = CreateController;\r\n})(ClinicalTemplateModule || (ClinicalTemplateModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalCreateTemplateController', ClinicalTemplateModule.CreateController);\r\n/// \r\n/// \r\nvar ClinicalTemplateModule;\r\n(function (ClinicalTemplateModule) {\r\n var ControllerEdit = (function () {\r\n ControllerEdit.$inject = [\"$scope\", \"locationService\", \"$routeParams\", \"$q\", \"$controller\"];\r\n function ControllerEdit($scope, locationService, $routeParams, $q, $controller) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.locationService = locationService;\r\n this.$routeParams = $routeParams;\r\n this.$q = $q;\r\n this.$controller = $controller;\r\n this.parent = $controller('ClinicalTemplateAbstractController', { $scope: $scope });\r\n angular.extend(this, this.parent);\r\n this.init();\r\n }\r\n ControllerEdit.prototype.init = function () {\r\n var that = this;\r\n that.parent.init();\r\n that.$scope.create = false;\r\n var templateId = that.$routeParams.templateId;\r\n that.$q\r\n .all([\r\n that.parent.clinicalTemplateServiceNew.execGetPracticeTemplate(that.$routeParams.practiceId, templateId),\r\n that.parent.clinicalTemplateServiceNew.loadPracticeTemplates(that.$routeParams.practiceId)\r\n ])\r\n .then(function (response) {\r\n that.$scope.mainTemplate = response[0];\r\n that.$scope.templates = response[1];\r\n var template = that.$scope.mainTemplate;\r\n if (!template || !template.EncounterLineItems) {\r\n that.locationService.goToClinicalTemplates(that.$routeParams.practiceId);\r\n }\r\n that.parent.clinicalTemplateServiceNew.setMainTemplate(that.$scope.mainTemplate);\r\n that.$scope.tempSortOrder = template.SortOrder;\r\n that.parent.updateTemplate();\r\n })\r\n .catch(function (error) {\r\n that.locationService.goToClinicalTemplates(that.$routeParams.practiceId);\r\n });\r\n };\r\n return ControllerEdit;\r\n })();\r\n ClinicalTemplateModule.ControllerEdit = ControllerEdit;\r\n})(ClinicalTemplateModule || (ClinicalTemplateModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalEditTemplateController', ClinicalTemplateModule.ControllerEdit);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar TemplatesModule;\r\n(function (TemplatesModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"$q\", \"$filter\", \"$rootScope\", \"storageService\", \"billingDomain\", \"clinicalDomain\"];\r\n function Service($q, $filter, $rootScope, storageService, billingDomain, clinicalDomain) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$q = $q;\r\n this.$filter = $filter;\r\n this.$rootScope = $rootScope;\r\n this.storageService = storageService;\r\n this.billingDomain = billingDomain;\r\n this.clinicalDomain = clinicalDomain;\r\n $rootScope.$on('EncounterTemplateUpdated', function () {\r\n var practiceId = storageService.getPracticeId();\r\n if (practiceId) {\r\n _this.clinicalDomain.invalidateEncounterTemplateCache(practiceId);\r\n }\r\n });\r\n }\r\n Service.prototype.search = function (loadTemplates, text) {\r\n if (text && text.length) {\r\n var searchTemplates = [];\r\n for (var i = 0; i < Service.SEARCH_FIELDS.length; i++) {\r\n var templates = this.$filter('filter')(loadTemplates, (_a = {}, _a[Service.SEARCH_FIELDS[i]] = text, _a));\r\n searchTemplates = Common.concatWithoutDuplicates(searchTemplates, templates);\r\n }\r\n return searchTemplates;\r\n }\r\n else {\r\n return loadTemplates;\r\n }\r\n var _a;\r\n };\r\n Service.prototype.removeTemplate = function (template) {\r\n var that = this;\r\n return this.billingDomain.removeTemplate(template.TemplateId).then(function (response) {\r\n if (response.Sucess === true) {\r\n return that.$q.when(template.TemplateId);\r\n }\r\n else {\r\n return that.$q.reject(response.ResponseMessage);\r\n }\r\n });\r\n };\r\n Service.prototype.removeClinicalTemplate = function (practiceId, template) {\r\n var that = this;\r\n return this.clinicalDomain.removeTemplate(practiceId, template.TemplateId)\r\n .then(function (response) {\r\n if (response.Sucess === true) {\r\n that.clinicalDomain.invalidateEncounterTemplateCache(practiceId);\r\n return that.$q.when(template.TemplateId);\r\n }\r\n else {\r\n return that.$q.reject(response.ResponseMessage);\r\n }\r\n });\r\n };\r\n Service.SEARCH_FIELDS = ['TemplateId', 'Caption', 'TemplateType', 'SortOrder'];\r\n return Service;\r\n })();\r\n TemplatesModule.Service = Service;\r\n})(TemplatesModule || (TemplatesModule = {}));\r\nangular.module('DoctorApp')\r\n .service('templatesService', TemplatesModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalTemplatesModule;\r\n(function (ClinicalTemplatesModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$rootScope\", \"$routeParams\", \"locationService\", \"clinicalTemplateServiceNew\", \"storageService\", \"templatesService\", \"showDialog\"];\r\n function Controller($scope, $rootScope, $routeParams, locationService, clinicalTemplateServiceNew, storageService, templatesService, showDialog) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.locationService = locationService;\r\n this.clinicalTemplateServiceNew = clinicalTemplateServiceNew;\r\n this.storageService = storageService;\r\n this.templatesService = templatesService;\r\n this.showDialog = showDialog;\r\n var that = this;\r\n $scope.search = function (text) {\r\n $scope.dynamicTemplates = text && text.length\r\n ? templatesService.search($scope.templatesInMemory, text)\r\n : $scope.templatesInMemory;\r\n $scope.templates = _this.initScrollingItems($scope.dynamicTemplates);\r\n $scope.templateTypes = ['All'];\r\n if ($scope.templates.length) {\r\n $scope.templates.forEach(function (template) {\r\n if ($scope.templateTypes.indexOf(template.TemplateType) === -1 &&\r\n template.TemplateType !== null) {\r\n $scope.templateTypes.push(template.TemplateType);\r\n }\r\n });\r\n }\r\n $scope.currentTemplateType = $scope.templateTypes.length > 1 &&\r\n $scope.templateTypes.indexOf($scope.currentTemplateType) > -1\r\n ? $scope.currentTemplateType\r\n : 'All';\r\n };\r\n $scope.loadMore = function () {\r\n var templatesCount = $scope.templates.length;\r\n if (templatesCount) {\r\n for (var i = 0; i < $scope.loadTemplatesPerScroll; i++) {\r\n var template = $scope.dynamicTemplates[templatesCount + i];\r\n if (template) {\r\n $scope.templates.push(template);\r\n if ($scope.templateTypes.indexOf(template.TemplateType) === -1 &&\r\n template.TemplateType !== null) {\r\n $scope.templateTypes.push(template.TemplateType);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n $scope.goToEditTemplate = function (template) {\r\n clinicalTemplateServiceNew.setMainTemplate(null);\r\n locationService.goToEditClinicalTemplate($routeParams.practiceId, template.TemplateId);\r\n };\r\n $scope.goToCreateTemplate = function () {\r\n clinicalTemplateServiceNew.setMainTemplate(null);\r\n locationService.goToCreateClinicalTemplate($routeParams.practiceId);\r\n };\r\n $scope.removeTemplatesByType = function () {\r\n showDialog.confirm('Are you sure you want to delete ' + $scope.currentTemplateType.toLowerCase() + ' templates?')\r\n .then(function () {\r\n clinicalTemplateServiceNew.removeTemplatesByType($routeParams.practiceId, $scope.currentTemplateType)\r\n .then(function () {\r\n $scope.currentTemplateType = 'All';\r\n that.loadTemplates();\r\n })\r\n .catch(function (error) {\r\n if (error) {\r\n showDialog.error(error);\r\n }\r\n });\r\n })\r\n .catch(function (error) {\r\n if (error) {\r\n showDialog.error(error);\r\n }\r\n });\r\n };\r\n $scope.removeTemplate = function (template) {\r\n showDialog.confirm('Are you sure want to delete template: ' + template.Caption)\r\n .then(function () { return that.templatesService.removeClinicalTemplate($routeParams.practiceId, template); })\r\n .catch(function () {\r\n })\r\n .then(function () {\r\n that.loadTemplates();\r\n })\r\n .catch(function (error) {\r\n showDialog.error(error);\r\n });\r\n };\r\n this.init();\r\n }\r\n Controller.prototype.init = function () {\r\n this.$scope.startTemplatesCount = 28;\r\n this.$scope.loadTemplatesPerScroll = 3;\r\n this.$scope.templates = [];\r\n this.$scope.templatesInMemory = [];\r\n this.$scope.dynamicTemplates = [];\r\n this.$scope.templateTypes = ['All'];\r\n this.$scope.currentTemplateType = 'All';\r\n this.loadTemplates();\r\n this.setAdminRules();\r\n };\r\n Controller.prototype.loadTemplates = function () {\r\n var that = this;\r\n that.clinicalTemplateServiceNew.loadPracticeTemplates(this.$routeParams.practiceId)\r\n .then(function (templates) {\r\n that.$scope.templatesInMemory = templates;\r\n that.$scope.search();\r\n });\r\n };\r\n Controller.prototype.setAdminRules = function () {\r\n var user = this.storageService.getUser();\r\n this.$scope.isAdmin = user.role.indexOf('*') > -1;\r\n };\r\n Controller.prototype.initScrollingItems = function (templates) {\r\n var initTemplates = [];\r\n for (var i = 0; i < this.$scope.startTemplatesCount; i++) {\r\n if (templates[i]) {\r\n initTemplates.push(templates[i]);\r\n }\r\n }\r\n return initTemplates;\r\n };\r\n return Controller;\r\n })();\r\n ClinicalTemplatesModule.Controller = Controller;\r\n})(ClinicalTemplatesModule || (ClinicalTemplatesModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalTemplatesController', ClinicalTemplatesModule.Controller);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ClinicalVisitOutcomes;\r\n(function (ClinicalVisitOutcomes) {\r\n var VisitReason = (function () {\r\n function VisitReason(desc) {\r\n this.val = false;\r\n this.desc = desc;\r\n }\r\n return VisitReason;\r\n })();\r\n ClinicalVisitOutcomes.VisitReason = VisitReason;\r\n var RemindItem = (function () {\r\n function RemindItem(name, count, type) {\r\n this.name = name;\r\n if (count && type) {\r\n this.params = [count, type];\r\n }\r\n }\r\n return RemindItem;\r\n })();\r\n ClinicalVisitOutcomes.RemindItem = RemindItem;\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$filter\", \"$rootScope\", \"locationService\", \"showDialog\", \"encounterServiceNew\", \"patientService\", \"clinicalVisitOutcomesService\", \"$timeout\", \"moment\", \"$window\", \"$q\", \"$routeParams\"];\r\n function Controller($scope, $filter, $rootScope, locationService, showDialog, encounterServiceNew, patientService, clinicalVisitOutcomesService, $timeout, moment, $window, $q, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$filter = $filter;\r\n this.$rootScope = $rootScope;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.patientService = patientService;\r\n this.clinicalVisitOutcomesService = clinicalVisitOutcomesService;\r\n this.$timeout = $timeout;\r\n this.moment = moment;\r\n this.$window = $window;\r\n this.$q = $q;\r\n this.$routeParams = $routeParams;\r\n var that = this;\r\n that.init();\r\n $scope.changeReason = function (reason) {\r\n reason.val = !reason.val;\r\n $scope.remindPatient.message = _this.generateSmsMessage();\r\n };\r\n $scope.updateMessage = function () {\r\n $scope.remindPatient.message = _this.generateSmsMessage();\r\n };\r\n $scope.changeItem = function (remindValue) {\r\n if (remindValue.name === Controller.NONE) {\r\n _this.clearReasonsSelected();\r\n }\r\n else if ($scope.remindPatient.value.name === Controller.NONE) {\r\n $scope.remindPatient.reasonsForFollowUpVisits[Controller.FOLLOW_UP].val = true;\r\n }\r\n $scope.remindPatient.value = remindValue;\r\n };\r\n $scope.complete = function () {\r\n if (!_this.validate()) {\r\n showDialog.error(\"Please select a reason for the patient’s next visit\");\r\n return;\r\n }\r\n var encounter = _this.$scope.encounter;\r\n var encounterFollowUp = clinicalVisitOutcomesService.getEncounterFollowUp($scope.remindPatient);\r\n encounter.EncounterFollowUp = encounterFollowUp;\r\n if ($scope.remindPatient.value.name !== Controller.NONE) {\r\n _this.getPatientCellPhone(encounter)\r\n .then(function (cellPhone) {\r\n encounter.EncounterFollowUp.FollowUpPatientCellphone = cellPhone;\r\n _this.complete($routeParams.practiceId, encounter);\r\n });\r\n }\r\n else {\r\n _this.complete($routeParams.practiceId, encounter);\r\n }\r\n };\r\n $scope.$watch('remindPatient.message', function () {\r\n if ($scope.remindPatient && $scope.remindPatient.message) {\r\n $scope.charsLeft = 160 - $scope.remindPatient.message.length;\r\n }\r\n });\r\n $scope.$watch('remindPatient.value.name', function () {\r\n var patient = $scope.remindPatient;\r\n if (patient) {\r\n $scope.isVisibleDate = patient.value.name === Controller.OTHER;\r\n $scope.isDisablesReasons = patient.value.name === Controller.NONE;\r\n $scope.remindPatient.message = _this.generateSmsMessage();\r\n }\r\n });\r\n $scope.$watch('remindPatient.date', function () {\r\n if ($scope.remindPatient) {\r\n $scope.remindPatient.message = _this.generateSmsMessage();\r\n }\r\n });\r\n }\r\n Controller.prototype.init = function () {\r\n var encounter = this.encounterServiceNew.getEncounter();\r\n var remindGroups = this.clinicalVisitOutcomesService.getRemindList();\r\n if (!encounter) {\r\n this.$rootScope.back();\r\n return;\r\n }\r\n this.$scope.encounter = encounter;\r\n this.$scope.minDate = this.moment().format();\r\n this.$scope.patientRemindsList = remindGroups;\r\n this.$scope.showReports = this.encounterServiceNew.isAnyConsultationReport(encounter).length > 0;\r\n var remindPatient = this.clinicalVisitOutcomesService.createRemindPatient();\r\n remindPatient.value = this.getRemindItemByName(remindGroups, remindPatient.value.name);\r\n this.$scope.remindPatient = remindPatient;\r\n this.$scope.remindPatient.message = this.generateSmsMessage();\r\n };\r\n Controller.prototype.generateSmsMessage = function () {\r\n var encounter = this.encounterServiceNew.getEncounter();\r\n if (!encounter) {\r\n return '';\r\n }\r\n var patientName = \"\";\r\n if (encounter.PatientEventDetails &&\r\n encounter.PatientEventDetails.Patient &&\r\n encounter.PatientEventDetails.Patient.PatientDetails) {\r\n patientName = encounter.PatientEventDetails.Patient.PatientDetails.FirstName;\r\n }\r\n var doctorName = encounter.Provider.TreatingDoctorName || \"\";\r\n var date = this.clinicalVisitOutcomesService.getFollowupDate(this.$scope.remindPatient);\r\n var reason = this.clinicalVisitOutcomesService\r\n .getSelectedReasons(this.$scope.remindPatient.reasonsForFollowUpVisits)\r\n .join(\", \");\r\n var message = \"Hi {0}, you are due to see {1}, don't forget to go before {2} for {3}\"\r\n .replace(\"{0}\", this.$filter('titlecase')(patientName))\r\n .replace(\"{1}\", doctorName)\r\n .replace(\"{2}\", date)\r\n .replace(\"{3}\", reason);\r\n return message.substring(0, Controller.SMS_LENGTH);\r\n };\r\n Controller.prototype.complete = function (practiceId, encounter) {\r\n var _this = this;\r\n var consultationReports = this.encounterServiceNew.isAnyConsultationReport(encounter);\r\n if (consultationReports.length > 0) {\r\n var patientId = encounter.PatientEventDetails.Patient.PatientId;\r\n this.locationService.goToConsultationReport(practiceId, patientId, consultationReports[0]);\r\n }\r\n else {\r\n this.encounterServiceNew.submitEncounter(practiceId, encounter)\r\n .then(function () {\r\n _this.locationService.goToHome(_this.$routeParams.practiceId);\r\n })\r\n .catch(function (error) {\r\n _this.showDialog.error(error);\r\n });\r\n }\r\n };\r\n Controller.prototype.getRemindItemByName = function (remindGroups, name) {\r\n for (var i = 0; i < remindGroups.length; i++) {\r\n var remindList = remindGroups[0];\r\n for (var j = 0; j < remindList.length; j++) {\r\n if (remindList[j].name == name) {\r\n return remindList[j];\r\n }\r\n }\r\n }\r\n return remindGroups[0][0];\r\n };\r\n Controller.prototype.clearReasonsSelected = function () {\r\n var reasons = this.$scope.remindPatient.reasonsForFollowUpVisits;\r\n for (var i = 0; i < reasons.length; i++) {\r\n reasons[i].val = false;\r\n }\r\n };\r\n Controller.prototype.validate = function () {\r\n var remind = this.$scope.remindPatient;\r\n if (remind.value.name === Controller.NONE) {\r\n return true;\r\n }\r\n for (var i = 0; i < remind.reasonsForFollowUpVisits.length; i++) {\r\n if (remind.reasonsForFollowUpVisits[i].val) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n Controller.prototype.getPatientCellPhone = function (encounter) {\r\n var currentCellPhone = encounter.PatientEventDetails.Patient.PatientDetails.ContactNo;\r\n if (currentCellPhone) {\r\n return this.$q.when(currentCellPhone);\r\n }\r\n else {\r\n return this.showDialog.cellPhone()\r\n .then(function (cellPhone) {\r\n if (cellPhone) {\r\n return cellPhone;\r\n }\r\n });\r\n }\r\n };\r\n Controller.NONE = \"None\";\r\n Controller.OTHER = \"Other\";\r\n Controller.FOLLOW_UP = 1;\r\n Controller.SMS_LENGTH = 160;\r\n return Controller;\r\n })();\r\n ClinicalVisitOutcomes.Controller = Controller;\r\n})(ClinicalVisitOutcomes || (ClinicalVisitOutcomes = {}));\r\nangular.module('DoctorApp')\r\n .controller('ClinicalVisitOutcomesController', ClinicalVisitOutcomes.Controller);\r\n/// \r\n/// \r\n/// \r\nvar ClinicalVisitOutcomes;\r\n(function (ClinicalVisitOutcomes) {\r\n var Service = (function () {\r\n Service.$inject = [\"moment\"];\r\n function Service(moment) {\r\n \"ngInject\";\r\n this.moment = moment;\r\n }\r\n Service.prototype.createRemindPatient = function () {\r\n return {\r\n value: this.getRemindList()[0][0],\r\n date: this.moment(),\r\n message: \"\",\r\n reasonsForFollowUpVisits: this.getListReasons()\r\n };\r\n };\r\n Service.prototype.getRemindList = function () {\r\n return [\r\n [\r\n new ClinicalVisitOutcomes.RemindItem(ClinicalVisitOutcomes.Controller.NONE),\r\n new ClinicalVisitOutcomes.RemindItem('1 week', 1, 'weeks'),\r\n new ClinicalVisitOutcomes.RemindItem('2 weeks', 2, 'weeks'),\r\n new ClinicalVisitOutcomes.RemindItem('3 weeks', 3, 'weeks'),\r\n new ClinicalVisitOutcomes.RemindItem('1 month', 1, 'month')\r\n ], [\r\n new ClinicalVisitOutcomes.RemindItem('3 months', 3, 'month'),\r\n new ClinicalVisitOutcomes.RemindItem('6 months', 6, 'month'),\r\n new ClinicalVisitOutcomes.RemindItem('1 year', 1, 'years'),\r\n new ClinicalVisitOutcomes.RemindItem(ClinicalVisitOutcomes.Controller.OTHER)\r\n ]\r\n ];\r\n };\r\n Service.prototype.getListReasons = function () {\r\n return [\r\n new ClinicalVisitOutcomes.VisitReason('General visit'),\r\n new ClinicalVisitOutcomes.VisitReason('Follow-up visit'),\r\n new ClinicalVisitOutcomes.VisitReason('Repeat script'),\r\n new ClinicalVisitOutcomes.VisitReason('General screening'),\r\n new ClinicalVisitOutcomes.VisitReason('Diabetes'),\r\n new ClinicalVisitOutcomes.VisitReason('Hypertension'),\r\n new ClinicalVisitOutcomes.VisitReason('COPD'),\r\n new ClinicalVisitOutcomes.VisitReason('Asthma'),\r\n new ClinicalVisitOutcomes.VisitReason('Other')\r\n ];\r\n };\r\n Service.prototype.getEncounterFollowUp = function (remind) {\r\n var followUp = new Domain.Clinical.EncounterFollowUp();\r\n followUp.FollowUpRequired = remind.value.name !== ClinicalVisitOutcomes.Controller.NONE;\r\n if (followUp.FollowUpRequired) {\r\n followUp.FollowUpReasons = this.getSelectedReasons(remind.reasonsForFollowUpVisits);\r\n followUp.DueDateForFollowUp = this.getFollowupDate(remind);\r\n followUp.FollowUpMessage = remind.message;\r\n }\r\n return followUp;\r\n };\r\n Service.prototype.getSelectedReasons = function (visits) {\r\n var items = [];\r\n for (var i = 0; i < visits.length; i++) {\r\n var reason = visits[i];\r\n if (reason.val) {\r\n items.push(reason.desc);\r\n }\r\n }\r\n return items;\r\n };\r\n Service.prototype.getFollowupDate = function (remind) {\r\n if (remind.value.name === ClinicalVisitOutcomes.Controller.OTHER) {\r\n return remind.date.format(serverDateFormat);\r\n }\r\n else if (remind.value.name !== ClinicalVisitOutcomes.Controller.NONE) {\r\n return this.getDateFromForm(this.moment(), remind.value.params);\r\n }\r\n return \"\";\r\n };\r\n Service.prototype.getDateFromForm = function (dateMoment, params) {\r\n var inc = params[0];\r\n var nameField = params[1];\r\n return this.moment(dateMoment).add(inc, nameField).format(serverDateFormat);\r\n };\r\n return Service;\r\n })();\r\n ClinicalVisitOutcomes.Service = Service;\r\n})(ClinicalVisitOutcomes || (ClinicalVisitOutcomes = {}));\r\nangular.module('DoctorApp')\r\n .service('clinicalVisitOutcomesService', ClinicalVisitOutcomes.Service);\r\nvar TemplatesCommunicationModule;\r\n(function (TemplatesCommunicationModule) {\r\n var CommunicationTemplatesUpdateController = (function () {\r\n CommunicationTemplatesUpdateController.$inject = [\"$scope\", \"$q\", \"$filter\", \"moment\", \"$timeout\", \"modalService\", \"practiceService\"];\r\n function CommunicationTemplatesUpdateController($scope, $q, $filter, moment, $timeout, modalService, practiceService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.$filter = $filter;\r\n this.moment = moment;\r\n this.$timeout = $timeout;\r\n this.modalService = modalService;\r\n this.practiceService = practiceService;\r\n $scope.tinymceOptions = {\r\n selector: 'textarea',\r\n plugins: 'link table preview code template paste',\r\n toolbar: 'code | template | undo redo | bold italic | fontsizeselect | bullist numlist outdent indent | alignleft aligncenter alignright | file',\r\n fontsize_formats: '8pt 10pt 12pt 14pt 18pt 24pt 36pt',\r\n skin_url: GlobalVar.isProd ? 'styles/tinymce/skins/lightgray' : '',\r\n visual: false,\r\n browser_spellcheck: true,\r\n contextmenu: false,\r\n statusbar: false,\r\n paste_data_images: true,\r\n valid_children: \"+body[style],+body,+head\",\r\n extended_valid_elements: 'body,head',\r\n init_instance_callback: function (editor) {\r\n var contentWraper = $(editor.contentAreaContainer);\r\n var content = $(editor.iframeElement);\r\n var interval;\r\n editor.on('change', function () {\r\n if (interval) {\r\n $timeout.cancel(interval);\r\n }\r\n interval = $timeout(function () {\r\n var content = editor.getContent();\r\n if (content.search(/ -1) {\r\n $scope.body = editor.getContent().replace(/ 0) {\r\n practiceService.updateCommunicationTemplate($scope.templateSelected)\r\n .then(function (result) {\r\n modalService.info('Successfully updated info ' + result.Data);\r\n _this.loadTemplates();\r\n });\r\n }\r\n else {\r\n modalService.error('Please enter all required info');\r\n }\r\n };\r\n this.loadTemplates();\r\n }\r\n CommunicationTemplatesUpdateController.prototype.loadTemplates = function () {\r\n var _this = this;\r\n this.practiceService.getCommunicationTemplates()\r\n .then(function (templates) {\r\n if (templates) {\r\n _this.$scope.templateList = _this.$filter('orderBy')(angular.copy(templates), \"TemplateIdentifier\");\r\n if (_this.$scope.selectedTemplateId) {\r\n _this.$scope.onTemplateSelected();\r\n }\r\n else {\r\n _this.$scope.templateSelected = _this.$scope.templateList[0];\r\n _this.$scope.selectedTemplateId = _this.$scope.templateSelected.TemplateId;\r\n }\r\n _this.$scope.body = _this.$scope.templateSelected.TemplateBody;\r\n }\r\n });\r\n };\r\n return CommunicationTemplatesUpdateController;\r\n })();\r\n TemplatesCommunicationModule.CommunicationTemplatesUpdateController = CommunicationTemplatesUpdateController;\r\n})(TemplatesCommunicationModule || (TemplatesCommunicationModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('CommunicationTemplatesUpdateController', TemplatesCommunicationModule.CommunicationTemplatesUpdateController);\r\n/// \r\n/// \r\n/// \r\nvar ClinicalMessageCenterModule;\r\n(function (ClinicalMessageCenterModule) {\r\n var PatientList = (function () {\r\n function PatientList() {\r\n }\r\n return PatientList;\r\n })();\r\n ClinicalMessageCenterModule.PatientList = PatientList;\r\n var MessageTabController = (function () {\r\n MessageTabController.$inject = [\"$scope\", \"$location\", \"usageService\", \"memoryService\", \"moment\", \"$routeParams\"];\r\n function MessageTabController($scope, $location, usageService, memoryService, moment, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$location = $location;\r\n this.usageService = usageService;\r\n this.memoryService = memoryService;\r\n this.moment = moment;\r\n this.$routeParams = $routeParams;\r\n $scope.list = [];\r\n $scope.$watch('reports', function (newValue, oldValue) {\r\n if (!$scope.reports) {\r\n return;\r\n }\r\n var list = [];\r\n for (var i = 0; i < $scope.reports.length; i++) {\r\n var report = $scope.reports[i];\r\n report.ReceivedDate = _this.formatDate(report.ReceivedDate);\r\n report.CollectionDate = _this.formatDate(report.CollectionDate);\r\n report.PatientDateOfBirth = _this.formatDate(report.PatientDateOfBirth);\r\n _this.insertReport(list, report);\r\n }\r\n $scope.list = list;\r\n });\r\n $scope.choseReport = function (report) {\r\n memoryService.clinicalMessageCenter.tabSelect = $location.hash();\r\n $location.hash('');\r\n var uri = report.isPathologyReport ? '/clinical-pathology-report/' : '/clinical-pathology-report-workflow/';\r\n var end = report.isPathologyReport ? '' : '/' + $scope.urgent;\r\n if (report.isPathologyReport) {\r\n _this.usageService.openedPathReport($routeParams.practiceId, report.PathologyReportWorkflowId, report.ReceivedDate);\r\n }\r\n else {\r\n _this.usageService.openedPathReportWorkflow($routeParams.practiceId, report.PathologyReportWorkflowId, report.ReceivedDate);\r\n }\r\n $location.path('/' + $routeParams.practiceId + uri + report.PathologyReportWorkflowId + end);\r\n };\r\n }\r\n MessageTabController.prototype.insertReport = function (list, report) {\r\n var number = this.getNumberOfList(list, report);\r\n var item = list[number];\r\n if (item) {\r\n item.reports[item.reports.length] = report;\r\n }\r\n else {\r\n list[number] = {\r\n PatientName: report.PatientName,\r\n PatientDateOfBirth: report.PatientDateOfBirth,\r\n reports: [report]\r\n };\r\n }\r\n };\r\n MessageTabController.prototype.formatDate = function (date) {\r\n var dateMoment = this.moment(date, \"YYYY-MM-DD HH:mm:ss\");\r\n if (dateMoment.isValid()) {\r\n return dateMoment.format(\"YYYY-MM-DD\");\r\n }\r\n return date;\r\n };\r\n MessageTabController.prototype.getNumberOfList = function (list, report) {\r\n for (var j = 0; j < list.length; j++) {\r\n var item = list[j];\r\n if (report.PatientName.toUpperCase() == item.PatientName.toUpperCase() && report.PatientDateOfBirth == item.PatientDateOfBirth) {\r\n return j;\r\n }\r\n }\r\n return list.length;\r\n };\r\n return MessageTabController;\r\n })();\r\n ClinicalMessageCenterModule.MessageTabController = MessageTabController;\r\n})(ClinicalMessageCenterModule || (ClinicalMessageCenterModule = {}));\r\nangular.module('DoctorApp')\r\n .directive('clinicalMessageTab', function () {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n reports: '=',\r\n urgent: '=',\r\n type: '='\r\n },\r\n templateUrl: 'screens/components/clinical-message-tab/clinical-message-tab.html',\r\n controller: ClinicalMessageCenterModule.MessageTabController\r\n };\r\n});\r\n/// \r\nvar ClinicalMetricsModule;\r\n(function (ClinicalMetricsModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"moment\", \"showDialog\", \"$q\"];\r\n function Controller($scope, moment, showDialog, $q) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.moment = moment;\r\n this.showDialog = showDialog;\r\n this.$q = $q;\r\n var metricPattern = /^(\\+{1,4}|\\d+)((\\.|\\,)\\d{1,4})?$/;\r\n $scope.model = {};\r\n $scope.clinicalMetricsSchema = [\r\n {\r\n groupName: 'General',\r\n groupTitle: 'General',\r\n isCollapsible: true,\r\n className: 'general-group-class',\r\n items: [\r\n {\r\n type: 'number',\r\n uom: '°C',\r\n min: 10,\r\n max: 50,\r\n maxlength: 5,\r\n name: 'Temperature',\r\n id: 'Temperature',\r\n step: 0.1,\r\n mask: /^(50|([1-4][0-9])((\\.|\\,)\\d{1,2})?)$/,\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Temperature: 10-50 °C'\r\n }\r\n },\r\n {\r\n type: 'text',\r\n uom: 'mmHg',\r\n name: 'Blood pressure',\r\n id: 'BloodPressure',\r\n maxlength: 7,\r\n mask: /^(300|[1-2][0-9][0-9]|[0-9][0-9]|[0-9])(\\\\|\\/)(200|1[0-9][0-9]|[0-9][0-9]|[0-9])$/,\r\n placeholder: 'Systolic/Diastolic',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Blood pressure: (0-300)/(0-200)'\r\n }\r\n },\r\n {\r\n type: 'number',\r\n uom: 'bpm',\r\n min: 0,\r\n max: 300,\r\n maxlength: 3,\r\n mask: /^(300|[0-9]|[1-9][0-9]|[1-2][0-9][0-9])$/,\r\n name: 'Pulse rate',\r\n id: 'PulseRate',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Pulse rate: 0-300 bpm'\r\n }\r\n },\r\n {\r\n type: 'select-composite',\r\n uom: 'bpm',\r\n name: 'Radial pulse',\r\n id: 'RadialPulse',\r\n min: 0,\r\n max: 300,\r\n maxlength: 3,\r\n mask: /^(300|[0-9]|[1-9][0-9]|[1-2][0-9][0-9])$/,\r\n options: ['Left', 'Right'],\r\n validate: 'validateCompsiteSelect',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Radial pulse: 0-300 bpm',\r\n emptyValue: 'Please capture a value for Radial pulse.',\r\n emptyType: 'Please specify whether the Radial pulse test result was ‘Left’ or ‘Right’.'\r\n }\r\n },\r\n {\r\n type: 'number',\r\n uom: 'Breaths per min',\r\n min: 0,\r\n max: 100,\r\n maxlength: 5,\r\n mask: /^(100|([0-9]{1,2}((\\.|\\,)\\d{1,2})?))$/,\r\n name: 'Respiratory rate',\r\n id: 'RespiratoryRate',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Respiratory Rate: 0-100'\r\n }\r\n },\r\n {\r\n type: 'number',\r\n uom: '%',\r\n min: 0,\r\n max: 100,\r\n maxlength: 5,\r\n mask: /^(100|([0-9]{1,2}((\\.|\\,)\\d{1,2})?))$/,\r\n name: 'SPO2',\r\n id: 'SPO2',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for SPO2: 0-100%'\r\n }\r\n },\r\n { type: 'separator' },\r\n {\r\n type: 'select',\r\n name: 'Smoker',\r\n id: 'Smoker',\r\n options: ['Yes', 'No', 'Ex. smoker']\r\n },\r\n {\r\n type: 'number',\r\n uom: '',\r\n name: 'Fagerström Test',\r\n id: 'FND',\r\n min: 0,\r\n max: 10,\r\n mask: /^(100|[0-9]|[1-9][0-9])$/,\r\n maxlength: 2,\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Fagerström Nicotine Dependence: 0-10'\r\n }\r\n },\r\n {\r\n type: 'select',\r\n name: 'Pregnancy test',\r\n id: 'PregnancyTest',\r\n options: ['Positive', 'Negative'],\r\n condition: \"PregnancyVisibilityCondition\"\r\n },\r\n { type: 'separator' },\r\n {\r\n type: 'number',\r\n uom: 'cm',\r\n name: 'Height',\r\n id: 'Height',\r\n min: 0,\r\n max: 300,\r\n maxlength: 7,\r\n mask: /^(300|(([0-9]|[1-9][0-9]|[1-2][0-9][0-9])((\\.|\\,)\\d{1,3})?))$/,\r\n onchange: 'updateBMI',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Height: 0-300 cm'\r\n }\r\n },\r\n {\r\n type: 'number',\r\n uom: 'kg',\r\n name: 'Weight',\r\n id: 'Weight',\r\n min: 0,\r\n max: 300,\r\n maxlength: 7,\r\n mask: /^(300|(([0-9]|[1-9][0-9]|[1-2][0-9][0-9])((\\.|\\,)\\d{1,3})?))$/,\r\n onchange: 'updateBMI',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Weight: 0-300kg'\r\n }\r\n },\r\n { type: 'calculate-label', name: 'BMI', uom: '' },\r\n { type: 'separator' },\r\n {\r\n type: 'select-composite',\r\n uom: 'mmol/L',\r\n name: 'Blood glucose test',\r\n id: 'BloodGlucoseTest',\r\n min: 0,\r\n max: 150,\r\n maxlength: 5,\r\n mask: /^(150|(([0-9]|[1-9][0-9]|1[0-4][0-9])((\\.|\\,)\\d{1,2})?))$/,\r\n options: ['Random', 'Fasting'],\r\n validate: 'validateCompsiteSelect',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Blood glucose: 0-150 mmol/L',\r\n emptyValue: 'Please capture a value for Blood glucose test.',\r\n emptyType: 'Please specify whether the blood glucose test result was ‘Fasting’ or ‘Random’.'\r\n }\r\n },\r\n {\r\n type: 'number',\r\n uom: '%',\r\n name: 'HbA1c',\r\n id: 'HbA1c',\r\n min: 0,\r\n max: 100,\r\n mask: /^(100|[0-9]|[1-9][0-9])$/,\r\n maxlength: 3,\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for HbA1c: 0-100%'\r\n }\r\n },\r\n {\r\n type: 'select-composite',\r\n uom: 'mmol/L',\r\n name: 'Total Cholesterol test',\r\n id: 'CholesterolTest',\r\n min: 0,\r\n max: 20,\r\n maxlength: 5,\r\n mask: /^(20|(([0-9]|1[0-9])((\\.|\\,)\\d{1,2})?))$/,\r\n options: ['Random', 'Fasting'],\r\n validate: 'validateCompsiteSelect',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Total Cholesterol test: 0-20 mmol/L',\r\n emptyValue: 'Please capture a value for Cholesterol test.',\r\n emptyType: 'Please specify whether the Cholesterol test result was ‘Fasting’ or ‘Random’.'\r\n }\r\n },\r\n {\r\n type: 'number',\r\n uom: 'mmol/L',\r\n name: 'HDL',\r\n id: 'HDL',\r\n min: 0,\r\n max: 10,\r\n mask: /^(10|([0-9])((\\.|\\,)\\d{1,2})?)$/,\r\n maxlength: 3,\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for HDL: 0-10 mmol/L'\r\n }\r\n },\r\n {\r\n type: 'number',\r\n uom: 'mmol/L',\r\n name: 'LDL',\r\n id: 'LDL',\r\n min: 0,\r\n max: 10,\r\n mask: /^(10|([0-9])((\\.|\\,)\\d{1,2})?)$/,\r\n maxlength: 3,\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for LDL: 0-10 mmol/L'\r\n }\r\n },\r\n {\r\n type: 'number',\r\n uom: 'mmol/L',\r\n name: 'Triglycerides',\r\n id: 'Triglycerides',\r\n min: 0,\r\n max: 10,\r\n mask: /^(10|([0-9])((\\.|\\,)\\d{1,2})?)$/,\r\n maxlength: 3,\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Triglycerides: 0-10 mmol/L'\r\n }\r\n },\r\n {\r\n type: 'text',\r\n uom: '',\r\n name: 'Micral test',\r\n id: 'MicralTest',\r\n maxlength: 500,\r\n mask: ''\r\n },\r\n {\r\n type: 'text',\r\n uom: '',\r\n name: 'ECG test',\r\n id: 'ECGtest',\r\n maxlength: 500,\r\n mask: ''\r\n }\r\n ]\r\n },\r\n {\r\n groupName: 'Urine dipstick',\r\n groupTitle: 'Urine dipstick',\r\n isCollapsible: true,\r\n isCollapsed: true,\r\n className: 'group2-class',\r\n items: [\r\n {\r\n type: 'checkbox',\r\n name: 'Nothing abnormal detected',\r\n id: 'NothingAbnormalDetected',\r\n action: 'switch'\r\n },\r\n { type: 'space-separator' },\r\n {\r\n type: 'checkbox-composite',\r\n name: 'Bilirubin',\r\n id: 'Bilirubin',\r\n maxlength: 4,\r\n mask: metricPattern,\r\n onchange: 'changeUrine',\r\n validate: 'validateUrineMeasure',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Bilirubin measurement: decimal/++++',\r\n required: 'Please specify Bilirubin measurement on the urine dipstick pane.'\r\n }\r\n },\r\n {\r\n type: 'checkbox-composite',\r\n name: 'Blood',\r\n id: 'Blood',\r\n maxlength: 4,\r\n mask: metricPattern,\r\n onchange: 'changeUrine',\r\n validate: 'validateUrineMeasure',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Blood measurement: decimal/++++',\r\n required: 'Please specify Blood measurement on the urine dipstick pane.'\r\n }\r\n },\r\n {\r\n type: 'checkbox-composite',\r\n name: 'Glucose',\r\n id: 'Glucose',\r\n maxlength: 4,\r\n mask: metricPattern,\r\n onchange: 'changeUrine',\r\n validate: 'validateUrineMeasure',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Glucose measurement: decimal/++++',\r\n required: 'Please specify Glucose measurement on the urine dipstick pane.'\r\n }\r\n },\r\n {\r\n type: 'checkbox-composite',\r\n name: 'White blood cells',\r\n id: 'WhiteBloodCells',\r\n maxlength: 4,\r\n mask: metricPattern,\r\n onchange: 'changeUrine',\r\n validate: 'validateUrineMeasure',\r\n validationMessage: {\r\n pattern: 'PPlease specify a valid value for White blood cells measurement: decimal/++++',\r\n required: 'Please specify White blood cells measurement on the urine dipstick pane.'\r\n }\r\n },\r\n {\r\n type: 'checkbox-composite',\r\n name: 'Haemoglobin',\r\n id: 'Haemoglobin',\r\n maxlength: 4,\r\n mask: metricPattern,\r\n onchange: 'changeUrine',\r\n validate: 'validateUrineMeasure',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Haemoglobin measurement: decimal/++++',\r\n required: 'Please specify Haemoglobin measurement on the urine dipstick pane.'\r\n }\r\n },\r\n {\r\n type: 'checkbox-composite',\r\n name: 'Ketones',\r\n id: 'Ketones',\r\n maxlength: 4,\r\n mask: metricPattern,\r\n onchange: 'changeUrine',\r\n validate: 'validateUrineMeasure',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Ketones measurement: decimal/++++',\r\n required: 'Please specify Ketones measurement on the urine dipstick pane.'\r\n }\r\n },\r\n {\r\n type: 'checkbox-composite',\r\n name: 'Nitrites',\r\n id: 'Nitrites',\r\n maxlength: 4,\r\n mask: metricPattern,\r\n onchange: 'changeUrine',\r\n validate: 'validateUrineMeasure',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Nitrites measurement: decimal/++++',\r\n required: 'Please specify Nitrites measurement on the urine dipstick pane.'\r\n }\r\n },\r\n {\r\n type: 'checkbox-composite',\r\n name: 'pH',\r\n id: 'pH',\r\n maxlength: 4,\r\n mask: /^(\\+|[0-9]|1[1-4])((\\.|\\,)\\d)?$/,\r\n onchange: 'changeUrine',\r\n validate: 'validateUrineMeasure',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for pH measurement: + or decimal',\r\n required: 'Please specify pH measurement on the urine dipstick pane.'\r\n }\r\n },\r\n {\r\n type: 'checkbox-composite',\r\n name: 'Protein',\r\n id: 'Protein',\r\n maxlength: 4,\r\n mask: metricPattern,\r\n onchange: 'changeUrine',\r\n validate: 'validateUrineMeasure',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Protein measurement: decimal/++++',\r\n required: 'Please specify Protein measurement on the urine dipstick pane.'\r\n }\r\n },\r\n {\r\n type: 'checkbox-composite',\r\n name: 'Urobilinogen',\r\n id: 'Urobilinogen',\r\n maxlength: 4,\r\n mask: metricPattern,\r\n onchange: 'changeUrine',\r\n validate: 'validateUrineMeasure',\r\n validationMessage: {\r\n pattern: 'Please specify a valid value for Urobilinogen measurement: decimal/++++',\r\n required: 'Please specify Urobilinogen measurement on the urine dipstick pane.'\r\n }\r\n }\r\n ]\r\n }\r\n ];\r\n var clinicalMetricFuncs = {\r\n PregnancyVisibilityCondition: function () {\r\n return $scope.clinicalMetricsOptions.gender === 'Female';\r\n },\r\n updateBMI: function () {\r\n var result = '';\r\n var w = $scope.model[\"Weight\"];\r\n var h = $scope.model[\"Height\"];\r\n if (w && h && w.Value && h.Value) {\r\n var sh = Math.pow(Number(h.Value) / 100, 2);\r\n result = (Math.round(Number(w.Value) / sh)).toString();\r\n }\r\n $scope.model[\"BMI\"] = $scope.model[\"BMI\"] || {};\r\n $scope.model[\"BMI\"].CalculatedValue = result;\r\n },\r\n changeUrine: function (metric, e) {\r\n if ($scope.model[metric.name].Value && $scope.model[metric.name].Checked === undefined) {\r\n $scope.model[metric.name].Checked = true;\r\n }\r\n if (e && $scope.model[metric.name].Checked) {\r\n e.target.nextElementSibling.nextElementSibling.firstElementChild.focus();\r\n }\r\n if ($scope.model[metric.name].Checked === false) {\r\n $scope.model[metric.name].Value = undefined;\r\n $scope.model[metric.name].Checked = undefined;\r\n }\r\n },\r\n validateCompsiteSelect: function (metric, model) {\r\n model.required = Boolean(Common.isNumber(model.Value) || model.Type);\r\n if (!Common.isNumber(model.Value) && model.Type) {\r\n return metric.validationMessage.emptyValue;\r\n }\r\n if (Common.isNumber(model.Value) && !model.Type) {\r\n return metric.validationMessage.emptyType;\r\n }\r\n },\r\n validateUrineMeasure: function (metric, model) {\r\n model.required = Boolean(model.Checked || !model.Value);\r\n if (model.Checked && !model.Value) {\r\n return metric.validationMessage.required;\r\n }\r\n }\r\n };\r\n function getClinicalMetrics() {\r\n var array = new Array();\r\n if ($scope.model) {\r\n for (var key in $scope.model) {\r\n if ($scope.model.hasOwnProperty(key)) {\r\n if ($scope.model[key].Value === undefined && $scope.model[key].Type === undefined) {\r\n continue;\r\n }\r\n $scope.clinicalMetricsSchema.forEach(function (group) {\r\n group.items.forEach(function (m) {\r\n if (m.name === key) {\r\n var metric = new Domain.Clinical.ClinicalMetric();\r\n metric.Group = group.groupName;\r\n metric.Name = key;\r\n metric.TestDate = moment().format(DATE_TIME_PATTERN);\r\n metric.Type = $scope.model[key].Type;\r\n metric.Unit = m.uom;\r\n metric.Value = $scope.model[key].Value;\r\n array.push(metric);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n return array;\r\n }\r\n function validateClinicalMetrics() {\r\n var errors = [];\r\n $scope.clinicalMetricsSchema.forEach(function (g) {\r\n g.items.forEach(function (metric) {\r\n var form = $scope.clinicalMetricsForm['value_' + metric.id];\r\n if (form && form.$error.pattern) {\r\n errors.push(metric.validationMessage.pattern);\r\n }\r\n if (metric.validate) {\r\n var model = $scope.model[metric.name];\r\n if (model) {\r\n var errorMsg = $scope.evalMetricFunction(metric.validate, metric, model);\r\n if (errorMsg) {\r\n errors.push(errorMsg);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n if (errors.length === 0) {\r\n return true;\r\n }\r\n else if (errors.length === 1) {\r\n showDialog.warning(errors[0]);\r\n }\r\n else {\r\n showDialog.warning(\"Please provide correct clinical metrics\");\r\n }\r\n return false;\r\n }\r\n $scope.getMetricById = function (id) {\r\n for (var i = 0; i < $scope.clinicalMetricsSchema.length; i++) {\r\n var g = $scope.clinicalMetricsSchema[i];\r\n for (var j = 0; j < g.items.length; j++) {\r\n if (g.items[j].id === id) {\r\n return g.items[j];\r\n }\r\n }\r\n }\r\n };\r\n $scope.$watch('clinicalMetricsOptions', function () {\r\n if ($scope.clinicalMetricsOptions.historicalMetrics) {\r\n var historical = $scope.clinicalMetricsOptions.historicalMetrics;\r\n for (var i = 0; i < historical.length; i++) {\r\n var key = historical[i].Name;\r\n $scope.model[key] = $scope.model[key] || {};\r\n $scope.model[key].Old = historical[i];\r\n var oldMeasure = moment(historical[i].TestDate).format('D MMM, YYYY: ');\r\n if (historical[i].Type) {\r\n oldMeasure += historical[i].Type + \" \";\r\n }\r\n if (historical[i].Value != null) {\r\n oldMeasure += historical[i].Value + \" \";\r\n }\r\n if (historical[i].Unit) {\r\n oldMeasure += historical[i].Unit;\r\n }\r\n $scope.model[key].OldMeasure = oldMeasure;\r\n }\r\n }\r\n if ($scope.clinicalMetricsOptions.metrics) {\r\n var metrics = $scope.clinicalMetricsOptions.metrics;\r\n for (var i = 0; i < metrics.length; i++) {\r\n $scope.model[metrics[i].Name] = $scope.model[metrics[i].Name] || {};\r\n var model = $scope.model[metrics[i].Name];\r\n model.Value = metrics[i].Value;\r\n model.Type = metrics[i].Type;\r\n model.Checked = Boolean(model.Value);\r\n }\r\n }\r\n var groupsToUpdate = $scope.clinicalMetricsSchema.filter(function (v) { return v.items.some(function (m) { return m.type.indexOf('calculate') !== -1; }); });\r\n groupsToUpdate.forEach(function (g) {\r\n g.items.forEach(function (m) { return $scope.evalMetricFunction(m.onchange); });\r\n });\r\n $scope.clinicalMetricsSchema.forEach(function (g) {\r\n g.items.forEach(function (m) {\r\n m.isVisible = $scope.evalMetricFunction(m.condition);\r\n });\r\n });\r\n $scope.clinicalMetricsOptions.getClinicalMetrics = getClinicalMetrics;\r\n $scope.clinicalMetricsOptions.validate = validateClinicalMetrics;\r\n }, true);\r\n $scope.populateWithHistorical = function (metric) {\r\n var model = $scope.model[metric.name];\r\n if (model && model.Old) {\r\n model.Value = model.Old.Value;\r\n model.Type = model.Old.Type;\r\n if (metric.onchange) {\r\n $scope.evalMetricFunction(metric.onchange, metric);\r\n }\r\n }\r\n };\r\n $scope.evalMetricFunction = function (functionName) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n if (clinicalMetricFuncs[functionName]) {\r\n return clinicalMetricFuncs[functionName].apply(_this, args);\r\n }\r\n return true;\r\n };\r\n $scope.getTempalte = function (metric) { return \"cm-\" + metric.type + \".html\"; };\r\n }\r\n Controller.factory = function () {\r\n var instance = function () {\r\n var directive = {};\r\n directive.restrict = 'E';\r\n directive.scope = {\r\n metrics: '=',\r\n clinicalMetricsOptions: '='\r\n };\r\n directive.templateUrl = 'screens/components/clinical-metrics/clinical-metrics.html';\r\n directive.controller = Controller;\r\n return directive;\r\n };\r\n return instance;\r\n };\r\n return Controller;\r\n })();\r\n ClinicalMetricsModule.Controller = Controller;\r\n})(ClinicalMetricsModule || (ClinicalMetricsModule = {}));\r\nangular.module('DoctorApp')\r\n .directive('clinicalMetrics', ClinicalMetricsModule.Controller.factory());\r\n/// \r\n/// \r\n/// \r\nvar HomeHeaderModule;\r\n(function (HomeHeaderModule) {\r\n var HomeHeaderController = (function () {\r\n HomeHeaderController.$inject = [\"$rootScope\", \"$scope\", \"practiceService\", \"storageService\", \"locationService\", \"showDialog\", \"$window\", \"$routeParams\", \"providerService\"];\r\n function HomeHeaderController($rootScope, $scope, practiceService, storageService, locationService, showDialog, $window, $routeParams, providerService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.practiceService = practiceService;\r\n this.storageService = storageService;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.$window = $window;\r\n this.$routeParams = $routeParams;\r\n this.providerService = providerService;\r\n if (angular.isUndefined($rootScope.isClinical)) {\r\n practiceService.updateLocalPractice($routeParams.practiceId);\r\n }\r\n this.init();\r\n $scope.displayNetworkStatus = GlobalVar.displayNetworkStatus;\r\n $scope.user = storageService.getUser();\r\n $scope.today = new Date();\r\n $scope.goToClinicalMessageCenter = function () {\r\n locationService.goToClinicalMessageCenter($routeParams.practiceId);\r\n };\r\n $scope.goToPowerBi = function () {\r\n var practiceId = $routeParams.practiceId;\r\n locationService.goToPowerBi(practiceId);\r\n };\r\n $scope.goToPatientVisits = function () {\r\n locationService.goToPatientVisits($routeParams.practiceId);\r\n };\r\n $scope.refreshPage = function () {\r\n $window.location.reload();\r\n };\r\n $scope.goToAccount = function () {\r\n if (_this.$scope.user.userId) {\r\n _this.locationService.goToAccount($routeParams.practiceId, _this.$scope.user.userId);\r\n }\r\n else {\r\n _this.showDialog.error(\"Please logout and login again into system to open this page.\");\r\n }\r\n };\r\n }\r\n HomeHeaderController.prototype.init = function () {\r\n var _this = this;\r\n var practiceId = this.$routeParams.practiceId;\r\n this.providerService.getProviderOptions(practiceId)\r\n .then(function (options) {\r\n _this.$scope.isPowerBIEnabled = options.isPowerBIEnabled;\r\n });\r\n };\r\n return HomeHeaderController;\r\n })();\r\n HomeHeaderModule.HomeHeaderController = HomeHeaderController;\r\n})(HomeHeaderModule || (HomeHeaderModule = {}));\r\nangular.module('DoctorApp')\r\n .directive('homeHeader', function () {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'screens/components/home-header/home-header.html',\r\n controller: HomeHeaderModule.HomeHeaderController\r\n };\r\n});\r\n/// \r\nvar ModalModule;\r\n(function (ModalModule) {\r\n var CellPhoneController = (function () {\r\n CellPhoneController.$inject = [\"$scope\", \"modalService\", \"$modalInstance\", \"model\"];\r\n function CellPhoneController($scope, modalService, $modalInstance, model) {\r\n \"ngInject\";\r\n $scope.openCellPhoneDialog = function () {\r\n modalService.openNumbers('cellphone', 'Enter cellphone')\r\n .then(function (cellPhone) {\r\n if (cellPhone) {\r\n $scope.model = cellPhone;\r\n }\r\n });\r\n };\r\n $scope.ok = function () {\r\n if ($scope.model) {\r\n $modalInstance.close($scope.model);\r\n }\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss();\r\n };\r\n $scope.model = \"\";\r\n }\r\n return CellPhoneController;\r\n })();\r\n ModalModule.CellPhoneController = CellPhoneController;\r\n})(ModalModule || (ModalModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('CellPhoneController', ModalModule.CellPhoneController);\r\n/// \r\n/// \r\n/// \r\nvar ModalModule;\r\n(function (ModalModule) {\r\n var ModalController = (function () {\r\n ModalController.$inject = [\"$scope\", \"$modalInstance\", \"model\"];\r\n function ModalController($scope, $modalInstance, model) {\r\n \"ngInject\";\r\n $scope.labels = model && model.labels || ['Ok', 'Cancel'];\r\n $scope.ok = function () {\r\n $modalInstance.close($scope.model);\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss();\r\n };\r\n $scope.yes = function () {\r\n $modalInstance.close(true);\r\n };\r\n $scope.no = function () {\r\n $modalInstance.close(false);\r\n };\r\n $scope.close = function () {\r\n $modalInstance.dismiss();\r\n };\r\n $scope.model = model;\r\n }\r\n return ModalController;\r\n })();\r\n ModalModule.ModalController = ModalController;\r\n})(ModalModule || (ModalModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ModalController', ModalModule.ModalController);\r\n/// \r\n/// \r\n/// \r\nvar ModalModule;\r\n(function (ModalModule) {\r\n var ModalInstanceController = (function () {\r\n ModalInstanceController.$inject = [\"$scope\", \"$sce\", \"$modalInstance\", \"$q\", \"$routeParams\", \"$timeout\", \"dialogService\", \"modalService\", \"controller\", \"usageService\", \"patientService\", \"billingDomain\", \"encounterServiceNew\", \"$compile\"];\r\n function ModalInstanceController($scope, $sce, $modalInstance, $q, $routeParams, $timeout, dialogService, modalService, controller, usageService, patientService, billingDomain, encounterServiceNew, $compile) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$sce = $sce;\r\n this.$modalInstance = $modalInstance;\r\n this.$q = $q;\r\n this.$routeParams = $routeParams;\r\n this.$timeout = $timeout;\r\n this.dialogService = dialogService;\r\n this.modalService = modalService;\r\n this.controller = controller;\r\n this.usageService = usageService;\r\n this.patientService = patientService;\r\n this.billingDomain = billingDomain;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.$compile = $compile;\r\n $scope.ok = function () {\r\n $modalInstance.close($scope.model);\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss('cancel');\r\n };\r\n $scope.download = function (attachment) {\r\n if (controller.model.pdfListener) {\r\n controller.model.pdfListener(attachment.HtmlBody);\r\n }\r\n };\r\n $scope.sendEmail = function () {\r\n var that = _this;\r\n $q.all([\r\n that.patientService.getPatientById($routeParams.practiceId, $scope.model.patientId),\r\n that.billingDomain.getProvider(_this.$routeParams.practiceId)\r\n ])\r\n .then(function (response) {\r\n var patient = response[0];\r\n var provider = response[1];\r\n _this.sendReportByEmail(patient, provider);\r\n });\r\n };\r\n $scope.print = function () {\r\n if (controller.model.receipt) {\r\n _this.printRecept(controller.model.receipt.body);\r\n }\r\n else {\r\n _this.printData('report-frame');\r\n }\r\n };\r\n $scope.model = controller.model;\r\n $scope.config = controller.config;\r\n $scope.title = controller.config.title;\r\n $scope.displayDownload = controller.model.pdfListener != null;\r\n $scope.displaySend = $scope.model.patientId != null;\r\n $scope.attachments = [];\r\n var observeCrossMessage = function (e) {\r\n if (typeof e.data === \"string\" && (e.data.search(/([\\w\\d]+-){4}[\\w\\d]+/) >= 0) || e.data === 'null') {\r\n var message = e.data;\r\n if (message === 'null') {\r\n $scope.cancel();\r\n }\r\n else {\r\n $modalInstance.close(e.data);\r\n }\r\n window.removeEventListener(\"message\", observeCrossMessage);\r\n }\r\n };\r\n var url = controller.config.url;\r\n var body;\r\n if (controller.model.type === EncounterModule.ReportType.All) {\r\n var prescriptionReport = controller.model.templateBodies[0];\r\n var sicknoteReport = controller.model.templateBodies[1];\r\n body = encounterServiceNew.mergeReports(prescriptionReport, sicknoteReport);\r\n $scope.attachments = [\r\n {\r\n Title: \"Prescription report\",\r\n Type: \"Prescription\",\r\n HtmlBody: controller.model.templateBodies[0]\r\n },\r\n {\r\n Title: \"Medical Certificate Report\",\r\n Type: \"Medical Certificate\",\r\n HtmlBody: controller.model.templateBodies[1]\r\n }\r\n ];\r\n }\r\n else {\r\n body = controller.model.templateBodies && controller.model.templateBodies[0];\r\n if (body) {\r\n $scope.attachments.push({\r\n Title: controller.config.title,\r\n Type: controller.config.title.replace(' report', ''),\r\n HtmlBody: controller.model.templateBodies[0]\r\n });\r\n }\r\n }\r\n if (url) {\r\n if ($scope.model.captureHealthDoc) {\r\n this.injectHtmlByOutUrl(url);\r\n window.addEventListener(\"message\", observeCrossMessage, false);\r\n }\r\n else {\r\n this.injectHtmlByUrl(url);\r\n }\r\n }\r\n if (body) {\r\n this.injectHtmlIntoReport(body);\r\n }\r\n $scope.$on('$routeChangeStart', function () {\r\n $modalInstance.close();\r\n });\r\n }\r\n ModalInstanceController.prototype.sendReportByEmail = function (patient, provider) {\r\n this.modalService.sendReportByEmail(patient, provider, this.$scope.attachments, \"Documents from \" + provider.PracticeName);\r\n };\r\n ModalInstanceController.prototype.injectHtmlByOutUrl = function (url) {\r\n this.$scope.link = this.$sce.trustAsResourceUrl(url);\r\n var template = '';\r\n this.appendTemplate(template);\r\n };\r\n ModalInstanceController.prototype.injectHtmlByUrl = function (url) {\r\n var _this = this;\r\n this.dialogService.loadTemplate(url)\r\n .then(function (template) {\r\n _this.appendTemplate(template);\r\n });\r\n };\r\n ModalInstanceController.prototype.appendTemplate = function (template) {\r\n var linkFn = this.$compile(template);\r\n var e = linkFn(this.$scope);\r\n this.$timeout(function () {\r\n var container = $('#modal-body');\r\n container.append(e);\r\n }, 100);\r\n };\r\n ModalInstanceController.prototype.injectHtmlIntoReport = function (html) {\r\n var _this = this;\r\n var template = '';\r\n this.$timeout(function () {\r\n var container = angular.element(document)\r\n .find(\"#modal-body\");\r\n container.append(template);\r\n _this.$timeout(function () {\r\n var reportIframe = angular.element(document).find(\"#report-frame\");\r\n if (html.indexOf('') > -1) {\r\n reportIframe.contents()\r\n .find('head')\r\n .append(html.slice(html.indexOf('') + 6, html.indexOf('')));\r\n }\r\n if (html.indexOf('') > -1) {\r\n reportIframe.contents()\r\n .find('body')\r\n .append(html.slice(html.indexOf('') + 6, html.indexOf('')));\r\n }\r\n else {\r\n reportIframe.contents()\r\n .find('body')\r\n .append(html);\r\n }\r\n var contentHeight = reportIframe.contents().find('body').height();\r\n var reportPadding = 60;\r\n var containerPadding = reportPadding + 20;\r\n container.height(contentHeight + containerPadding + 'px');\r\n reportIframe.height(contentHeight + reportPadding + 'px');\r\n });\r\n });\r\n };\r\n ModalInstanceController.prototype.printRecept = function (body) {\r\n var mywindow = window.open('', 'my div', 'height=400,width=200');\r\n mywindow.document.open();\r\n mywindow.document.write(body);\r\n mywindow.document.close();\r\n mywindow.focus();\r\n mywindow.print();\r\n mywindow.close();\r\n };\r\n ModalInstanceController.prototype.printData = function (frame) {\r\n var iframe = document.getElementById(frame);\r\n if (iframe && iframe.contentDocument) {\r\n var mywindow = window.open('', 'my div', 'height=500,width=750');\r\n var head = '' + iframe.contentDocument.getElementsByTagName('head')[0].innerHTML + '';\r\n var body = '' + iframe.contentDocument.getElementsByTagName('body')[0].innerHTML + '';\r\n mywindow.document.open();\r\n mywindow.document.write(head);\r\n mywindow.document.write(body);\r\n this.$timeout(function () {\r\n mywindow.document.close();\r\n mywindow.focus();\r\n mywindow.print();\r\n mywindow.close();\r\n }, 100);\r\n }\r\n };\r\n return ModalInstanceController;\r\n })();\r\n ModalModule.ModalInstanceController = ModalInstanceController;\r\n})(ModalModule || (ModalModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ModalInstanceController', ModalModule.ModalInstanceController);\r\nvar NotificationModule;\r\n(function (NotificationModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"model\", \"$scope\", \"$modalInstance\", \"$timeout\", \"$compile\", \"notificationService\", \"clinicalDomain\", \"$routeParams\"];\r\n function Controller(model, $scope, $modalInstance, $timeout, $compile, notificationService, clinicalDomain, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$modalInstance = $modalInstance;\r\n this.$timeout = $timeout;\r\n this.$compile = $compile;\r\n this.notificationService = notificationService;\r\n this.clinicalDomain = clinicalDomain;\r\n this.$routeParams = $routeParams;\r\n $scope.ok = function () {\r\n _this.close();\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss('cancel');\r\n };\r\n $scope.doAction = function (action) {\r\n _this.parseAction(action);\r\n };\r\n this.init(model);\r\n }\r\n Controller.prototype.init = function (model) {\r\n this.$scope.model = model;\r\n var body = this.$scope.model.notification.Body;\r\n var linkFn = this.$compile(body);\r\n var e = linkFn(this.$scope);\r\n this.$timeout(function () {\r\n var container = $('#modal-body');\r\n container.append(e);\r\n });\r\n };\r\n Controller.prototype.parseAction = function (action) {\r\n switch (action.Name) {\r\n case \"Invite Doctor\":\r\n this.notificationService.inviteDoctor(this.$routeParams.practiceId);\r\n break;\r\n }\r\n this.notificationService.notificationAction(this.$routeParams.practiceId, this.$scope.model.notification.NotificationId, action);\r\n };\r\n Controller.prototype.close = function () {\r\n var _this = this;\r\n var notification = this.$scope.model.notification;\r\n this.notificationService.markNotificationViewed(notification.ProviderId, notification.NotificationId)\r\n .then(function () {\r\n _this.$modalInstance.close(_this.$scope.model);\r\n });\r\n };\r\n return Controller;\r\n })();\r\n NotificationModule.Controller = Controller;\r\n})(NotificationModule || (NotificationModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('NotificationController', NotificationModule.Controller);\r\n/// \r\nvar ModalModule;\r\n(function (ModalModule) {\r\n var NumbersController = (function () {\r\n NumbersController.$inject = [\"$scope\", \"$modalInstance\", \"controller\", \"$filter\"];\r\n function NumbersController($scope, $modalInstance, controller, $filter) {\r\n \"ngInject\";\r\n var that = this;\r\n $scope.text = controller.number || '';\r\n $scope.title = controller.title;\r\n $scope.type = controller.type;\r\n $scope.useZerro = controller.useZerro;\r\n console.warn('Key code move to service. Numbers.ModalModule');\r\n var keyCodes = [\r\n { val: \"0\", keyCode: 96 },\r\n { val: \"1\", keyCode: 97 },\r\n { val: \"2\", keyCode: 98 },\r\n { val: \"3\", keyCode: 99 },\r\n { val: \"4\", keyCode: 100 },\r\n { val: \"5\", keyCode: 101 },\r\n { val: \"6\", keyCode: 102 },\r\n { val: \"7\", keyCode: 103 },\r\n { val: \"8\", keyCode: 104 },\r\n { val: \"9\", keyCode: 105 },\r\n { val: \"enter\", keyCode: 13 },\r\n { val: \"backspace\", keyCode: 8 },\r\n { val: \"escape\", keyCode: 27 },\r\n { val: \"0\", keyCode: 48 },\r\n { val: \"1\", keyCode: 49 },\r\n { val: \"2\", keyCode: 50 },\r\n { val: \"3\", keyCode: 51 },\r\n { val: \"4\", keyCode: 52 },\r\n { val: \"5\", keyCode: 53 },\r\n { val: \"6\", keyCode: 54 },\r\n { val: \"7\", keyCode: 55 },\r\n { val: \"8\", keyCode: 56 },\r\n { val: \"9\", keyCode: 57 }\r\n ];\r\n if ($scope.type == \"decimal\") {\r\n keyCodes.push({ val: \".\", keyCode: 190 }, { val: \".\", keyCode: 110 });\r\n }\r\n var parseKeyCode = function (code) {\r\n var search = $filter('filter')(keyCodes, { keyCode: code }, true);\r\n if (search.length == 0)\r\n return false;\r\n return search[0].val;\r\n };\r\n $scope.ok = function () {\r\n if (that.isValidValue($scope.type, $scope.text, $scope.useZerro)) {\r\n $modalInstance.close(that.typeConverting($scope.type, $scope.text));\r\n }\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss('cancel');\r\n };\r\n $scope.delete = function () {\r\n $scope.text = (('' + $scope.text).length > 0) ? ('' + $scope.text).substr(0, ('' + $scope.text).length - 1) : '' + $scope.text;\r\n };\r\n $scope.clickButton = function (char) {\r\n var limit = that.getInputLimit($scope.type);\r\n if ($scope.text.length < limit) {\r\n $scope.text += char;\r\n }\r\n if ($scope.type !== 'cellphone' && $scope.text.length === 2 && $scope.text.charAt(1) !== '.' && $scope.text.charAt(0) === '0') {\r\n }\r\n var pointsInText = $scope.text.match(/\\./g);\r\n $scope.text = pointsInText && pointsInText.length > 1 ? $scope.text.replace(/\\.$/, '') : $scope.text;\r\n };\r\n $scope.clear = function () {\r\n $scope.text = '';\r\n };\r\n $scope.keyDown = function (event) {\r\n var code = event.keyCode;\r\n event.preventDefault();\r\n var value = parseKeyCode(code);\r\n if (!value)\r\n return false;\r\n if (value.length == 1) {\r\n $scope.clickButton(value);\r\n }\r\n else {\r\n switch (value) {\r\n case \"enter\":\r\n $scope.ok();\r\n break;\r\n case \"backspace\":\r\n $scope.delete();\r\n break;\r\n case \"escape\":\r\n $scope.cancel();\r\n break;\r\n }\r\n }\r\n };\r\n }\r\n NumbersController.prototype.isValidValue = function (type, value, useZerro) {\r\n switch (type) {\r\n case \"cellphone\":\r\n return (value !== '');\r\n case \"int\":\r\n case \"decimal\":\r\n return ((value !== '') && (useZerro || '' + (value).substr(0) !== '0') && ('' + (value).substr(0) !== '0.'));\r\n }\r\n return true;\r\n };\r\n NumbersController.prototype.typeConverting = function (type, value) {\r\n switch (type) {\r\n case \"cellphone\":\r\n return String(value);\r\n case \"int\":\r\n case \"decimal\":\r\n return Number(value);\r\n }\r\n return true;\r\n };\r\n NumbersController.prototype.getInputLimit = function (type) {\r\n switch (type) {\r\n case \"cellphone\":\r\n return 10;\r\n case \"int\":\r\n break;\r\n case \"decimal\":\r\n return 12;\r\n }\r\n return 13;\r\n };\r\n return NumbersController;\r\n })();\r\n ModalModule.NumbersController = NumbersController;\r\n})(ModalModule || (ModalModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('NumbersController', ModalModule.NumbersController);\r\n/// \r\n/// \r\n/// \r\nvar PeriodModule;\r\n(function (PeriodModule) {\r\n var Link = (function () {\r\n function Link(scope, element, attrs) {\r\n this.scope = scope;\r\n Link.init(scope);\r\n scope.changeDate = function (isFirst) {\r\n };\r\n }\r\n Link.init = function (scope) {\r\n scope.configFrom = new DatePickerModule.Config();\r\n scope.configFrom.format = scope.config.format;\r\n scope.configTo = new DatePickerModule.Config();\r\n scope.configTo.format = scope.config.format;\r\n };\r\n Link.updateMaxMin = function (scope) {\r\n scope.configTo.min = scope.from;\r\n scope.configFrom.max = scope.to;\r\n };\r\n return Link;\r\n })();\r\n PeriodModule.Link = Link;\r\n var Directive = (function () {\r\n function Directive() {\r\n this.scope = {\r\n from: '=',\r\n to: '=',\r\n config: '=',\r\n change: '&'\r\n };\r\n this.template = '
' +\r\n '
' +\r\n 'From' +\r\n '' +\r\n '
' +\r\n '
' +\r\n 'To' +\r\n '' +\r\n '
' +\r\n '
';\r\n this.restrict = 'E';\r\n this.link = Link;\r\n }\r\n Directive.factory = function () {\r\n return function () {\r\n return new Directive();\r\n };\r\n };\r\n return Directive;\r\n })();\r\n PeriodModule.Directive = Directive;\r\n})(PeriodModule || (PeriodModule = {}));\r\nangular.module('DoctorApp')\r\n .directive('period', PeriodModule.Directive.factory());\r\n/// \r\nangular.module('DoctorApp')\r\n .directive('scrollTable', [function () {\r\n return {\r\n restrict: 'A',\r\n compile: function compile(tElement, tAttributes) {\r\n var thead = tElement.find('thead');\r\n var tbody = tElement.find('tbody');\r\n var wrapper = angular.element('
');\r\n var tableBody = angular.element('
');\r\n tableBody.append(tbody);\r\n wrapper.append(tableBody);\r\n tElement.remove('tbody');\r\n tElement.after(wrapper);\r\n }\r\n };\r\n }]);\r\n/// \r\n/// \r\nvar SearchPanelModule;\r\n(function (SearchPanelModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"showDialog\"];\r\n function Controller($scope, showDialog) {\r\n \"ngInject\";\r\n $scope.model = {\r\n searchText: $scope.config.searchText || '',\r\n isLoading: false\r\n };\r\n $scope.list = [];\r\n $scope.changeSearch = function (isButton) {\r\n var text = $scope.model.searchText;\r\n if (text && text.length) {\r\n var promise = $scope.onChange(text);\r\n if (promise) {\r\n $scope.model.isLoading = true;\r\n promise.then(function () {\r\n $scope.model.isLoading = false;\r\n });\r\n }\r\n }\r\n else if (isButton) {\r\n showDialog.error(\"Please enter at least one character into search field.\");\r\n }\r\n };\r\n if ($scope.model.searchText.length > 0) {\r\n $scope.changeSearch(false);\r\n }\r\n $scope.selectItem = function (object) {\r\n if (!$scope.config.notClearField) {\r\n $scope.model.searchText = '';\r\n }\r\n $scope.config.searchText = $scope.model.searchText;\r\n $scope.onSelect(object);\r\n };\r\n $scope.selectLineItem = function (object) {\r\n if ($scope.config.lineClick) {\r\n $scope.selectItem(object);\r\n }\r\n };\r\n }\r\n return Controller;\r\n })();\r\n SearchPanelModule.Controller = Controller;\r\n})(SearchPanelModule || (SearchPanelModule = {}));\r\nangular.module('DoctorApp')\r\n .directive('searchPanel', function () {\r\n return {\r\n restrict: 'E',\r\n transclude: true,\r\n scope: {\r\n config: '=',\r\n list: '=',\r\n onChange: '=',\r\n onSelect: '='\r\n },\r\n link: function (scope, element, attrs) {\r\n scope.$watch('list', function () {\r\n for (var _i = 0, _a = scope.list; _i < _a.length; _i++) {\r\n var row = _a[_i];\r\n for (var _b = 0, _c = row.fields; _b < _c.length; _b++) {\r\n var cell = _c[_b];\r\n if (cell.value === EncounterModule.Controller.ALLOWED) {\r\n cell.value = '';\r\n }\r\n else if (cell.value === EncounterModule.Controller.NOT_ALLOWED || cell.value === EncounterModule.Controller.NOT_APPLICABLE) {\r\n cell.value = '';\r\n }\r\n }\r\n }\r\n });\r\n },\r\n templateUrl: 'screens/components/search-panel/search-panel.html',\r\n controller: SearchPanelModule.Controller\r\n };\r\n});\r\n/// \r\nvar summaryPanel;\r\n(function (summaryPanel) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$filter\"];\r\n function Controller($scope, $filter) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$filter = $filter;\r\n }\r\n Controller.factory = function () {\r\n var instance = function () {\r\n var directive = {};\r\n directive.restrict = 'E';\r\n directive.scope = {\r\n lineItems: '=',\r\n };\r\n directive.templateUrl = 'screens/components/summary-panel/summary-panel.html';\r\n directive.controller = Controller;\r\n return directive;\r\n };\r\n return instance;\r\n };\r\n return Controller;\r\n })();\r\n summaryPanel.Controller = Controller;\r\n})(summaryPanel || (summaryPanel = {}));\r\nangular.module('DoctorApp')\r\n .directive('summaryPanel', summaryPanel.Controller.factory());\r\nvar TemplateModule;\r\n(function (TemplateModule) {\r\n var GroupTemplate = (function () {\r\n function GroupTemplate(name, path, icon, allowParam) {\r\n this.name = name;\r\n this.path = path;\r\n this.icon = icon;\r\n this.allowParam = allowParam;\r\n }\r\n return GroupTemplate;\r\n })();\r\n TemplateModule.GroupTemplate = GroupTemplate;\r\n var SubGroup = (function () {\r\n function SubGroup(Caption, SortOrder, templates) {\r\n this.Caption = Caption;\r\n this.SortOrder = SortOrder;\r\n this.templates = templates;\r\n }\r\n return SubGroup;\r\n })();\r\n TemplateModule.SubGroup = SubGroup;\r\n var Group = (function () {\r\n function Group() {\r\n }\r\n return Group;\r\n })();\r\n TemplateModule.Group = Group;\r\n var TemplatePanelService = (function () {\r\n TemplatePanelService.$inject = [\"$filter\"];\r\n function TemplatePanelService($filter) {\r\n \"ngInject\";\r\n this.$filter = $filter;\r\n }\r\n TemplatePanelService.prototype.mixTemplateAndSubGroups = function (templs, type) {\r\n var templatesCopy = angular.copy(templs);\r\n var typedTemplates = templatesCopy.filter(function (template) { return template.TemplateType === type; });\r\n var templates = typedTemplates.filter(function (template) { return template.Caption && template.Caption.indexOf('|') === -1; });\r\n var subGroups = this.buildSubGroups(typedTemplates);\r\n for (var _i = 0; _i < subGroups.length; _i++) {\r\n var sgroup = subGroups[_i];\r\n templates.push(sgroup);\r\n }\r\n return templates;\r\n };\r\n TemplatePanelService.prototype.buildSubGroups = function (templates) {\r\n var subGroupName = 0;\r\n var subItemName = 1;\r\n var subGroups = [];\r\n templates = this.$filter('filter')(templates, function (value) {\r\n var caption = '';\r\n if (value.Caption && value.Caption.indexOf('|') > 0) {\r\n caption = value.Caption;\r\n }\r\n return caption;\r\n }, true);\r\n templates = this.$filter('orderBy')(templates, '-SortOrder', true);\r\n for (var _i = 0; _i < templates.length; _i++) {\r\n var template = templates[_i];\r\n var captionItems = this.getCaptionItems(template.Caption);\r\n var subGroup = this.getSubGroupByCaption(captionItems[subGroupName], subGroups);\r\n if (!subGroup || subGroup.Caption !== captionItems[subGroupName]) {\r\n subGroup = new SubGroup(captionItems[subGroupName], template.SortOrder, []);\r\n subGroup.TemplateType = template.TemplateType;\r\n subGroups.push(subGroup);\r\n }\r\n template.Caption = captionItems[subItemName];\r\n subGroup.templates.push(template);\r\n }\r\n return subGroups;\r\n };\r\n TemplatePanelService.prototype.getSubGroupByCaption = function (caption, subGroups) {\r\n for (var _i = 0; _i < subGroups.length; _i++) {\r\n var subGroup = subGroups[_i];\r\n if (subGroup.Caption === caption) {\r\n return subGroup;\r\n }\r\n }\r\n return null;\r\n };\r\n TemplatePanelService.prototype.getCaptionItems = function (caption) {\r\n var clearCaption = caption.replace(' | ', '|').replace('| ', '|').replace(' |', '|');\r\n return clearCaption.split('|');\r\n };\r\n return TemplatePanelService;\r\n })();\r\n TemplateModule.TemplatePanelService = TemplatePanelService;\r\n})(TemplateModule || (TemplateModule = {}));\r\nangular.module('DoctorApp')\r\n .service('templatePanelService', TemplateModule.TemplatePanelService);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar InvoiceModule;\r\n(function (InvoiceModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$rootScope\", \"$routeParams\", \"locationService\", \"invoiceService\", \"practiceService\", \"patientService\", \"invoiceTemplateService\", \"searchService\", \"showDialog\", \"$timeout\", \"$log\", \"$filter\", \"$q\", \"moment\", \"encounterServiceNew\", \"modalService\"];\r\n function Controller($scope, $rootScope, $routeParams, locationService, invoiceService, practiceService, patientService, invoiceTemplateService, searchService, showDialog, $timeout, $log, $filter, $q, moment, encounterServiceNew, modalService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.locationService = locationService;\r\n this.invoiceService = invoiceService;\r\n this.practiceService = practiceService;\r\n this.patientService = patientService;\r\n this.invoiceTemplateService = invoiceTemplateService;\r\n this.searchService = searchService;\r\n this.showDialog = showDialog;\r\n this.$timeout = $timeout;\r\n this.$log = $log;\r\n this.$filter = $filter;\r\n this.$q = $q;\r\n this.moment = moment;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.modalService = modalService;\r\n $scope.selectTemplate = function (template) {\r\n invoiceService.addTemplateToEvent($scope.invoice, template);\r\n };\r\n $scope.selectHospital = function () {\r\n invoiceService.mergeHospital($scope.invoice);\r\n };\r\n $scope.isNotAuxiliary = function () {\r\n var auxPractices = [\"086\", \"089\"];\r\n var invoice = $scope.invoice;\r\n if (invoice && invoice.Provider) {\r\n return auxPractices.indexOf(invoice.Provider.SpecialityCode) == -1;\r\n }\r\n return false;\r\n };\r\n $scope.removeDiagnosis = function (diagnosis) {\r\n invoiceService.removeDiagnosisFromInvoice($scope.invoice, diagnosis);\r\n };\r\n $scope.removeLine = function (line) {\r\n invoiceService.removeLineItemFromInvoice($scope.invoice, line);\r\n };\r\n $scope.togglePrimaryDiagnosis = function (index) {\r\n var diagnoses = $scope.invoice.InvoiceLineItems.InvoiceHeader.Diagnosis;\r\n for (var i = 0; i < diagnoses.length; i++) {\r\n diagnoses[i].PrimaryIndicator = false;\r\n }\r\n diagnoses[index].PrimaryIndicator = true;\r\n };\r\n $scope.selectPatient = function () {\r\n var patientId = $scope.invoice.PatientEventDetails.Patient.PatientId;\r\n locationService.goToChangePatient($routeParams.practiceId, patientId);\r\n };\r\n var setupHospitalIndicator = this.setupInvoice;\r\n $scope.submitInvoice = function () {\r\n setupHospitalIndicator($scope.invoice.InvoiceLineItems.InvoiceHeader, $scope);\r\n $scope.invoiceSent = true;\r\n $rootScope.showProgressScreen = true;\r\n $timeout(function () {\r\n invoiceService.submitInvoice($scope.invoice)\r\n .then(function (response) {\r\n $scope.invoiceSent = false;\r\n $rootScope.showProgressScreen = false;\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage, ModalModule.ModalWidth._500px);\r\n }\r\n else {\r\n invoiceService.setConsultationDate(null);\r\n invoiceService.setInvoice(null);\r\n $rootScope.showThankYou = true;\r\n locationService.goToHome($routeParams.practiceId);\r\n }\r\n });\r\n }, 1000);\r\n };\r\n $scope.isDOBValid = function () {\r\n return _this.$scope.invoice && moment(_this.$scope.invoice.PatientEventDetails.Patient.PatientDetails.DateOfBirth) < moment();\r\n };\r\n $scope.changeConsultationDate = function (date) {\r\n var consMoment = moment(new Date(date));\r\n $scope.consultationDate = consMoment.format(Controller.DATE_OUT_PATTERN);\r\n invoiceService.setConsultationDate(consMoment);\r\n };\r\n $scope.showQuantityCalc = function (i, type) {\r\n var item = $filter('filter')($scope.invoice.InvoiceLineItems.LineItems, { LineType: type })[i];\r\n modalService.openNumbers('int', 'Enter quantity')\r\n .then(function (quantity) {\r\n if (quantity) {\r\n item.ChargeQuan = quantity;\r\n }\r\n });\r\n };\r\n $scope.clickWarning = function () {\r\n showDialog.warning($scope.specificRule);\r\n };\r\n this.init();\r\n }\r\n Controller.prototype.setupInvoice = function (invoiceHeader, $scope) {\r\n var date = this.moment($scope.consultationDate, Controller.DATE_OUT_PATTERN);\r\n if (!date.isValid()) {\r\n this.$log.error('Date[' + $scope.consultationDate + '] not valid');\r\n date = this.moment();\r\n }\r\n if (invoiceHeader.HospitalIndicator) {\r\n $scope.invoice.InvoiceLineItems.InvoiceHeader.AdmissionDateTime = date.hours(12).minutes(0).format();\r\n $scope.invoice.InvoiceLineItems.InvoiceHeader.DischargeDateTime = date.hours(13).minutes(0).format();\r\n }\r\n invoiceHeader.DateOfService = date.hours(0).format();\r\n };\r\n Controller.prototype.init = function () {\r\n var _this = this;\r\n var that = this;\r\n that.$scope.myTemplates = [];\r\n that.$scope.templates = [];\r\n that.encounterServiceNew.getProvider(this.$routeParams.practiceId)\r\n .then(function (provider) {\r\n return that.encounterServiceNew.getProviderOptions(provider);\r\n })\r\n .then(function (options) {\r\n _this.$scope.controlTemplate = {\r\n selectTemplate: function (template) {\r\n that.$scope.selectTemplate(template);\r\n },\r\n isMedicine: options.isDispensing,\r\n isClinical: false,\r\n isPrescription: false\r\n };\r\n });\r\n that.patientEventId = that.$routeParams.patientVisitId;\r\n that.invoiceTemplateService.loadInvoiceTemplates(this.patientEventId)\r\n .then(function (templates) {\r\n _this.$scope.templates = templates;\r\n _this.$scope.myTemplates = _this.$filter('filter')(templates, { TemplateType: \"MyTemplate\" }, true);\r\n })\r\n .catch(that.catchError);\r\n that.loadInvoice(that.patientEventId)\r\n .then(function (invoice) {\r\n _this.$scope.invoice = invoice;\r\n _this.updateAccount(invoice.PatientEventDetails);\r\n _this.initConsultationDate(invoice);\r\n _this.updatePractice(invoice);\r\n _this.initSaveTemplate();\r\n _this.searchService.eventId = invoice.InvoiceId;\r\n return _this.updateSpecificRules(_this.$routeParams.practiceId, invoice.PatientEventDetails.Patient);\r\n })\r\n .catch(that.catchError);\r\n };\r\n Controller.prototype.updateAccount = function (patientEvent) {\r\n var savePatient = this.$rootScope.selectedPatient;\r\n if (savePatient) {\r\n patientEvent.Patient = savePatient;\r\n }\r\n var patient = patientEvent.Patient;\r\n this.$scope.accountDetails = patient.PatientAccountDetails;\r\n this.$scope.fullName = patient.PatientDetails.FirstName + ' ' + patient.PatientDetails.Surname;\r\n };\r\n Controller.prototype.updateSpecificRules = function (practiceId, patient) {\r\n var _this = this;\r\n var patientId = patient.PatientId;\r\n return this.invoiceService.getSpecificRule(practiceId, patientId)\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n _this.$scope.specificRule = response.Data ? response.Data.Description : null;\r\n }\r\n else {\r\n _this.$log.error(response);\r\n }\r\n });\r\n };\r\n Controller.prototype.initSaveTemplate = function () {\r\n var _this = this;\r\n var that = this;\r\n var selectedTemplate = that.searchService.getSelectedTemplate();\r\n if (selectedTemplate) {\r\n that.invoiceService.addTemplateToEvent(that.$scope.invoice, selectedTemplate)\r\n .then(function () {\r\n _this.searchService.saveSelectedTemplate(null);\r\n })\r\n .catch(that.catchError);\r\n }\r\n };\r\n Controller.prototype.loadInvoice = function (patientEventId) {\r\n var _this = this;\r\n var that = this;\r\n var invoice = that.invoiceService.getInvoice();\r\n if (invoice && invoice.PatientEventDetails.PatientEventId == patientEventId) {\r\n return this.$q.when(invoice);\r\n }\r\n that.invoiceService.setInvoice(null);\r\n that.invoiceService.setConsultationDate(null);\r\n return this.invoiceService.loadInvoice(patientEventId)\r\n .then(function (invoice) {\r\n _this.invoiceService.setInvoice(invoice);\r\n return invoice;\r\n });\r\n };\r\n Controller.prototype.updatePractice = function (invoice) {\r\n var patient = this.$rootScope.selectedPatient;\r\n if (patient) {\r\n invoice.PatientEventDetails.Patient = patient;\r\n this.$rootScope.selectedPatient = null;\r\n }\r\n };\r\n Controller.prototype.initConsultationDate = function (invoice) {\r\n var consDate = this.invoiceService.getConsultationDate();\r\n if (consDate) {\r\n this.$scope.consultationDate = consDate.format(Controller.DATE_OUT_PATTERN);\r\n }\r\n else {\r\n if (invoice && invoice.PatientEventDetails) {\r\n var event = invoice.PatientEventDetails;\r\n var eventDate = event.CheckInTime || event.ScheduledTime;\r\n }\r\n var eventDateMoment = this.moment(eventDate);\r\n var date = eventDateMoment.isValid() ? eventDateMoment : this.moment();\r\n var consultationDate = date.format(Controller.DATE_OUT_PATTERN);\r\n this.invoiceService.setConsultationDate(date);\r\n this.$scope.consultationDate = consultationDate;\r\n }\r\n };\r\n Controller.prototype.catchError = function (error) {\r\n this.$log.error(error);\r\n };\r\n Controller.DATE_OUT_PATTERN = 'D MMMM, YYYY';\r\n return Controller;\r\n })();\r\n InvoiceModule.Controller = Controller;\r\n})(InvoiceModule || (InvoiceModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('InvoiceController', InvoiceModule.Controller);\r\nvar CommunicationModule;\r\n(function (CommunicationModule) {\r\n var CommunicationTemplatesController = (function () {\r\n CommunicationTemplatesController.$inject = [\"model\", \"$scope\", \"modalService\", \"$modalInstance\"];\r\n function CommunicationTemplatesController(model, $scope, modalService, $modalInstance) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.modalService = modalService;\r\n this.$modalInstance = $modalInstance;\r\n $scope.templates = model.templates;\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss('cancel');\r\n };\r\n $scope.addTemplate = function (template) {\r\n $modalInstance.close(template);\r\n };\r\n }\r\n return CommunicationTemplatesController;\r\n })();\r\n CommunicationModule.CommunicationTemplatesController = CommunicationTemplatesController;\r\n})(CommunicationModule || (CommunicationModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('CommunicationTemplatesController', CommunicationModule.CommunicationTemplatesController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar ModalModule;\r\n(function (ModalModule) {\r\n var KeyValue = (function () {\r\n function KeyValue(init) {\r\n Object.assign(this, init);\r\n }\r\n return KeyValue;\r\n })();\r\n var EmailReportController = (function () {\r\n EmailReportController.$inject = [\"$scope\", \"model\", \"$rootScope\", \"$sce\", \"$modalInstance\", \"$routeParams\", \"modalService\", \"usageService\", \"storageService\", \"addressBookService\", \"clinicalDomain\", \"$compile\"];\r\n function EmailReportController($scope, model, $rootScope, $sce, $modalInstance, $routeParams, modalService, usageService, storageService, addressBookService, clinicalDomain, $compile) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.model = model;\r\n this.$rootScope = $rootScope;\r\n this.$sce = $sce;\r\n this.$modalInstance = $modalInstance;\r\n this.$routeParams = $routeParams;\r\n this.modalService = modalService;\r\n this.usageService = usageService;\r\n this.storageService = storageService;\r\n this.addressBookService = addressBookService;\r\n this.clinicalDomain = clinicalDomain;\r\n this.$compile = $compile;\r\n $scope.body = \"Hi \" +\r\n model.patient.PatientDetails.FirstName +\r\n \" \" +\r\n model.patient.PatientDetails.Surname +\r\n \",

\" +\r\n \"Please find attached your\" +\r\n model.attachments.map(function (attachment) { return \" \" + attachment.Type; }) +\r\n \".

\" +\r\n \"Should you have any queries, please contact \" +\r\n model.provider.PracticeName +\r\n \" on \" +\r\n model.provider.ContactNumber +\r\n \".

\" +\r\n \"Thank you,
\" +\r\n model.provider.TreatingDoctorName;\r\n clinicalDomain.getProviderById(this.$routeParams.practiceId).then(function (p) {\r\n $scope.doctorEmail = p.EmailAddress;\r\n $scope.changeSendTo();\r\n });\r\n $scope.send = function (isValid) {\r\n if (isValid) {\r\n model.subject = $scope.subject;\r\n model.body = $scope.body;\r\n $rootScope.showWaitingScreen = true;\r\n var patientId = model.patient.PatientId;\r\n var patientEmail = model.patient.PatientDetails.EmailAddress;\r\n var body = {\r\n Subject: model.subject,\r\n Recipient: $scope.selectedEmails.map(function (elem) { return elem.id; }).join(\",\"),\r\n Body: model.body,\r\n Attachments: model.attachments\r\n };\r\n _this.clinicalDomain.sendCommunicationByEmail(_this.$routeParams.practiceId, patientId, body, true)\r\n .then(function (response) {\r\n $rootScope.showWaitingScreen = false;\r\n if (response.Sucess) {\r\n _this.usageService.sendEmail(_this.$routeParams.practiceId, model.subject, patientEmail, model.body);\r\n $scope.selectedEmails.forEach(function (e) {\r\n var index = Common.getIndexBy($scope.favouriteContacts, \"EmailAddress\", e.id);\r\n if (index > -1) {\r\n _this.usageService.useAddressBook(_this.$routeParams.practiceId, _this.storageService.getUser().userLogin, UsageModule.ActionType.UseContact, _this.$scope.favouriteContacts[index]);\r\n }\r\n });\r\n _this.modalService.info(\"Email was successfully sent.\").then(function (r) {\r\n $modalInstance.close(model);\r\n });\r\n }\r\n else {\r\n _this.modalService.error(\"Failed to send email: \" + response.ResponseMessage);\r\n }\r\n }, function (error) {\r\n $rootScope.showWaitingScreen = false;\r\n _this.modalService.error(\"There was a problem sending the email, please try again. If the problem persists, please contact support.\");\r\n });\r\n }\r\n else {\r\n modalService.error(\"Please provide the required form details.\");\r\n }\r\n };\r\n $scope.openContactSearch = function () {\r\n modalService.openAddressBookSearch().then(function (contact) {\r\n if (contact) {\r\n var item = _this.adaptContact(contact);\r\n if (!$scope.selectedEmails.some(function (i) { return i.id === item.id; })) {\r\n $scope.selectedEmails.push(item);\r\n _this.usageService.useAddressBook(_this.$routeParams.practiceId, _this.storageService.getUser().userLogin, UsageModule.ActionType.UseContact, contact);\r\n }\r\n }\r\n });\r\n ;\r\n };\r\n $scope.changeSendTo = function () {\r\n var patientEmail;\r\n var doctorEmail;\r\n var index;\r\n if (_this.$scope.doctorEmail) {\r\n doctorEmail = new KeyValue({ id: $scope.doctorEmail, name: $scope.doctorEmail });\r\n index = Common.getIndexBy($scope.selectedEmails, \"id\", doctorEmail.id);\r\n if (_this.$scope.sendToMe) {\r\n if (index === -1) {\r\n $scope.selectedEmails.push(doctorEmail);\r\n }\r\n }\r\n else {\r\n if (index > -1) {\r\n $scope.selectedEmails.splice(index, 1);\r\n }\r\n }\r\n }\r\n if (_this.$scope.patientEmail) {\r\n patientEmail = new KeyValue({ id: $scope.patientEmail, name: $scope.patientEmail });\r\n index = Common.getIndexBy($scope.selectedEmails, \"id\", patientEmail.id);\r\n if (_this.$scope.sendToPatient) {\r\n if (index === -1) {\r\n $scope.selectedEmails.push(patientEmail);\r\n }\r\n }\r\n else {\r\n if (index > -1) {\r\n $scope.selectedEmails.splice(index, 1);\r\n }\r\n }\r\n }\r\n };\r\n $scope.addContact = function () {\r\n var container = angular.element(document).find('multiple-autocomplete');\r\n var inputCtrl = container.find('input')[0];\r\n var inputVal = inputCtrl.value;\r\n if (inputVal) {\r\n var newValue = { id: inputVal, name: inputVal };\r\n $scope.selectedEmails.push(newValue);\r\n inputCtrl.value = \"\";\r\n _this.resetSuggestedList();\r\n }\r\n };\r\n $scope.autocompleteKeyUp = function (event) {\r\n var searchvalue = event.target.value;\r\n if (event.keyCode == 13) {\r\n var newValue = { id: searchvalue, name: searchvalue };\r\n $scope.selectedEmails.push(newValue);\r\n event.target.value = \"\";\r\n _this.resetSuggestedList();\r\n }\r\n else {\r\n if (!searchvalue) {\r\n _this.resetSuggestedList();\r\n }\r\n else {\r\n _this.addressBookService.loadPracticeAddressBook(_this.$routeParams.practiceId, searchvalue).then(function (entities) {\r\n $scope.suggestedContacts = entities.map(_this.adaptContact);\r\n });\r\n }\r\n }\r\n };\r\n $scope.tinymceOptions = {\r\n selector: 'textarea',\r\n plugins: 'link table preview',\r\n toolbar: 'undo redo | bold italic | fontsizeselect | bullist numlist outdent indent | alignleft aligncenter alignright | file',\r\n fontsize_formats: '8pt 10pt 12pt 14pt 18pt 24pt 36pt',\r\n skin_url: GlobalVar.isProd ? 'styles/tinymce/skins/lightgray' : '',\r\n visual: false,\r\n browser_spellcheck: true,\r\n contextmenu: false,\r\n statusbar: false,\r\n valid_children: \"+body[style],+body,+head\",\r\n extended_valid_elements: 'body,head',\r\n init_instance_callback: function (editor) {\r\n var contentWraper = $(editor.contentAreaContainer);\r\n var content = $(editor.iframeElement);\r\n var height = content.contents().find('body').height();\r\n var padding = 50;\r\n content.height(height + padding + 'px');\r\n contentWraper.css('max-height', '50vh');\r\n contentWraper.css('overflow', 'auto');\r\n }\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss('cancel');\r\n };\r\n $scope.$on('$routeChangeStart', function () {\r\n $modalInstance.close();\r\n });\r\n this.init();\r\n }\r\n EmailReportController.prototype.init = function () {\r\n this.$scope.suggestedContacts = [];\r\n this.$scope.selectedEmails = [];\r\n this.$scope.sendToMe = true;\r\n this.$scope.sendToPatient = false;\r\n this.$scope.title = \"Send email\";\r\n this.$scope.subject = this.model.emailSubject;\r\n this.$scope.showWarning = this.model.showWarning;\r\n this.$scope.patientEmail = this.model.patient.PatientDetails.EmailAddress;\r\n this.$scope.changeSendTo();\r\n this.loadFavourites();\r\n };\r\n EmailReportController.prototype.resetSuggestedList = function () {\r\n var array = this.$scope.favouriteContacts.map(this.adaptContact);\r\n this.$scope.suggestedContacts = array;\r\n };\r\n EmailReportController.prototype.adaptContact = function (contact) {\r\n var contactName = \"\";\r\n if (contact.Name && contact.OrganizationName) {\r\n contactName = contact.Name + \" \" + contact.Surname + \" (\" + contact.OrganizationName + \")\";\r\n }\r\n else if (contact.OrganizationName) {\r\n contactName = contact.OrganizationName;\r\n }\r\n else {\r\n contactName = contact.Name + \" \" + contact.Surname;\r\n }\r\n return new KeyValue({\r\n id: contact.EmailAddress,\r\n name: contactName\r\n });\r\n };\r\n EmailReportController.prototype.loadFavourites = function () {\r\n var _this = this;\r\n this.addressBookService.loadPracticeAddressBookFavourites(this.$routeParams.practiceId)\r\n .then(function (entities) {\r\n _this.$scope.favouriteContacts = entities;\r\n _this.resetSuggestedList();\r\n });\r\n };\r\n return EmailReportController;\r\n })();\r\n ModalModule.EmailReportController = EmailReportController;\r\n})(ModalModule || (ModalModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('EmailReportController', ModalModule.EmailReportController);\r\nvar LetterEditorModule;\r\n(function (LetterEditorModule) {\r\n var LetterEditorController = (function () {\r\n LetterEditorController.$inject = [\"model\", \"$scope\", \"$window\", \"showDialog\", \"$modalInstance\", \"dashboardService\", \"$routeParams\", \"modalService\"];\r\n function LetterEditorController(model, $scope, $window, showDialog, $modalInstance, dashboardService, $routeParams, modalService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$window = $window;\r\n this.showDialog = showDialog;\r\n this.$modalInstance = $modalInstance;\r\n this.dashboardService = dashboardService;\r\n this.$routeParams = $routeParams;\r\n this.modalService = modalService;\r\n $scope.tinymceModel = model.templateBody || ' ';\r\n $scope.caption = model.communication.Type;\r\n $scope.title = model.communication.Title;\r\n $scope.done = function (isValid) {\r\n if (!isValid) {\r\n return;\r\n }\r\n model.templateBody = $scope.tinymceModel;\r\n model.communication.Title = $scope.title;\r\n $modalInstance.close(model);\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss();\r\n };\r\n $scope.print = function () {\r\n var tinymceModel = $scope.tinymceModel;\r\n modalService.showReportDialog(EncounterModule.ReportType.Communication, [tinymceModel], function (tinymceModel) {\r\n var new_window = _this.$window.open('about:blank', \"_blank\");\r\n _this.dashboardService.reportLinkFromHtmlToPdf($routeParams.practiceId, tinymceModel).then(function (link) {\r\n new_window.location.href = link;\r\n });\r\n }, model.communication.PatientId);\r\n };\r\n $scope.tinymceOptions = {\r\n selector: 'textarea',\r\n plugins: 'link table preview print',\r\n toolbar: 'undo redo | bold italic | fontsizeselect | bullist numlist outdent indent | alignleft aligncenter alignright | file',\r\n fontsize_formats: '8pt 10pt 12pt 14pt 18pt 24pt 36pt',\r\n skin_url: GlobalVar.isProd ? 'styles/tinymce/skins/lightgray' : '',\r\n visual: false,\r\n browser_spellcheck: true,\r\n contextmenu: false,\r\n statusbar: false,\r\n valid_children: \"+body[style],+body,+head\",\r\n extended_valid_elements: 'body,head',\r\n init_instance_callback: function (editor) {\r\n var contentWraper = $(editor.contentAreaContainer);\r\n var content = $(editor.iframeElement);\r\n var height = content.contents().find('body').height();\r\n var padding = 50;\r\n content.height(height + padding + 'px');\r\n contentWraper.css('max-height', '50vh');\r\n contentWraper.css('overflow', 'auto');\r\n }\r\n };\r\n }\r\n return LetterEditorController;\r\n })();\r\n LetterEditorModule.LetterEditorController = LetterEditorController;\r\n})(LetterEditorModule || (LetterEditorModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('LetterEditorController', LetterEditorModule.LetterEditorController);\r\nvar RefferalTemplatesModule;\r\n(function (RefferalTemplatesModule) {\r\n var RefferalTemplatesController = (function () {\r\n RefferalTemplatesController.$inject = [\"model\", \"$scope\", \"modalService\", \"$modalInstance\"];\r\n function RefferalTemplatesController(model, $scope, modalService, $modalInstance) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.modalService = modalService;\r\n this.$modalInstance = $modalInstance;\r\n $scope.templates = model.templates;\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss('cancel');\r\n };\r\n $scope.addTemplate = function (template) {\r\n $modalInstance.close(template);\r\n };\r\n }\r\n return RefferalTemplatesController;\r\n })();\r\n RefferalTemplatesModule.RefferalTemplatesController = RefferalTemplatesController;\r\n})(RefferalTemplatesModule || (RefferalTemplatesModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('RefferalTemplatesController', RefferalTemplatesModule.RefferalTemplatesController);\r\nvar MedicalInsuranceModule;\r\n(function (MedicalInsuranceModule) {\r\n var MedicalInsuranceController = (function () {\r\n MedicalInsuranceController.$inject = [\"model\", \"$modalInstance\", \"$routeParams\", \"$filter\", \"encounterServiceNew\", \"locationService\", \"httpService\", \"patientEventDomain\", \"modalService\", \"$scope\"];\r\n function MedicalInsuranceController(model, $modalInstance, $routeParams, $filter, encounterServiceNew, locationService, httpService, patientEventDomain, modalService, $scope) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.model = model;\r\n this.$modalInstance = $modalInstance;\r\n this.$routeParams = $routeParams;\r\n this.$filter = $filter;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.locationService = locationService;\r\n this.httpService = httpService;\r\n this.patientEventDomain = patientEventDomain;\r\n this.modalService = modalService;\r\n this.$scope = $scope;\r\n $scope.title = \"Medical insurance details\";\r\n $scope.medicalInsurerXRef = model.encounter.MedicalInsurance\r\n && model.encounter.MedicalInsurance.MedicalInsurer\r\n && model.encounter.MedicalInsurance.MedicalInsurer.InsurerXRef;\r\n $scope.medicalInsurance = angular.copy(model.encounter.MedicalInsurance) || {\r\n MedicalInsurer: null,\r\n Broker: \"\",\r\n PolicyNo: \"\",\r\n PatientIdentityNo: \"\"\r\n };\r\n $scope.openNumberDialog = function () {\r\n modalService.openNumbers('int', 'Enter number', null, $scope.medicalInsurance.PatientIdentityNo)\r\n .then(function (patientIdentityNo) {\r\n if (patientIdentityNo) {\r\n $scope.medicalInsurance.PatientIdentityNo = patientIdentityNo.toString();\r\n }\r\n });\r\n };\r\n $scope.selectMedicalInsurer = function (medicalInsurerId) {\r\n $scope.medicalInsurance.MedicalInsurer = _this.getMedicalInsurerByXref(medicalInsurerId);\r\n };\r\n $scope.editPatientIdentityNo = function () {\r\n var patientId = model.encounter.PatientEventDetails.Patient.PatientId;\r\n model.encounter.MedicalInsurance = $scope.medicalInsurance;\r\n $modalInstance.dismiss('cancel');\r\n _this.encounterServiceNew.setEncounter(model.encounter);\r\n locationService.goToChangePatient($routeParams.practiceId, patientId);\r\n };\r\n $scope.done = function () {\r\n if (!$scope.medicalInsurance.PatientIdentityNo ||\r\n !$scope.medicalInsurance.PolicyNo ||\r\n !$scope.medicalInsurance.MedicalInsurer ||\r\n ($scope.medicalInsurance.MedicalInsurer && !$scope.medicalInsurance.MedicalInsurer.InsurerXRef)) {\r\n modalService.error(\"Please provide the required medical insurer invoice details.\");\r\n }\r\n else {\r\n $modalInstance.close($scope.medicalInsurance);\r\n }\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss('cancel');\r\n };\r\n this.init();\r\n }\r\n MedicalInsuranceController.prototype.init = function () {\r\n var _this = this;\r\n if (this.$scope.medicalInsurance.MedicalInsurer) {\r\n this.$scope.medicalInsurance.MedicalInsurer.InsurerXRef =\r\n this.$scope.medicalInsurance.MedicalInsurer.InsurerXRef ||\r\n this.model.encounter.PatientEventDetails.Patient.PatientDetails.IdentityNo;\r\n }\r\n this.patientEventDomain.getMedicalinsurers(this.$routeParams.practiceId)\r\n .then(function (medicalInsurers) {\r\n _this.$scope.medicalInsurers = medicalInsurers;\r\n if (_this.$scope.medicalInsurerXRef) {\r\n _this.$scope.medicalInsurance.MedicalInsurer = _this.getMedicalInsurerByXref(_this.$scope.medicalInsurerXRef);\r\n }\r\n });\r\n };\r\n MedicalInsuranceController.prototype.getMedicalInsurerByXref = function (Xref) {\r\n var medicalInsurersByXref = this.$filter('filter')(this.$scope.medicalInsurers, Xref);\r\n if (medicalInsurersByXref.length > 0) {\r\n return medicalInsurersByXref[0];\r\n }\r\n return null;\r\n };\r\n return MedicalInsuranceController;\r\n })();\r\n MedicalInsuranceModule.MedicalInsuranceController = MedicalInsuranceController;\r\n})(MedicalInsuranceModule || (MedicalInsuranceModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('MedicalInsuranceController', MedicalInsuranceModule.MedicalInsuranceController);\r\n/// \r\n/// \r\nvar ModalModule;\r\n(function (ModalModule) {\r\n var Variable = (function () {\r\n function Variable(name, count, type, units) {\r\n this.name = name;\r\n this.count = count;\r\n this.type = type;\r\n this.units = units;\r\n }\r\n return Variable;\r\n })();\r\n var Instruction = (function () {\r\n function Instruction(name, oppositeName) {\r\n this.name = name;\r\n this.oppositeName = oppositeName;\r\n }\r\n return Instruction;\r\n })();\r\n var Group = (function () {\r\n function Group(name, types, items) {\r\n this.name = name;\r\n this.types = types;\r\n this.items = items;\r\n }\r\n return Group;\r\n })();\r\n var VConfig = (function (_super) {\r\n __extends(VConfig, _super);\r\n function VConfig() {\r\n _super.apply(this, arguments);\r\n }\r\n return VConfig;\r\n })(ModalModule.Config);\r\n var DetailsController = (function () {\r\n DetailsController.$inject = [\"$scope\", \"modalService\"];\r\n function DetailsController($scope, modalService) {\r\n \"ngInject\";\r\n var instructions = this.createInstructions();\r\n $scope.maxQuantity = 200;\r\n $scope.showQuantityWarning = false;\r\n $scope.zeroPricing = $scope.config.validateOptions.specificRule && ($scope.config.validateOptions.specificRule.ZeroMedicine && $scope.model.LineType === 'Medicine' ||\r\n $scope.config.validateOptions.specificRule.ZeroConsumable && $scope.model.LineType === 'Consumable') &&\r\n $scope.config.validateOptions.medicalAidInvoice;\r\n $scope.openNumbersDialog = function (valueName) {\r\n modalService.openNumbers('decimal', 'Enter number')\r\n .then(function (quantity) {\r\n if (quantity) {\r\n $scope.model[valueName] = quantity;\r\n }\r\n });\r\n };\r\n $scope.openPriceDialog = function () {\r\n modalService.openNumbers('decimal', 'Enter price', null, null, true)\r\n .then(function (price) {\r\n $scope.model.PriceOverride = true;\r\n $scope.model.TotalIncVat = price;\r\n $scope.model.Amount = price;\r\n });\r\n };\r\n $scope.openDialog = function (valueName) {\r\n modalService.openNumbers('int', 'Enter number')\r\n .then(function (quantity) {\r\n if (quantity) {\r\n $scope.model[valueName] = quantity;\r\n }\r\n });\r\n };\r\n $scope.refreshPrice = function () {\r\n $scope.model.PriceOverride = false;\r\n $scope.config.validateOptions.refreshPrice($scope.model);\r\n };\r\n $scope.openQuantityDialog = function () {\r\n modalService.openNumbers('int', 'Enter quantity')\r\n .then(function (quantity) {\r\n if (quantity) {\r\n $scope.model.ChargeQuan = quantity;\r\n }\r\n });\r\n };\r\n $scope.maxQuantityWarning = function () {\r\n modalService.warning('Please note that the maximum allowable quantity' +\r\n 'on the Discovery KeyCare acute formulary is ' +\r\n $scope.maxQuantity +\r\n 'ml.').then(function () {\r\n });\r\n };\r\n $scope.clickItem = function (groupIndex, variable) {\r\n switch (groupIndex) {\r\n case 0:\r\n $scope.model.DosageUnit = variable.count;\r\n $scope.model.DosageType = variable.type;\r\n break;\r\n case 1:\r\n $scope.model.FrequencyUnit = variable.units === -1 ? $scope.model.FrequencyUnit : variable.units;\r\n $scope.model.PeriodUnit = variable.count === -1 ? $scope.model.PeriodUnit : variable.count;\r\n $scope.model.PeriodType = variable.type === '' ? $scope.model.PeriodType : variable.type;\r\n for (var _i = 0; _i < instructions.length; _i++) {\r\n var instruction = instructions[_i];\r\n if (instruction.name === variable.name || instruction.oppositeName === variable.name) {\r\n var oppositeName = (variable.name === instruction.name) ? instruction.oppositeName : instruction.name;\r\n var additionalInst = $scope.model.DispensingInstructions || \"\";\r\n additionalInst = additionalInst.replace(oppositeName, variable.name);\r\n if (additionalInst.indexOf(variable.name) === -1) {\r\n additionalInst = variable.name + \" \" + additionalInst;\r\n }\r\n $scope.model.DispensingInstructions = additionalInst;\r\n }\r\n }\r\n break;\r\n case 2:\r\n $scope.model.DurationUnit = variable.count;\r\n $scope.model.DurationType = variable.type;\r\n break;\r\n }\r\n };\r\n $scope.model.validate = function () {\r\n if (!$scope.model.DosageUnit) {\r\n modalService.warning(\"Some schemes require prescription details for medicines\");\r\n }\r\n };\r\n $scope.groups = [\r\n this.createDosageGroup(),\r\n this.createFrequencyGroup(),\r\n this.createDurationGroup()\r\n ];\r\n }\r\n DetailsController.prototype.createVariables = function () {\r\n return [\r\n this.createDosageGroup(),\r\n this.createFrequencyGroup(),\r\n this.createDurationGroup()\r\n ];\r\n };\r\n DetailsController.prototype.createInstructions = function () {\r\n var instructions = [\r\n new Instruction('Mane', 'Nocte'),\r\n new Instruction('a.c.', 'p.c.'),\r\n new Instruction('STAT', 'prn')\r\n ];\r\n return instructions;\r\n };\r\n DetailsController.prototype.createDosageGroup = function () {\r\n var dosageTypes = [\r\n 'g', 'l', 'ointment', 'drops', 'mcg', 'µg', 'mg', 'ml', 'tablets', 'pack', 'puffs', 'units', 'ampules',\r\n 'sprays', 'capsules', 'vial', 'sachet'\r\n ];\r\n var items = [\r\n new Variable('10mg', 10, dosageTypes[6], 0),\r\n new Variable('100mg', 100, dosageTypes[6], 0),\r\n new Variable('300mg', 300, dosageTypes[6], 0),\r\n new Variable('250mg', 250, dosageTypes[6], 0),\r\n new Variable('500mg', 500, dosageTypes[6], 0),\r\n new Variable('1000mg', 1000, dosageTypes[6], 0),\r\n new Variable('1tb', 1, dosageTypes[8], 0),\r\n new Variable('2tb', 2, dosageTypes[8], 0),\r\n new Variable('3tb', 3, dosageTypes[8], 0),\r\n new Variable('1cap', 1, dosageTypes[14], 0),\r\n new Variable('2cap', 2, dosageTypes[14], 0),\r\n new Variable('3cap', 3, dosageTypes[14], 0)\r\n ];\r\n return new Group('Dosage', dosageTypes, items);\r\n };\r\n DetailsController.prototype.createFrequencyGroup = function () {\r\n var frequencyTypes = ['hour', 'day', 'week', 'month'];\r\n var items = [\r\n new Variable('Daily', 1, frequencyTypes[1], 1),\r\n new Variable('BD', 1, frequencyTypes[1], 2),\r\n new Variable('TDS', 1, frequencyTypes[1], 3),\r\n new Variable('QID', 1, frequencyTypes[1], 4),\r\n new Variable('Q4h', 4, frequencyTypes[0], 1),\r\n new Variable('Q6h', 6, frequencyTypes[0], 1),\r\n new Variable('Q8h', 8, frequencyTypes[0], 1)\r\n ];\r\n return new Group('Frequency', frequencyTypes, items);\r\n };\r\n DetailsController.prototype.createDurationGroup = function () {\r\n var durationTypes = ['hour', 'day', 'week', 'month'];\r\n var items = [\r\n new Variable('1/7', 1, durationTypes[1], 0),\r\n new Variable('3/7', 3, durationTypes[1], 0),\r\n new Variable('5/7', 5, durationTypes[1], 0),\r\n new Variable('1/52', 1, durationTypes[2], 0),\r\n new Variable('2/52', 2, durationTypes[2], 0),\r\n new Variable('3/52', 3, durationTypes[2], 0),\r\n new Variable('4/52', 4, durationTypes[2], 0),\r\n new Variable('5/52', 5, durationTypes[2], 0),\r\n new Variable('6/52', 6, durationTypes[2], 0),\r\n new Variable('1/12', 1, durationTypes[3], 0),\r\n new Variable('3/12', 3, durationTypes[3], 0),\r\n new Variable('6/12', 6, durationTypes[3], 0)\r\n ];\r\n return new Group('Duration', durationTypes, items);\r\n };\r\n return DetailsController;\r\n })();\r\n ModalModule.DetailsController = DetailsController;\r\n})(ModalModule || (ModalModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ModalDetailsController', ModalModule.DetailsController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar details;\r\n(function (details) {\r\n var GroupsModel = (function () {\r\n function GroupsModel(value, ischecked) {\r\n this.isChecked = ischecked || false;\r\n this.value = value;\r\n }\r\n return GroupsModel;\r\n })();\r\n details.GroupsModel = GroupsModel;\r\n var Group = (function () {\r\n function Group() {\r\n this.prescriptionLines = [];\r\n }\r\n return Group;\r\n })();\r\n details.Group = Group;\r\n var PrescriptionHistoryController = (function () {\r\n PrescriptionHistoryController.$inject = [\"$scope\"];\r\n function PrescriptionHistoryController($scope) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n $scope.groups = this.getGroups($scope.model);\r\n $scope.groupClick = function (group) {\r\n var prescrLines = group.prescriptionLines;\r\n for (var _i = 0; _i < prescrLines.length; _i++) {\r\n var line = prescrLines[_i];\r\n line.isChecked = group.date.isChecked;\r\n }\r\n $scope.model = _this.getPrescriptionLines();\r\n $scope.$parent['model'] = $scope.model;\r\n };\r\n $scope.lineClick = function (group) {\r\n var prescrLines = group.prescriptionLines;\r\n var checkedLines = 0;\r\n for (var _i = 0; _i < prescrLines.length; _i++) {\r\n var line = prescrLines[_i];\r\n checkedLines = line.isChecked ? checkedLines + 1 : checkedLines;\r\n }\r\n group.date.isChecked = checkedLines === prescrLines.length;\r\n $scope.model = _this.getPrescriptionLines();\r\n $scope.$parent['model'] = $scope.model;\r\n };\r\n }\r\n PrescriptionHistoryController.prototype.getPrescriptionLines = function () {\r\n var lines = [];\r\n var groups = this.$scope.groups;\r\n for (var _i = 0; _i < groups.length; _i++) {\r\n var group = groups[_i];\r\n for (var _a = 0, _b = group.prescriptionLines; _a < _b.length; _a++) {\r\n var line = _b[_a];\r\n if (line.isChecked) {\r\n lines.push(line.value);\r\n }\r\n }\r\n }\r\n return lines;\r\n };\r\n PrescriptionHistoryController.prototype.getGroups = function (model) {\r\n var groups = [];\r\n for (var _i = 0; _i < model.length; _i++) {\r\n var encounter = model[_i];\r\n var prescriptionLines = encounter.MedicationsPrescribed.MedicationPrescriptionLines;\r\n var group = new Group();\r\n var date = encounter.MedicationsPrescribed.IssuedDate.split('T')[0];\r\n var diagnosis = encounter.EncounterLineItems.EncounterHeader.Diagnosis;\r\n var diagnisisCodes = '';\r\n if (diagnosis.length) {\r\n diagnisisCodes = ' ';\r\n for (var _a = 0; _a < diagnosis.length; _a++) {\r\n var item = diagnosis[_a];\r\n diagnisisCodes += item.DiagnosisCode + (diagnosis.indexOf(item) < diagnosis.length - 1 ? ', ' : '');\r\n }\r\n }\r\n group.date = new GroupsModel(date + diagnisisCodes);\r\n for (var _b = 0; _b < prescriptionLines.length; _b++) {\r\n var prescLine = prescriptionLines[_b];\r\n group.prescriptionLines.push(new GroupsModel(prescLine));\r\n }\r\n groups.push(group);\r\n }\r\n return groups;\r\n };\r\n return PrescriptionHistoryController;\r\n })();\r\n details.PrescriptionHistoryController = PrescriptionHistoryController;\r\n})(details || (details = {}));\r\nangular.module('DoctorApp')\r\n .controller('PrescriptionHistoryController', details.PrescriptionHistoryController);\r\n/// \r\n/// \r\n/// \r\nvar details;\r\n(function (details) {\r\n var Variable = (function () {\r\n function Variable(name, count, type, units) {\r\n this.name = name;\r\n this.count = count;\r\n this.type = type;\r\n this.units = units;\r\n }\r\n return Variable;\r\n })();\r\n var Instruction = (function () {\r\n function Instruction(name, oppositeName) {\r\n this.name = name;\r\n this.oppositeName = oppositeName;\r\n }\r\n return Instruction;\r\n })();\r\n var Group = (function () {\r\n function Group(name, types, items) {\r\n this.name = name;\r\n this.types = types;\r\n this.items = items;\r\n }\r\n return Group;\r\n })();\r\n var PrescriptionModalDetailsController = (function () {\r\n PrescriptionModalDetailsController.$inject = [\"$scope\", \"modalService\"];\r\n function PrescriptionModalDetailsController($scope, modalService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.modalService = modalService;\r\n var instructions = this.createInstructions();\r\n $scope.openDialog = function (valueName, useZero) {\r\n if (useZero === void 0) { useZero = false; }\r\n modalService.openNumbers('int', 'Enter number', null, null, useZero)\r\n .then(function (quantity) {\r\n $scope.model[valueName] = quantity;\r\n });\r\n };\r\n $scope.openNumbersDialog = function (valueName) {\r\n modalService.openNumbers('decimal', 'Enter number')\r\n .then(function (quantity) {\r\n if (quantity) {\r\n $scope.model[valueName] = quantity;\r\n }\r\n });\r\n };\r\n $scope.onChronicChange = function () {\r\n _this.$scope.model.Repeat = (_this.$scope.model.ChronicIndicator) ? 6 : 0;\r\n };\r\n $scope.clickItem = function (groupIndex, variable) {\r\n switch (groupIndex) {\r\n case 0:\r\n $scope.model.DosageUnits = variable.count;\r\n $scope.model.DosageType = variable.type;\r\n break;\r\n case 1:\r\n $scope.model.FrequencyUnits = variable.units === -1 ? $scope.model.FrequencyUnits : variable.units;\r\n $scope.model.PeriodUnit = variable.count === -1 ? $scope.model.PeriodUnit : variable.count;\r\n $scope.model.PeriodType = variable.type === '' ? $scope.model.PeriodType : variable.type;\r\n for (var _i = 0; _i < instructions.length; _i++) {\r\n var instruction = instructions[_i];\r\n if (instruction.name === variable.name || instruction.oppositeName === variable.name) {\r\n var oppositeName = (variable.name === instruction.name) ? instruction.oppositeName : instruction.name;\r\n var additionalInst = $scope.model.DispensingInstructions || \"\";\r\n additionalInst = additionalInst.replace(oppositeName, variable.name);\r\n if (additionalInst.indexOf(variable.name) === -1) {\r\n additionalInst = variable.name + \" \" + additionalInst;\r\n }\r\n $scope.model.DispensingInstructions = additionalInst;\r\n }\r\n }\r\n break;\r\n case 2:\r\n if (variable.name == \"3/12\" || variable.name == \"6/12\") {\r\n $scope.model.Repeat = variable.count;\r\n $scope.model.DurationType = variable.type;\r\n $scope.model.DurationUnit = 1;\r\n }\r\n else {\r\n $scope.model.DurationUnit = variable.count;\r\n $scope.model.DurationType = variable.type;\r\n }\r\n break;\r\n }\r\n };\r\n $scope.groups = this.createVariables();\r\n }\r\n PrescriptionModalDetailsController.prototype.createVariables = function () {\r\n return [\r\n this.createDosageGroup(),\r\n this.createFrequencyGroup(),\r\n this.createDurationGroup()\r\n ];\r\n };\r\n PrescriptionModalDetailsController.prototype.createInstructions = function () {\r\n var instructions = [\r\n new Instruction('Mane', 'Nocte'),\r\n new Instruction('a.c.', 'p.c.'),\r\n new Instruction('STAT', 'prn'),\r\n new Instruction('PRN', 'PRN')\r\n ];\r\n return instructions;\r\n };\r\n PrescriptionModalDetailsController.prototype.createDosageGroup = function () {\r\n var dosageTypes = [\r\n 'g', 'l', 'ointment', 'drops', 'mcg', 'µg', 'mg', 'ml', 'tablets', 'pack', 'puffs', 'units', 'ampules',\r\n 'sprays', 'capsules', 'vial', 'sachet', 'cream', 'suppository'\r\n ];\r\n var items = [\r\n new Variable('10mg', 10, dosageTypes[6], 0),\r\n new Variable('100mg', 100, dosageTypes[6], 0),\r\n new Variable('300mg', 300, dosageTypes[6], 0),\r\n new Variable('250mg', 250, dosageTypes[6], 0),\r\n new Variable('500mg', 500, dosageTypes[6], 0),\r\n new Variable('1000mg', 1000, dosageTypes[6], 0),\r\n new Variable('1tb', 1, dosageTypes[8], 0),\r\n new Variable('2tb', 2, dosageTypes[8], 0),\r\n new Variable('3tb', 3, dosageTypes[8], 0),\r\n new Variable('1cap', 1, dosageTypes[14], 0),\r\n new Variable('2cap', 2, dosageTypes[14], 0),\r\n new Variable('3cap', 3, dosageTypes[14], 0)\r\n ];\r\n return new Group('Dosage', dosageTypes, items);\r\n };\r\n PrescriptionModalDetailsController.prototype.createFrequencyGroup = function () {\r\n var frequencyTypes = ['hour', 'day', 'week', 'month'];\r\n var items = [\r\n new Variable('Daily', 1, frequencyTypes[1], 1),\r\n new Variable('BD', 1, frequencyTypes[1], 2),\r\n new Variable('TDS', 1, frequencyTypes[1], 3),\r\n new Variable('QID', 1, frequencyTypes[1], 4),\r\n new Variable('Q4h', 4, frequencyTypes[0], 1),\r\n new Variable('Q6h', 6, frequencyTypes[0], 1),\r\n new Variable('Q8h', 8, frequencyTypes[0], 1),\r\n new Variable('Mane', 1, frequencyTypes[1], 1),\r\n new Variable('Nocte', 1, frequencyTypes[1], 1),\r\n new Variable('STAT', -1, '', -1),\r\n new Variable('PRN', -1, '', -1),\r\n new Variable('p.c.', -1, '', -1),\r\n new Variable('a.c.', -1, '', -1)\r\n ];\r\n return new Group('Frequency', frequencyTypes, items);\r\n };\r\n PrescriptionModalDetailsController.prototype.createDurationGroup = function () {\r\n var durationTypes = ['hour', 'day', 'week', 'month'];\r\n var items = [\r\n new Variable('1/7', 1, durationTypes[1], 0),\r\n new Variable('3/7', 3, durationTypes[1], 0),\r\n new Variable('5/7', 5, durationTypes[1], 0),\r\n new Variable('1/52', 1, durationTypes[2], 0),\r\n new Variable('2/52', 2, durationTypes[2], 0),\r\n new Variable('3/52', 3, durationTypes[2], 0),\r\n new Variable('4/52', 4, durationTypes[2], 0),\r\n new Variable('5/52', 5, durationTypes[2], 0),\r\n new Variable('6/52', 6, durationTypes[2], 0),\r\n new Variable('1/12', 1, durationTypes[3], 0),\r\n new Variable('3/12', 3, durationTypes[3], 0),\r\n new Variable('6/12', 6, durationTypes[3], 0)\r\n ];\r\n return new Group('Duration', durationTypes, items);\r\n };\r\n return PrescriptionModalDetailsController;\r\n })();\r\n details.PrescriptionModalDetailsController = PrescriptionModalDetailsController;\r\n})(details || (details = {}));\r\nangular.module('DoctorApp')\r\n .controller('PrescriptionModalDetailsController', details.PrescriptionModalDetailsController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar details;\r\n(function (details) {\r\n var Item = (function () {\r\n function Item(diagnosis, turn) {\r\n this.diagnosis = diagnosis;\r\n this.turn = turn;\r\n }\r\n return Item;\r\n })();\r\n var SicknoteController = (function () {\r\n SicknoteController.$inject = [\"$scope\", \"modalService\", \"moment\", \"encounterServiceNew\"];\r\n function SicknoteController($scope, modalService, moment, encounterServiceNew) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.modalService = modalService;\r\n this.moment = moment;\r\n this.encounterServiceNew = encounterServiceNew;\r\n var that = this;\r\n $scope.toggleDiagnosis = function (item) {\r\n var list = $scope.model.MedicalCertificate.Diagnoses;\r\n if (item.turn) {\r\n list.push(item.diagnosis);\r\n }\r\n else {\r\n that.removeDiagnosis(list, item.diagnosis);\r\n }\r\n };\r\n $scope.$watch('fromDate', function () {\r\n $scope.model.MedicalCertificate.FromDate = $scope.fromDate.format();\r\n if ($scope.model.MedicalCertificate.FromDate > $scope.model.MedicalCertificate.ToDate) {\r\n $scope.toDate = $scope.fromDate;\r\n }\r\n });\r\n $scope.$watch('toDate', function () {\r\n $scope.model.MedicalCertificate.ToDate = $scope.toDate.format();\r\n });\r\n this.initMedicalCertificate();\r\n this.init();\r\n }\r\n SicknoteController.prototype.init = function () {\r\n var diagnoses = this.$scope.model.EncounterLineItems.EncounterHeader.Diagnosis;\r\n var diagnosesSelected = this.$scope.model.MedicalCertificate.Diagnoses;\r\n var items = [];\r\n for (var i = 0; i < diagnoses.length; i++) {\r\n var turn = this.containsDiagnosis(diagnoses[i], diagnosesSelected);\r\n items[items.length] = new Item(diagnoses[i], turn);\r\n }\r\n this.$scope.items = items;\r\n var certificate = this.$scope.model.MedicalCertificate;\r\n if (certificate && certificate.FromDate && certificate.ToDate) {\r\n this.$scope.fromDate = this.moment.utc(certificate.FromDate);\r\n this.$scope.toDate = this.moment.utc(certificate.ToDate);\r\n }\r\n else {\r\n this.$scope.fromDate = this.moment.utc();\r\n this.$scope.toDate = this.moment.utc();\r\n }\r\n };\r\n SicknoteController.prototype.containsDiagnosis = function (obj, list) {\r\n for (var i = 0; i < list.length; i++) {\r\n if (list[i].DiagnosisCode == obj.DiagnosisCode) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n SicknoteController.prototype.removeDiagnosis = function (list, item) {\r\n for (var i = 0; i < list.length; i++) {\r\n if (list[i].DiagnosisCode == item.DiagnosisCode) {\r\n list.splice(i, 1);\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n SicknoteController.prototype.initMedicalCertificate = function () {\r\n if (this.$scope.model.MedicalCertificate) {\r\n return;\r\n }\r\n var encounterObj = this.$scope.model;\r\n var medCer = new Domain.Clinical.MedicalCertificate();\r\n medCer.FromDate = this.moment().format();\r\n medCer.ToDate = this.moment().format();\r\n medCer.Diagnoses = encounterObj.EncounterLineItems.EncounterHeader.Diagnosis.slice();\r\n medCer.Patient = encounterObj.PatientEventDetails.Patient;\r\n medCer.Provider = encounterObj.Provider;\r\n medCer.CreatedDate = this.moment().format();\r\n medCer.ExaminationDate = this.encounterServiceNew.getConsultationDate().format();\r\n this.$scope.model.MedicalCertificate = medCer;\r\n };\r\n return SicknoteController;\r\n })();\r\n details.SicknoteController = SicknoteController;\r\n})(details || (details = {}));\r\nangular.module('DoctorApp')\r\n .controller('SicknoteDetailsController', details.SicknoteController);\r\n/// \r\n/// \r\n/// \r\nvar ModalModule;\r\n(function (ModalModule) {\r\n var SpecificRuleWarningController = (function () {\r\n SpecificRuleWarningController.$inject = [\"$scope\", \"$modalInstance\", \"model\"];\r\n function SpecificRuleWarningController($scope, $modalInstance, model) {\r\n \"ngInject\";\r\n $scope.labels = model && model.labels || ['Ok', 'Cancel'];\r\n $scope.ok = function () {\r\n $modalInstance.close($scope.model);\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss();\r\n };\r\n $scope.getPrice = function () {\r\n model.refreshPrice();\r\n $modalInstance.close();\r\n };\r\n $scope.model = model;\r\n }\r\n return SpecificRuleWarningController;\r\n })();\r\n ModalModule.SpecificRuleWarningController = SpecificRuleWarningController;\r\n})(ModalModule || (ModalModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SpecificRuleWarningController', ModalModule.SpecificRuleWarningController);\r\n/// \r\n/// \r\n/// \r\nvar SupportingModule;\r\n(function (SupportingModule) {\r\n var SupportingProviderController = (function () {\r\n SupportingProviderController.$inject = [\"model\", \"$scope\", \"$filter\", \"showDialog\", \"$modalInstance\"];\r\n function SupportingProviderController(model, $scope, $filter, showDialog, $modalInstance) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$filter = $filter;\r\n this.showDialog = showDialog;\r\n this.$modalInstance = $modalInstance;\r\n $scope.model = model;\r\n $scope.providers = model.providers;\r\n $scope.provider = this.getProvider(model.providers, model.provider);\r\n $scope.done = function (item) {\r\n if (item && item.FriendlyName && item.TreatingPracticeNumber) {\r\n item.IsNew = true;\r\n $scope.selectProvider(item);\r\n }\r\n else {\r\n showDialog.warning(\"Please provide correct doctor’s details\");\r\n }\r\n };\r\n $scope.selectProvider = function (item) {\r\n $modalInstance.close(item);\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss();\r\n };\r\n }\r\n SupportingProviderController.prototype.getProvider = function (providers, provider) {\r\n if (!provider) {\r\n return null;\r\n }\r\n var supportingProvider = this.$filter(\"filter\")(providers, {\r\n TreatingPracticeNumber: provider.TreatingPracticeNumber\r\n });\r\n if (supportingProvider && supportingProvider.length > 0) {\r\n return null;\r\n }\r\n return provider;\r\n };\r\n return SupportingProviderController;\r\n })();\r\n SupportingModule.SupportingProviderController = SupportingProviderController;\r\n})(SupportingModule || (SupportingModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SupportingProviderController', SupportingModule.SupportingProviderController);\r\nvar ModifierModule;\r\n(function (ModifierModule) {\r\n var Checkbox = (function () {\r\n function Checkbox(value, ischecked) {\r\n this.isChecked = ischecked;\r\n this.value = value;\r\n }\r\n return Checkbox;\r\n })();\r\n ModifierModule.Checkbox = Checkbox;\r\n var ApplyModifierController = (function () {\r\n ApplyModifierController.$inject = [\"$scope\", \"modalService\", \"$filter\"];\r\n function ApplyModifierController($scope, modalService, $filter) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.modalService = modalService;\r\n this.$filter = $filter;\r\n $scope.checkboxes = this.getCheckboxes();\r\n this.updateSelectionProcedures();\r\n $scope.select = function (value) {\r\n _this.updateSelectionProcedures();\r\n };\r\n $scope.setItemsState = function (state) {\r\n _this.$scope.checkboxes.forEach(function (c) { return c.isChecked = state; });\r\n _this.updateSelectionProcedures();\r\n };\r\n }\r\n ApplyModifierController.prototype.updateSelectionProcedures = function () {\r\n var active = this.$scope.checkboxes.filter(function (ch) { return ch.isChecked; });\r\n var lines = active.map(function (checkbox) { return checkbox.value; });\r\n this.$scope.onSelected(lines);\r\n };\r\n ApplyModifierController.prototype.getCheckboxes = function () {\r\n if (this.$scope.encounter) {\r\n var encounter = this.$scope.encounter;\r\n var procedures = this.$filter('filter')(encounter.EncounterLineItems.LineItems, { LineType: 'Procedure' });\r\n return procedures.map(function (procedure) { return new Checkbox(procedure, false); });\r\n }\r\n };\r\n ApplyModifierController.factory = function () {\r\n var instance = function () {\r\n var directive = {};\r\n directive.restrict = 'EA';\r\n directive.scope = {\r\n encounter: '=',\r\n onSelected: '=',\r\n options: '='\r\n };\r\n directive.templateUrl = 'screens/consultation/modifiers/modal/dialog/apply-modifier.html';\r\n directive.controller = ApplyModifierController;\r\n return directive;\r\n };\r\n return instance;\r\n };\r\n return ApplyModifierController;\r\n })();\r\n ModifierModule.ApplyModifierController = ApplyModifierController;\r\n})(ModifierModule || (ModifierModule = {}));\r\nangular.module('DoctorApp')\r\n .directive('applyModifier', ModifierModule.ApplyModifierController.factory());\r\nvar ModifierModule;\r\n(function (ModifierModule) {\r\n var AssistingController = (function () {\r\n AssistingController.$inject = [\"$scope\", \"moment\", \"$filter\", \"modalService\", \"$routeParams\"];\r\n function AssistingController($scope, moment, $filter, modalService, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.moment = moment;\r\n this.$filter = $filter;\r\n this.modalService = modalService;\r\n this.$routeParams = $routeParams;\r\n $scope.AssistingDoctorName = $scope.encounter.AssistingDoctorName;\r\n $scope.AssistingDoctorPracticeNumber = $scope.encounter.AssistingDoctorPracticeNumber;\r\n $scope.assistingDoctor = $scope.assistingDoctor || new Domain.Billing.SupportingProviderVo();\r\n $scope.updateAssistingDoctor = function () {\r\n if ($scope.AssistingDoctorPracticeNumber && $scope.AssistingDoctorName) {\r\n $scope.assistingDoctor.IsNew = true;\r\n $scope.assistingDoctor.FriendlyName = $scope.AssistingDoctorName;\r\n $scope.assistingDoctor.TreatingPracticeNumber = $scope.AssistingDoctorPracticeNumber;\r\n $scope.encounter.AssistingDoctorName = $scope.AssistingDoctorName;\r\n $scope.encounter.AssistingDoctorPracticeNumber = $scope.AssistingDoctorPracticeNumber;\r\n }\r\n };\r\n $scope.options.validate = function () {\r\n var validated = $scope.AssistingDoctorPracticeNumber &&\r\n $scope.AssistingDoctorName;\r\n if (!validated) {\r\n _this.modalService.error(\"Please enter valid info in fields\");\r\n }\r\n return validated;\r\n };\r\n }\r\n AssistingController.factory = function () {\r\n var instance = function () {\r\n var directive = {};\r\n directive.restrict = 'EAC';\r\n directive.scope = {\r\n modifier: '=',\r\n encounter: '=',\r\n assistingDoctor: '=',\r\n options: \"=\"\r\n };\r\n directive.templateUrl = 'screens/consultation/modifiers/modal/dialog/modifier-0009.html';\r\n directive.controller = AssistingController;\r\n return directive;\r\n };\r\n return instance;\r\n };\r\n return AssistingController;\r\n })();\r\n ModifierModule.AssistingController = AssistingController;\r\n})(ModifierModule || (ModifierModule = {}));\r\nangular.module('DoctorApp')\r\n .directive('modifier0009', ModifierModule.AssistingController.factory());\r\nvar ModifierModule;\r\n(function (ModifierModule) {\r\n var BMIController = (function () {\r\n BMIController.$inject = [\"$scope\", \"modalService\"];\r\n function BMIController($scope, modalService) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.modalService = modalService;\r\n $scope.modifier.Parameters = $scope.modifier.Parameters || { Length: \"0\", Weight: \"0\" };\r\n $scope.BMI = $scope.modifier.Parameters.Weight / Math.pow($scope.modifier.Parameters.Length, 2) || 0;\r\n $scope.openNumbersDialog = function (name) {\r\n modalService.openNumbers('decimal', 'Enter number', null, $scope.modifier.Parameters[name])\r\n .then(function (value) {\r\n if (value) {\r\n $scope.modifier.Parameters[name] = value;\r\n $scope.BMI = $scope.modifier.Parameters.Weight / Math.pow($scope.modifier.Parameters.Length, 2);\r\n }\r\n });\r\n };\r\n $scope.options.validate = function () {\r\n return true;\r\n };\r\n }\r\n BMIController.factory = function () {\r\n var instance = function () {\r\n var directive = {};\r\n directive.restrict = 'EAC';\r\n directive.scope = {\r\n modifier: '=',\r\n options: \"=\"\r\n };\r\n directive.templateUrl = 'screens/consultation/modifiers/modal/dialog/modifier-0018.html';\r\n directive.controller = BMIController;\r\n return directive;\r\n };\r\n return instance;\r\n };\r\n return BMIController;\r\n })();\r\n ModifierModule.BMIController = BMIController;\r\n})(ModifierModule || (ModifierModule = {}));\r\nangular.module('DoctorApp')\r\n .directive('modifier0018', ModifierModule.BMIController.factory());\r\nvar ModifierModule;\r\n(function (ModifierModule) {\r\n var AnaestheticController = (function () {\r\n AnaestheticController.$inject = [\"$scope\", \"moment\", \"$filter\", \"encounterServiceNew\", \"modalService\", \"$routeParams\"];\r\n function AnaestheticController($scope, moment, $filter, encounterServiceNew, modalService, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.moment = moment;\r\n this.$filter = $filter;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.modalService = modalService;\r\n this.$routeParams = $routeParams;\r\n $scope.units = 0;\r\n $scope.totalPrice = 0;\r\n $scope.modifier.DurationType = $scope.modifier.DurationType || 'Units';\r\n $scope.modifier.Parameters = $scope.modifier.Parameters || {};\r\n if ($scope.requiredParams) {\r\n $scope.requiredParams.forEach(function (param) {\r\n if (param.FieldName === 'anaestheticRCF') {\r\n $scope.modifier.Parameters.anaestheticRCF = 0;\r\n }\r\n });\r\n }\r\n $scope.options.validate = function () {\r\n return true;\r\n };\r\n $scope.refreshDates = function (newDate, oldDate, isStart) {\r\n var date = _this.moment.utc(newDate).format('YYYY-MM-DD[T]HH:mm:ss[Z]');\r\n if (isStart) {\r\n _this.$scope.modifier.ChargeStart = date;\r\n }\r\n else {\r\n _this.$scope.modifier.ChargeEnd = date;\r\n }\r\n _this.$scope.refreshMinutes();\r\n };\r\n $scope.refreshMinutes = function () {\r\n var minutes = _this.moment($scope.endDate).diff(_this.moment($scope.startDate), \"minutes\");\r\n $scope.minutes = minutes > 0 ? minutes : 0;\r\n };\r\n $scope.initDates = function () {\r\n var consultationDate = _this.encounterServiceNew.getEncounter().EncounterLineItems.EncounterHeader.DateOfService;\r\n var chargeStart = _this.moment.utc(_this.$scope.modifier.ChargeStart || consultationDate, ServerDateFormat).local();\r\n var chargeEnd = _this.moment.utc(_this.$scope.modifier.ChargeEnd || consultationDate, ServerDateFormat).local();\r\n _this.$scope.startDate = chargeStart;\r\n _this.$scope.endDate = chargeEnd;\r\n _this.$scope.refreshMinutes();\r\n };\r\n $scope.initDates();\r\n }\r\n AnaestheticController.factory = function () {\r\n var instance = function () {\r\n var directive = {};\r\n directive.restrict = 'EAC';\r\n directive.scope = {\r\n modifier: '=',\r\n requiredParams: '=',\r\n options: \"=\"\r\n };\r\n directive.templateUrl = 'screens/consultation/modifiers/modal/dialog/modifier-0036.html';\r\n directive.controller = AnaestheticController;\r\n return directive;\r\n };\r\n return instance;\r\n };\r\n return AnaestheticController;\r\n })();\r\n ModifierModule.AnaestheticController = AnaestheticController;\r\n})(ModifierModule || (ModifierModule = {}));\r\nangular.module('DoctorApp')\r\n .directive('modifier0036', ModifierModule.AnaestheticController.factory());\r\nvar ModifierModule;\r\n(function (ModifierModule) {\r\n var Model = (function () {\r\n function Model() {\r\n }\r\n return Model;\r\n })();\r\n ModifierModule.Model = Model;\r\n var ModifierController = (function () {\r\n ModifierController.$inject = [\"$scope\", \"$modalInstance\", \"clinicalDomain\", \"searchService\", \"modalService\", \"$routeParams\", \"model\"];\r\n function ModifierController($scope, $modalInstance, clinicalDomain, searchService, modalService, $routeParams, model) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$modalInstance = $modalInstance;\r\n this.clinicalDomain = clinicalDomain;\r\n this.searchService = searchService;\r\n this.modalService = modalService;\r\n this.$routeParams = $routeParams;\r\n this.model = model;\r\n $scope.editOptions = {\r\n validate: null,\r\n editMode: false\r\n };\r\n $scope.pages = this.resetPages();\r\n $scope.pageNum = 1;\r\n $scope.page = ModifierController.SEARCH_PAGE;\r\n $scope.modifier = model.modifier;\r\n $scope.searchText = '';\r\n $scope.editOptions.editMode = model.modifier !== null;\r\n if ($scope.editOptions.editMode) {\r\n $scope.page = ModifierController.EDIT_PAGE;\r\n $scope.currentModifier = $scope.modifier;\r\n $scope.pages = this.removePage($scope.pages, ModifierController.SEARCH_PAGE);\r\n $scope.pages = this.removePage($scope.pages, ModifierController.APPLY_PAGE);\r\n }\r\n this.changePage($scope.pageNum);\r\n $scope.model = model;\r\n $scope.selectModifier = function (modifier, searchtext) {\r\n $scope.currentModifier = modifier;\r\n $scope.searchText = searchtext;\r\n if (model.noEdit) {\r\n $scope.pages = _this.removePage($scope.pages, ModifierController.EDIT_PAGE);\r\n var lineItems = model.encounter.EncounterLineItems.LineItems;\r\n var noProcedures = !lineItems.length || !lineItems.filter(function (item) { return item.LineType === 'Procedure'; }).length;\r\n if (noProcedures) {\r\n $scope.pages = _this.removePage($scope.pages, ModifierController.APPLY_PAGE);\r\n }\r\n $scope.next();\r\n }\r\n else {\r\n clinicalDomain.getModifierInfo($routeParams.practiceId, modifier.ChargeCode)\r\n .then(function (modifierInfo) {\r\n var requiredParams = modifierInfo.RequiredParameters;\r\n $scope.requiredParams = requiredParams;\r\n if ((modifierInfo.ImplementationStatus === \"Calculated\" || modifierInfo.ImplementationStatus === \"Parameters\") &&\r\n requiredParams.length === 0) {\r\n $scope.pages = _this.removePage($scope.pages, ModifierController.EDIT_PAGE);\r\n }\r\n $scope.next();\r\n }, function (reason) {\r\n $scope.next();\r\n });\r\n }\r\n };\r\n $scope.onSelectedProceduresDone = function (procedures) {\r\n $scope.selectedProcedures = procedures;\r\n };\r\n $scope.prev = function () {\r\n if ($scope.pageNum > 1) {\r\n $scope.pageNum--;\r\n if ($scope.pageNum === 1) {\r\n $scope.editOptions.validate = null;\r\n }\r\n _this.changePage($scope.pageNum);\r\n }\r\n };\r\n $scope.next = function () {\r\n if ($scope.pageNum < $scope.pages.length) {\r\n if (_this.$scope.pages[$scope.pageNum] === ModifierController.APPLY_PAGE &&\r\n $scope.editOptions.validate &&\r\n !$scope.editOptions.validate()) {\r\n return;\r\n }\r\n $scope.pageNum++;\r\n _this.changePage($scope.pageNum);\r\n }\r\n else if ($scope.pageNum === $scope.pages.length) {\r\n if ($scope.editOptions.validate && !$scope.editOptions.validate()) {\r\n return;\r\n }\r\n if (!$scope.model.modifier) {\r\n var originalLineItems = $scope.model.encounter.EncounterLineItems.LineItems;\r\n var hasApplyScreen = $scope.pages.some(function (page) { return page === ModifierController.APPLY_PAGE; });\r\n if (!hasApplyScreen) {\r\n originalLineItems.push($scope.currentModifier);\r\n }\r\n else {\r\n if (!$scope.selectedProcedures.length) {\r\n _this.modalService\r\n .confirm(\"You have not selected any procedure lines, would you like to add the modifier to the end?\")\r\n .then(function (dr) {\r\n var procedures = originalLineItems.filter(function (i) { return i.LineType === 'Procedure'; });\r\n $scope.selectedProcedures.push(procedures[procedures.length - 1]);\r\n _this.applyModifiersToSelectedProcedures();\r\n $modalInstance.close($scope.currentModifier);\r\n });\r\n return;\r\n }\r\n else {\r\n _this.applyModifiersToSelectedProcedures();\r\n }\r\n }\r\n }\r\n $modalInstance.close($scope.currentModifier);\r\n }\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss();\r\n };\r\n }\r\n ModifierController.prototype.applyModifiersToSelectedProcedures = function () {\r\n var originalLineItems = this.$scope.model.encounter.EncounterLineItems.LineItems;\r\n for (var _i = 0, _a = this.$scope.selectedProcedures; _i < _a.length; _i++) {\r\n var item = _a[_i];\r\n var indexForInsert = originalLineItems.indexOf(item) +\r\n this.getModifieresCountAfterProcedures(originalLineItems, item) + 1;\r\n originalLineItems.splice(indexForInsert, 0, this.$scope.currentModifier);\r\n }\r\n };\r\n ModifierController.prototype.getModifieresCountAfterProcedures = function (lines, procedure) {\r\n var count = 0;\r\n for (var i = lines.indexOf(procedure) + 1; i < lines.length; i++) {\r\n if (lines[i].LineType === \"Modifier\") {\r\n count++;\r\n }\r\n else {\r\n return count;\r\n }\r\n }\r\n return count;\r\n };\r\n ModifierController.prototype.changePage = function (currentPageNumb) {\r\n var currentPage = this.$scope.pages[currentPageNumb - 1];\r\n if (currentPage === 'search') {\r\n this.$scope.pages = this.resetPages();\r\n }\r\n if (currentPage === 'edit') {\r\n var modifier = this.$scope.currentModifier;\r\n this.$scope.modifierDirective = this.getModifierByChargeCode(modifier.ChargeCode);\r\n }\r\n this.$scope.page = currentPage;\r\n };\r\n ModifierController.prototype.resetPages = function () {\r\n return [\r\n 'search',\r\n 'edit',\r\n 'apply'\r\n ];\r\n };\r\n ModifierController.prototype.removePage = function (pages, pageName) {\r\n return pages.filter(function (page) { return page !== pageName; });\r\n };\r\n ModifierController.prototype.getModifierByChargeCode = function (chargeCode) {\r\n if (chargeCode === '0036' || chargeCode === '0039') {\r\n return 'modifier0036';\r\n }\r\n if (chargeCode === '0009' || chargeCode === '0018') {\r\n return 'modifier' + chargeCode;\r\n }\r\n return 'modifierOthers';\r\n };\r\n ModifierController.SEARCH_PAGE = 'search';\r\n ModifierController.EDIT_PAGE = 'edit';\r\n ModifierController.APPLY_PAGE = 'apply';\r\n return ModifierController;\r\n })();\r\n ModifierModule.ModifierController = ModifierController;\r\n})(ModifierModule || (ModifierModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ModifierController', ModifierModule.ModifierController);\r\nvar ModifierModule;\r\n(function (ModifierModule) {\r\n var OthersController = (function () {\r\n OthersController.$inject = [\"$scope\", \"moment\", \"$filter\", \"providerService\", \"modalService\", \"encounterServiceNew\", \"$routeParams\"];\r\n function OthersController($scope, moment, $filter, providerService, modalService, encounterServiceNew, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.moment = moment;\r\n this.$filter = $filter;\r\n this.providerService = providerService;\r\n this.modalService = modalService;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.$routeParams = $routeParams;\r\n $scope.modifier.Parameters = $scope.modifier.Parameters || { UnitType: 'Units', Units: 1 };\r\n $scope.modifier.DurationType = $scope.modifier.DurationType || 'Units';\r\n $scope.unitTypes = [\r\n { name: \"Units\" },\r\n { name: \"Days\" },\r\n { name: \"Hours\" },\r\n { name: \"Kilometres\" },\r\n { name: \"Minutes\" },\r\n { name: \"Seconds\" }\r\n ].filter(function (unitType) { return $scope.modifier.ChargeCode === \"0013\" || unitType.name !== \"Kilometres\"; });\r\n $scope.openUnitsDialog = function () {\r\n modalService.openNumbers('int', 'Enter units', null, null, false)\r\n .then(function (units) {\r\n if (units && units > 0 && units < 10000) {\r\n $scope.modifier.Parameters.Units = units;\r\n }\r\n });\r\n };\r\n $scope.openQuantityDialog = function () {\r\n modalService.openNumbers('int', 'Enter quantity')\r\n .then(function (quantity) {\r\n if (quantity) {\r\n $scope.modifier.ChargeQuan = quantity;\r\n }\r\n });\r\n };\r\n $scope.openPriceDialog = function () {\r\n modalService.openNumbers('decimal', 'Enter price', null, null, true)\r\n .then(function (price) {\r\n if (price) {\r\n $scope.modifier.PriceOverride = true;\r\n $scope.modifier.Amount = price;\r\n $scope.modifier.TotalIncVat = price;\r\n }\r\n });\r\n };\r\n $scope.options.validate = function () {\r\n if (!$scope.modifier.Parameters.Units ||\r\n $scope.modifier.Parameters.Units < 1 ||\r\n $scope.modifier.Parameters.Units > 10000) {\r\n return false;\r\n }\r\n if ($scope.requiredParams && $scope.requiredParams.length) {\r\n var validated = false;\r\n $scope.requiredParams.forEach(function (param) {\r\n Object.getOwnPropertyNames($scope.modifier).forEach(function (key) {\r\n if (param.Required && key.toLowerCase() === param.FieldName.toLowerCase() && $scope.modifier[key]) {\r\n validated = true;\r\n }\r\n });\r\n Object.getOwnPropertyNames($scope.modifier.Parameters).forEach(function (key) {\r\n if (param.Required && key.toLowerCase() === param.FieldName.toLowerCase() && $scope.modifier.Parameters[key]) {\r\n validated = true;\r\n }\r\n });\r\n });\r\n if (!validated) {\r\n _this.modalService.error(\"Please enter valid info in fields\");\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n this.providerService.getProviderOptions(this.$routeParams.practiceId)\r\n .then(function (options) {\r\n $scope.isShowPrice = options.isEnabledForDisplayingPrices;\r\n });\r\n $scope.refreshDates = function (newDate, oldDate, isStart) {\r\n var date = _this.moment.utc(newDate).format('YYYY-MM-DD[T]HH:mm:ss[Z]');\r\n if (isStart) {\r\n _this.$scope.modifier.ChargeStart = date;\r\n }\r\n else {\r\n _this.$scope.modifier.ChargeEnd = date;\r\n }\r\n _this.$scope.refreshMinutes();\r\n };\r\n $scope.refreshMinutes = function () {\r\n var minutes = _this.moment($scope.endDate).diff(_this.moment($scope.startDate), \"minutes\");\r\n $scope.minutes = minutes > 0 ? minutes : 0;\r\n };\r\n $scope.initDates = function () {\r\n var consultationDate = _this.encounterServiceNew.getEncounter().EncounterLineItems.EncounterHeader.DateOfService;\r\n var chargeStart = _this.moment.utc(_this.$scope.modifier.ChargeStart || consultationDate, ServerDateFormat).local();\r\n var chargeEnd = _this.moment.utc(_this.$scope.modifier.ChargeEnd || consultationDate, ServerDateFormat).local();\r\n _this.$scope.startDate = chargeStart;\r\n _this.$scope.endDate = chargeEnd;\r\n _this.$scope.refreshMinutes();\r\n };\r\n $scope.initDates();\r\n }\r\n OthersController.factory = function () {\r\n var instance = function () {\r\n var directive = {};\r\n directive.restrict = 'EA';\r\n directive.scope = {\r\n modifier: '=',\r\n requiredParams: '=',\r\n options: \"=\"\r\n };\r\n directive.templateUrl = 'screens/consultation/modifiers/modal/dialog/modifier-others.html';\r\n directive.controller = OthersController;\r\n return directive;\r\n };\r\n return instance;\r\n };\r\n return OthersController;\r\n })();\r\n ModifierModule.OthersController = OthersController;\r\n})(ModifierModule || (ModifierModule = {}));\r\nangular.module('DoctorApp')\r\n .directive('modifierOthers', ModifierModule.OthersController.factory());\r\nvar ModifierModule;\r\n(function (ModifierModule) {\r\n var SearchModifierController = (function () {\r\n SearchModifierController.$inject = [\"$scope\", \"searchService\", \"$routeParams\"];\r\n function SearchModifierController($scope, searchService, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.searchService = searchService;\r\n this.$routeParams = $routeParams;\r\n $scope.search = function (searchText) {\r\n return searchService.getClinicalModifier($routeParams.practiceId, $scope.encounterId, searchText)\r\n .then(function (modifiers) {\r\n $scope.config.caption = searchText;\r\n $scope.list = _this.customizeList(modifiers);\r\n });\r\n };\r\n $scope.selectModifier = function (modifier) {\r\n $scope.onSelect(modifier, $scope.config.searchText);\r\n };\r\n $scope.config = {\r\n searchText: $scope.searchtext,\r\n notClearField: true,\r\n lineClick: true,\r\n caption: $scope.searchtext,\r\n minLength: 3,\r\n title: [\r\n { columnName: 'Charge code', style: { width: 115 + 'px' }, hstyle: { width: 115 + 'px' } },\r\n { columnName: 'Description', style: {}, hstyle: {} }\r\n ],\r\n placeholder: { value: 'Please type in a modifier description or charge code' }\r\n };\r\n }\r\n SearchModifierController.prototype.customizeList = function (list) {\r\n var clist = [];\r\n var fields = ['ChargeCode', 'ChargeDesc'];\r\n for (var _i = 0; _i < list.length; _i++) {\r\n var listItem = list[_i];\r\n var item = {\r\n fields: [],\r\n object: listItem\r\n };\r\n for (var _a = 0; _a < fields.length; _a++) {\r\n var field = fields[_a];\r\n item.fields.push({\r\n value: (function () {\r\n if (listItem[field].length > 200) {\r\n return listItem[field].slice(0, 200).concat('...');\r\n }\r\n return listItem[field];\r\n })()\r\n });\r\n }\r\n clist.push(item);\r\n }\r\n return clist;\r\n };\r\n SearchModifierController.factory = function () {\r\n var instance = function () {\r\n var directive = {};\r\n directive.restrict = 'EA';\r\n directive.scope = {\r\n onSelect: '=',\r\n searchtext: '=',\r\n encounterId: '='\r\n };\r\n directive.templateUrl = 'screens/consultation/modifiers/modal/dialog/search-modifier.html';\r\n directive.controller = SearchModifierController;\r\n return directive;\r\n };\r\n return instance;\r\n };\r\n return SearchModifierController;\r\n })();\r\n ModifierModule.SearchModifierController = SearchModifierController;\r\n})(ModifierModule || (ModifierModule = {}));\r\nangular.module('DoctorApp')\r\n .directive('searchModifier', ModifierModule.SearchModifierController.factory());\r\nvar ConsultationReportModule;\r\n(function (ConsultationReportModule) {\r\n var ControllerAbstract = (function () {\r\n ControllerAbstract.$inject = [\"$scope\", \"$timeout\", \"$routeParams\", \"consultationReportService\"];\r\n function ControllerAbstract($scope, $timeout, $routeParams, consultationReportService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.$routeParams = $routeParams;\r\n this.consultationReportService = consultationReportService;\r\n $scope.next = function () {\r\n _this.consultationReportService.changeScreen($routeParams.practiceId, $routeParams.patientId, ConsultationReportModule.Service.NEXT, _this.reportType);\r\n };\r\n $scope.back = function () {\r\n _this.consultationReportService.changeScreen($routeParams.practiceId, $routeParams.patientId, ConsultationReportModule.Service.PREW, _this.reportType);\r\n };\r\n $scope.sendEmail = function (title) {\r\n if (title === void 0) { title = \"\"; }\r\n var attachment = {\r\n Title: title,\r\n Type: _this.consultationReportService.getReportStringType(_this.reportType),\r\n HtmlBody: $scope.reportHtml\r\n };\r\n _this.consultationReportService.sendReportByEmail($routeParams.practiceId, $routeParams.patientId, [attachment]);\r\n };\r\n $scope.print = function () {\r\n var mywindow = window.open('', 'my div', 'height=500,width=750');\r\n mywindow.document.open();\r\n mywindow.document.write($scope.reportHtml);\r\n _this.$timeout(function () {\r\n mywindow.document.close();\r\n mywindow.focus();\r\n mywindow.print();\r\n mywindow.close();\r\n }, 200);\r\n };\r\n $scope.save = function () {\r\n _this.consultationReportService.openPdf($routeParams.practiceId, $scope.reportHtml);\r\n };\r\n }\r\n ControllerAbstract.prototype.init = function () {\r\n var _this = this;\r\n this.$scope.isNext = this.consultationReportService.isNext(this.reportType);\r\n return this.consultationReportService.getReportBody(this.reportType, this.$routeParams.practiceId)\r\n .then(function (reportHtml) {\r\n _this.$scope.reportHtml = reportHtml || \"\";\r\n return _this.$scope.reportHtml;\r\n })\r\n .catch(function (result) {\r\n _this.$scope.reportHtml = \"\";\r\n return result;\r\n });\r\n };\r\n ControllerAbstract.prototype.injectHtmlIntoReport = function (html) {\r\n var _this = this;\r\n var template = '';\r\n this.$timeout(function () {\r\n var container = angular.element(document).find(\"#report-container\");\r\n container.append(template);\r\n _this.$timeout(function () {\r\n var reportIframe = angular.element(document).find(\"#report-frame\");\r\n if (html.indexOf('') > -1) {\r\n reportIframe.contents()\r\n .find('head')\r\n .append(html.slice(html.indexOf('') + 6, html.indexOf('')));\r\n }\r\n if (html.indexOf('') > -1) {\r\n reportIframe.contents()\r\n .find('body')\r\n .append(html.slice(html.indexOf('') + 6, html.indexOf('')));\r\n }\r\n else {\r\n reportIframe.contents()\r\n .find('body')\r\n .append(html);\r\n }\r\n var contentHeight = reportIframe.contents().find('body').height();\r\n var reportPadding = 20;\r\n reportIframe.height(contentHeight + reportPadding + 'px');\r\n });\r\n });\r\n };\r\n return ControllerAbstract;\r\n })();\r\n ConsultationReportModule.ControllerAbstract = ControllerAbstract;\r\n})(ConsultationReportModule || (ConsultationReportModule = {}));\r\nangular.module(\"DoctorApp\")\r\n .controller(\"ConsultationReportController\", ConsultationReportModule.ControllerAbstract);\r\n/// \r\nvar ConsultationReportModule;\r\n(function (ConsultationReportModule) {\r\n var PrescriptionController = (function (_super) {\r\n __extends(PrescriptionController, _super);\r\n PrescriptionController.$inject = [\"$scope\", \"$timeout\", \"$routeParams\", \"consultationReportService\", \"$controller\"];\r\n function PrescriptionController($scope, $timeout, $routeParams, consultationReportService, $controller) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.$routeParams = $routeParams;\r\n this.consultationReportService = consultationReportService;\r\n this.$controller = $controller;\r\n _super.call(this, $scope, $timeout, $routeParams, consultationReportService);\r\n var parent = $controller('ConsultationReportController', { $scope: $scope });\r\n angular.extend(this, parent);\r\n $scope.title = \"Prescription letter\";\r\n this.reportType = parent.reportType = EncounterModule.ReportType.Prescription;\r\n this.init()\r\n .then(function (reportHtml) {\r\n _this.injectHtmlIntoReport(reportHtml);\r\n });\r\n }\r\n return PrescriptionController;\r\n })(ConsultationReportModule.ControllerAbstract);\r\n ConsultationReportModule.PrescriptionController = PrescriptionController;\r\n})(ConsultationReportModule || (ConsultationReportModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ConsultationPrescriptionController', ConsultationReportModule.PrescriptionController);\r\n/// \r\n/// \r\nvar ConsultationReportModule;\r\n(function (ConsultationReportModule) {\r\n var SiknoteController = (function (_super) {\r\n __extends(SiknoteController, _super);\r\n SiknoteController.$inject = [\"$scope\", \"$timeout\", \"$routeParams\", \"consultationReportService\", \"$controller\"];\r\n function SiknoteController($scope, $timeout, $routeParams, consultationReportService, $controller) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$timeout = $timeout;\r\n this.$routeParams = $routeParams;\r\n this.consultationReportService = consultationReportService;\r\n this.$controller = $controller;\r\n _super.call(this, $scope, $timeout, $routeParams, consultationReportService);\r\n var parent = $controller('ConsultationReportController', { $scope: $scope });\r\n angular.extend(this, parent);\r\n this.reportType = parent.reportType = EncounterModule.ReportType.MedicalCertificate;\r\n var reportHeader = \"\";\r\n $scope.title = \"Medical certificate letter\";\r\n $scope.editHtml = \"\";\r\n $scope.tinymceOptions = {\r\n selector: 'textarea',\r\n plugins: 'link table preview',\r\n toolbar: 'undo redo | bold italic | fontsizeselect | bullist numlist outdent indent | alignleft aligncenter alignright | file',\r\n fontsize_formats: '8pt 10pt 12pt 14pt 18pt 24pt 36pt',\r\n skin_url: GlobalVar.isProd ? 'styles/tinymce/skins/lightgray' : '',\r\n visual: false,\r\n browser_spellcheck: true,\r\n contextmenu: false,\r\n statusbar: false,\r\n valid_children: \"+body,+head\",\r\n extended_valid_elements: 'body,head',\r\n init_instance_callback: function (editor) {\r\n _this.editorInst = editor;\r\n var interval;\r\n editor.on('change', function () {\r\n if (interval) {\r\n $timeout.cancel(interval);\r\n }\r\n interval = $timeout(function () {\r\n $scope.reportHtml = parent.reportHtml = \"\" + reportHeader + \"\" + \"\" + editor.getContent() + \"\";\r\n }, 100);\r\n });\r\n _this.configEditor();\r\n }\r\n };\r\n this.init()\r\n .then(function (reportHtml) {\r\n if (reportHtml) {\r\n reportHeader = reportHtml.slice(reportHtml.indexOf('') + 6, reportHtml.indexOf(''));\r\n _this.$scope.editHtml = reportHtml;\r\n _this.configEditor();\r\n }\r\n });\r\n }\r\n SiknoteController.prototype.configEditor = function () {\r\n var _this = this;\r\n this.$timeout(function () {\r\n if (_this.editorInst) {\r\n var contentWraper = $(_this.editorInst.contentAreaContainer);\r\n var content = $(_this.editorInst.iframeElement);\r\n var height = content.contents().find('body').height();\r\n var padding = 100;\r\n content.height(height + padding + 'px');\r\n contentWraper.css('overflow', 'auto');\r\n }\r\n }, 100);\r\n };\r\n return SiknoteController;\r\n })(ConsultationReportModule.ControllerAbstract);\r\n ConsultationReportModule.SiknoteController = SiknoteController;\r\n})(ConsultationReportModule || (ConsultationReportModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ConsultationSiknoteController', ConsultationReportModule.SiknoteController);\r\nvar FailedInvoices;\r\n(function (FailedInvoices) {\r\n var FailedInvoicesController = (function () {\r\n FailedInvoicesController.$inject = [\"$scope\", \"httpService\", \"billingDomain\", \"modalService\", \"locationService\", \"$routeParams\"];\r\n function FailedInvoicesController($scope, httpService, billingDomain, modalService, locationService, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.httpService = httpService;\r\n this.billingDomain = billingDomain;\r\n this.modalService = modalService;\r\n this.locationService = locationService;\r\n this.$routeParams = $routeParams;\r\n $scope.list = [];\r\n $scope.send = function (invoice) {\r\n _this.billingDomain.sendInvoiceManually(invoice.PracticeId, invoice.InvoiceId, null)\r\n .then(function () {\r\n $scope.init();\r\n });\r\n };\r\n $scope.retryAllAutomatic = function () {\r\n for (var _i = 0, _a = _this.$scope.list; _i < _a.length; _i++) {\r\n var invoice = _a[_i];\r\n if (invoice.SendingType == \"automatic\") {\r\n _this.$scope.retry(invoice);\r\n }\r\n }\r\n };\r\n $scope.retry = function (invoice) {\r\n _this.billingDomain.retrySendingInvoice(invoice.PracticeId, invoice.InvoiceId, invoice.Reason)\r\n .then(function (response) {\r\n if (!response.Sucess) {\r\n modalService.error(response.ResponseMessage);\r\n }\r\n });\r\n };\r\n $scope.abort = function (invoice) {\r\n modalService.confirm(\"Are you sure want to abort sending invoice\")\r\n .then(function () {\r\n return _this.billingDomain.abortSendingInvoice(invoice.PracticeId, invoice.InvoiceId, null);\r\n })\r\n .then(function (response) {\r\n if (!response.Sucess) {\r\n modalService.error(response.ResponseMessage);\r\n }\r\n else {\r\n $scope.init();\r\n }\r\n });\r\n };\r\n $scope.openFullText = function (reason) {\r\n if (reason.length > 34) {\r\n modalService.info(reason, ModalModule.ModalWidth._550px);\r\n }\r\n };\r\n $scope.openInvoice = function (item) {\r\n _this.locationService.goToAuditEvents(\"BIL:INV:\" + item.PracticeId, item.InvoiceId);\r\n };\r\n $scope.init = function () {\r\n _this.billingDomain.getFailedInvoices()\r\n .then(function (list) {\r\n $scope.list = list;\r\n });\r\n };\r\n $scope.init();\r\n }\r\n return FailedInvoicesController;\r\n })();\r\n FailedInvoices.FailedInvoicesController = FailedInvoicesController;\r\n})(FailedInvoices || (FailedInvoices = {}));\r\nangular.module('DoctorApp')\r\n .controller('FailedInvoicesController', FailedInvoices.FailedInvoicesController);\r\n/// \r\n/// \r\n/// \r\nvar HealthDocModule;\r\n(function (HealthDocModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$sce\", \"$scope\", \"$rootScope\", \"$routeParams\", \"$log\", \"providerService\", \"authService\", \"httpService\", \"showDialog\", \"usageService\", \"dashboardService\", \"storageService\"];\r\n function Controller($sce, $scope, $rootScope, $routeParams, $log, providerService, authService, httpService, showDialog, usageService, dashboardService, storageService) {\r\n \"ngInject\";\r\n this.$sce = $sce;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.$log = $log;\r\n this.providerService = providerService;\r\n this.authService = authService;\r\n this.httpService = httpService;\r\n this.showDialog = showDialog;\r\n this.usageService = usageService;\r\n this.dashboardService = dashboardService;\r\n this.storageService = storageService;\r\n $scope.isNoFile = false;\r\n $scope.title = \"Health Doc\";\r\n $scope.historyIndex = window.history.length;\r\n $scope.back = function () {\r\n var newPosition = window.history.length;\r\n window.history.go(-(newPosition - $scope.historyIndex + 1));\r\n };\r\n var param = storageService.getParam(\"HealthDoc\");\r\n $scope.link = (param) ? this.$sce.trustAsResourceUrl(param.Description) : \"\";\r\n usageService.openHealthDocs($routeParams.practiceId, $routeParams.patientId);\r\n }\r\n return Controller;\r\n })();\r\n HealthDocModule.Controller = Controller;\r\n})(HealthDocModule || (HealthDocModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('HealthDocController', HealthDocModule.Controller);\r\n/// \r\n/// \r\n/// \r\nvar HealthDocModule;\r\n(function (HealthDocModule) {\r\n var PatientFileController = (function () {\r\n PatientFileController.$inject = [\"$sce\", \"$scope\", \"$rootScope\", \"$routeParams\", \"$log\", \"providerService\", \"authService\", \"$timeout\", \"httpService\", \"showDialog\", \"usageService\", \"dashboardService\", \"storageService\"];\r\n function PatientFileController($sce, $scope, $rootScope, $routeParams, $log, providerService, authService, $timeout, httpService, showDialog, usageService, dashboardService, storageService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$sce = $sce;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.$log = $log;\r\n this.providerService = providerService;\r\n this.authService = authService;\r\n this.$timeout = $timeout;\r\n this.httpService = httpService;\r\n this.showDialog = showDialog;\r\n this.usageService = usageService;\r\n this.dashboardService = dashboardService;\r\n this.storageService = storageService;\r\n var startWidth = 0;\r\n $scope.zoom = 100;\r\n $scope.isFit = false;\r\n $scope.enableZooming = false;\r\n $scope.isNoFile = false;\r\n $scope.title = \"myPatientFiles\";\r\n $scope.historyIndex = window.history.length;\r\n $scope.back = function () {\r\n var newPosition = window.history.length;\r\n window.history.go(-(newPosition - $scope.historyIndex + 1));\r\n };\r\n $scope.zoomIn = function () {\r\n if ($scope.enableZooming) {\r\n var img = $('#iframe-container').contents().find('img');\r\n var currentWidth = img.width();\r\n $scope.isFit = false;\r\n img.width(currentWidth + currentWidth / 4);\r\n var zoom = img.width() / startWidth;\r\n $scope.zoom = Math.round((zoom > 2 ? 2 : zoom) * 100);\r\n }\r\n };\r\n $scope.zoomOut = function () {\r\n if ($scope.enableZooming) {\r\n var img = $('#iframe-container').contents().find('img');\r\n var currentWidth = img.width();\r\n img.width(currentWidth - currentWidth / 4);\r\n $scope.isFit = false;\r\n var zoom = img.width() / startWidth;\r\n $scope.zoom = Math.round((zoom < 0.1 ? 0.1 : zoom) * 100);\r\n }\r\n };\r\n $scope.fit = function () {\r\n if ($scope.enableZooming) {\r\n var img = $('#iframe-container').contents().find('img');\r\n img.width('100%');\r\n $scope.isFit = true;\r\n var zoom = img.width() / startWidth;\r\n $scope.zoom = Math.round(zoom * 100);\r\n }\r\n };\r\n $scope.realSize = function () {\r\n if ($scope.enableZooming) {\r\n var img = $('#iframe-container').contents().find('img');\r\n $scope.isFit = false;\r\n img.width(startWidth);\r\n var zoom = img.width() / startWidth;\r\n $scope.zoom = Math.round((zoom < 0.1 ? 0.1 : zoom) * 100);\r\n }\r\n };\r\n this.dashboardService.getDocumentInfoById($routeParams.practiceId, $routeParams.documentId)\r\n .then(function (documentInfo) {\r\n var documentUrl = _this.dashboardService.getDocumentUrl($routeParams.practiceId, documentInfo.DocumentUrl);\r\n $scope.link = _this.$sce.trustAsResourceUrl(documentUrl);\r\n var isImg = documentUrl.search(/.(jpg|png|jpeg|JPEG|JPG|PNG)/) > -1;\r\n if (isImg) {\r\n $timeout(function () {\r\n var body = $('#iframe-container').contents().find('body');\r\n body.css('text-align', 'center');\r\n startWidth = body.find(\"img\").width();\r\n body.find(\"img\").css('height', 'auto');\r\n $scope.isFit = false;\r\n $scope.zoom = 100;\r\n $scope.enableZooming = true;\r\n }, 1000);\r\n }\r\n });\r\n }\r\n return PatientFileController;\r\n })();\r\n HealthDocModule.PatientFileController = PatientFileController;\r\n})(HealthDocModule || (HealthDocModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('PatientFileController', HealthDocModule.PatientFileController);\r\n/// \r\n/// \r\n/// \r\nvar HealthIdModule;\r\n(function (HealthIdModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$sce\", \"$scope\", \"$rootScope\", \"$routeParams\", \"$log\", \"providerService\", \"authService\", \"httpService\", \"usageService\", \"showDialog\"];\r\n function Controller($sce, $scope, $rootScope, $routeParams, $log, providerService, authService, httpService, usageService, showDialog) {\r\n \"ngInject\";\r\n this.$sce = $sce;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.$log = $log;\r\n this.providerService = providerService;\r\n this.authService = authService;\r\n this.httpService = httpService;\r\n this.usageService = usageService;\r\n this.showDialog = showDialog;\r\n var patientId = $routeParams.patientId;\r\n $scope.historyIndex = window.history.length;\r\n $scope.back = function () {\r\n var newPosition = window.history.length;\r\n window.history.go(-(newPosition - $scope.historyIndex + 1));\r\n };\r\n this.openHealthIdForPatient($routeParams.practiceId, patientId);\r\n usageService.openHealthID($routeParams.practiceId, $routeParams.patientId);\r\n }\r\n Controller.prototype.openHealthIdForPatient = function (practiceId, patientId) {\r\n var _this = this;\r\n this.providerService.getProviderOptions(practiceId)\r\n .then(function (options) {\r\n var healthIdProviderCredentials = options.healthIDProviderCredentials;\r\n if (healthIdProviderCredentials) {\r\n _this.httpService.get(\"v1/\" +\r\n practiceId +\r\n \"/healthid/patient/\" +\r\n patientId)\r\n .then(function (response) {\r\n _this.$scope.link = _this.$sce.trustAsResourceUrl(response.link);\r\n if (!response.token) {\r\n _this.showDialog.error(response.message);\r\n }\r\n });\r\n }\r\n });\r\n };\r\n return Controller;\r\n })();\r\n HealthIdModule.Controller = Controller;\r\n})(HealthIdModule || (HealthIdModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('HealthIDController', HealthIdModule.Controller);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar home;\r\n(function (home) {\r\n var Service = (function () {\r\n Service.$inject = [\"patientDomain\", \"$q\", \"storageService\", \"$rootScope\", \"$timeout\", \"$http\", \"memoryService\", \"providerService\", \"locationService\", \"clinicalDomain\", \"encounterServiceNew\"];\r\n function Service(patientDomain, $q, storageService, $rootScope, $timeout, $http, memoryService, providerService, locationService, clinicalDomain, encounterServiceNew) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.patientDomain = patientDomain;\r\n this.$q = $q;\r\n this.storageService = storageService;\r\n this.$rootScope = $rootScope;\r\n this.$timeout = $timeout;\r\n this.$http = $http;\r\n this.memoryService = memoryService;\r\n this.providerService = providerService;\r\n this.locationService = locationService;\r\n this.clinicalDomain = clinicalDomain;\r\n this.encounterServiceNew = encounterServiceNew;\r\n $rootScope.$on('WaitingRoomUpdated', function () {\r\n var practiceId = _this.storageService.getPracticeId();\r\n _this.getCheckInPatients(practiceId);\r\n });\r\n }\r\n Service.prototype.getPatients = function (practiceId, patientName) {\r\n this.memoryService.home.searchText = patientName;\r\n return this.patientDomain.getPatientsByName(practiceId, patientName);\r\n };\r\n Service.prototype.getPatientsFromNationalDb = function (practiceId, patientName) {\r\n return this.patientDomain.getMasterPatientsByName(practiceId, patientName);\r\n };\r\n Service.prototype.checkInPatientVisit = function (practiceId, patient) {\r\n return this.patientDomain.checkPatientVisit(practiceId, patient);\r\n };\r\n Service.prototype.addToWaitingRoom = function (practiceId, patientId) {\r\n return this.patientDomain.addToWaitingRoom(practiceId, patientId);\r\n };\r\n Service.prototype.getCheckInPatients = function (practiceId) {\r\n var _this = this;\r\n return this.patientDomain.getWaitingRoomPatients(practiceId)\r\n .then(function (response) {\r\n if (response) {\r\n _this.checkedInPatients = response;\r\n _this.$rootScope.$emit('CheckedInPatientsUpdated', response);\r\n }\r\n return response;\r\n });\r\n };\r\n Service.prototype.getCachedCheckInPatients = function (practiceId) {\r\n if (!this.checkedInPatients) {\r\n return this.getCheckInPatients(practiceId);\r\n }\r\n else {\r\n var d = this.$q.defer();\r\n d.resolve(this.checkedInPatients);\r\n return d.promise;\r\n }\r\n };\r\n Service.prototype.importPatientAndCheckIn = function (practiceId, patient) {\r\n return this.patientDomain.importPatientAndCheckIn(practiceId, patient);\r\n };\r\n Service.prototype.removePatient = function (practiceId, patientId) {\r\n return this.patientDomain.removePatient(practiceId, patientId);\r\n };\r\n Service.prototype.getPatientById = function (practiceId, patientId) {\r\n return this.patientDomain.getPatientById(practiceId, patientId);\r\n };\r\n Service.prototype.cancelPatientEvent = function (practiceId, patientEventId) {\r\n return this.patientDomain.cancelPatientEvent(practiceId, patientEventId);\r\n };\r\n Service.prototype.visitAction = function (patientEvent) {\r\n patientEvent.CheckedIn = true;\r\n this.locationService.goToClinicalDashboard(patientEvent.PracticeId, patientEvent.Patient.PatientId);\r\n };\r\n Service.prototype.getVersion = function () {\r\n return this.$http.get('version.json?' + new Date().getTime())\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n };\r\n Service.prototype.saveSearchText = function (searchText) {\r\n this.memoryService.home.searchText = searchText;\r\n };\r\n Service.prototype.getSearchText = function () {\r\n return this.memoryService.home.searchText;\r\n };\r\n Service.prototype.getClinicalInboxCount = function (practiceId) {\r\n return this.clinicalDomain.getPathologyReportWorkflowsCount(practiceId);\r\n };\r\n return Service;\r\n })();\r\n home.Service = Service;\r\n})(home || (home = {}));\r\nangular.module('DoctorApp')\r\n .service('homeService', home.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar Home;\r\n(function (Home) {\r\n var ModalWidth = ModalModule.ModalWidth;\r\n var Collapse = (function () {\r\n function Collapse() {\r\n }\r\n return Collapse;\r\n })();\r\n Home.Collapse = Collapse;\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$rootScope\", \"dashboardService\", \"modalService\", \"invoiceService\", \"encounterServiceNew\", \"notificationService\", \"$filter\", \"practiceService\", \"billingDomain\", \"locationService\", \"signalrService\", \"$log\", \"$q\", \"homeService\", \"moment\", \"providerService\", \"$routeParams\", \"storageService\", \"trackingService\"];\r\n function Controller($scope, $rootScope, dashboardService, modalService, invoiceService, encounterServiceNew, notificationService, $filter, practiceService, billingDomain, locationService, signalrService, $log, $q, homeService, moment, providerService, $routeParams, storageService, trackingService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.dashboardService = dashboardService;\r\n this.modalService = modalService;\r\n this.invoiceService = invoiceService;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.notificationService = notificationService;\r\n this.$filter = $filter;\r\n this.practiceService = practiceService;\r\n this.billingDomain = billingDomain;\r\n this.locationService = locationService;\r\n this.signalrService = signalrService;\r\n this.$log = $log;\r\n this.$q = $q;\r\n this.homeService = homeService;\r\n this.moment = moment;\r\n this.providerService = providerService;\r\n this.$routeParams = $routeParams;\r\n this.storageService = storageService;\r\n this.trackingService = trackingService;\r\n var that = this;\r\n if (this.storageService.getPracticeId() !== $routeParams.practiceId) {\r\n practiceService.updateLocalPracticeById($routeParams.practiceId)\r\n .then(function (practice) {\r\n $scope.practice = practice;\r\n });\r\n }\r\n trackingService.defineUser(this.storageService.getUser().userId);\r\n $scope.changeSearch = function (searchText) {\r\n homeService.saveSearchText(searchText);\r\n _this.clearPatients();\r\n if (!searchText) {\r\n return;\r\n }\r\n homeService.getPatients($routeParams.practiceId, searchText)\r\n .then(function (patients) {\r\n $scope.patients = patients;\r\n });\r\n if (Common.isNumber(searchText)) {\r\n homeService.getPatientsFromNationalDb($routeParams.practiceId, searchText)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n $scope.accessDB = false;\r\n }\r\n else {\r\n $scope.accessDB = true;\r\n $scope.patientsDB = response.Data;\r\n }\r\n });\r\n }\r\n else {\r\n $scope.accessDB = true;\r\n }\r\n };\r\n $scope.concatPatient = function (patientDetails) {\r\n var fullName = (patientDetails.FirstName || '') + ' ' + (patientDetails.Surname || '');\r\n return $filter('titlecase')(fullName);\r\n };\r\n $scope.goToCreatePatient = function () {\r\n locationService.goToCreatePatient($routeParams.practiceId);\r\n };\r\n $scope.getPatientVisitType = function (type) {\r\n if (type === \"RegularConsultation\") {\r\n return \"Regular Consultation\";\r\n }\r\n if (type === \"NoCharge\") {\r\n return \"No charge (follow-up)\";\r\n }\r\n if (type === \"OutOfRooms\") {\r\n return \"Out of rooms\";\r\n }\r\n if (type === \"MedicalInsurance\") {\r\n return \"Medical insurance\";\r\n }\r\n if (type === \"ChronicVisit\") {\r\n return \"Chronic visit\";\r\n }\r\n if (type === \"MedicalCheckUp\") {\r\n return \"Medical check-up\";\r\n }\r\n if (type === \"AntenatalCheckup\") {\r\n return \"Antenatal check-up\";\r\n }\r\n return type;\r\n };\r\n $scope.loadAvatar = function (patient) {\r\n return _this.dashboardService.getAvatar(_this.$routeParams.practiceId, patient.PatientId)\r\n .then(function (document) {\r\n if (document) {\r\n return _this.dashboardService.getDocumentUrl(_this.$routeParams.practiceId, document.ThumbnailUrl) + \"&r=\" + document.FileName;\r\n }\r\n return null;\r\n });\r\n };\r\n $scope.goToChangePatient = function (patientId) {\r\n locationService.goToChangePatient($routeParams.practiceId, patientId);\r\n };\r\n $scope.showDoctorNote = function (visit) {\r\n if ($scope.isIHealthProvider) {\r\n _this.locationService.goToClinicalDashboard(visit.PracticeId, visit.Patient.PatientId);\r\n }\r\n else {\r\n _this.modalService.info(visit.ProviderNote);\r\n }\r\n };\r\n $scope.checkInPatient = function (patient) {\r\n if (patient) {\r\n homeService.addToWaitingRoom($routeParams.practiceId, patient.PatientId)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n modalService.error(response.ResponseMessage);\r\n }\r\n else if (response.Data.PatientAlreadyCheckedIn) {\r\n modalService.error(\"This patient is already checked in\");\r\n }\r\n else {\r\n if (response.Data.PatientDetailsIncomplete) {\r\n $scope.goToChangePatient(patient.PatientId);\r\n $rootScope.PatientDetailsIncomplete = true;\r\n }\r\n $scope.loadCheckedInPatients();\r\n $scope.isDisabled = true;\r\n setTimeout(function () {\r\n _this.$scope.isDisabled = false;\r\n }, 200);\r\n }\r\n });\r\n }\r\n };\r\n $scope.isDisabled = false;\r\n $scope.goToClinicalDashboard = function (patientId) {\r\n _this.locationService.goToClinicalDashboard($routeParams.practiceId, patientId);\r\n };\r\n $scope.actionVisit = function (patientEvent) {\r\n homeService.visitAction(patientEvent);\r\n };\r\n $scope.cancelVisit = function (patientEvent) {\r\n var that = _this;\r\n if (patientEvent.PatientEventXRef) {\r\n var dateMoment = moment.utc(patientEvent.CheckInTime, 'YYYY-MM-DDTHH:mm:ssZ');\r\n var fullName = $scope.concatPatient(patientEvent.Patient.PatientDetails);\r\n var dateMessage = dateMoment.isValid() ?\r\n ' (check in time ' + dateMoment.format('DD/MM/YYYY HH:mm:ss') + ')' :\r\n '';\r\n var message = 'Do you want to cancel the visit for ' + fullName + dateMessage + ' ?';\r\n modalService.confirm(message)\r\n .then(function () {\r\n that.cancelPatientVisit($routeParams.practiceId, patientEvent);\r\n });\r\n }\r\n else {\r\n _this.cancelPatientVisit($routeParams.practiceId, patientEvent);\r\n }\r\n };\r\n $scope.loadCheckedInPatients = function () {\r\n homeService.getCheckInPatients($routeParams.practiceId)\r\n .then(function (newCheckedInPatients) {\r\n $scope.checkedInPatients = $filter(\"filter\")(newCheckedInPatients, { Status: 1 });\r\n var backItems = $filter(\"filter\")(newCheckedInPatients, { Status: 0 });\r\n if (backItems) {\r\n for (var i = 0; i < backItems.length; i++) {\r\n if (backItems[i].CheckInTime != null) {\r\n $scope.checkedInPatients.push(backItems[i]);\r\n }\r\n }\r\n }\r\n $scope.inProgressPatients = $filter(\"filter\")(newCheckedInPatients, { Status: 2 });\r\n });\r\n };\r\n $scope.goToCheckPatientData = function (patient) {\r\n homeService.importPatientAndCheckIn($routeParams.practiceId, patient)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n modalService.error(response.ResponseMessage);\r\n }\r\n else {\r\n $scope.loadCheckedInPatients();\r\n if (response.Data.PatientDetailsIncomplete) {\r\n $rootScope.PatientDetailsIncomplete = true;\r\n return response.Data.PatientId;\r\n }\r\n }\r\n return $q.reject();\r\n })\r\n .then(function (patientId) {\r\n $scope.goToChangePatient(patientId);\r\n });\r\n };\r\n $scope.goToDashboard = function (patient) {\r\n locationService.goToClinicalDashboard($routeParams.practiceId, patient.PatientId);\r\n };\r\n $scope.openNotification = function (notification) {\r\n modalService.showNotification(notification)\r\n .then(function () {\r\n _this.getNotifications();\r\n });\r\n };\r\n $scope.markNotificationViewed = function (notification) {\r\n _this.notificationService.markNotificationViewed(notification.ProviderId, notification.NotificationId)\r\n .then(function () {\r\n _this.getNotifications();\r\n });\r\n };\r\n $scope.markAllNotificationsViewed = function () {\r\n if ($scope.notifications.length) {\r\n var that = _this;\r\n $q.all($scope.notifications.map(function (notification) {\r\n return that.notificationService.markNotificationViewed(notification.ProviderId, notification.NotificationId);\r\n })).then(function (response) {\r\n _this.getNotifications();\r\n });\r\n }\r\n };\r\n that.init();\r\n var pathReportSubscription$ = $rootScope.$on('PathReportReceived', function () {\r\n _this.getClinicalMessageCount();\r\n });\r\n var waitingRoomSubscription$ = $rootScope.$on('WaitingRoomUpdated', function () {\r\n $scope.loadCheckedInPatients();\r\n });\r\n var notificationsSubscription$ = $rootScope.$on('NotificationsUpdated', function () {\r\n _this.getNotifications();\r\n });\r\n $scope.$on('$destroy', function () {\r\n notificationsSubscription$();\r\n waitingRoomSubscription$();\r\n pathReportSubscription$();\r\n });\r\n }\r\n Controller.prototype.init = function () {\r\n var _this = this;\r\n var $scope = this.$scope;\r\n var $rootScope = this.$rootScope;\r\n $rootScope.tabselection = undefined;\r\n $rootScope.selectedPatient = undefined;\r\n $rootScope.PatientDetailsIncomplete = false;\r\n $scope.searchText = this.homeService.getSearchText();\r\n $scope.checkedInPatients = [];\r\n $scope.patients = [];\r\n $scope.patientsDB = [];\r\n $scope.accessDB = true;\r\n $scope.collapse = {\r\n waitingRoom: true,\r\n practicePatients: true,\r\n nationalPatients: true,\r\n inProgress: true\r\n };\r\n $scope.practice = this.storageService.getPractice();\r\n this.invoiceService.setConsultationDate(null);\r\n this.encounterServiceNew.setConsultationDate(null);\r\n this.practiceService.updateLocalPractice(this.$routeParams.practiceId, false);\r\n this.getNotifications();\r\n this.getClinicalMessageCount();\r\n $scope.loadCheckedInPatients();\r\n $scope.changeSearch($scope.searchText);\r\n if (GlobalVar.isProd) {\r\n this.homeService.getVersion()\r\n .then(function (response) {\r\n _this.setVersionDiff(response.clientVersion);\r\n _this.$scope.needRefresh = GlobalVar.clientVersion !== response.clientVersion;\r\n });\r\n }\r\n this.billingDomain.getProvider(this.$routeParams.practiceId)\r\n .then(function (provider) {\r\n var options = _this.providerService.buildProviderOptions(provider);\r\n _this.$scope.myPatientFilesEnabled = options.myPatientFilesEnabled;\r\n _this.$scope.isIHealthProvider = !!provider.PracticeXRef && provider.PracticeXRef.startsWith('iHealth');\r\n if (options.isHealthbridgeClinicalEnabled && !options.isDrAppAccessAllowed) {\r\n _this.trackingService.logHbcRedirect();\r\n window.open(GlobalVar.hbcUrl, '_self');\r\n }\r\n else {\r\n var currentDay = _this.moment().format('DD,dddd');\r\n if (['082', '091', '004', '027', '052', '075', '081', '007', '066', '068', '086', '085', '088', '089', '084', '072'].indexOf(provider.SpecialityCode) < 0\r\n && currentDay != options.lastSeenImportantNotice) {\r\n _this.modalService.info('Important Notice' +\r\n '

The Dr App system will be decommissioned on 31 October 2021 and replaced by Healthbridge Clinical,' +\r\n ' our new and improved electronic medical record. ' +\r\n '

Healthbridge Clinical is free until 31 January 2022.' +\r\n '

Click here to activate your free Healthbridge Clinical trial.', ModalWidth._500px).then(function () {\r\n _this.providerService.saveProviderOption(provider.PracticeId, \"LastSeenImportantNotice\", currentDay);\r\n });\r\n }\r\n }\r\n });\r\n };\r\n Controller.prototype.setVersionDiff = function (jsonVersion) {\r\n var majorIndex = 0;\r\n var minorIndex = 1;\r\n var patchIndex = 2;\r\n var newVersionArr = jsonVersion.split('.');\r\n var currentVersionArr = GlobalVar.clientVersion.split('.');\r\n var upgradeType = App.VersionDiff.NoDiff;\r\n if (parseInt(newVersionArr[majorIndex]) > parseInt(currentVersionArr[majorIndex]) ||\r\n parseInt(newVersionArr[minorIndex]) > parseInt(currentVersionArr[minorIndex])) {\r\n upgradeType = App.VersionDiff.Mandatory;\r\n }\r\n else if (newVersionArr[patchIndex] !== currentVersionArr[patchIndex]) {\r\n upgradeType = App.VersionDiff.NoMandatory;\r\n }\r\n this.$rootScope.versionDifference = upgradeType;\r\n };\r\n Controller.prototype.clearPatients = function () {\r\n this.$scope.patients = [];\r\n this.$scope.patientsDB = [];\r\n };\r\n Controller.prototype.getNotifications = function () {\r\n var _this = this;\r\n this.notificationService.getNotifications(this.$routeParams.practiceId)\r\n .then(function (response) {\r\n if (response) {\r\n _this.$scope.notifications = response;\r\n }\r\n });\r\n };\r\n Controller.prototype.getClinicalMessageCount = function () {\r\n var _this = this;\r\n this.homeService.getClinicalInboxCount(this.$routeParams.practiceId)\r\n .then(function (count) {\r\n if (count && count > 0) {\r\n _this.$scope.clinicalMessageCount = count;\r\n }\r\n });\r\n };\r\n Controller.prototype.cancelPatientVisit = function (practiceId, patientEvent) {\r\n var _this = this;\r\n var cancelPatientEvent = function () {\r\n _this.homeService.cancelPatientEvent(practiceId, patientEvent.PatientEventId)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n _this.modalService.error(\"Failed to cancel patient visit \" + response.ResponseMessage);\r\n }\r\n else {\r\n _this.$scope.loadCheckedInPatients();\r\n }\r\n });\r\n };\r\n if (patientEvent.Status === 2) {\r\n this.modalService.confirm('You are about to remove the patient without completing the encounter.' +\r\n '
All captured information may be lost if you do so. Would you like to remove them?')\r\n .then(cancelPatientEvent);\r\n }\r\n else {\r\n cancelPatientEvent();\r\n }\r\n };\r\n return Controller;\r\n })();\r\n Home.Controller = Controller;\r\n})(Home || (Home = {}));\r\nangular.module('DoctorApp')\r\n .controller('HomeController', Home.Controller);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar LoginModule;\r\n(function (LoginModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$rootScope\", \"authService\", \"showDialog\", \"$q\", \"loginService\", \"storageService\"];\r\n function Controller($scope, $rootScope, authService, showDialog, $q, loginService, storageService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.authService = authService;\r\n this.showDialog = showDialog;\r\n this.$q = $q;\r\n this.loginService = loginService;\r\n this.storageService = storageService;\r\n $scope.submitLoginForm = function (isValid) {\r\n if (isValid) {\r\n _this.login($scope.userName, $scope.password);\r\n }\r\n else {\r\n showDialog.error(\"Please enter valid login/password.\");\r\n }\r\n };\r\n this.init();\r\n }\r\n Controller.prototype.init = function () {\r\n };\r\n Controller.prototype.login = function (userName, password) {\r\n var _this = this;\r\n return this.loginService.login(userName, password)\r\n .then(function (response) {\r\n var token = _this.authService.parseTokenDetails(response.data.access_token);\r\n _this.storageService.setAuthorizationData({\r\n token: response.data.access_token,\r\n userName: token.payload.full_name\r\n });\r\n _this.storageService.setUser({\r\n isAuth: true,\r\n role: token.payload.role,\r\n name: token.payload.full_name,\r\n userLogin: userName,\r\n userId: token.payload.user_id\r\n });\r\n _this.authService.refreshAuthorization();\r\n }).catch(function (error) {\r\n _this.authService.logOut();\r\n if (error.data && error.data.error_description) {\r\n _this.showDialog.error(error.data.error_description);\r\n }\r\n });\r\n };\r\n return Controller;\r\n })();\r\n LoginModule.Controller = Controller;\r\n})(LoginModule || (LoginModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('LoginController', LoginModule.Controller);\r\nvar NotificationModule;\r\n(function (NotificationModule) {\r\n var NotificationSendController = (function () {\r\n NotificationSendController.$inject = [\"$scope\", \"$q\", \"moment\", \"$timeout\", \"modalService\", \"practiceService\", \"providerService\", \"notificationService\"];\r\n function NotificationSendController($scope, $q, moment, $timeout, modalService, practiceService, providerService, notificationService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$q = $q;\r\n this.moment = moment;\r\n this.$timeout = $timeout;\r\n this.modalService = modalService;\r\n this.practiceService = practiceService;\r\n this.providerService = providerService;\r\n this.notificationService = notificationService;\r\n $scope.selectedRules = [];\r\n $scope.providersFilter = 'all';\r\n $scope.actions = [];\r\n $scope.tinymceOptions = {\r\n selector: 'textarea',\r\n plugins: 'link table preview code template paste',\r\n toolbar: 'code | template | undo redo | bold italic | fontsizeselect | bullist numlist outdent indent | alignleft aligncenter alignright | file',\r\n fontsize_formats: '8pt 10pt 12pt 14pt 18pt 24pt 36pt',\r\n skin_url: GlobalVar.isProd ? 'styles/tinymce/skins/lightgray' : '',\r\n visual: false,\r\n browser_spellcheck: true,\r\n contextmenu: false,\r\n statusbar: false,\r\n paste_data_images: true,\r\n valid_children: \"+body[style],+body,+head\",\r\n extended_valid_elements: 'body,head',\r\n templates: [\r\n { title: 'Treating Doctor Name', description: 'Paste Treating Doctor Name', content: '{TreatingDoctorName}' },\r\n { title: 'Treating Practice Number', description: 'Paste Treating Practice Number', content: '{TreatingPracticeNumber}' },\r\n { title: 'Speciality Description', description: 'Paste Speciality Description', content: '{SpecialityDescription}' },\r\n { title: 'Practice Name', description: 'Paste Practice Name', content: '{PracticeName}' },\r\n { title: 'Practice Number', description: 'Paste Practice Number', content: '{PracticeNumber}' }\r\n ],\r\n init_instance_callback: function (editor) {\r\n var contentWraper = $(editor.contentAreaContainer);\r\n var content = $(editor.iframeElement);\r\n var interval;\r\n editor.on('change', function () {\r\n if (interval) {\r\n $timeout.cancel(interval);\r\n }\r\n interval = $timeout(function () {\r\n var content = editor.getContent();\r\n if (content.search(/ -1) {\r\n $scope.body = editor.getContent().replace(/ 0 && provider[0];\r\n }).filter(function (s) { return !!s; });\r\n var notFoundCount = splittedIds.length - _this.$scope.providers.length;\r\n var notFoundIds = splittedIds.map(function (s) { return s.trim(); })\r\n .map(function (s) { return $scope.providers.filter(function (d) { return d.PracticeId === s; }).length > 0 ? null : s; })\r\n .filter(function (s) { return !!s; });\r\n $scope.practiceIds = _this.$scope.providers.length + ' Providers';\r\n if (notFoundCount > 0) {\r\n $scope.practiceIds = $scope.practiceIds + ', not found (' + notFoundCount + '): ' + notFoundIds.join(\", \");\r\n }\r\n }\r\n };\r\n $scope.submitNotifications = function (isValid) {\r\n if ($scope.providersFilter === 'bySpeciality') {\r\n var rulesArr = $scope.selectedRules.map(function (rule) { return rule.SpecialityCode.match(/\\d+/).shift(); });\r\n $scope.providers = $scope.allProviders\r\n .filter(function (provider) { return rulesArr.indexOf(provider.SpecialityCode) > -1; });\r\n }\r\n if (!$scope.providers.length && $scope.providersFilter !== 'fromFileUpload') {\r\n modalService.error('Please select providers');\r\n return;\r\n }\r\n if (isValid && $scope.body.length > 0) {\r\n if ($scope.providersFilter === 'fromFileUpload') {\r\n var file = document.getElementById('files').files[0];\r\n if (file == undefined || file === null) {\r\n modalService.error('Please select a .csv file to upload');\r\n return;\r\n }\r\n var formData = new FormData();\r\n formData.append('file', file);\r\n formData.append('Date', moment.utc().format(ServerDateFormat));\r\n formData.append('Context', $scope.context);\r\n formData.append('Subject', $scope.subject);\r\n formData.append('Category', $scope.category);\r\n formData.append('Body', _this.htmlEntities($scope.body));\r\n formData.append('BodyType', 'html');\r\n formData.append('Actions', JSON.stringify($scope.actions));\r\n _this.bulkSendFromFile(formData);\r\n }\r\n else {\r\n var notifications = $scope.providers\r\n .map(function (provider) {\r\n var date = moment.utc();\r\n var notification = {\r\n NotificationId: \"\",\r\n NotificationXRef: \"\",\r\n ProviderId: provider.PracticeId,\r\n Date: date.format(ServerDateFormat),\r\n Context: $scope.context,\r\n Subject: $scope.subject,\r\n Category: $scope.category,\r\n Body: _this.parseBody($scope.body, provider),\r\n BodyType: 'html',\r\n Actions: $scope.actions,\r\n Data: {}\r\n };\r\n return notification;\r\n });\r\n if (notifications && notifications.length > 0) {\r\n _this.bulkSend(notifications);\r\n }\r\n }\r\n }\r\n else {\r\n modalService.error('Please enter all required info');\r\n }\r\n };\r\n practiceService.getAllPractices()\r\n .then(function (providers) {\r\n $scope.allProviders = angular.copy(providers);\r\n $scope.providers = providers;\r\n return practiceService.getSpecialityRules();\r\n })\r\n .then(function (rules) {\r\n $scope.rules = rules.map(function (rule) {\r\n var providers = $scope.allProviders.filter(function (provider) { return provider.SpecialityCode === rule.SpecialityCode; }).length;\r\n rule.SpecialityCode += ' (' + providers + ' provider' + (providers !== 1 ? 's' : '') + ')';\r\n return rule;\r\n });\r\n });\r\n }\r\n NotificationSendController.prototype.bulkSend = function (notifications) {\r\n var _this = this;\r\n var itemsInPart = 100;\r\n var partOfNotifications = notifications.splice(0, itemsInPart);\r\n this.notificationService.notificationBulk(partOfNotifications)\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n if (notifications.length > 0) {\r\n _this.bulkSend(notifications);\r\n }\r\n else {\r\n _this.modalService.info(\"Notification was sent successfully to \" +\r\n _this.$scope.providers.length +\r\n ' provider' +\r\n (_this.$scope.providers.length > 1 ? 's' : ''));\r\n }\r\n }\r\n else {\r\n _this.modalService.error(response.ResponseMessage);\r\n }\r\n });\r\n };\r\n NotificationSendController.prototype.bulkSendFromFile = function (formData) {\r\n this.notificationService.notificationBulkFromFile(formData).then(function () { return console.log('tet'); });\r\n };\r\n NotificationSendController.prototype.parseBody = function (body, provider) {\r\n if (body === void 0) { body = \"\"; }\r\n return body.replace(/{\\w+}/g, function (str) {\r\n var prop = str.replace(/[{}]/g, '');\r\n return provider[prop] || \"\";\r\n });\r\n };\r\n NotificationSendController.prototype.encodeHTML = function (rawStr) {\r\n return rawStr.replace(/[\\u00A0-\\u9999<>\\&]/gim, function (i) {\r\n return '&#' + i.charCodeAt(0) + ';';\r\n });\r\n };\r\n NotificationSendController.prototype.htmlEntities = function (str) {\r\n return String(str).replace(/&/g, '&').replace(//g, '>').replace(/\"/g, '"');\r\n };\r\n return NotificationSendController;\r\n })();\r\n NotificationModule.NotificationSendController = NotificationSendController;\r\n})(NotificationModule || (NotificationModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('NotificationSendController', NotificationModule.NotificationSendController);\r\n/// \r\n/// \r\n/// \r\nvar MedicalHistoryModule;\r\n(function (MedicalHistoryModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"tenantDomainService\", \"clinicalDomain\", \"moment\", \"providerService\"];\r\n function Service(httpService, tenantDomainService, clinicalDomain, moment, providerService) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.tenantDomainService = tenantDomainService;\r\n this.clinicalDomain = clinicalDomain;\r\n this.moment = moment;\r\n this.providerService = providerService;\r\n }\r\n Service.prototype.getTenants = function () {\r\n return this.tenantDomainService.getTenantList()\r\n .then(function (response) {\r\n if (response) {\r\n return response;\r\n }\r\n return [];\r\n });\r\n };\r\n Service.prototype.getConditionCodesList = function () {\r\n return [\"J45\", \"B31\", \"I50\", \"J44\", \"E10\", \"E11\", \"I10\", \"E78.0\"];\r\n };\r\n Service.prototype.getAllergiesList = function () {\r\n return [\r\n [\r\n new MedicalHistoryModule.AllergyItem('Dairy', '226760005', 'food'),\r\n new MedicalHistoryModule.AllergyItem('Fish', '227037002', 'food'),\r\n new MedicalHistoryModule.AllergyItem('Shellfish', '227146005', 'food'),\r\n new MedicalHistoryModule.AllergyItem('Other Nuts', '13577000', 'food'),\r\n new MedicalHistoryModule.AllergyItem('Peanut', '91935009', 'food'),\r\n new MedicalHistoryModule.AllergyItem('Gluten sensitivity', '89811004', 'food'),\r\n new MedicalHistoryModule.AllergyItem('Wheat', '420174000', 'food')\r\n ], [\r\n new MedicalHistoryModule.AllergyItem('Penicillin', '373270004', 'medicine'),\r\n new MedicalHistoryModule.AllergyItem('Sulphur', '43735007', 'medicine'),\r\n new MedicalHistoryModule.AllergyItem('NSAID sensitivity', '372665008', 'medicine'),\r\n new MedicalHistoryModule.AllergyItem('Aspirin', '293586001', 'medicine')\r\n ], [\r\n new MedicalHistoryModule.AllergyItem('Dust', '406466009', 'environmental'),\r\n new MedicalHistoryModule.AllergyItem('Pollen', '40646007', 'environmental')\r\n ]\r\n ];\r\n };\r\n Service.prototype.updateAllergies = function (practiceId, patientId, patientAllergies) {\r\n var body = {\r\n PatientAllergies: patientAllergies\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) + \"patientallergies/\" + patientId + \"/revise\", body);\r\n };\r\n Service.prototype.getPatientAllergies = function (practiceId, patientId) {\r\n return this.httpService.get(this.getUrl(practiceId) + \"patientallergies/\" + patientId);\r\n };\r\n Service.prototype.updatePatientNotes = function (practiceId, patientId, patientNotes) {\r\n var body = {\r\n PatientClinicalNotes: patientNotes\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) + \"patientclinicalnotes/\" + patientId + \"/revise\", body);\r\n };\r\n Service.prototype.getPatientClinicalNotes = function (practiceId, patientId) {\r\n return this.httpService.get(this.getUrl(practiceId) + \"patientclinicalnotes/\" + patientId);\r\n };\r\n Service.prototype.getPatientChronicConditions = function (practiceId, patientId) {\r\n return this.httpService.get(this.getUrl(practiceId) + \"patientchronicconditions/\" + patientId);\r\n };\r\n Service.prototype.getChronicCondition = function (practiceId) {\r\n return this.httpService.get(this.getUrl(practiceId) + \"chroniccondition\");\r\n };\r\n Service.prototype.getChronicConditionSearch = function (practiceId, searchText) {\r\n return this.httpService.get(this.getUrl(practiceId) + \"chroniccondition/\" + searchText);\r\n };\r\n Service.prototype.updateChronicConditions = function (practiceId, patientId, patientConditions) {\r\n var body = {\r\n ChronicConditions: patientConditions\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) + \"patientchronicconditions/\" + patientId + \"/revise\", body);\r\n };\r\n Service.prototype.getUrl = function (practiceId) {\r\n return \"v1/\" + practiceId + \"/clinical/\";\r\n };\r\n return Service;\r\n })();\r\n MedicalHistoryModule.Service = Service;\r\n})(MedicalHistoryModule || (MedicalHistoryModule = {}));\r\nangular.module('DoctorApp')\r\n .service('medicalHistoryService', MedicalHistoryModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar MedicalHistoryModule;\r\n(function (MedicalHistoryModule) {\r\n var PatientAllergies = Domain.Clinical.PatientAllergies;\r\n var PatientAllergy = Domain.Clinical.PatientAllergy;\r\n var Allergy = Domain.Clinical.Allergy;\r\n var PatientChronicConditions = Domain.Clinical.PatientChronicConditions;\r\n var Other = (function () {\r\n function Other() {\r\n }\r\n return Other;\r\n })();\r\n MedicalHistoryModule.Other = Other;\r\n var ConditionItem = (function () {\r\n function ConditionItem(condition) {\r\n this.condition = condition;\r\n this.selected = false;\r\n }\r\n return ConditionItem;\r\n })();\r\n MedicalHistoryModule.ConditionItem = ConditionItem;\r\n var AllergyItem = (function () {\r\n function AllergyItem(name, code, category) {\r\n this.selected = false;\r\n this.name = name;\r\n this.code = code;\r\n this.category = category;\r\n }\r\n return AllergyItem;\r\n })();\r\n MedicalHistoryModule.AllergyItem = AllergyItem;\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$filter\", \"$rootScope\", \"$routeParams\", \"$q\", \"$log\", \"showDialog\", \"modalService\", \"moment\", \"medicalHistoryService\", \"locationService\", \"providerService\", \"trackingService\"];\r\n function Controller($scope, $filter, $rootScope, $routeParams, $q, $log, showDialog, modalService, moment, medicalHistoryService, locationService, providerService, trackingService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$filter = $filter;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.$q = $q;\r\n this.$log = $log;\r\n this.showDialog = showDialog;\r\n this.modalService = modalService;\r\n this.moment = moment;\r\n this.medicalHistoryService = medicalHistoryService;\r\n this.locationService = locationService;\r\n this.providerService = providerService;\r\n this.trackingService = trackingService;\r\n var patientId = $routeParams.patientId;\r\n $scope.patientId = patientId;\r\n $scope.inputFormat = 'YYYY-MM-DD HH:mm:ss';\r\n $scope.outputFormat = 'DD MMM, YYYY';\r\n $scope.memoryClinicalNotes = \"\";\r\n $scope.memoryOther = \"\";\r\n $scope.selectedItems = [];\r\n $scope.memorySelectedItems = [];\r\n $scope.conditionItemsList = [];\r\n $scope.memoryConditionItemsList = [];\r\n $scope.goBack = function () {\r\n var isConditionsChanged = _this.isConditionsChanged();\r\n var isAllergiesChanged = _this.isAllergiesChanged();\r\n var isNotesChanged = _this.isNotesChanged();\r\n var isOthersChanged = _this.isOthersChanged();\r\n if (isConditionsChanged || isAllergiesChanged || isNotesChanged || isOthersChanged) {\r\n showDialog.confirm('You have not saved your changes.
Would you like to save your changes before navigating away?', ModalModule.ModalWidth._400px, true)\r\n .then(function (result) {\r\n if (result) {\r\n $q.all([\r\n _this.updatePatientAllergies(),\r\n _this.updatePatientNotes(),\r\n _this.updatePatientConditions()\r\n ]).finally(function () {\r\n $rootScope.back();\r\n });\r\n }\r\n else {\r\n $rootScope.back();\r\n }\r\n });\r\n }\r\n else {\r\n $rootScope.back();\r\n }\r\n };\r\n $scope.other = {\r\n selected: false,\r\n value: \"\"\r\n };\r\n $scope.patientClinicalNotes = {\r\n Note: \"\"\r\n };\r\n $scope.selectNone = function () {\r\n $scope.selectedItems = [];\r\n $scope.other.selected = false;\r\n $scope.other.value = '';\r\n for (var _i = 0, _a = $scope.allergiesList; _i < _a.length; _i++) {\r\n var allergyGroup = _a[_i];\r\n for (var _b = 0; _b < allergyGroup.length; _b++) {\r\n var allergyItem = allergyGroup[_b];\r\n allergyItem.selected = false;\r\n }\r\n }\r\n };\r\n $scope.allergiesList = medicalHistoryService.getAllergiesList();\r\n $scope.addMore = function () {\r\n modalService.showConditionsDetails()\r\n .then(function (condition) {\r\n var selectedConditions = $filter('filter')($scope.conditionItemsList, condition.DiagnosisCode, true);\r\n if (selectedConditions.length === 0) {\r\n var conditionItem = new ConditionItem(condition);\r\n conditionItem.selected = true;\r\n $scope.conditionItemsList.push(conditionItem);\r\n }\r\n else {\r\n selectedConditions[0].selected = true;\r\n }\r\n });\r\n };\r\n $scope.changeOther = function (other) {\r\n if (!$scope.other.selected) {\r\n $scope.other.value = \"\";\r\n }\r\n };\r\n $scope.changeItem = function (item) {\r\n if (item.selected) {\r\n $scope.selectedItems.push(item);\r\n }\r\n else {\r\n var indexOf = $scope.selectedItems.indexOf(item);\r\n if (indexOf !== -1) {\r\n $scope.selectedItems.splice(indexOf, 1);\r\n }\r\n }\r\n };\r\n $scope.updateRecords = function () {\r\n $q.all([\r\n _this.updatePatientAllergies(),\r\n _this.updatePatientNotes(),\r\n _this.updatePatientConditions()\r\n ]).finally(function () {\r\n $rootScope.back();\r\n });\r\n };\r\n this.init();\r\n }\r\n Controller.prototype.init = function () {\r\n var _this = this;\r\n var that = this;\r\n var patientId = this.$routeParams.patientId;\r\n var practiceId = this.$routeParams.practiceId;\r\n this.medicalHistoryService.getPatientClinicalNotes(practiceId, patientId)\r\n .then(function (result) {\r\n if (result) {\r\n that.$scope.patientClinicalNotes = result;\r\n that.$scope.memoryClinicalNotes = that.$scope.patientClinicalNotes.Note || \"\";\r\n }\r\n });\r\n this.medicalHistoryService.getPatientAllergies(practiceId, patientId)\r\n .then(function (result) {\r\n that.$scope.allergies = result;\r\n if (result && result.PatientAllergies) {\r\n for (var k = 0; k < result.PatientAllergies.length; k++) {\r\n var item = result.PatientAllergies[k];\r\n var allergiesList = _this.$scope.allergiesList;\r\n for (var i = 0; i < allergiesList.length; i++) {\r\n var allergiesColumn = allergiesList[i];\r\n for (var j = 0; j < allergiesColumn.length; j++) {\r\n if (allergiesColumn[j].code === item.Allergen.Code) {\r\n allergiesColumn[j].selected = true;\r\n _this.$scope.selectedItems.push(allergiesColumn[j]);\r\n }\r\n }\r\n }\r\n }\r\n _this.$scope.memorySelectedItems = _this.$scope.selectedItems.map(function (item) { return item.name; });\r\n if (result.Other) {\r\n that.$scope.other.selected = true;\r\n that.$scope.other.value = result.Other;\r\n }\r\n _this.$scope.memoryOther = that.$scope.other.value || \"\";\r\n _this.$scope.noAllergies = result.NoAllergies;\r\n }\r\n });\r\n this.medicalHistoryService.getChronicCondition(this.$routeParams.practiceId)\r\n .then(function (conditionsFullList) {\r\n var conditionItemsList = [];\r\n var conditionBaseCodes = _this.medicalHistoryService.getConditionCodesList();\r\n for (var _i = 0; _i < conditionsFullList.length; _i++) {\r\n var conditionListItem = conditionsFullList[_i];\r\n var index = conditionBaseCodes.indexOf(conditionListItem.DiagnosisCode);\r\n if (index >= 0) {\r\n conditionItemsList[index] = new ConditionItem(conditionListItem);\r\n }\r\n }\r\n _this.$scope.conditionItemsList = conditionItemsList.filter(function (item) { return item !== (undefined || ''); });\r\n _this.updateConditionsList();\r\n });\r\n };\r\n Controller.prototype.isAllergiesChanged = function () {\r\n return !angular.equals(this.$scope.selectedItems.map(function (item) { return item.name; }), this.$scope.memorySelectedItems);\r\n };\r\n Controller.prototype.isConditionsChanged = function () {\r\n return !angular.equals(this.$scope.conditionItemsList.filter(function (item) { return item.selected; }).map(function (item) { return item.condition.Name; }), this.$scope.memoryConditionItemsList);\r\n };\r\n Controller.prototype.isOthersChanged = function () {\r\n return !angular.equals(this.$scope.memoryOther, this.$scope.other.value);\r\n };\r\n Controller.prototype.isNotesChanged = function () {\r\n return !angular.equals(this.$scope.memoryClinicalNotes, this.$scope.patientClinicalNotes.Note);\r\n };\r\n Controller.prototype.updatePatientAllergies = function () {\r\n var _this = this;\r\n var patientAllergies = [];\r\n var allergiesList = this.$scope.selectedItems;\r\n for (var i = 0; i < allergiesList.length; i++) {\r\n var item = allergiesList[i];\r\n var allergen = new Allergy();\r\n allergen.Code = item.code;\r\n allergen.Description = item.name;\r\n var patientAllergy = new PatientAllergy();\r\n patientAllergy.Allergen = allergen;\r\n var capturedTime = moment.utc().format(DATE_TIME_PATTERN);\r\n if (this.$scope.allergies && this.$scope.allergies.PatientAllergies) {\r\n for (var k = 0; k < this.$scope.allergies.PatientAllergies.length; k++) {\r\n var allergie = this.$scope.allergies.PatientAllergies[k];\r\n if (allergie.Allergen.Code === item.code) {\r\n capturedTime = allergie.CapturedDate;\r\n }\r\n }\r\n }\r\n patientAllergy.CapturedDate = capturedTime;\r\n patientAllergies.push(patientAllergy);\r\n }\r\n var allergies = new PatientAllergies();\r\n if (this.$scope.allergies) {\r\n allergies = this.$scope.allergies;\r\n }\r\n allergies.NoAllergies = this.$scope.noAllergies;\r\n allergies.Other = this.$scope.other.value;\r\n allergies.PatientAllergies = patientAllergies;\r\n return this.medicalHistoryService\r\n .updateAllergies(this.$routeParams.practiceId, this.$scope.patientId, allergies)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n _this.showDialog.error(response.ResponseMessage);\r\n }\r\n });\r\n };\r\n Controller.prototype.updatePatientConditions = function () {\r\n var _this = this;\r\n var conditions = [];\r\n var patientConditions = new PatientChronicConditions();\r\n for (var _i = 0, _a = this.$scope.conditionItemsList; _i < _a.length; _i++) {\r\n var conditionListItem = _a[_i];\r\n var capturedTime = moment.utc().format(DATE_TIME_PATTERN);\r\n if (conditionListItem.selected) {\r\n var item = {\r\n CapturedDate: capturedTime,\r\n Condition: conditionListItem.condition\r\n };\r\n conditions.push(item);\r\n }\r\n }\r\n patientConditions.Id = this.$scope.patientConditions && this.$scope.patientConditions.Id || \"\";\r\n patientConditions.Conditions = conditions;\r\n return this.medicalHistoryService\r\n .updateChronicConditions(this.$routeParams.practiceId, this.$routeParams.patientId, patientConditions)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n _this.showDialog.error(response.ResponseMessage);\r\n }\r\n });\r\n };\r\n Controller.prototype.updatePatientNotes = function () {\r\n var _this = this;\r\n var patientNote = {};\r\n if (this.$scope.patientClinicalNotes) {\r\n patientNote = this.$scope.patientClinicalNotes;\r\n }\r\n patientNote.CapturedDate = moment.utc().format(DATE_TIME_PATTERN);\r\n return this.medicalHistoryService.updatePatientNotes(this.$routeParams.practiceId, this.$scope.patientId, patientNote)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n _this.showDialog.error(response.ResponseMessage);\r\n }\r\n });\r\n };\r\n Controller.prototype.updateConditionsList = function () {\r\n var _this = this;\r\n this.medicalHistoryService\r\n .getPatientChronicConditions(this.$routeParams.practiceId, this.$routeParams.patientId)\r\n .then(function (response) {\r\n if (response) {\r\n _this.$scope.patientConditions = response;\r\n var conditions = _this.$scope.patientConditions.Conditions;\r\n var conditionBaseCodes = _this.medicalHistoryService.getConditionCodesList();\r\n for (var _i = 0; _i < conditions.length; _i++) {\r\n var patientCondition = conditions[_i];\r\n for (var _a = 0, _b = _this.$scope.conditionItemsList; _a < _b.length; _a++) {\r\n var conditionItem = _b[_a];\r\n if (conditionItem.condition.DiagnosisCode ===\r\n patientCondition.Condition.DiagnosisCode) {\r\n conditionItem.selected = true;\r\n }\r\n }\r\n if (conditionBaseCodes.indexOf(patientCondition.Condition.DiagnosisCode) < 0) {\r\n var conditionNewItem = new ConditionItem(patientCondition.Condition);\r\n conditionNewItem.selected = true;\r\n _this.$scope.conditionItemsList.push(conditionNewItem);\r\n }\r\n }\r\n }\r\n else {\r\n _this.$scope.patientConditions = new PatientChronicConditions();\r\n }\r\n _this.$scope.memoryConditionItemsList = _this.$scope.conditionItemsList.filter(function (item) { return item.selected; }).map(function (item) { return item.condition.Name; });\r\n });\r\n };\r\n return Controller;\r\n })();\r\n MedicalHistoryModule.Controller = Controller;\r\n})(MedicalHistoryModule || (MedicalHistoryModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('MedicalHistoryController', MedicalHistoryModule.Controller);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar SearchModule;\r\n(function (SearchModule) {\r\n var ControllerAbstract = (function () {\r\n ControllerAbstract.$inject = [\"$rootScope\", \"$scope\", \"encounterServiceNew\", \"invoiceService\", \"$q\", \"moment\", \"$location\", \"showDialog\", \"searchService\"];\r\n function ControllerAbstract($rootScope, $scope, encounterServiceNew, invoiceService, $q, moment, $location, showDialog, searchService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.invoiceService = invoiceService;\r\n this.$q = $q;\r\n this.moment = moment;\r\n this.$location = $location;\r\n this.showDialog = showDialog;\r\n this.searchService = searchService;\r\n var caption;\r\n $scope.searchTemplate = function (func, searchText, practiceId) {\r\n var deferred = $q.defer();\r\n caption = searchText;\r\n $scope.config.caption = searchText;\r\n $scope.searchResults = [];\r\n func(practiceId, $scope.eventId, searchText, _this.dateOfService)\r\n .then(function (results) {\r\n $scope.searchResults = results;\r\n deferred.resolve();\r\n }, function () {\r\n deferred.resolve();\r\n });\r\n return deferred.promise;\r\n };\r\n $scope.selectTemplate = function (template, templateType) {\r\n var obj = {};\r\n if (templateType == SearchModule.SearchType.DIAGNOSIS) {\r\n if ($scope.isClinical) {\r\n obj.EncounterLineItems = { EncounterHeader: template.EncounterHeader };\r\n }\r\n else {\r\n obj.InvoiceLineItemsVo = { InvoiceHeader: template.InvoiceHeader };\r\n }\r\n }\r\n else if (templateType == SearchModule.SearchType.PRESCRIPTION) {\r\n obj.MedicationPrescriptionLines = [template];\r\n }\r\n else {\r\n if ($scope.isClinical) {\r\n obj.EncounterLineItems = { LineItems: template.LineItems, EncounterHeader: {} };\r\n }\r\n else {\r\n obj.InvoiceLineItemsVo = { LineItems: template.LineItems };\r\n }\r\n }\r\n obj.TemplateType = SearchModule.SearchTypeUtil.getType(templateType);\r\n obj.Caption = caption;\r\n searchService.saveSelectedTemplate(obj);\r\n $rootScope.back();\r\n };\r\n $scope.customizeList = function (list, fields) {\r\n var res = [];\r\n for (var i = 0; i < list.length; i++) {\r\n var searchItem = list[i];\r\n var item = {\r\n fields: [],\r\n object: searchItem\r\n };\r\n var header = $scope.isClinical ? 'EncounterHeader' : 'InvoiceHeader';\r\n var lineItem = searchItem.LineItems ? searchItem.LineItems[0] : searchItem[header].Diagnosis[0];\r\n for (var j = 0; j < fields.length; j++) {\r\n item.fields[j] = { value: lineItem[fields[j]] };\r\n }\r\n res[i] = item;\r\n }\r\n return res;\r\n };\r\n this.init();\r\n }\r\n ControllerAbstract.prototype.init = function () {\r\n var ENCOUNTER = 'encounter';\r\n var INVOICE = 'invoice';\r\n var hash = this.$location.hash();\r\n this.$scope.isClinical = !!(hash && hash == 'clinical');\r\n this.$scope.searchResults = [];\r\n this.service = this.$scope.isClinical ? this.encounterServiceNew : this.invoiceService;\r\n this.eventName = this.$scope.isClinical ? ENCOUNTER : INVOICE;\r\n var consultationDate = this.encounterServiceNew.getConsultationDate() || this.moment();\r\n this.dateOfService = consultationDate.format(serverDateFormat);\r\n this.$scope.eventId = this.searchService.eventId || '00000000-0000-0000-0000-000000000000';\r\n };\r\n return ControllerAbstract;\r\n })();\r\n SearchModule.ControllerAbstract = ControllerAbstract;\r\n})(SearchModule || (SearchModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SearchAbstractController', SearchModule.ControllerAbstract);\r\n/// \r\n/// \r\n/// \r\nvar ModalModule;\r\n(function (ModalModule) {\r\n var ConditionsController = (function () {\r\n ConditionsController.$inject = [\"$scope\", \"$filter\", \"medicalHistoryService\", \"$controller\", \"$routeParams\", \"$modalInstance\"];\r\n function ConditionsController($scope, $filter, medicalHistoryService, $controller, $routeParams, $modalInstance) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$filter = $filter;\r\n this.medicalHistoryService = medicalHistoryService;\r\n this.$controller = $controller;\r\n this.$routeParams = $routeParams;\r\n this.$modalInstance = $modalInstance;\r\n angular.extend(this, $controller('SearchAbstractController', { $scope: $scope }));\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss();\r\n };\r\n $scope.search = function (searchText) {\r\n medicalHistoryService.getChronicConditionSearch($routeParams.practiceId, searchText)\r\n .then(function (conditions) {\r\n $scope.list = _this.customizeList(conditions);\r\n $scope.config.caption = searchText;\r\n });\r\n };\r\n $scope.config = {\r\n title: [\r\n { columnName: 'ICD10', style: { width: 70 + 'px' }, hstyle: { width: 70 + 'px' } },\r\n { columnName: 'Description', style: {}, hstyle: {} }\r\n ],\r\n placeholder: { value: 'Please type in a condition' }\r\n };\r\n $scope.addCondition = function (condition) {\r\n $modalInstance.close(condition);\r\n };\r\n }\r\n ConditionsController.prototype.customizeList = function (list) {\r\n var clist = [];\r\n var fields = ['DiagnosisCode', 'Name'];\r\n for (var _i = 0; _i < list.length; _i++) {\r\n var listItem = list[_i];\r\n var item = {\r\n fields: [],\r\n object: listItem\r\n };\r\n for (var _a = 0; _a < fields.length; _a++) {\r\n var field = fields[_a];\r\n item.fields.push({ value: listItem[field] });\r\n }\r\n clist.push(item);\r\n }\r\n return clist;\r\n };\r\n return ConditionsController;\r\n })();\r\n ModalModule.ConditionsController = ConditionsController;\r\n})(ModalModule || (ModalModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('ConditionsController', ModalModule.ConditionsController);\r\n/// \r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var PatientEvent;\r\n (function (PatientEvent) {\r\n var PatientEventResult = (function () {\r\n function PatientEventResult(date, events) {\r\n this.Date = date;\r\n this.PatientEvents = events;\r\n }\r\n return PatientEventResult;\r\n })();\r\n PatientEvent.PatientEventResult = PatientEventResult;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"authService\", \"moment\"];\r\n function Service(httpService, authService, moment) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.authService = authService;\r\n this.moment = moment;\r\n }\r\n Service.prototype.getPatientEvents = function (practiceId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'patientevents');\r\n };\r\n Service.prototype.getPatientEventByPatientId = function (practiceId, patientId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'patientevents/bypatient/' + patientId);\r\n };\r\n Service.prototype.getPatientEventsByFilter = function (practiceId, filter) {\r\n var body = {\r\n PracticeId: filter.practiceId || practiceId,\r\n DaysToReturn: filter.daysToReturn || 7,\r\n DateFrom: filter.dateFrom.format(),\r\n DateTo: filter.dateTo.format(),\r\n ExcludeStatuses: filter.excludeStatuses\r\n };\r\n return this.httpService.post(this.getUrl(practiceId) + 'patientevents', body);\r\n };\r\n Service.prototype.getMedicalinsurers = function (practiceId) {\r\n return this.httpService.get(this.getUrl(practiceId) + 'medicalinsurer');\r\n };\r\n Service.prototype.getUrl = function (practiceId) {\r\n return 'v1/' + practiceId + '/patientevent/';\r\n };\r\n return Service;\r\n })();\r\n PatientEvent.Service = Service;\r\n })(PatientEvent = Domain.PatientEvent || (Domain.PatientEvent = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('patientEventDomain', Domain.PatientEvent.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar PatientVisits;\r\n(function (PatientVisits) {\r\n var Service = (function () {\r\n Service.$inject = [\"patientService\", \"patientEventDomain\", \"$q\", \"memoryService\", \"providerService\", \"locationService\", \"clinicalDomain\"];\r\n function Service(patientService, patientEventDomain, $q, memoryService, providerService, locationService, clinicalDomain) {\r\n \"ngInject\";\r\n this.patientService = patientService;\r\n this.patientEventDomain = patientEventDomain;\r\n this.$q = $q;\r\n this.memoryService = memoryService;\r\n this.providerService = providerService;\r\n this.locationService = locationService;\r\n this.clinicalDomain = clinicalDomain;\r\n }\r\n Service.prototype.getPatientEvents = function (practiceId) {\r\n return this.patientEventDomain.getPatientEvents(practiceId);\r\n };\r\n Service.prototype.getPatientEventsByFilter = function (practiceId, filter) {\r\n return this.patientEventDomain.getPatientEventsByFilter(practiceId, filter);\r\n };\r\n Service.prototype.goToPatientTimeline = function (practiceId, patientId) {\r\n this.locationService.goToClinicalDashboard(practiceId, patientId);\r\n };\r\n Service.prototype.goToConsultation = function (practiceId, patientEvent) {\r\n var _this = this;\r\n this.isClinical(practiceId, patientEvent.PatientEventId)\r\n .then(function (isClinical) {\r\n if (isClinical) {\r\n _this.locationService.goToEncounter(practiceId, patientEvent.PatientEventId);\r\n }\r\n else {\r\n _this.goToPatientTimeline(practiceId, patientEvent.Patient.PatientId);\r\n }\r\n });\r\n };\r\n Service.prototype.isClinical = function (practiceId, patientEventId) {\r\n return this.clinicalDomain.getEncounterByPatientVisit(practiceId, patientEventId, null, true)\r\n .then(function (newEncounter) {\r\n return true;\r\n }, function (error) {\r\n var notFound = 'not found';\r\n if (notFound == error.toLowerCase()) {\r\n return false;\r\n }\r\n });\r\n };\r\n return Service;\r\n })();\r\n PatientVisits.Service = Service;\r\n})(PatientVisits || (PatientVisits = {}));\r\nangular.module('DoctorApp')\r\n .service('patientVisitsService', PatientVisits.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar PatientVisits;\r\n(function (PatientVisits) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$rootScope\", \"patientService\", \"showDialog\", \"$filter\", \"moment\", \"patientVisitsService\", \"$log\", \"$routeParams\"];\r\n function Controller($scope, $rootScope, patientService, showDialog, $filter, moment, patientVisitsService, $log, $routeParams) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.patientService = patientService;\r\n this.showDialog = showDialog;\r\n this.$filter = $filter;\r\n this.moment = moment;\r\n this.patientVisitsService = patientVisitsService;\r\n this.$log = $log;\r\n this.$routeParams = $routeParams;\r\n var that = this;\r\n $scope.keyPressed = function (event) {\r\n that.keyEvent = event;\r\n };\r\n $scope.concatPatient = function (patientDetails) {\r\n return that.$filter('titlecase')(patientDetails.FirstName || '') + ' ' + (patientDetails.Surname || '');\r\n };\r\n $scope.goToConsultation = function (patientEvent) {\r\n patientVisitsService.goToConsultation(patientEvent.PracticeId, patientEvent);\r\n };\r\n $scope.claimResponse = function (patientEvent) {\r\n if (that.keyEvent && that.keyEvent.altKey) {\r\n if (that.keyEvent.key == Controller.Q_KEY ||\r\n that.keyEvent.which == 17 ||\r\n that.keyEvent.charCode == Controller.Q_CHAR_CODE) {\r\n patientService.claimResponse(patientEvent);\r\n }\r\n else if (that.keyEvent.key == Controller.W_KEY ||\r\n that.keyEvent.which == 18 ||\r\n that.keyEvent.charCode == Controller.W_CHAR_CODE) {\r\n patientService.auditEvent($routeParams.practiceId, patientEvent);\r\n }\r\n }\r\n };\r\n $scope.changeFilter = function () {\r\n that.loadPatientVisits();\r\n };\r\n $scope.changeFilterByDate = function (first) {\r\n if (first) {\r\n $scope.configTo.min = $scope.dateFrom;\r\n }\r\n else {\r\n $scope.configFrom.max = $scope.dateTo;\r\n }\r\n that.loadPatientVisits();\r\n };\r\n $scope.$watch('patientGroups', function () {\r\n $scope.patientsCount = $scope.patientGroups\r\n .reduce(function (previousValue, currentValue) {\r\n return previousValue + currentValue.PatientEvents.length;\r\n }, 0);\r\n });\r\n that.init();\r\n }\r\n Controller.prototype.init = function () {\r\n var that = this;\r\n that.$scope.patientGroups = [];\r\n that.$scope.patientsCount = 0;\r\n that.$scope.isOpenFilter = false;\r\n that.setDefaultDates();\r\n that.loadPatientVisits();\r\n };\r\n Controller.prototype.setDefaultDates = function () {\r\n var now = this.moment.utc();\r\n this.$scope.dateTo = this.moment(now);\r\n this.$scope.dateFrom = now.subtract(Controller.DAYS_IN_WEEK, 'days');\r\n var configFrom = new DatePickerModule.Config();\r\n configFrom.format = Controller.DATE_PATTERN;\r\n configFrom.max = this.$scope.dateTo;\r\n this.$scope.configFrom = configFrom;\r\n var configTo = new DatePickerModule.Config();\r\n configTo.format = Controller.DATE_PATTERN;\r\n configTo.min = this.$scope.dateFrom;\r\n this.$scope.configTo = configTo;\r\n };\r\n Controller.prototype.loadPatientVisits = function () {\r\n var that = this;\r\n this.getPatientVisitsQuery()\r\n .then(function (response) {\r\n var result = [];\r\n for (var _i = 0; _i < response.length; _i++) {\r\n var item = response[_i];\r\n if (item.Date !== \"0001-01-01T00:00:00Z\") {\r\n result.push(item);\r\n }\r\n }\r\n that.$scope.patientGroups = result;\r\n })\r\n .catch(function (error) {\r\n that.$log.error(error);\r\n });\r\n };\r\n Controller.prototype.getPatientVisitsQuery = function () {\r\n if (this.$scope.isOpenFilter) {\r\n var statuses = [];\r\n if (this.$scope.excludeCancelled) {\r\n statuses = [\"Canceled\"];\r\n }\r\n var filter = {\r\n dateFrom: this.moment(this.$scope.dateFrom),\r\n dateTo: this.moment(this.$scope.dateTo),\r\n excludeStatuses: statuses\r\n };\r\n return this.patientVisitsService.getPatientEventsByFilter(this.$routeParams.practiceId, filter);\r\n }\r\n else {\r\n return this.patientVisitsService.getPatientEvents(this.$routeParams.practiceId);\r\n }\r\n };\r\n Controller.DATE_PATTERN = 'dd MM, yy';\r\n Controller.DAYS_IN_WEEK = 7;\r\n Controller.Q_KEY = 'q';\r\n Controller.W_KEY = 'w';\r\n Controller.Q_CHAR_CODE = 17;\r\n Controller.W_CHAR_CODE = 18;\r\n return Controller;\r\n })();\r\n PatientVisits.Controller = Controller;\r\n})(PatientVisits || (PatientVisits = {}));\r\nangular.module('DoctorApp')\r\n .controller('PatientVisitsController', PatientVisits.Controller);\r\n/// \r\n/// \r\nvar UpdateAccountModalModule;\r\n(function (UpdateAccountModalModule) {\r\n var UpdateAccountController = (function () {\r\n UpdateAccountController.$inject = [\"model\", \"$scope\", \"modalService\", \"$modalInstance\", \"showDialog\"];\r\n function UpdateAccountController(model, $scope, modalService, $modalInstance, showDialog) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.modalService = modalService;\r\n this.$modalInstance = $modalInstance;\r\n this.showDialog = showDialog;\r\n $scope.patient = model.patient;\r\n $scope.message = model.message;\r\n $scope.decision = 1;\r\n $scope.ok = function () {\r\n $modalInstance.close($scope.decision);\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss();\r\n };\r\n }\r\n return UpdateAccountController;\r\n })();\r\n UpdateAccountModalModule.UpdateAccountController = UpdateAccountController;\r\n})(UpdateAccountModalModule || (UpdateAccountModalModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('UpdateAccountController', UpdateAccountModalModule.UpdateAccountController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar PatientModule;\r\n(function (PatientModule) {\r\n var CreateController = (function () {\r\n CreateController.$inject = [\"$scope\", \"$rootScope\", \"locationService\", \"$filter\", \"patientService\", \"showDialog\", \"authService\", \"moment\", \"modalService\", \"$routeParams\"];\r\n function CreateController($scope, $rootScope, locationService, $filter, patientService, showDialog, authService, moment, modalService, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.locationService = locationService;\r\n this.$filter = $filter;\r\n this.patientService = patientService;\r\n this.showDialog = showDialog;\r\n this.authService = authService;\r\n this.moment = moment;\r\n this.modalService = modalService;\r\n this.$routeParams = $routeParams;\r\n $scope.Action = \"Add\";\r\n $scope.medicalAids = [];\r\n $scope.plans = [];\r\n $scope.options = [];\r\n var configDatePicker = new DatePickerModule.Config();\r\n configDatePicker.format = 'dd MM, yy';\r\n configDatePicker.changeMonth = true;\r\n configDatePicker.changeYear = true;\r\n $scope.configDatePicker = configDatePicker;\r\n $scope.fileNoRegex = /^[a-zA-Z0-9\\\\W\\s]+[\\\\s_/\\\\-a-zA-Z0-9]*$/;\r\n var DATE_PATTERN = 'dd MM, yy';\r\n var MIN_DATE = moment([1900, 0, 1]);\r\n $scope.mainMemberDoBTemp = {};\r\n $scope.memberSameAsPatient = false;\r\n $scope.mainTemp = {\r\n Title: \"\",\r\n FirstName: \"\",\r\n Surname: \"\",\r\n DateOfBirth: \"\",\r\n IdentityNo: \"\",\r\n Gender: \"\",\r\n ContactNo: \"\",\r\n EmailAddress: \"\"\r\n };\r\n $scope.mainMemberDetails =\r\n {\r\n Title: \"Mr\",\r\n FirstName: \"\",\r\n Surname: \"\",\r\n DateOfBirth: \"\",\r\n IdentityNo: \"\",\r\n Gender: \"Male\",\r\n ContactNo: \"\",\r\n EmailAddress: \"\"\r\n };\r\n $scope.newPatient = {\r\n PatientId: \"00000000-0000-0000-0000-000000000000\",\r\n PracticeId: $routeParams.practiceId,\r\n FileNo: \"\",\r\n PatientXRef: null,\r\n NavigationFrom: null,\r\n PatientDetails: {\r\n Title: \"Mr\",\r\n FirstName: \"\",\r\n Surname: \"\",\r\n DateOfBirth: \"\",\r\n IdentityNo: \"\",\r\n Gender: \"Male\",\r\n ContactNo: \"\",\r\n EmailAddress: \"\"\r\n },\r\n PatientAccountDetails: {\r\n AccountId: \"00000000-0000-0000-0000-000000000000\",\r\n AccountNo: \"\",\r\n IsCashAccount: false,\r\n MedicalAidName: \"\",\r\n MedicalAidPlan: \"\",\r\n MedicalAidPlanOption: \"\",\r\n MedicalAidMembershipNumber: \"\",\r\n MedicalAidDependentCode: \"\",\r\n MedicalAidMainMemberDetails: {\r\n Title: \"\",\r\n FirstName: \"\",\r\n Surname: \"\",\r\n DateOfBirth: \"\",\r\n IdentityNo: \"\",\r\n Gender: \"\",\r\n ContactNo: \"\",\r\n EmailAddress: \"\"\r\n },\r\n MedicalAidRoutingCode: \"\",\r\n MedicalAidOptionCode: \"\"\r\n }\r\n };\r\n $scope.datePattern = (function () {\r\n return {\r\n test: function (value) {\r\n var date = moment(value, DATE_PATTERN);\r\n if (!date.isValid()) {\r\n return false;\r\n }\r\n var maxDate = moment();\r\n return (MIN_DATE.isBefore(date) || MIN_DATE.isSame(date)) && date.isBefore(maxDate);\r\n }\r\n };\r\n })();\r\n $scope.changeFilterByDate = function (isMember) {\r\n if ($scope.memberSameAsPatient) {\r\n if (isMember) {\r\n $scope.newPatientDoB = $scope.mainMemberDoB;\r\n }\r\n else {\r\n $scope.mainMemberDoB = $scope.newPatientDoB;\r\n }\r\n }\r\n };\r\n var populateRoutingCode = function (patient) {\r\n if (patient.PatientAccountDetails.MedicalAidPlanOption) {\r\n var option = $filter('filter')($scope.options, { Name: patient.PatientAccountDetails.MedicalAidPlanOption });\r\n if (option.length > 0) {\r\n patient.PatientAccountDetails.MedicalAidRoutingCode = option[0].RoutingCode;\r\n patient.PatientAccountDetails.MedicalAidOptionCode = option[0].OptionCode;\r\n }\r\n }\r\n };\r\n $scope.getPatientByAccNo = function (accountId) {\r\n if (accountId.length) {\r\n _this.patientService.getPatientByAccNo($routeParams.practiceId, accountId.replace(/[\\/,\\\\]+/g, '%2f'))\r\n .then(function (patientAccountDetails) {\r\n if (patientAccountDetails) {\r\n _this.modalService\r\n .confirm(\"You have entered an existing account number. We will copy the member details for this account for you.\")\r\n .then(function () {\r\n $scope.newPatient.PatientAccountDetails = patientAccountDetails;\r\n _this.$scope.mainMemberDoB = moment.utc(patientAccountDetails.MedicalAidMainMemberDetails.DateOfBirth);\r\n _this.$scope.mainMemberDetails = patientAccountDetails.MedicalAidMainMemberDetails;\r\n _this.$scope.mainMemberDetails.FirstName = _this\r\n .$filter('titlecase')(patientAccountDetails.MedicalAidMainMemberDetails.FirstName);\r\n _this.$scope.mainMemberDetails.Surname = _this\r\n .$filter('titlecase')(patientAccountDetails.MedicalAidMainMemberDetails.Surname);\r\n _this.$scope.mainMemberDetails.EmailAddress = _this\r\n .$filter('lowercase')(patientAccountDetails.MedicalAidMainMemberDetails\r\n .EmailAddress);\r\n _this.$scope.newPatient.PatientAccountDetails.MedicalAidDependentCode = \"\";\r\n $scope.loadMedicalAids()\r\n .then(function () {\r\n $scope.updatePlanOptionDropdowns();\r\n });\r\n });\r\n }\r\n });\r\n }\r\n };\r\n $scope.init = function () {\r\n patientService.getPracticeXRef($routeParams.practiceId)\r\n .then(function (practiceXRef) {\r\n $scope.isIHealthProvider = practiceXRef && practiceXRef.contains(\"iHealth\");\r\n var prePopulatedPatientData = patientService.getPreCreatedPatient();\r\n patientService.setPreCreatedPatient(null);\r\n if (prePopulatedPatientData) {\r\n $scope.newPatient = prePopulatedPatientData;\r\n if (prePopulatedPatientData.PatientDetails.DateOfBirth) {\r\n $scope.newPatientDoB = moment.utc(prePopulatedPatientData.PatientDetails.DateOfBirth);\r\n }\r\n $scope.mainMemberDoB = moment.utc(prePopulatedPatientData.PatientAccountDetails\r\n .MedicalAidMainMemberDetails.DateOfBirth);\r\n $scope.mainMemberDetails = angular\r\n .copy($scope.newPatient.PatientAccountDetails.MedicalAidMainMemberDetails);\r\n $scope.loadMedicalAids()\r\n .then(function () {\r\n $scope.updatePlanOptionDropdowns();\r\n });\r\n }\r\n else {\r\n $scope.loadMedicalAids();\r\n }\r\n });\r\n };\r\n $scope.formatDob = function (date) {\r\n return moment.utc(date).format(\"DD/MM/YYYY\");\r\n };\r\n $scope.changeMainMember = function () {\r\n if ($scope.memberSameAsPatient) {\r\n $scope.mainTemp = angular.copy($scope.mainMemberDetails);\r\n $scope.mainMemberDetails = $scope.newPatient.PatientDetails;\r\n $scope.mainMemberDoBTemp = angular.copy($scope.mainMemberDoB);\r\n $scope.mainMemberDoB = moment($scope.newPatientDoB);\r\n }\r\n else {\r\n $scope.mainMemberDetails = $scope.mainTemp;\r\n $scope.mainMemberDoB = $scope.mainMemberDoBTemp;\r\n }\r\n };\r\n $scope.updatePlanOptionDropdowns = function () {\r\n var medicalAid = $scope.newPatient.PatientAccountDetails.MedicalAidName;\r\n var plan = $scope.newPatient.PatientAccountDetails.MedicalAidPlan;\r\n for (var i = 0; i < $scope.medicalAids.length; i++) {\r\n if ($scope.medicalAids[i].Name === medicalAid) {\r\n $scope.plans = $scope.medicalAids[i].Plans;\r\n for (var j = 0; j < $scope.plans.length; j++) {\r\n if ($scope.plans[j].Name === plan) {\r\n $scope.options = $scope.plans[j].Options;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n $scope.toTitleCase = function (value) {\r\n return $filter('titlecase')(value);\r\n };\r\n $scope.submitPatient = function (isValid) {\r\n if (isValid) {\r\n var patientIdNo = $scope.newPatient.PatientDetails.IdentityNo || \"\";\r\n var parsedDate = patientService.parseSaId(patientIdNo).date;\r\n var memberIdNo = $scope.mainMemberDetails.IdentityNo || \"\";\r\n var parsedMemberDate = patientService.parseSaId(memberIdNo).date;\r\n if (patientIdNo !== \"\" && moment.utc(parsedDate).date() !== $scope.newPatientDoB.date() ||\r\n memberIdNo !== \"\" && moment.utc(parsedMemberDate).date() !== $scope.mainMemberDoB.date()) {\r\n modalService.confirm(\"ID Number and Date of Birth don't match.
Would you like to continue?\")\r\n .then(function () {\r\n _this.submitPatient();\r\n });\r\n }\r\n else {\r\n _this.submitPatient();\r\n }\r\n }\r\n else {\r\n showDialog.error(\"Please enter valid info in the highlighted fields\");\r\n }\r\n };\r\n $scope.saIdChanged = function (role) {\r\n if (role === 'patient' && $scope.newPatient.PatientDetails.IdentityNo) {\r\n var id = $scope.newPatient.PatientDetails.IdentityNo;\r\n var parsedId = patientService.parseSaId(id);\r\n $scope.newPatientDoB = moment.utc(parsedId.date);\r\n $scope.newPatient.PatientDetails.Gender = parsedId.gender;\r\n }\r\n if (role === 'member' && $scope.mainMemberDetails.IdentityNo && !$scope.memberSameAsPatient) {\r\n var id = $scope.mainMemberDetails.IdentityNo;\r\n var parsedId = patientService.parseSaId(id);\r\n $scope.mainMemberDoB = moment.utc(parsedId.date);\r\n $scope.mainMemberDetails.Gender = parsedId.gender;\r\n }\r\n $scope.changeFilterByDate(role === 'member');\r\n };\r\n $scope.loadMedicalAids = function () {\r\n return patientService.getMedicalAids($routeParams.practiceId)\r\n .then(function (response) {\r\n $scope.medicalAids = response;\r\n });\r\n };\r\n $scope.medicalAidChanged = function () {\r\n var maName = $scope.newPatient.PatientAccountDetails.MedicalAidName;\r\n $scope.newPatient.PatientAccountDetails.MedicalAidPlan = undefined;\r\n $scope.plans = [];\r\n $scope.newPatient.PatientAccountDetails.MedicalAidPlanOption = undefined;\r\n $scope.options = [];\r\n for (var i = 0; i < $scope.medicalAids.length; i++) {\r\n if ($scope.medicalAids[i].Name === maName) {\r\n $scope.plans = $scope.medicalAids[i].Plans;\r\n break;\r\n }\r\n }\r\n $scope.populateMedicalAidData();\r\n };\r\n $scope.planChanged = function () {\r\n var pName = $scope.newPatient.PatientAccountDetails.MedicalAidPlan;\r\n if (!pName) {\r\n $scope.newPatient.PatientAccountDetails.MedicalAidPlanOption = undefined;\r\n $scope.options = [];\r\n }\r\n else {\r\n for (var i = 0; i < $scope.plans.length; i++) {\r\n if ($scope.plans[i].Name === pName) {\r\n $scope.options = $scope.plans[i].Options;\r\n if ($scope.options.length > 0) {\r\n $scope.newPatient.PatientAccountDetails.MedicalAidPlanOption = $scope.options[0].Name;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n $scope.populateMedicalAidData = function () {\r\n var medicalAid = $scope.newPatient.PatientAccountDetails.MedicalAidName;\r\n if (medicalAid) {\r\n for (var i = 0; i < $scope.medicalAids.length; i++) {\r\n if ($scope.medicalAids[i].Name === medicalAid) {\r\n if (($scope.medicalAids[i].Plans.length === 1) &&\r\n (!$scope.newPatient.PatientAccountDetails.MedicalAidPlan)) {\r\n $scope.newPatient.PatientAccountDetails\r\n .MedicalAidPlan = $scope.medicalAids[i].Plans[0].Name;\r\n $scope.planChanged();\r\n if (($scope.medicalAids[i].Plans[0].Options.length === 1) &&\r\n (!$scope.newPatient.PatientAccountDetails.MedicalAidPlanOption)) {\r\n $scope.newPatient.PatientAccountDetails\r\n .MedicalAidPlanOption = $scope.medicalAids[i].Plans[0].Options[0].Name;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n }\r\n CreateController.prototype.submitPatient = function () {\r\n var _this = this;\r\n var copyPatient = angular.copy(this.$scope.newPatient);\r\n var copyMainMemberDetails = angular.copy(this.$scope.mainMemberDetails);\r\n copyPatient.PatientDetails.DateOfBirth = this.$scope.newPatientDoB.format(ServerDateFormat);\r\n copyPatient.PatientDetails.FirstName = this.$scope.toTitleCase(copyPatient.PatientDetails.FirstName);\r\n copyPatient.PatientDetails.Surname = this.$scope.toTitleCase(copyPatient.PatientDetails.Surname);\r\n copyPatient.PatientDetails.EmailAddress = this.$scope\r\n .toTitleCase(copyPatient.PatientDetails.EmailAddress);\r\n copyMainMemberDetails.DateOfBirth = this.$scope.mainMemberDoB.format(ServerDateFormat);\r\n copyMainMemberDetails.FirstName = this.$scope.toTitleCase(copyMainMemberDetails.FirstName);\r\n copyMainMemberDetails.Surname = this.$scope.toTitleCase(copyMainMemberDetails.Surname);\r\n copyMainMemberDetails.EmailAddress = this.$filter('lowercase')(copyMainMemberDetails.EmailAddress);\r\n copyPatient.PatientAccountDetails.MedicalAidMainMemberDetails = copyMainMemberDetails;\r\n if (copyPatient.PatientAccountDetails.IsCashAccount) {\r\n }\r\n else if (copyPatient.PatientAccountDetails.MedicalAidPlanOption) {\r\n var option = this.$filter('filter')(this.$scope.options, { Name: copyPatient.PatientAccountDetails.MedicalAidPlanOption });\r\n if (option.length > 0) {\r\n copyPatient.PatientAccountDetails.MedicalAidRoutingCode = option[0].RoutingCode;\r\n copyPatient.PatientAccountDetails.MedicalAidOptionCode = option[0].OptionCode;\r\n }\r\n }\r\n this.patientService.createNewPatient(this.$routeParams.practiceId, this.$scope.updateOtherPatientAccountDetails, copyPatient, this.$scope.isIHealthProvider)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n _this.showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n if (!_this.$scope.newPatient || _this.$scope.newPatient.NavigationFrom !== 'UndeliveredPathReports') {\r\n _this.patientService.addToWaitingRoom(_this.$routeParams.practiceId, response.Data)\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n _this.showDialog\r\n .info(\"The new patient was successfully added and is in the waiting room\");\r\n _this.$rootScope.back();\r\n }\r\n else {\r\n _this.showDialog.error(\"Failed to check in patient \" + response.ResponseMessage);\r\n }\r\n });\r\n }\r\n else {\r\n _this.$rootScope.back();\r\n }\r\n }\r\n });\r\n };\r\n return CreateController;\r\n })();\r\n PatientModule.CreateController = CreateController;\r\n})(PatientModule || (PatientModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('PatientCreateController', PatientModule.CreateController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar PatientModule;\r\n(function (PatientModule) {\r\n var EditController = (function () {\r\n EditController.$inject = [\"$scope\", \"$rootScope\", \"locationService\", \"$filter\", \"patientService\", \"showDialog\", \"cfpLoadingBar\", \"moment\", \"$routeParams\", \"trackingService\", \"modalService\", \"storageService\"];\r\n function EditController($scope, $rootScope, locationService, $filter, patientService, showDialog, cfpLoadingBar, moment, $routeParams, trackingService, modalService, storageService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.locationService = locationService;\r\n this.$filter = $filter;\r\n this.patientService = patientService;\r\n this.showDialog = showDialog;\r\n this.cfpLoadingBar = cfpLoadingBar;\r\n this.moment = moment;\r\n this.$routeParams = $routeParams;\r\n this.trackingService = trackingService;\r\n this.modalService = modalService;\r\n this.storageService = storageService;\r\n this.populateRoutingCode = function (patient) {\r\n if (patient.PatientAccountDetails.MedicalAidPlanOption) {\r\n var option = _this.$filter('filter')(_this.$scope.options, { Name: patient.PatientAccountDetails.MedicalAidPlanOption });\r\n if (option.length > 0) {\r\n patient.PatientAccountDetails.MedicalAidRoutingCode = option[0].RoutingCode;\r\n patient.PatientAccountDetails.MedicalAidOptionCode = option[0].OptionCode;\r\n }\r\n }\r\n else {\r\n patient.PatientAccountDetails.MedicalAidRoutingCode = \"\";\r\n patient.PatientAccountDetails.MedicalAidOptionCode = \"\";\r\n }\r\n };\r\n $scope.Action = \"Edit\";\r\n $scope.medicalAids = [];\r\n $scope.plans = [];\r\n $scope.options = [];\r\n $scope.updateOtherPatientAccountDetails = -1;\r\n var configDatePicker = new DatePickerModule.Config();\r\n configDatePicker.format = 'dd MM, yy';\r\n configDatePicker.changeMonth = true;\r\n configDatePicker.changeYear = true;\r\n $scope.configDatePicker = configDatePicker;\r\n $scope.fileNoRegex = /^[a-zA-Z0-9\\\\W\\s]+[\\\\s_/\\\\-a-zA-Z0-9]*$/;\r\n var DATE_PATTERN = 'dd MM, yy';\r\n var MIN_DATE = moment([1900, 0, 1]);\r\n storageService.setPracticeId($routeParams.practiceId);\r\n $scope.datePattern = (function () {\r\n return {\r\n test: function (value) {\r\n var date = moment(value, DATE_PATTERN);\r\n if (!date.isValid()) {\r\n return false;\r\n }\r\n var maxDate = moment();\r\n return (MIN_DATE.isBefore(date) || MIN_DATE.isSame(date)) && (date.isBefore(maxDate) || $scope.isIHealthProvider);\r\n }\r\n };\r\n })();\r\n $scope.changeFilterByDate = function (isMember) {\r\n if ($scope.memberSameAsPatient) {\r\n if (isMember) {\r\n $scope.newPatientDoB = $scope.mainMemberDoB;\r\n }\r\n else {\r\n $scope.mainMemberDoB = $scope.newPatientDoB;\r\n }\r\n }\r\n };\r\n $scope.init = function () {\r\n var patient;\r\n _this.patientService.getPatientById($routeParams.practiceId, $routeParams.patientId)\r\n .then(function (patientResponse) {\r\n patient = patientResponse;\r\n if (!patient)\r\n _this.locationService.goToHome($routeParams.practiceId);\r\n if (_this.$rootScope.PatientDetailsIncomplete) {\r\n var message = patient.PatientDetails.FirstName +\r\n \" checked into the waiting room. \\n\" +\r\n \"Patient information not complete. Please review and save patient information to proceed.\";\r\n showDialog.info(message);\r\n }\r\n _this.$scope.newPatient = patient;\r\n _this.$scope.mainTemp = {\r\n Title: \"\",\r\n FirstName: \"\",\r\n Surname: \"\",\r\n DateOfBirth: \"\",\r\n IdentityNo: \"\",\r\n Gender: \"\",\r\n ContactNo: \"\",\r\n EmailAddress: \"\"\r\n };\r\n _this.$scope.mainMemberDoBTemp = {};\r\n var pInfo = patient.PatientDetails;\r\n var mInfo = patient.PatientAccountDetails.MedicalAidMainMemberDetails;\r\n if ((pInfo.Title == mInfo.Title) &&\r\n (pInfo.FirstName == mInfo.FirstName) &&\r\n (pInfo.Surname == mInfo.Surname) &&\r\n (pInfo.EmailAddress == mInfo.EmailAddress) &&\r\n (pInfo.DateOfBirth == mInfo.DateOfBirth) &&\r\n (pInfo.IdentityNo == mInfo.IdentityNo) &&\r\n (pInfo.Gender == mInfo.Gender) &&\r\n (pInfo.ContactNo == mInfo.ContactNo)) {\r\n _this.$scope.memberSameAsPatient = true;\r\n }\r\n else {\r\n _this.$scope.memberSameAsPatient = false;\r\n }\r\n _this.$scope.newPatientDoB = moment.utc(patient.PatientDetails.DateOfBirth);\r\n _this.$scope.mainMemberDoB = moment.utc(patient.PatientAccountDetails.MedicalAidMainMemberDetails.DateOfBirth);\r\n _this.$scope.mainMemberDetails = patient.PatientAccountDetails.MedicalAidMainMemberDetails;\r\n _this.$scope.newPatient.PatientDetails.DateOfBirth = _this\r\n .$filter('date')(new Date(patient.PatientDetails.DateOfBirth), PatientDateFormat);\r\n _this.$scope.newPatient.PatientDetails.FirstName = _this\r\n .$filter('titlecase')(patient.PatientDetails.FirstName);\r\n _this.$scope.newPatient.PatientDetails.Surname = _this\r\n .$filter('titlecase')(patient.PatientDetails.Surname);\r\n _this.$scope.newPatient.PatientDetails.EmailAddress = _this\r\n .$filter('lowercase')(patient.PatientDetails.EmailAddress);\r\n _this.$scope.mainMemberDetails.DateOfBirth = _this\r\n .$filter('date')(new Date(patient.PatientAccountDetails.MedicalAidMainMemberDetails\r\n .DateOfBirth), PatientDateFormat);\r\n _this.$scope.mainMemberDetails.FirstName = _this\r\n .$filter('titlecase')(patient.PatientAccountDetails.MedicalAidMainMemberDetails.FirstName);\r\n _this.$scope.mainMemberDetails.Surname = _this\r\n .$filter('titlecase')(patient.PatientAccountDetails.MedicalAidMainMemberDetails.Surname);\r\n _this.$scope.mainMemberDetails.EmailAddress = _this\r\n .$filter('lowercase')(patient.PatientAccountDetails.MedicalAidMainMemberDetails\r\n .EmailAddress);\r\n _this.$scope.newPatient.PatientAccountDetails.MedicalAidName = _this\r\n .$filter('uppercase')(patient.PatientAccountDetails.MedicalAidName);\r\n _this.$scope.newPatient.PatientAccountDetails.MedicalAidPlan = _this\r\n .$filter('uppercase')(patient.PatientAccountDetails.MedicalAidPlan);\r\n _this.$scope.newPatient.PatientAccountDetails\r\n .MedicalAidPlanOption = patient.PatientAccountDetails.MedicalAidPlanOption;\r\n if (_this.$scope.memberSameAsPatient) {\r\n _this.$scope.changeMainMember();\r\n }\r\n _this.$scope.loadMedicalAids();\r\n _this.patientService.getPracticeXRef($routeParams.practiceId)\r\n .then(function (practiceXRef) {\r\n $scope.isIHealthProvider = practiceXRef.contains(\"iHealth\");\r\n if ($scope.isIHealthProvider) {\r\n $scope.fileNoRegex = new RegExp('');\r\n }\r\n if (!_this.$scope.newPatientDoB) {\r\n _this.$scope.newPatientDoB = MIN_DATE;\r\n }\r\n });\r\n _this.trackingService.openedPatientDetails(patient);\r\n });\r\n };\r\n $scope.changeMainMember = function () {\r\n if ($scope.memberSameAsPatient) {\r\n $scope.mainTemp = angular.copy($scope.mainMemberDetails);\r\n $scope.mainMemberDetails = $scope.newPatient.PatientDetails;\r\n $scope.mainMemberDoBTemp = angular.copy($scope.mainMemberDoB);\r\n $scope.mainMemberDoB = moment($scope.newPatientDoB);\r\n }\r\n else {\r\n $scope.mainMemberDetails = $scope.mainTemp;\r\n $scope.mainMemberDoB = $scope.mainMemberDoBTemp;\r\n }\r\n };\r\n $scope.submitPatient = function (isValid) {\r\n if (isValid) {\r\n var patientIdNo = $scope.newPatient.PatientDetails.IdentityNo || \"\";\r\n var parsedDate = patientService.parseSaId(patientIdNo).date;\r\n var memberIdNo = $scope.mainMemberDetails.IdentityNo || \"\";\r\n var parsedMemberDate = patientService.parseSaId(memberIdNo).date;\r\n if ((patientIdNo !== \"\" && parsedDate !== $scope.newPatientDoB.format(\"YYYY/MM/DD\")) ||\r\n (memberIdNo !== \"\" && parsedMemberDate !== $scope.mainMemberDoB.format(\"YYYY/MM/DD\"))) {\r\n modalService.confirm(\"ID Number and Date of Birth don't match.
Would you like to continue?\")\r\n .then(function () {\r\n _this.submitPatient();\r\n });\r\n }\r\n else {\r\n _this.submitPatient();\r\n }\r\n }\r\n else {\r\n showDialog.error(\"Please enter valid info in the highlighted fields\");\r\n }\r\n };\r\n $scope.saIdChanged = function (role) {\r\n if (role === 'patient' && $scope.newPatient.PatientDetails.IdentityNo) {\r\n var id = $scope.newPatient.PatientDetails.IdentityNo;\r\n var parsedId = patientService.parseSaId(id);\r\n $scope.newPatientDoB = moment.utc(parsedId.date);\r\n $scope.newPatient.PatientDetails.Gender = parsedId.gender;\r\n }\r\n if (role === 'member' && $scope.mainMemberDetails.IdentityNo && !$scope.memberSameAsPatient) {\r\n var id = $scope.mainMemberDetails.IdentityNo;\r\n var parsedId = patientService.parseSaId(id);\r\n $scope.mainMemberDoB = moment.utc(parsedId.date);\r\n $scope.mainMemberDetails.Gender = parsedId.gender;\r\n }\r\n $scope.changeFilterByDate(role === 'member');\r\n };\r\n $scope.loadMedicalAids = function () {\r\n cfpLoadingBar.start();\r\n patientService.getMedicalAids($routeParams.practiceId)\r\n .then(function (response) {\r\n cfpLoadingBar.complete();\r\n $scope.medicalAids = response;\r\n var medicalAid = $scope.newPatient.PatientAccountDetails.MedicalAidName;\r\n var plan = $scope.newPatient.PatientAccountDetails.MedicalAidPlan;\r\n for (var i = 0; i < $scope.medicalAids.length; i++) {\r\n if ($scope.medicalAids[i].Name == medicalAid) {\r\n $scope.plans = $scope.medicalAids[i].Plans;\r\n for (var j = 0; j < $scope.plans.length; j++) {\r\n if ($scope.plans[j].Name == plan) {\r\n $scope.options = $scope.plans[j].Options;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n $scope.populateMedicalAidData();\r\n _this.populateRoutingCode($scope.newPatient);\r\n });\r\n };\r\n $scope.medicalAidChanged = function () {\r\n var maName = $scope.newPatient.PatientAccountDetails.MedicalAidName;\r\n $scope.newPatient.PatientAccountDetails.MedicalAidPlan = \"\";\r\n $scope.plans = [];\r\n $scope.newPatient.PatientAccountDetails.MedicalAidPlanOption = \"\";\r\n $scope.options = [];\r\n for (var i = 0; i < $scope.medicalAids.length; i++) {\r\n if ($scope.medicalAids[i].Name == maName) {\r\n $scope.plans = $scope.medicalAids[i].Plans;\r\n break;\r\n }\r\n }\r\n $scope.populateMedicalAidData();\r\n };\r\n $scope.planChanged = function () {\r\n var pName = $scope.newPatient.PatientAccountDetails.MedicalAidPlan;\r\n if (pName === \"\") {\r\n $scope.newPatient.PatientAccountDetails.MedicalAidPlanOption = \"\";\r\n $scope.options = [];\r\n }\r\n else {\r\n for (var i = 0; i < $scope.plans.length; i++) {\r\n if ($scope.plans[i].Name == pName) {\r\n $scope.options = $scope.plans[i].Options;\r\n if ($scope.options.length > 0) {\r\n $scope.newPatient.PatientAccountDetails.MedicalAidPlanOption = $scope.options[0].Name;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n $scope.populateMedicalAidData = function () {\r\n var medicalAid = $scope.newPatient.PatientAccountDetails.MedicalAidName;\r\n if (medicalAid) {\r\n for (var i = 0; i < $scope.medicalAids.length; i++) {\r\n if ($scope.medicalAids[i].Name == medicalAid) {\r\n if (($scope.medicalAids[i].Plans.length == 1) &&\r\n (!$scope.newPatient.PatientAccountDetails.MedicalAidPlan)) {\r\n $scope.newPatient.PatientAccountDetails\r\n .MedicalAidPlan = $scope.medicalAids[i].Plans[0].Name;\r\n $scope.planChanged();\r\n if (($scope.medicalAids[i].Plans[0].Options.length == 1) &&\r\n (!$scope.newPatient.PatientAccountDetails.MedicalAidPlanOption)) {\r\n $scope.newPatient.PatientAccountDetails\r\n .MedicalAidPlanOption = $scope.medicalAids[i].Plans[0].Options[0].Name;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n }\r\n EditController.prototype.submitPatient = function () {\r\n var _this = this;\r\n this.cfpLoadingBar.start();\r\n var copyPatient = angular.copy(this.$scope.newPatient);\r\n var copyMainMemberDetails = angular.copy(this.$scope.mainMemberDetails);\r\n var patientDateOfBirth = this.$scope.newPatientDoB.format(ServerDateFormat);\r\n copyPatient.PatientDetails.DateOfBirth = patientDateOfBirth;\r\n copyPatient.PatientDetails.FirstName = this.$filter('titlecase')(copyPatient.PatientDetails.FirstName);\r\n copyPatient.PatientDetails.Surname = this.$filter('titlecase')(copyPatient.PatientDetails.Surname);\r\n copyPatient.PatientDetails\r\n .EmailAddress = this.$filter('lowercase')(copyPatient.PatientDetails.EmailAddress);\r\n var memberDateOfBirth = this.$scope.mainMemberDoB.format(ServerDateFormat);\r\n copyMainMemberDetails.DateOfBirth = memberDateOfBirth;\r\n copyMainMemberDetails.FirstName = this.$filter('titlecase')(copyMainMemberDetails.FirstName);\r\n copyMainMemberDetails.Surname = this.$filter('titlecase')(copyMainMemberDetails.Surname);\r\n copyMainMemberDetails.EmailAddress = this.$filter('lowercase')(copyMainMemberDetails.EmailAddress);\r\n copyPatient.PatientAccountDetails.MedicalAidMainMemberDetails = copyMainMemberDetails;\r\n if (copyPatient.PatientAccountDetails.IsCashAccount) {\r\n }\r\n this.populateRoutingCode(copyPatient);\r\n this.patientService.changePatient(this.$routeParams.practiceId, this.$scope.updateOtherPatientAccountDetails, copyPatient, this.$scope.isIHealthProvider)\r\n .then(function (response) {\r\n _this.cfpLoadingBar.complete();\r\n if (response.Sucess === false) {\r\n _this.showDialog.error(response.ResponseMessage);\r\n }\r\n else if (response.Sucess === true) {\r\n setTimeout(function () {\r\n // copyPatient.PatientDetails.DateOfBirth = $filter('date')(copyPatient.PatientDetails.DateOfBirth, consultationDateFormat);\r\n //\r\n // copyPatient.PatientAccountDetails.MedicalAidMainMemberDetails.DateOfBirth =\r\n // $filter('date')(copyPatient.PatientAccountDetails.MedicalAidMainMemberDetails.DateOfBirth, consultationDateFormat);\r\n _this.$rootScope.selectedPatient = copyPatient;\r\n _this.trackingService.editedPatientDetails(copyPatient);\r\n _this.$rootScope.back();\r\n }, 0);\r\n }\r\n else {\r\n _this.showDialog.error(\"Error of changing patient.\");\r\n }\r\n });\r\n };\r\n return EditController;\r\n })();\r\n PatientModule.EditController = EditController;\r\n})(PatientModule || (PatientModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('PatientEditController', PatientModule.EditController);\r\n/// \r\n/// \r\nvar PowerBIModule;\r\n(function (PowerBIModule) {\r\n var ReportListController = (function () {\r\n ReportListController.$inject = [\"$scope\", \"$rootScope\", \"$routeParams\", \"powerbiService\", \"locationService\", \"showDialog\"];\r\n function ReportListController($scope, $rootScope, $routeParams, powerbiService, locationService, showDialog) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.powerbiService = powerbiService;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.getReports($routeParams.practiceId);\r\n $scope.goToReport = function (report) {\r\n _this.locationService.goToPowerBiReport(_this.$routeParams.practiceId, report.reportId);\r\n };\r\n }\r\n ReportListController.prototype.getReports = function (practiceId) {\r\n var _this = this;\r\n this.$rootScope.showProgressScreen = true;\r\n this.powerbiService.getReports(practiceId)\r\n .then(function (response) {\r\n if (response) {\r\n _this.$scope.reports = response;\r\n }\r\n else {\r\n _this.showDialog.error(\"Can't get reports list.\");\r\n }\r\n }).finally(function () {\r\n _this.$rootScope.showProgressScreen = false;\r\n });\r\n };\r\n return ReportListController;\r\n })();\r\n PowerBIModule.ReportListController = ReportListController;\r\n})(PowerBIModule || (PowerBIModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('PowerBIListController', PowerBIModule.ReportListController);\r\n/// \r\n/// \r\nvar PowerBIModule;\r\n(function (PowerBIModule) {\r\n var ReportController = (function () {\r\n ReportController.$inject = [\"$sce\", \"$scope\", \"$rootScope\", \"$routeParams\", \"powerbiService\", \"usageService\"];\r\n function ReportController($sce, $scope, $rootScope, $routeParams, powerbiService, usageService) {\r\n \"ngInject\";\r\n this.$sce = $sce;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.powerbiService = powerbiService;\r\n this.usageService = usageService;\r\n this.getReport($routeParams.practiceId, $routeParams.reportId);\r\n }\r\n ReportController.prototype.getReport = function (practiceId, reportId) {\r\n var _this = this;\r\n this.powerbiService.getReport(practiceId, reportId)\r\n .then(function (resp) {\r\n _this.$scope.report = resp;\r\n var models = window['powerbi-client'].models;\r\n var permissions = models.Permissions.All;\r\n var config = {\r\n type: 'report',\r\n tokenType: models.TokenType.Embed,\r\n accessToken: resp.accessToken,\r\n embedUrl: resp.embedUrl,\r\n id: resp.reportId,\r\n permissions: permissions,\r\n settings: {\r\n filterPaneEnabled: false,\r\n navContentPaneEnabled: true\r\n }\r\n };\r\n var embedContainer = $('#embedContainer')[0];\r\n var report = powerbi.embed(embedContainer, config);\r\n _this.usageService.openPowerBI(practiceId, _this.$scope.report);\r\n });\r\n };\r\n return ReportController;\r\n })();\r\n PowerBIModule.ReportController = ReportController;\r\n})(PowerBIModule || (PowerBIModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('PowerBIController', PowerBIModule.ReportController);\r\n/// \r\n/// \r\n/// \r\nvar PracticeModule;\r\n(function (PracticeModule) {\r\n var OptionsController = (function () {\r\n OptionsController.$inject = [\"$scope\", \"$filter\", \"$rootScope\", \"showDialog\", \"practiceService\", \"patientService\", \"$routeParams\"];\r\n function OptionsController($scope, $filter, $rootScope, showDialog, practiceService, patientService, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$filter = $filter;\r\n this.$rootScope = $rootScope;\r\n this.showDialog = showDialog;\r\n this.practiceService = practiceService;\r\n this.patientService = patientService;\r\n this.$routeParams = $routeParams;\r\n $scope.removeOption = function (index) {\r\n $scope.options.splice(index, 1);\r\n };\r\n $scope.addOption = function (key) {\r\n var options = $scope.options;\r\n options[options.length] = { key: key || '', value: '', showButton: true };\r\n };\r\n $scope.saveOptions = function () {\r\n var practiceId = $routeParams.practiceId;\r\n var options = angular.copy($scope.options);\r\n if (_this.checkOptionsValid(options)) {\r\n _this.removeRepeatOptions(options);\r\n if (options.length) {\r\n practiceService.saveOptions(practiceId, _this.convertArrToObjOptions(options));\r\n }\r\n $rootScope.back();\r\n }\r\n else {\r\n showDialog.error(\"Option names are not unique\");\r\n }\r\n };\r\n this.init();\r\n }\r\n OptionsController.prototype.init = function () {\r\n var _this = this;\r\n var practiceId = this.$routeParams.practiceId;\r\n this.practiceService.getPracticeById(practiceId)\r\n .then(function (practice) {\r\n var options = _this.convertObjToArr(practice.Options);\r\n _this.$scope.options = options;\r\n _this.fillDefaultValue(_this.$scope.options);\r\n _this.$scope.options = _this.$filter(\"orderBy\")(_this.$scope.options, function (value) {\r\n return value.key;\r\n });\r\n _this.$scope.options = _this.$filter('filter')(_this.$scope.options, function (value) {\r\n return value.key !== \"IsDisabledForSendingBillingInstructions\";\r\n });\r\n if (!_this.$scope.options.length) {\r\n _this.$scope.addOption();\r\n }\r\n });\r\n };\r\n OptionsController.prototype.fillDefaultValue = function (options) {\r\n var keys = GlobalVar.optionKeys;\r\n for (var i = 0; i < keys.length; i++) {\r\n var option = this.findByKey(options, keys[i]);\r\n if (!option) {\r\n this.$scope.addOption(keys[i]);\r\n }\r\n }\r\n };\r\n OptionsController.prototype.findByKey = function (options, key) {\r\n for (var i = 0; i < options.length; i++) {\r\n if (options[i].key == key) {\r\n return options[i];\r\n }\r\n }\r\n };\r\n OptionsController.prototype.convertArrToObjOptions = function (arr) {\r\n var obj = {};\r\n for (var i in arr) {\r\n var item = arr[i];\r\n obj[item.key] = item.value;\r\n }\r\n return obj;\r\n };\r\n OptionsController.prototype.convertObjToArr = function (obj) {\r\n var arr = [];\r\n var options = obj || {};\r\n for (var i in options) {\r\n arr[arr.length] = {\r\n key: i,\r\n value: options[i]\r\n };\r\n }\r\n return arr;\r\n };\r\n OptionsController.prototype.removeRepeatOptions = function (options) {\r\n var i = options.length;\r\n while (i--) {\r\n if (!options[i].key) {\r\n options.splice(i, 1);\r\n }\r\n }\r\n return options;\r\n };\r\n OptionsController.prototype.checkOptionsValid = function (options) {\r\n for (var i = 0; i < options.length; i++) {\r\n for (var j = i + 1; j < options.length; j++) {\r\n if (options[i].key && options[i].key == options[j].key) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n return OptionsController;\r\n })();\r\n PracticeModule.OptionsController = OptionsController;\r\n})(PracticeModule || (PracticeModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('PracticeOptionsController', PracticeModule.OptionsController);\r\n/// \r\n/// \r\n/// \r\nvar PracticeModule;\r\n(function (PracticeModule) {\r\n var PracticeCreateController = (function () {\r\n PracticeCreateController.$inject = [\"$rootScope\", \"$scope\", \"practiceService\", \"$filter\", \"showDialog\", \"tenantDomainService\", \"locationService\"];\r\n function PracticeCreateController($rootScope, $scope, practiceService, $filter, showDialog, tenantDomainService, locationService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.practiceService = practiceService;\r\n this.$filter = $filter;\r\n this.showDialog = showDialog;\r\n this.tenantDomainService = tenantDomainService;\r\n this.locationService = locationService;\r\n $scope.savePractice = function (isValid) {\r\n if (!isValid) {\r\n _this.showDialog.error(\"Please enter valid info in the highlighted fields !\");\r\n return;\r\n }\r\n $scope.practice.NetworkedSchemes = _this.practiceService.convertSchemesToArrStrings(_this.$scope.selectedSchemes, _this.$scope.selectSchemes);\r\n $scope.practice.ManualPricingSchemes = _this.practiceService.convertSchemesToArrStrings(_this.$scope.manualSelectedSchemes, _this.$scope.manualSelectSchemes);\r\n practiceService.createPractice($scope.practice)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n _this.showDialog.info(\"The new practice was successfully created.\");\r\n _this.$rootScope.back();\r\n }\r\n });\r\n };\r\n $scope.addAllManualSchemes = function () {\r\n var items = angular.copy(_this.$scope.medSchemes);\r\n _this.$scope.manualSelectedSchemes = _this.practiceService.buildSchemes(items);\r\n };\r\n $scope.setSpeciality = function () {\r\n $scope.practice.SpecialityCode = $scope.specialityRule.SpecialityCode;\r\n $scope.practice.SpecialityDescription = $scope.specialityRule.Speciality;\r\n };\r\n this.init();\r\n }\r\n PracticeCreateController.prototype.init = function () {\r\n var _this = this;\r\n this.$scope.isCreate = true;\r\n this.$scope.selectedSchemes = [];\r\n this.$scope.selectSchemes = [];\r\n this.$scope.manualSelectedSchemes = [];\r\n this.$scope.manualSelectSchemes = [];\r\n var practice = new Domain.Billing.Provider(StorageModule.Service.ZERO_PRACTICE_ID);\r\n this.$scope.practice = practice;\r\n this.practiceService.getMedSchemes(practice.PracticeId)\r\n .then(function (medSchemes) {\r\n _this.$scope.medSchemes = medSchemes;\r\n _this.$scope.selectSchemes = _this.practiceService.buildSchemes(medSchemes);\r\n _this.$scope.manualSelectSchemes = _this.practiceService.buildManualSchemes(medSchemes);\r\n });\r\n this.tenantDomainService.getTenantList()\r\n .then(function (response) {\r\n _this.$scope.PracticeTenantIds = response;\r\n });\r\n this.practiceService.getSpecialityRules()\r\n .then(function (specialityRules) {\r\n _this.$scope.specialityRules = _this.$filter('orderBy')(specialityRules, \"Speciality\");\r\n });\r\n };\r\n PracticeCreateController.prototype.loadSpecialityRules = function () {\r\n var _this = this;\r\n this.practiceService.getSpecialityRules()\r\n .then(function (specialityRules) {\r\n _this.$scope.specialityRules = specialityRules;\r\n _this.$scope.specialityRule = _this.$filter('filter')(specialityRules, { SpecialityCode: _this.$scope.practice.SpecialityCode })[0];\r\n _this.$scope.practice.SpecialityDescription = _this.$scope.specialityRule.Speciality;\r\n });\r\n };\r\n return PracticeCreateController;\r\n })();\r\n PracticeModule.PracticeCreateController = PracticeCreateController;\r\n})(PracticeModule || (PracticeModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('PracticeCreateController', PracticeModule.PracticeCreateController);\r\n/// \r\n/// \r\n/// \r\nvar PracticeModule;\r\n(function (PracticeModule) {\r\n var REMOVE_ALL = \"Remove All\";\r\n var EditController = (function () {\r\n EditController.$inject = [\"$scope\", \"$rootScope\", \"practiceService\", \"tenantDomainService\", \"showDialog\", \"$filter\", \"locationService\", \"$routeParams\"];\r\n function EditController($scope, $rootScope, practiceService, tenantDomainService, showDialog, $filter, locationService, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.practiceService = practiceService;\r\n this.tenantDomainService = tenantDomainService;\r\n this.showDialog = showDialog;\r\n this.$filter = $filter;\r\n this.locationService = locationService;\r\n this.$routeParams = $routeParams;\r\n $scope.savePractice = function (isValid) {\r\n if (!isValid) {\r\n _this.showDialog.error(\"Please enter valid info in the highlighted fields !\");\r\n return;\r\n }\r\n $scope.practice.NetworkedSchemes = _this.practiceService.convertSchemesToArrStrings($scope.selectedSchemes, $scope.selectSchemes);\r\n $scope.practice.ManualPricingSchemes = _this.practiceService.convertSchemesToArrStrings($scope.manualSelectedSchemes, $scope.manualSelectSchemes);\r\n practiceService.updatePractice($scope.practice)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n $rootScope.back();\r\n }\r\n });\r\n };\r\n $scope.goToSpecRule = function (rule) {\r\n locationService.goToEditSpecialityRule(rule.SpecialityCode);\r\n };\r\n $scope.addAllManualSchemes = function () {\r\n var items = angular.copy(_this.$scope.medSchemes);\r\n _this.$scope.manualSelectedSchemes = _this.practiceService.buildSchemes(items);\r\n };\r\n $scope.setSpeciality = function () {\r\n $scope.practice.SpecialityCode = $scope.specialityRule.SpecialityCode;\r\n $scope.practice.SpecialityDescription = $scope.specialityRule.Speciality;\r\n };\r\n $scope.afterSelectItem = function (item) {\r\n if (item.name === REMOVE_ALL || _this.$scope.manualSelectedSchemes.some(function (a) { return a.name === REMOVE_ALL; })) {\r\n showDialog.confirm(\"Would you like to remove all already selected manual pricing schemes?\", null, false, ['Yes', 'No'])\r\n .then(function () { return _this.$scope.manualSelectedSchemes = []; })\r\n .catch(function () { return _this.$scope.manualSelectedSchemes = _this.$scope.manualSelectedSchemes.filter(function (f) { return f.name !== REMOVE_ALL; }); });\r\n }\r\n };\r\n this.init();\r\n }\r\n EditController.prototype.init = function () {\r\n var _this = this;\r\n this.$scope.isCreate = false;\r\n this.$scope.selectedSchemes = [];\r\n this.$scope.selectSchemes = [];\r\n this.$scope.manualSelectedSchemes = [];\r\n this.$scope.manualSelectSchemes = [];\r\n var practiceId = this.$routeParams.practiceId;\r\n this.practiceService.getPracticeById(practiceId)\r\n .then(function (practice) {\r\n _this.$scope.practice = practice;\r\n _this.loadSpecialityRules();\r\n return _this.practiceService.getMedSchemes(practiceId);\r\n })\r\n .then(function (medSchemes) {\r\n _this.$scope.medSchemes = medSchemes;\r\n _this.$scope.selectSchemes = _this.practiceService.buildSchemes(medSchemes);\r\n _this.$scope.manualSelectSchemes = [new PracticeModule.Option(0, REMOVE_ALL, \"\")].concat(_this.practiceService.buildManualSchemes(medSchemes));\r\n _this.loadSchemesForShow();\r\n });\r\n this.tenantDomainService.getTenantList()\r\n .then(function (response) {\r\n _this.$scope.PracticeTenantIds = response;\r\n });\r\n };\r\n EditController.prototype.loadSpecialityRules = function () {\r\n var _this = this;\r\n this.practiceService.getSpecialityRules()\r\n .then(function (specialityRules) {\r\n _this.$scope.specialityRules = specialityRules;\r\n _this.$scope.specialityRule = _this.$filter('filter')(specialityRules, { SpecialityCode: _this.$scope.practice.SpecialityCode })[0];\r\n if (!_this.$scope.practice.SpecialityDescription) {\r\n _this.$scope.practice.SpecialityDescription = _this.$scope.specialityRule.Speciality;\r\n }\r\n });\r\n };\r\n EditController.prototype.loadSchemesForShow = function () {\r\n var practice = this.$scope.practice;\r\n this.$scope.selectedSchemes = this.practiceService.convertSchemesToArrObjects(practice.NetworkedSchemes, this.$scope.selectSchemes);\r\n this.$scope.manualSelectedSchemes = this.practiceService.convertSchemesToArrObjects(practice.ManualPricingSchemes, this.$scope.manualSelectSchemes);\r\n };\r\n return EditController;\r\n })();\r\n PracticeModule.EditController = EditController;\r\n})(PracticeModule || (PracticeModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('PracticeEditController', PracticeModule.EditController);\r\n/// \r\n/// \r\n/// \r\nvar PracticeModule;\r\n(function (PracticeModule) {\r\n var PracticesController = (function () {\r\n PracticesController.$inject = [\"$scope\", \"$rootScope\", \"practiceService\", \"showDialog\", \"$filter\", \"memoryService\", \"locationService\", \"$routeParams\"];\r\n function PracticesController($scope, $rootScope, practiceService, showDialog, $filter, memoryService, locationService, $routeParams) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.practiceService = practiceService;\r\n this.showDialog = showDialog;\r\n this.$filter = $filter;\r\n this.memoryService = memoryService;\r\n this.locationService = locationService;\r\n this.$routeParams = $routeParams;\r\n $scope.practices = [];\r\n $scope.pageSize = 10;\r\n $scope.pageNo = 0;\r\n $scope.allPagesLoaded = false;\r\n $scope.goToCreatePractice = function () {\r\n locationService.goToCreatePractice();\r\n };\r\n $scope.goToPractice = function (practice) {\r\n locationService.goToHome(practice.PracticeId);\r\n };\r\n $scope.goToUsers = function (practice) {\r\n locationService.goToUsers(practice.PracticeId);\r\n };\r\n $scope.goToEditPractice = function (practice) {\r\n locationService.goToEditPractice(practice.PracticeId);\r\n };\r\n $scope.goToEditSpecialityCode = function (practice) {\r\n locationService.goToEditSpecialityRule(practice.SpecialityCode);\r\n };\r\n $scope.goToEditOptions = function (practice) {\r\n locationService.goToPracticeOptions(practice.PracticeId);\r\n };\r\n $scope.deletePractice = function (practice) {\r\n showDialog.confirm(\"Are you sure want to delete practice: \" + practice.PracticeName)\r\n .then(function () {\r\n return practiceService.deletePractice(practice.PracticeId);\r\n })\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n $scope.doSearch();\r\n }\r\n });\r\n };\r\n $scope.loadNextPage = function () {\r\n if (!$scope.allPagesLoaded && !$scope.isRunningPage) {\r\n $scope.pageNo = $scope.pageNo + 1;\r\n $scope.isRunningPage = true;\r\n practiceService.getProvidersPageAndSearch($scope.searchText, $scope.pageNo, $scope.pageSize)\r\n .then(function (practicesPage) {\r\n if (practicesPage) {\r\n for (var i = 0; i < practicesPage.length; i++) {\r\n $scope.practices.push(practicesPage[i]);\r\n }\r\n }\r\n $scope.allPagesLoaded = !practicesPage ||\r\n practicesPage.length !== $scope.pageSize;\r\n $scope.isRunningPage = false;\r\n });\r\n }\r\n };\r\n $scope.doSearch = function () {\r\n var text = $scope.searchText;\r\n memoryService.practices.searchText = text;\r\n $scope.pageNo = 0;\r\n $scope.practices = [];\r\n practiceService.getProvidersPageAndSearch(text, $scope.pageNo, $scope.pageSize)\r\n .then(function (practicesPage) {\r\n $scope.practices = practicesPage;\r\n $scope.allPagesLoaded = !practicesPage ||\r\n practicesPage.length !== $scope.pageSize;\r\n $scope.isRunningPage = false;\r\n });\r\n };\r\n this.init();\r\n }\r\n PracticesController.prototype.init = function () {\r\n this.$scope.practices = [];\r\n this.$scope.searchText = this.memoryService.practices.searchText;\r\n this.$scope.doSearch();\r\n };\r\n return PracticesController;\r\n })();\r\n PracticeModule.PracticesController = PracticesController;\r\n})(PracticeModule || (PracticeModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('PracticesController', PracticeModule.PracticesController);\r\n/// \r\n/// \r\nvar PublicKeysModule;\r\n(function (PublicKeysModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\"];\r\n function Service(httpService) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n }\r\n Service.prototype.getPublicKeys = function () {\r\n return this.httpService.get(\"v1/infrastructure/node/publickeylist\");\r\n };\r\n Service.prototype.validatePublicKey = function (nodePublicKey, validated) {\r\n nodePublicKey.Validated = validated;\r\n if (validated) {\r\n nodePublicKey.ValidatedTime = new Date();\r\n return this.httpService.post(\"v1/infrastructure/node/\" + nodePublicKey.Id + \"/validate\", nodePublicKey);\r\n }\r\n else {\r\n nodePublicKey.RevokedTime = new Date();\r\n return this.httpService.post(\"v1/infrastructure/node/\" + nodePublicKey.Id + \"/revoke\", nodePublicKey);\r\n }\r\n };\r\n return Service;\r\n })();\r\n PublicKeysModule.Service = Service;\r\n})(PublicKeysModule || (PublicKeysModule = {}));\r\nangular.module('DoctorApp')\r\n .service('publicKeyService', PublicKeysModule.Service);\r\n/// \r\n/// \r\nvar PublicKeysModule;\r\n(function (PublicKeysModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"publicKeyService\", \"$filter\", \"memoryService\"];\r\n function Controller($scope, publicKeyService, $filter, memoryService) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.publicKeyService = publicKeyService;\r\n this.$filter = $filter;\r\n this.memoryService = memoryService;\r\n $scope.validateKey = function (publicKey) {\r\n return publicKeyService.validatePublicKey(publicKey, true);\r\n };\r\n $scope.revokeKey = function (publicKey) {\r\n return publicKeyService.validatePublicKey(publicKey, false);\r\n };\r\n $scope.updatePublicKeys = function () {\r\n publicKeyService.getPublicKeys()\r\n .then(function (publicKeys) {\r\n $scope.memoryPublicKeys = publicKeys;\r\n $scope.searchUpdate();\r\n });\r\n };\r\n $scope.searchUpdate = function () {\r\n var text = $scope.searchText;\r\n memoryService.publicKeys.searchText = text;\r\n $scope.publicKeys = text && text.length\r\n ? $filter('filter')($scope.memoryPublicKeys, text)\r\n : $scope.memoryPublicKeys;\r\n };\r\n this.init();\r\n }\r\n Controller.prototype.init = function () {\r\n this.$scope.publicKeys = [];\r\n this.$scope.searchText = this.memoryService.publicKeys.searchText;\r\n this.$scope.updatePublicKeys();\r\n };\r\n return Controller;\r\n })();\r\n PublicKeysModule.Controller = Controller;\r\n})(PublicKeysModule || (PublicKeysModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('PublicKeysController', PublicKeysModule.Controller);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar SearchModule;\r\n(function (SearchModule) {\r\n var ConsumableController = (function () {\r\n ConsumableController.$inject = [\"$scope\", \"searchService\", \"$controller\", \"$routeParams\"];\r\n function ConsumableController($scope, searchService, $controller, $routeParams) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.searchService = searchService;\r\n this.$controller = $controller;\r\n this.$routeParams = $routeParams;\r\n angular.extend(this, $controller('SearchAbstractController', { $scope: $scope }));\r\n $scope.search = function (searchText) {\r\n var func = $scope.isClinical ? searchService.getClinicalConsumable : searchService.getConsumable;\r\n return $scope.searchTemplate(func.bind(searchService), searchText, $routeParams.practiceId);\r\n };\r\n $scope.addConsumable = function (template) {\r\n var templateType = SearchModule.SearchType.CONSUMABLE;\r\n $scope.selectTemplate(template, templateType);\r\n };\r\n $scope.$watch('searchResults', function () {\r\n var fields = ['NappiCode', 'LineType', 'ChargeDesc'];\r\n $scope.list = $scope.customizeList($scope.searchResults, fields);\r\n });\r\n $scope.config = {\r\n minLength: 3,\r\n title: [\r\n { columnName: 'Nappi code', style: { width: 115 + 'px' }, hstyle: { width: 115 + 'px' } },\r\n { columnName: 'Type', style: { width: 115 + 'px' }, hstyle: { width: 115 + 'px' } },\r\n { columnName: 'Description', style: {}, hstyle: {} }\r\n ],\r\n placeholder: { value: 'Please type in a consumables' }\r\n };\r\n }\r\n return ConsumableController;\r\n })();\r\n SearchModule.ConsumableController = ConsumableController;\r\n})(SearchModule || (SearchModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SearchConsumableController', SearchModule.ConsumableController);\r\n/// \r\n/// \r\n/// \r\nvar SearchModule;\r\n(function (SearchModule) {\r\n var DiagnosisController = (function () {\r\n DiagnosisController.$inject = [\"$scope\", \"searchService\", \"$filter\", \"$controller\", \"$routeParams\"];\r\n function DiagnosisController($scope, searchService, $filter, $controller, $routeParams) {\r\n \"ngInject\";\r\n angular.extend(this, $controller('SearchAbstractController', { $scope: $scope }));\r\n $scope.search = function (searchText) {\r\n var func = $scope.isClinical ? searchService.getClinicalDiagnosesRanking : searchService.getDiagnosesRanking;\r\n return $scope.searchTemplate(func.bind(searchService), searchText, $routeParams.practiceId);\r\n };\r\n $scope.addDiagnosis = function (template) {\r\n var templateType = SearchModule.SearchType.DIAGNOSIS;\r\n $scope.selectTemplate(template, templateType);\r\n };\r\n $scope.$watch('searchResults', function () {\r\n var fields = ['DiagnosisCode', 'DiagnosisDescription'];\r\n var list = $filter('orderBy')($scope.searchResults, 'Rank', true);\r\n $scope.list = $scope.customizeList(list, fields);\r\n });\r\n $scope.config = {\r\n title: [\r\n { columnName: 'ICD10', style: { width: 90 + 'px' }, hstyle: { width: 90 + 'px' } },\r\n { columnName: 'Description', style: {}, hstyle: {} }\r\n ],\r\n placeholder: { value: 'Please type in a diagnosis or ICD10 code' }\r\n };\r\n }\r\n return DiagnosisController;\r\n })();\r\n SearchModule.DiagnosisController = DiagnosisController;\r\n})(SearchModule || (SearchModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SearchDiagnosisController', SearchModule.DiagnosisController);\r\n/// \r\n/// \r\n/// \r\nvar SearchModule;\r\n(function (SearchModule) {\r\n var MIProcedureController = (function () {\r\n MIProcedureController.$inject = [\"$scope\", \"encounterServiceNew\", \"$q\", \"$filter\", \"$controller\", \"$routeParams\"];\r\n function MIProcedureController($scope, encounterServiceNew, $q, $filter, $controller, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.$q = $q;\r\n this.$filter = $filter;\r\n this.$controller = $controller;\r\n this.$routeParams = $routeParams;\r\n angular.extend(this, $controller('SearchAbstractController', { $scope: $scope }));\r\n $scope.search = function (searchText) {\r\n var func = function () {\r\n var deferred = $q.defer();\r\n var memoryProcedures = _this.encounterServiceNew.getMemoryInsurerProcedures();\r\n var procedures = _this.$filter('filter')(memoryProcedures, searchText);\r\n var lines = [];\r\n for (var _i = 0; _i < procedures.length; _i++) {\r\n var procedure = procedures[_i];\r\n var lineItems = procedure.EncounterLineItems;\r\n lines.push(lineItems);\r\n }\r\n deferred.resolve(lines);\r\n return deferred.promise;\r\n };\r\n return $scope.searchTemplate(func, searchText, $routeParams.practiceId);\r\n };\r\n $scope.addMedicalInsurerProcedure = function (template) {\r\n var templateType = SearchModule.SearchType.MIPROCEDURE;\r\n $scope.selectTemplate(template, templateType);\r\n };\r\n $scope.$watch('searchResults', function () {\r\n var fields = ['ChargeCode', 'ChargeDesc'];\r\n $scope.list = $scope.customizeList($scope.searchResults, fields);\r\n });\r\n $scope.config = {\r\n minLength: 3,\r\n title: [\r\n { columnName: 'Tariff code', style: { width: 115 + 'px' }, hstyle: { width: 115 + 'px' } },\r\n { columnName: 'Description', style: {}, hstyle: {} }\r\n ],\r\n placeholder: { value: 'Please type in a procedure description or tariff code' }\r\n };\r\n }\r\n return MIProcedureController;\r\n })();\r\n SearchModule.MIProcedureController = MIProcedureController;\r\n})(SearchModule || (SearchModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SearchMIProcedureController', SearchModule.MIProcedureController);\r\n/// \r\n/// \r\n/// \r\nvar SearchModule;\r\n(function (SearchModule) {\r\n var MedicineController = (function () {\r\n MedicineController.$inject = [\"$scope\", \"searchService\", \"$controller\", \"encounterServiceNew\", \"$routeParams\"];\r\n function MedicineController($scope, searchService, $controller, encounterServiceNew, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.searchService = searchService;\r\n this.$controller = $controller;\r\n this.encounterServiceNew = encounterServiceNew;\r\n this.$routeParams = $routeParams;\r\n this.fields = ['NappiCode', 'LineType', 'SchemeRule', 'ChargeDesc'];\r\n angular.extend(this, $controller('SearchAbstractController', { $scope: $scope }));\r\n $scope.search = function (searchText) {\r\n var func = $scope.isClinical ? searchService.getClinicalMedicine : searchService.getMedicine;\r\n return $scope.searchTemplate(func.bind(searchService), searchText, $routeParams.practiceId);\r\n };\r\n $scope.addMedicine = function (template) {\r\n var templateType = SearchModule.SearchType.MEDICINE;\r\n $scope.selectTemplate(template, templateType);\r\n };\r\n $scope.$watch('searchResults', function () {\r\n $scope.list = $scope.customizeList($scope.searchResults, _this.fields);\r\n });\r\n $scope.config = {\r\n minLength: 3,\r\n title: [\r\n { columnName: 'Nappi code', style: { width: 115 + 'px' }, hstyle: { width: 115 + 'px' } },\r\n { columnName: 'Type', style: { width: 100 + 'px' }, hstyle: { width: 100 + 'px' } },\r\n { columnName: 'KeyCare acute formulary', style: { width: 150 + 'px', 'text-align': 'center' }, hstyle: { width: 150 + 'px' } },\r\n { columnName: 'Description', style: {}, hstyle: {} }\r\n ],\r\n placeholder: { value: 'Please type in a medicine' }\r\n };\r\n this.init();\r\n }\r\n MedicineController.prototype.init = function () {\r\n var encounter = this.encounterServiceNew.getEncounter();\r\n if (!encounter || encounter && encounter.PatientEventDetails.Patient.PatientAccountDetails.MedicalAidName !== 'DISCOVERY KEYCARE') {\r\n this.fields = this.fields.filter(function (value) { return value !== 'SchemeRule'; });\r\n this.$scope.config.title = this.$scope.config.title.filter(function (value) { return value.columnName !== 'KeyCare acute formulary'; });\r\n }\r\n };\r\n return MedicineController;\r\n })();\r\n SearchModule.MedicineController = MedicineController;\r\n})(SearchModule || (SearchModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SearchMedicineController', SearchModule.MedicineController);\r\n/// \r\n/// \r\n/// \r\nvar SearchModule;\r\n(function (SearchModule) {\r\n var PrescriptionController = (function () {\r\n PrescriptionController.$inject = [\"$scope\", \"searchService\", \"$controller\", \"$routeParams\"];\r\n function PrescriptionController($scope, searchService, $controller, $routeParams) {\r\n \"ngInject\";\r\n angular.extend(this, $controller('SearchAbstractController', { $scope: $scope }));\r\n $scope.search = function (searchText) {\r\n var func = $scope.isClinical ? searchService.getClinicalPrescription : searchService.getMedicine;\r\n return $scope.searchTemplate(func.bind(searchService), searchText, $routeParams.practiceId);\r\n };\r\n $scope.addPrescription = function (template) {\r\n var templateType = SearchModule.SearchType.PRESCRIPTION;\r\n $scope.selectTemplate(template, templateType);\r\n };\r\n $scope.$watch('searchResults', function () {\r\n var fields = ['NappiCode', 'MedicationDescription'];\r\n var res = [];\r\n var list = $scope.searchResults;\r\n for (var i = 0; i < list.length; i++) {\r\n var searchItem = list[i];\r\n var item = {\r\n fields: [],\r\n object: searchItem\r\n };\r\n for (var j = 0; j < fields.length; j++) {\r\n item.fields[j] = { value: searchItem[fields[j]] };\r\n }\r\n res[i] = item;\r\n }\r\n $scope.list = res;\r\n });\r\n $scope.config = {\r\n minLength: 3,\r\n title: [\r\n { columnName: 'Nappi code', style: { width: 115 + 'px' }, hstyle: { width: 115 + 'px' } },\r\n { columnName: 'Description', style: {}, hstyle: {} }\r\n ],\r\n placeholder: { value: 'Please type in a prescription' }\r\n };\r\n }\r\n return PrescriptionController;\r\n })();\r\n SearchModule.PrescriptionController = PrescriptionController;\r\n})(SearchModule || (SearchModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SearchPrescriptionController', SearchModule.PrescriptionController);\r\n/// \r\n/// \r\n/// \r\nvar SearchModule;\r\n(function (SearchModule) {\r\n var ProcedureController = (function () {\r\n ProcedureController.$inject = [\"$scope\", \"searchService\", \"$controller\", \"$routeParams\"];\r\n function ProcedureController($scope, searchService, $controller, $routeParams) {\r\n \"ngInject\";\r\n angular.extend(this, $controller('SearchAbstractController', { $scope: $scope }));\r\n $scope.search = function (searchText) {\r\n var func = $scope.isClinical ? searchService.getClinicalProcedures : searchService.getProcedures;\r\n return $scope.searchTemplate(func.bind(searchService), searchText, $routeParams.practiceId);\r\n };\r\n $scope.addProcedure = function (template) {\r\n var templateType = SearchModule.SearchType.PROCEDURE;\r\n $scope.selectTemplate(template, templateType);\r\n };\r\n $scope.$watch('searchResults', function () {\r\n var fields = ['ChargeCode', 'ChargeDesc'];\r\n $scope.list = $scope.customizeList($scope.searchResults, fields);\r\n });\r\n $scope.config = {\r\n minLength: 3,\r\n title: [\r\n { columnName: 'Tariff code', style: { width: 115 + 'px' }, hstyle: { width: 115 + 'px' } },\r\n { columnName: 'Description', style: {}, hstyle: {} }\r\n ],\r\n placeholder: { value: 'Please type in a procedure description or tariff code' }\r\n };\r\n }\r\n return ProcedureController;\r\n })();\r\n SearchModule.ProcedureController = ProcedureController;\r\n})(SearchModule || (SearchModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SearchProcedureController', SearchModule.ProcedureController);\r\nvar SentInvoices;\r\n(function (SentInvoices) {\r\n var SentInvoicesController = (function () {\r\n SentInvoicesController.$inject = [\"$scope\", \"httpService\", \"billingDomain\", \"modalService\", \"locationService\", \"moment\", \"$routeParams\"];\r\n function SentInvoicesController($scope, httpService, billingDomain, modalService, locationService, moment, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.httpService = httpService;\r\n this.billingDomain = billingDomain;\r\n this.modalService = modalService;\r\n this.locationService = locationService;\r\n this.moment = moment;\r\n this.$routeParams = $routeParams;\r\n $scope.list = [];\r\n $scope.openFullText = function (reason) {\r\n if (reason.length > 34) {\r\n modalService.info(reason, ModalModule.ModalWidth._550px);\r\n }\r\n };\r\n $scope.openInvoice = function (item) {\r\n _this.locationService.goToAuditEvents(\"BIL:PRO:\" + item.PracticeId, item.InvoiceId);\r\n };\r\n $scope.changeSentDate = function (bool) {\r\n _this.$scope.load();\r\n };\r\n $scope.init = function () {\r\n _this.$scope.sentDate = _this.moment($routeParams.sentDate);\r\n if (!$routeParams.sentDate) {\r\n _this.$scope.sentDate = _this.moment();\r\n }\r\n var configFrom = new DatePickerModule.Config();\r\n configFrom.format = 'dd MM, yy';\r\n configFrom.max = _this.moment();\r\n _this.$scope.configFrom = configFrom;\r\n };\r\n $scope.load = function () {\r\n if (!_this.moment.isDate(_this.$scope.sentDate)) {\r\n _this.$scope.sentDate = _this.moment(_this.$scope.sentDate);\r\n }\r\n _this.billingDomain.getSentInvoices(_this.$scope.sentDate)\r\n .then(function (list) {\r\n $scope.list = list;\r\n });\r\n };\r\n $scope.init();\r\n $scope.load();\r\n }\r\n return SentInvoicesController;\r\n })();\r\n SentInvoices.SentInvoicesController = SentInvoicesController;\r\n})(SentInvoices || (SentInvoices = {}));\r\nangular.module('DoctorApp')\r\n .controller('SentInvoicesController', SentInvoices.SentInvoicesController);\r\n/// \r\n/// \r\nvar SpecialityRuleModule;\r\n(function (SpecialityRuleModule) {\r\n var SpecialityRuleAbsController = (function () {\r\n SpecialityRuleAbsController.$inject = [\"$rootScope\", \"$scope\", \"showDialog\", \"billingDomain\", \"locationService\"];\r\n function SpecialityRuleAbsController($rootScope, $scope, showDialog, billingDomain, locationService) {\r\n \"ngInject\";\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.showDialog = showDialog;\r\n this.billingDomain = billingDomain;\r\n this.locationService = locationService;\r\n $scope.create = false;\r\n $scope.title = '';\r\n $scope.wardsStr = 'ICU, High care, General ward';\r\n $scope.removeCode = function (code, group) {\r\n var position = group.indexOf(code);\r\n if (position !== -1) {\r\n group.splice(position, 1);\r\n }\r\n };\r\n $scope.addOption = function () {\r\n var newItemName = '';\r\n if (!$scope.ruleOptions.some(function (o) {\r\n return o.key === newItemName;\r\n })) {\r\n $scope.ruleOptions.push({ key: newItemName, value: '' });\r\n }\r\n };\r\n $scope.removeOption = function (option) {\r\n var index = $scope.ruleOptions.indexOf(option);\r\n if (index !== -1) {\r\n $scope.ruleOptions.splice(index, 1);\r\n }\r\n };\r\n $scope.addCode = function (group) {\r\n if (group.newExclusiveCode && group.indexOf(group.newExclusiveCode) == -1) {\r\n group.push(group.newExclusiveCode);\r\n group.newExclusiveCode = \"\";\r\n }\r\n };\r\n $scope.removeCodeGroup = function (group) {\r\n var position = $scope.rule.MutuallyExclusiveCodes.indexOf(group);\r\n if (position !== -1) {\r\n $scope.rule.MutuallyExclusiveCodes.splice(position, 1);\r\n }\r\n };\r\n $scope.addExclusiveCodeGroup = function () {\r\n $scope.rule.MutuallyExclusiveCodes.push([]);\r\n };\r\n $scope.save = function (isValid) {\r\n if (isValid) {\r\n saveRule($scope.rule);\r\n }\r\n };\r\n function saveRule(rule) {\r\n rule.Options = Common.toDictionaryObject($scope.ruleOptions);\r\n rule.AvailableWards = $scope.wardsStr.split(',').map(function (s) { return s.trim(); }).filter(function (s) { return s.length > 0; });\r\n billingDomain.updateSpecialityRule(rule).then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n showDialog.info(\"The speciality rule was successfully edited.\");\r\n $rootScope.back();\r\n }\r\n });\r\n }\r\n }\r\n return SpecialityRuleAbsController;\r\n })();\r\n SpecialityRuleModule.SpecialityRuleAbsController = SpecialityRuleAbsController;\r\n})(SpecialityRuleModule || (SpecialityRuleModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SpecialityRuleAbsController', SpecialityRuleModule.SpecialityRuleAbsController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar SpecialityRuleModule;\r\n(function (SpecialityRuleModule) {\r\n var SpecialityRuleCreateController = (function () {\r\n SpecialityRuleCreateController.$inject = [\"$scope\", \"locationService\", \"showDialog\", \"$controller\"];\r\n function SpecialityRuleCreateController($scope, locationService, showDialog, $controller) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.$controller = $controller;\r\n angular.extend(this, $controller('SpecialityRuleAbsController', { $scope: $scope }));\r\n this.init();\r\n }\r\n SpecialityRuleCreateController.prototype.init = function () {\r\n this.$scope.title = 'Create Speciality Rule';\r\n this.$scope.create = true;\r\n this.$scope.rule = new Domain.Billing.SpecialityRule();\r\n this.$scope.rule.ConsumableProcedureCode = \"0201\";\r\n this.$scope.ruleOptions = Common.toArray(new Domain.Billing.FeatureAllows());\r\n };\r\n return SpecialityRuleCreateController;\r\n })();\r\n SpecialityRuleModule.SpecialityRuleCreateController = SpecialityRuleCreateController;\r\n})(SpecialityRuleModule || (SpecialityRuleModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SpecialityRuleCreateController', SpecialityRuleModule.SpecialityRuleCreateController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar SpecialityRuleModule;\r\n(function (SpecialityRuleModule) {\r\n var SpecialityRuleEditController = (function () {\r\n SpecialityRuleEditController.$inject = [\"$scope\", \"$rootScope\", \"$controller\", \"showDialog\", \"billingDomain\", \"locationService\", \"$routeParams\"];\r\n function SpecialityRuleEditController($scope, $rootScope, $controller, showDialog, billingDomain, locationService, $routeParams) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$controller = $controller;\r\n this.showDialog = showDialog;\r\n this.billingDomain = billingDomain;\r\n this.locationService = locationService;\r\n this.$routeParams = $routeParams;\r\n angular.extend(this, $controller('SpecialityRuleAbsController', { $scope: $scope }));\r\n this.init();\r\n }\r\n SpecialityRuleEditController.prototype.init = function () {\r\n this.$scope.title = 'Edit Speciality Rule';\r\n this.loadRule();\r\n };\r\n SpecialityRuleEditController.prototype.loadRule = function () {\r\n var _this = this;\r\n this.billingDomain.getSpecialityRulesByCode(this.$routeParams.specialityCode).then(function (response) {\r\n if (response) {\r\n _this.$scope.rule = response;\r\n var respOptions = Common.toArray(response.Options);\r\n var defaultOpts = Common.toArray(new Domain.Billing.FeatureAllows());\r\n for (var _i = 0; _i < defaultOpts.length; _i++) {\r\n var defaultOpt = defaultOpts[_i];\r\n var includedOption = false;\r\n for (var _a = 0; _a < respOptions.length; _a++) {\r\n var respOption = respOptions[_a];\r\n if (respOption.key === defaultOpt.key) {\r\n includedOption = true;\r\n }\r\n }\r\n if (!includedOption) {\r\n respOptions.push(defaultOpt);\r\n }\r\n }\r\n _this.$scope.ruleOptions = respOptions;\r\n if (response.AvailableWards != null && response.AvailableWards.length > 0) {\r\n _this.$scope.wardsStr = response.AvailableWards.join(\", \");\r\n }\r\n }\r\n else {\r\n _this.showDialog.info(\"Can't load speciality rule.\");\r\n _this.$rootScope.back();\r\n }\r\n });\r\n };\r\n return SpecialityRuleEditController;\r\n })();\r\n SpecialityRuleModule.SpecialityRuleEditController = SpecialityRuleEditController;\r\n})(SpecialityRuleModule || (SpecialityRuleModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SpecialityRuleEditController', SpecialityRuleModule.SpecialityRuleEditController);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar SpecialityRuleModule;\r\n(function (SpecialityRuleModule) {\r\n var SpecialityRulesController = (function () {\r\n SpecialityRulesController.$inject = [\"$scope\", \"$rootScope\", \"billingDomain\", \"locationService\", \"showDialog\", \"$filter\"];\r\n function SpecialityRulesController($scope, $rootScope, billingDomain, locationService, showDialog, $filter) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.billingDomain = billingDomain;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.$filter = $filter;\r\n $scope.rules = [];\r\n $scope.searchText = '';\r\n $scope.goToCreateRule = function () {\r\n locationService.goToCreateSpecialityRule();\r\n };\r\n $scope.editRule = function (rule) {\r\n locationService.goToEditSpecialityRule(rule.SpecialityCode);\r\n };\r\n $scope.deleteRule = function (rule) {\r\n showDialog.confirm(\"Are you sure want to delete Rule: \" + rule.DefaultProcedureCode).then(function () {\r\n var deactivte = new Domain.Billing.DeactivateSpecialityRule();\r\n deactivte.Reason = \"Deactivated from Doctor App UI\";\r\n deactivte.SpecialityRuleId = rule.Id;\r\n billingDomain.deactivateSpecialityRule(deactivte)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n _this.updateRules();\r\n showDialog.info(\"The Rule: \" + rule.Id + \" was successfully deleted.\");\r\n }\r\n });\r\n });\r\n };\r\n $scope.changeSearchText = function (text) {\r\n $scope.rules = text ? $filter('filter')($scope.rulesInMemory, text) : $scope.rulesInMemory;\r\n };\r\n this.init();\r\n }\r\n SpecialityRulesController.prototype.init = function () {\r\n this.updateRules();\r\n };\r\n SpecialityRulesController.prototype.updateRules = function () {\r\n var that = this;\r\n that.billingDomain.getSpecialityRules().then(function (response) {\r\n that.$scope.rulesInMemory = response;\r\n that.$scope.changeSearchText(that.$scope.searchText);\r\n });\r\n };\r\n return SpecialityRulesController;\r\n })();\r\n SpecialityRuleModule.SpecialityRulesController = SpecialityRulesController;\r\n})(SpecialityRuleModule || (SpecialityRuleModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SpecialityRulesController', SpecialityRuleModule.SpecialityRulesController);\r\nvar TemplateImportModule;\r\n(function (TemplateImportModule) {\r\n var TemplateImportController = (function () {\r\n TemplateImportController.$inject = [\"$scope\", \"modalService\", \"httpService\", \"clinicalDomain\", \"locationService\", \"$routeParams\"];\r\n function TemplateImportController($scope, modalService, httpService, clinicalDomain, locationService, $routeParams) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.modalService = modalService;\r\n this.httpService = httpService;\r\n this.clinicalDomain = clinicalDomain;\r\n this.locationService = locationService;\r\n this.$routeParams = $routeParams;\r\n $scope.type = TemplateImportController.CLEAR_AND_IMPORT;\r\n $scope.items = \"\";\r\n $scope.validateMessages = [];\r\n $scope.types = [\r\n { label: 'Clear All and Import', value: TemplateImportController.CLEAR_AND_IMPORT },\r\n { label: 'Merge with existing items', value: TemplateImportController.MERGE }\r\n ];\r\n $scope.validate = function () {\r\n clinicalDomain.importMultipleTemplates($routeParams.practiceId, $scope.items, $scope.type, true)\r\n .then(function (response) {\r\n $scope.validateMessages = response.Data;\r\n });\r\n };\r\n $scope.onItemsChanged = function (items) {\r\n if (items) {\r\n $scope.validateMessages = [];\r\n }\r\n };\r\n $scope.gotoMyFavorites = function () {\r\n _this.locationService.goToClinicalTemplates($routeParams.practiceId);\r\n };\r\n $scope.run = function () {\r\n clinicalDomain.importMultipleTemplates($routeParams.practiceId, $scope.items, $scope.type, true)\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n return _this.modalService.confirm(response.Data.join('
'), ModalModule.ModalWidth._500px)\r\n .then(function () { return response; });\r\n }\r\n _this.modalService.error(response.ResponseMessage);\r\n return response;\r\n })\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n return clinicalDomain.importMultipleTemplates($routeParams.practiceId, $scope.items, $scope.type, false);\r\n }\r\n return response;\r\n })\r\n .then(function (response) {\r\n $scope.validateMessages = response.Data || [response.ResponseMessage];\r\n });\r\n };\r\n }\r\n TemplateImportController.CLEAR_AND_IMPORT = \"ClearAndImport\";\r\n TemplateImportController.MERGE = \"Merge\";\r\n return TemplateImportController;\r\n })();\r\n TemplateImportModule.TemplateImportController = TemplateImportController;\r\n})(TemplateImportModule || (TemplateImportModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('TemplateImportModule', TemplateImportModule.TemplateImportController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar TemplateModule;\r\n(function (TemplateModule) {\r\n var TemplateAbstractController = (function () {\r\n TemplateAbstractController.$inject = [\"$scope\", \"$rootScope\", \"locationService\", \"invoiceTemplateService\", \"showDialog\", \"$filter\", \"searchService\", \"modalService\"];\r\n function TemplateAbstractController($scope, $rootScope, locationService, invoiceTemplateService, showDialog, $filter, searchService, modalService) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.locationService = locationService;\r\n this.invoiceTemplateService = invoiceTemplateService;\r\n this.showDialog = showDialog;\r\n this.$filter = $filter;\r\n this.searchService = searchService;\r\n this.modalService = modalService;\r\n var that = this;\r\n $scope.controlTemplate = {\r\n selectTemplate: function (template) {\r\n $scope.selectTemplate(template);\r\n },\r\n isMedicine: true,\r\n isClinical: false,\r\n isPrescription: false\r\n };\r\n $scope.saveTemplate = function () {\r\n var error = that.validTemplate($scope.mainTemplate);\r\n if (error) {\r\n showDialog.error(error);\r\n }\r\n else {\r\n var request = $scope.create\r\n ? invoiceTemplateService.saveTemplate($scope.mainTemplate)\r\n : invoiceTemplateService.updateTemplate($scope.mainTemplate);\r\n request.then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n that.invoiceTemplateService.setMainTemplate(null);\r\n $rootScope.back();\r\n }\r\n });\r\n }\r\n };\r\n $scope.templateTypeChanged = function () {\r\n var groupTemplates = $filter('filter')($scope.templates, { TemplateType: $scope.mainTemplate.TemplateType });\r\n groupTemplates = $filter('orderBy')(groupTemplates, '-SortOrder');\r\n $scope.tempSortOrder = groupTemplates[0] ? (1 + groupTemplates[0].SortOrder) : 0;\r\n $scope.mainTemplate.SortOrder = $scope.tempSortOrder;\r\n };\r\n $scope.removeTemplate = function (template, type) {\r\n $scope.mainTemplate = invoiceTemplateService.removeTemplateFromTemplate($scope.mainTemplate, template, type);\r\n };\r\n $scope.selectTemplate = function (template) {\r\n invoiceTemplateService.mergeTemplates($scope.mainTemplate, template);\r\n };\r\n $scope.showQuantityCalc = function (i, type) {\r\n var item = $filter('filter')($scope.mainTemplate.InvoiceLineItemsVo.LineItems, { LineType: type })[i];\r\n modalService.openNumbers('int', 'Enter quantity')\r\n .then(function (quantity) {\r\n if (quantity) {\r\n item.ChargeQuan = quantity;\r\n }\r\n });\r\n };\r\n $scope.validateOrder = function () {\r\n var templateType = $scope.mainTemplate.TemplateType;\r\n var error = that.validateOrder($scope.mainTemplate, templateType, $scope.templates);\r\n if (error) {\r\n $scope.mainTemplate.SortOrder = $scope.tempSortOrder;\r\n showDialog.error(error);\r\n }\r\n };\r\n }\r\n TemplateAbstractController.prototype.init = function () {\r\n var that = this;\r\n that.invoiceTemplateService.loadPracticeTemplates()\r\n .then(function (templates) {\r\n that.$scope.templates = templates;\r\n });\r\n var saveTemplate = this.searchService.getSelectedTemplate();\r\n if (saveTemplate) {\r\n that.invoiceTemplateService.mergeTemplates(that.$scope.mainTemplate, saveTemplate)\r\n .then(function () {\r\n that.searchService.saveSelectedTemplate(null);\r\n });\r\n }\r\n };\r\n TemplateAbstractController.prototype.validTemplate = function (template) {\r\n if (!template.SortOrder && template.SortOrder !== 0) {\r\n return \"Sort order is empty!\";\r\n }\r\n else {\r\n var templateType = this.$scope.mainTemplate.TemplateType;\r\n return this.validateOrder(this.$scope.mainTemplate, templateType, this.$scope.templates);\r\n }\r\n };\r\n TemplateAbstractController.prototype.validateOrder = function (mainTemplate, templateType, templates) {\r\n var order = mainTemplate.SortOrder;\r\n var groupTemplates = this.$filter('filter')(templates, { TemplateType: templateType });\r\n if (groupTemplates.length && order != this.$scope.tempSortOrder) {\r\n for (var i = 0; i < groupTemplates.length; i++) {\r\n var template = groupTemplates[i];\r\n if (template.TemplateId != mainTemplate.TemplateId && template.SortOrder == order) {\r\n return \"This order number already used by template : \" + groupTemplates[i].Caption;\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n return TemplateAbstractController;\r\n })();\r\n TemplateModule.TemplateAbstractController = TemplateAbstractController;\r\n})(TemplateModule || (TemplateModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('TemplateAbstractController', TemplateModule.TemplateAbstractController);\r\n/// \r\n/// \r\n/// \r\nvar TemplateModule;\r\n(function (TemplateModule) {\r\n var CreateTemplateController = (function () {\r\n CreateTemplateController.$inject = [\"$scope\", \"$controller\"];\r\n function CreateTemplateController($scope, $controller) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$controller = $controller;\r\n this.parent = $controller('TemplateAbstractController', { $scope: $scope });\r\n angular.extend(this, this.parent);\r\n this.init();\r\n }\r\n CreateTemplateController.prototype.init = function () {\r\n var that = this;\r\n that.$scope.create = true;\r\n var saveTemplate = this.parent.invoiceTemplateService.getMainTemplate();\r\n if (!saveTemplate) {\r\n saveTemplate = new Domain.Billing.Template();\r\n saveTemplate.TemplateId = '00000000-0000-0000-0000-000000000000';\r\n that.parent.invoiceTemplateService.setMainTemplate(saveTemplate);\r\n }\r\n that.$scope.mainTemplate = saveTemplate;\r\n that.$scope.tempSortOrder = saveTemplate.SortOrder;\r\n that.parent.init();\r\n };\r\n return CreateTemplateController;\r\n })();\r\n TemplateModule.CreateTemplateController = CreateTemplateController;\r\n})(TemplateModule || (TemplateModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('CreateTemplateController', TemplateModule.CreateTemplateController);\r\n/// \r\n/// \r\n/// \r\nvar TemplateModule;\r\n(function (TemplateModule) {\r\n var EditTemplateController = (function () {\r\n EditTemplateController.$inject = [\"$scope\", \"$routeParams\", \"$q\", \"$controller\"];\r\n function EditTemplateController($scope, $routeParams, $q, $controller) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$q = $q;\r\n this.$controller = $controller;\r\n this.parent = $controller('TemplateAbstractController', { $scope: $scope });\r\n angular.extend(this, this.parent);\r\n this.init();\r\n }\r\n EditTemplateController.prototype.init = function () {\r\n var that = this;\r\n that.$scope.create = false;\r\n var templateId = this.$routeParams.templateId;\r\n that.getMainTemplate(templateId)\r\n .then(function (template) {\r\n if (!template) {\r\n that.parent.locationService.goToTemplates(that.$routeParams.practiceId);\r\n }\r\n that.$scope.mainTemplate = template;\r\n that.$scope.tempSortOrder = that.$scope.mainTemplate.SortOrder;\r\n that.parent.init();\r\n })\r\n .catch(function (error) {\r\n that.parent.locationService.goToTemplates(that.$routeParams.practiceId);\r\n });\r\n };\r\n EditTemplateController.prototype.getMainTemplate = function (templateId) {\r\n var that = this;\r\n var saveTemplate = this.parent.invoiceTemplateService.getMainTemplate();\r\n if (saveTemplate) {\r\n return this.$q.when(saveTemplate);\r\n }\r\n return this.parent.invoiceTemplateService.execGetPracticeTemplate(templateId)\r\n .then(function (template) {\r\n that.parent.invoiceTemplateService.setMainTemplate(template);\r\n return template;\r\n });\r\n };\r\n return EditTemplateController;\r\n })();\r\n TemplateModule.EditTemplateController = EditTemplateController;\r\n})(TemplateModule || (TemplateModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('EditTemplateController', TemplateModule.EditTemplateController);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar TemplatesM;\r\n(function (TemplatesM) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$rootScope\", \"$routeParams\", \"locationService\", \"invoiceTemplateService\", \"showDialog\", \"templatesService\"];\r\n function Controller($scope, $rootScope, $routeParams, locationService, invoiceTemplateService, showDialog, templatesService) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$routeParams = $routeParams;\r\n this.locationService = locationService;\r\n this.invoiceTemplateService = invoiceTemplateService;\r\n this.showDialog = showDialog;\r\n this.templatesService = templatesService;\r\n var that = this;\r\n $scope.search = function (text) {\r\n $scope.templates = templatesService.search($scope.loadTemplates, text);\r\n };\r\n $scope.goToEditTemplate = function (template) {\r\n invoiceTemplateService.setMainTemplate(null);\r\n locationService.goToEditTemplate($routeParams.practiceId, template.TemplateId);\r\n };\r\n $scope.goToCreateTemplate = function () {\r\n invoiceTemplateService.setMainTemplate(null);\r\n locationService.goToCreateTemplate($routeParams.practiceId);\r\n };\r\n $scope.removeTemplate = function (template) {\r\n var message = 'Are you sure want to delete template: ' + template.Caption;\r\n showDialog.confirm(message)\r\n .then(function () {\r\n return templatesService.removeTemplate(template);\r\n })\r\n .then(function () {\r\n that.loadTemplates();\r\n })\r\n .catch(function (error) {\r\n if (error) {\r\n showDialog.error(error);\r\n }\r\n });\r\n };\r\n this.init();\r\n }\r\n Controller.prototype.init = function () {\r\n this.$scope.loadTemplates = [];\r\n this.$scope.templates = [];\r\n this.loadTemplates();\r\n };\r\n Controller.prototype.loadTemplates = function () {\r\n var that = this;\r\n that.invoiceTemplateService.loadPracticeTemplates()\r\n .then(function (templates) {\r\n that.$scope.loadTemplates = templates;\r\n that.$scope.search();\r\n });\r\n };\r\n return Controller;\r\n })();\r\n TemplatesM.Controller = Controller;\r\n})(TemplatesM || (TemplatesM = {}));\r\nangular.module('DoctorApp')\r\n .controller('TemplatesController', TemplatesM.Controller);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar TenantModule;\r\n(function (TenantModule) {\r\n var CreateTenantController = (function () {\r\n CreateTenantController.$inject = [\"$scope\", \"$rootScope\", \"tenantDomainService\", \"locationService\", \"showDialog\"];\r\n function CreateTenantController($scope, $rootScope, tenantDomainService, locationService, showDialog) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.tenantDomainService = tenantDomainService;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n $scope.create = true;\r\n $scope.title = 'Create tenant';\r\n $scope.saveTenant = function (tenant) {\r\n tenantDomainService.createTenant(tenant).then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n showDialog.info(\"The new tenant was successfully created.\");\r\n $rootScope.back();\r\n }\r\n });\r\n };\r\n $scope.done = function (isValid) {\r\n if (isValid) {\r\n $scope.saveTenant($scope.tenant);\r\n }\r\n };\r\n $scope.tenant = {\r\n \"TenantId\": \"\",\r\n \"TenantXRef\": \"\",\r\n \"Description\": \"\"\r\n };\r\n }\r\n return CreateTenantController;\r\n })();\r\n TenantModule.CreateTenantController = CreateTenantController;\r\n})(TenantModule || (TenantModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('CreateTenantController', TenantModule.CreateTenantController);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar TenantModule;\r\n(function (TenantModule) {\r\n var EditTenantController = (function () {\r\n EditTenantController.$inject = [\"$scope\", \"$rootScope\", \"tenantDomainService\", \"locationService\", \"showDialog\", \"$routeParams\"];\r\n function EditTenantController($scope, $rootScope, tenantDomainService, locationService, showDialog, $routeParams) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.tenantDomainService = tenantDomainService;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.$routeParams = $routeParams;\r\n $scope.title = 'Edit tenant';\r\n $scope.done = function (isValid) {\r\n if (isValid) {\r\n this.saveTenant($scope.tenant);\r\n }\r\n };\r\n $scope.saveTenant = function (tenant) {\r\n tenantDomainService.updateTenant(tenant).then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n $rootScope.back();\r\n }\r\n });\r\n };\r\n this.init();\r\n }\r\n EditTenantController.prototype.init = function () {\r\n this.getTenant();\r\n };\r\n EditTenantController.prototype.getTenant = function () {\r\n var that = this;\r\n that.tenantDomainService.getTenant(that.$routeParams.tenantId).then(function (response) {\r\n if (response) {\r\n that.$scope.tenant = response;\r\n }\r\n else {\r\n that.locationService.goToTenants();\r\n }\r\n });\r\n };\r\n return EditTenantController;\r\n })();\r\n TenantModule.EditTenantController = EditTenantController;\r\n})(TenantModule || (TenantModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('EditTenantController', TenantModule.EditTenantController);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar TenantModule;\r\n(function (TenantModule) {\r\n var TenantController = (function () {\r\n TenantController.$inject = [\"$scope\", \"$rootScope\", \"tenantDomainService\", \"locationService\", \"memoryService\", \"showDialog\", \"$filter\"];\r\n function TenantController($scope, $rootScope, tenantDomainService, locationService, memoryService, showDialog, $filter) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.tenantDomainService = tenantDomainService;\r\n this.locationService = locationService;\r\n this.memoryService = memoryService;\r\n this.showDialog = showDialog;\r\n this.$filter = $filter;\r\n $scope.tenants = [];\r\n $scope.searchText = '';\r\n $scope.goToCreateTenant = function () {\r\n locationService.goToCreateTenant();\r\n };\r\n $scope.editTenant = function (tenant) {\r\n locationService.goToEditTenant(tenant.TenantId);\r\n };\r\n $scope.deleteTenant = function (tenant) {\r\n showDialog.confirm(\"Are you sure want to delete tenant: \" + tenant.Description).then(function () {\r\n tenantDomainService.deleteTenant(tenant.TenantId)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n _this.updateTenants();\r\n showDialog.info(\"The tenant: \" + tenant.Description + \" was successfully deleted.\");\r\n }\r\n });\r\n });\r\n };\r\n $scope.goToPractices = function (tenant) {\r\n _this.memoryService.practices.searchText = tenant.TenantId;\r\n locationService.goToPractices();\r\n };\r\n $scope.changeSearchText = function (text) {\r\n $scope.tenants = text ? $filter('filter')($scope.tenantsInMemory, text) : $scope.tenantsInMemory;\r\n };\r\n this.init();\r\n }\r\n TenantController.prototype.init = function () {\r\n this.updateTenants();\r\n };\r\n TenantController.prototype.updateTenants = function () {\r\n var that = this;\r\n that.tenantDomainService.getTenantList().then(function (response) {\r\n that.$scope.tenantsInMemory = response;\r\n that.$scope.changeSearchText(that.$scope.searchText);\r\n });\r\n };\r\n return TenantController;\r\n })();\r\n TenantModule.TenantController = TenantController;\r\n})(TenantModule || (TenantModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('TenantController', TenantModule.TenantController);\r\n/// \r\n/// \r\n/// \r\nvar TestApiModule;\r\n(function (TestApiModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"$http\", \"httpService\", \"practiceService\", \"cfpLoadingBar\", \"$q\", \"storageService\"];\r\n function Service($http, httpService, practiceService, cfpLoadingBar, $q, storageService) {\r\n \"ngInject\";\r\n this.$http = $http;\r\n this.httpService = httpService;\r\n this.practiceService = practiceService;\r\n this.cfpLoadingBar = cfpLoadingBar;\r\n this.$q = $q;\r\n this.storageService = storageService;\r\n }\r\n Service.prototype.getPracticeId = function () {\r\n return this.storageService.getPracticeId();\r\n };\r\n Service.prototype.execGetRoutes = function () {\r\n var _this = this;\r\n var deferred = this.$q.defer();\r\n this.cfpLoadingBar.start();\r\n this.httpService.get('v1/infrastructure/api/routes')\r\n .then(function (response) {\r\n for (var i = 0; i < response.length; i++) {\r\n response[i].RoutePath = response[i].RoutePath.replace('api/', '');\r\n }\r\n deferred.resolve(response);\r\n }, function (response) {\r\n deferred.reject(response);\r\n })\r\n .finally(function () {\r\n _this.cfpLoadingBar.complete();\r\n });\r\n return deferred.promise;\r\n };\r\n Service.prototype.execQuery = function (request) {\r\n var _this = this;\r\n var deferred = this.$q.defer();\r\n this.cfpLoadingBar.start();\r\n this.$http(request)\r\n .then(function (response) {\r\n _this.cfpLoadingBar.complete();\r\n deferred.resolve(response.data);\r\n }, function (response) {\r\n _this.cfpLoadingBar.complete();\r\n deferred.reject(response.data);\r\n });\r\n return deferred.promise;\r\n };\r\n return Service;\r\n })();\r\n TestApiModule.Service = Service;\r\n})(TestApiModule || (TestApiModule = {}));\r\nangular.module('DoctorApp')\r\n .service('testApiService', TestApiModule.Service);\r\n/// \r\n/// \r\n/// \r\nvar TestApiModule;\r\n(function (TestApiModule) {\r\n var ModalWidth = ModalModule.ModalWidth;\r\n var Body = (function () {\r\n function Body() {\r\n this.isExists = false;\r\n this.content = '';\r\n }\r\n return Body;\r\n })();\r\n TestApiModule.Body = Body;\r\n var Header = (function () {\r\n function Header() {\r\n this.key = '';\r\n this.value = '';\r\n }\r\n return Header;\r\n })();\r\n TestApiModule.Header = Header;\r\n var Url = (function () {\r\n function Url() {\r\n }\r\n return Url;\r\n })();\r\n TestApiModule.Url = Url;\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"$rootScope\", \"$filter\", \"testApiService\", \"$compile\", \"$timeout\", \"$routeParams\", \"$location\", \"showDialog\"];\r\n function Controller($scope, $rootScope, $filter, testApiService, $compile, $timeout, $routeParams, $location, showDialog) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.$filter = $filter;\r\n this.testApiService = testApiService;\r\n this.$compile = $compile;\r\n this.$timeout = $timeout;\r\n this.$routeParams = $routeParams;\r\n this.$location = $location;\r\n this.showDialog = showDialog;\r\n $scope.defaultUrl = $routeParams.url;\r\n var POST_INDEX = 1;\r\n var PUT_INDEX = 2;\r\n var ERROR = \"Error\";\r\n var SUCCESS = \"Success\";\r\n var that = this;\r\n $scope.updateUrls = function () {\r\n $scope.url.list = [];\r\n testApiService.execGetRoutes()\r\n .then(function (response) {\r\n $scope.url.list = response;\r\n that.changeUrlInput($scope.url.input);\r\n if ($scope.defaultUrl) {\r\n var url = $scope.url.displayedList[0];\r\n $scope.selectedItem = url;\r\n $scope.url.input = url.RoutePath;\r\n $scope.method = url.HttpMethod;\r\n }\r\n });\r\n };\r\n (function init() {\r\n $scope.methods = ['GET', 'POST', 'PUT', 'DELETE'];\r\n $scope.method = $scope.methods[0];\r\n $scope.url = {\r\n input: $scope.defaultUrl ? $scope.defaultUrl : '',\r\n showPopup: false,\r\n displayedList: [],\r\n list: [],\r\n variables: []\r\n };\r\n $scope.headers = [];\r\n $scope.body = new Body();\r\n $scope.showResponse = false;\r\n $scope.supportedCopy = !document.queryCommandSupported('copy');\r\n $scope.updateUrls();\r\n })();\r\n $scope.send = function () {\r\n $scope.formatBody();\r\n var req = createRequest();\r\n testApiService.execQuery(req)\r\n .then(function (responseSuccess) {\r\n appendResponse(responseSuccess, SUCCESS);\r\n }, function (responseError) {\r\n appendResponse(responseError, ERROR);\r\n });\r\n };\r\n function createRequest() {\r\n var method = $scope.method;\r\n var url = buildUrlWithVariables($scope.url.input, $scope.url.variables);\r\n var headerObj = buildHeaders();\r\n var body = $scope.body;\r\n var data = body.isExists ? body.content : {};\r\n return {\r\n method: method,\r\n url: GlobalVar.serverURL + url,\r\n headers: headerObj,\r\n data: data\r\n };\r\n }\r\n function buildUrlWithVariables(urlTemp, params) {\r\n for (var i = 0; i < params.length; i++) {\r\n var param = params[i];\r\n urlTemp = urlTemp.replace(new RegExp(param.key, 'g'), param.value);\r\n }\r\n return urlTemp;\r\n }\r\n function buildHeaders() {\r\n var res = [];\r\n $scope.headers.forEach(function (item) {\r\n if (item.key && item.value) {\r\n res[item.key] = item.value;\r\n }\r\n });\r\n return res;\r\n }\r\n function appendResponse(response, type) {\r\n $scope.result = type;\r\n $scope.showResponse = true;\r\n var responseContainer = angular.element('#response-container');\r\n responseContainer.children().remove();\r\n if (ERROR === type) {\r\n appendError(responseContainer, response);\r\n }\r\n else {\r\n appendSuccess(responseContainer, response);\r\n }\r\n }\r\n function appendError(responseContainer, response) {\r\n var template = '';\r\n responseContainer.append(template);\r\n $timeout(function () {\r\n var frameResponse = angular.element('#frame-response');\r\n var body = frameResponse.contents().find('body');\r\n body.html(response);\r\n }, 50);\r\n }\r\n function appendSuccess(responseContainer, response) {\r\n var template = '';\r\n responseContainer.append($compile(template)($scope));\r\n $scope.response = angular.toJson(response, true);\r\n }\r\n $scope.selectItem = function (url) {\r\n $scope.selectedItem = url;\r\n $scope.url.input = url.RoutePath;\r\n $scope.url.displayedList = $scope.url.list;\r\n $scope.method = url.HttpMethod;\r\n };\r\n $scope.shareLink = function () {\r\n if ($scope.selectedItem) {\r\n var absUrl = $location.absUrl();\r\n var contextRoot = absUrl.substring(0, absUrl.lastIndexOf(\"/\")) + $location.path();\r\n showDialog.info(contextRoot + \"?url=\" + $scope.selectedItem.RoutePath, ModalWidth._550px);\r\n }\r\n };\r\n $scope.$watch('method', function (newValue, oldValue) {\r\n var methods = $scope.methods;\r\n $scope.body.isExists = (newValue == methods[POST_INDEX] || newValue == methods[PUT_INDEX]);\r\n });\r\n $scope.$watch('url.input', function (newValue, oldValue) {\r\n that.changeUrlInput(newValue);\r\n });\r\n $scope.addHeader = function () {\r\n $scope.headers[$scope.headers.length] = new Header();\r\n };\r\n $scope.deleteHeader = function (index) {\r\n $scope.headers.splice(index, 1);\r\n };\r\n $scope.toggleDropdown = function ($event) {\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n $scope.url.showPopup = true;\r\n };\r\n $scope.copy = function () {\r\n var response = document.querySelector('#response');\r\n var range = document.createRange();\r\n range.selectNode(response);\r\n window.getSelection().addRange(range);\r\n try {\r\n document.execCommand('copy');\r\n }\r\n catch (err) {\r\n }\r\n window.getSelection().removeAllRanges();\r\n };\r\n $scope.formatBody = function () {\r\n try {\r\n if ($scope.body && $scope.body.content) {\r\n var obj = JSON.parse($scope.body.content);\r\n $scope.body.content = JSON.stringify(obj, undefined, 4);\r\n }\r\n }\r\n catch (e) {\r\n console.log(e);\r\n }\r\n };\r\n $scope.shieldBody = function () {\r\n try {\r\n if ($scope.body && $scope.body.content) {\r\n var body = $scope.body.content;\r\n if (body.indexOf('\\\\\"') === -1) {\r\n body = body.replace(/\"/g, '\\\\\"');\r\n }\r\n else {\r\n body = body.replace(/\\\\\"/g, '\"');\r\n }\r\n $scope.body.content = body;\r\n }\r\n }\r\n catch (e) {\r\n console.log(e);\r\n }\r\n };\r\n }\r\n Controller.prototype.changeUrlInput = function (inputText) {\r\n var urls = this.$scope.url.list;\r\n this.$scope.url.displayedList = inputText ? this.$filter('filter')(urls, inputText) : urls;\r\n this.$scope.url.variables = this.parseUrl(inputText);\r\n if (!inputText) {\r\n this.$scope.selectedItem = null;\r\n }\r\n };\r\n Controller.prototype.parseUrl = function (url) {\r\n var NOT_FOUND = -1;\r\n var startIndex = -1;\r\n var elements = [];\r\n do {\r\n startIndex++;\r\n startIndex = url.indexOf('{', startIndex);\r\n var endIndex = url.indexOf('}', startIndex);\r\n if (startIndex !== NOT_FOUND && endIndex !== NOT_FOUND) {\r\n var urlName = url.substring(startIndex, endIndex + 1);\r\n elements[elements.length] = { key: urlName, value: this.getDefaultUrlVariable(urlName) };\r\n }\r\n } while (startIndex !== NOT_FOUND);\r\n return elements;\r\n };\r\n Controller.prototype.getDefaultUrlVariable = function (variableName) {\r\n var name = variableName.toLowerCase();\r\n switch (name) {\r\n case '{tenantid}':\r\n case '{practiceid}':\r\n case '{providerid}':\r\n return this.testApiService.getPracticeId();\r\n default:\r\n return '';\r\n }\r\n };\r\n return Controller;\r\n })();\r\n TestApiModule.Controller = Controller;\r\n})(TestApiModule || (TestApiModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('TestApiController', TestApiModule.Controller);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar Plugins = (function () {\r\n function Plugins() {\r\n }\r\n Plugins.getPlugin = function (index) {\r\n return this.items[index];\r\n };\r\n Plugins.addItem = function (component) {\r\n this.items.push(component);\r\n };\r\n Plugins.getCount = function () {\r\n return this.items.length;\r\n };\r\n Plugins.items = [];\r\n return Plugins;\r\n})();\r\nvar TestModule;\r\n(function (TestModule) {\r\n var Controller = (function () {\r\n Controller.$inject = [\"$scope\", \"modalService\", \"$parse\"];\r\n function Controller($scope, modalService, $parse) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.modalService = modalService;\r\n this.$parse = $parse;\r\n $scope.mbi = function () {\r\n };\r\n $scope.exec = function () {\r\n eval('(function(window,navigator,angular){\"use strict\";' +\r\n $scope.jsCode +\r\n '})({},{},{})');\r\n };\r\n $scope.run = function () {\r\n var count = Plugins.getCount();\r\n for (var i = 0; i < count; i++) {\r\n var plugin = Plugins.getPlugin(i);\r\n plugin.processEnc({ message: 'message' });\r\n }\r\n };\r\n $scope.schema = {\r\n type: \"object\",\r\n properties: {\r\n name: {\r\n type: \"string\",\r\n minLength: 2,\r\n title: \"First name\",\r\n description: \"Patient first name\"\r\n },\r\n title: {\r\n type: \"string\",\r\n title: \"Title\",\r\n enum: ['dr', 'jr', 'sir', 'mrs', 'mr', 'NaN', 'dj']\r\n },\r\n cashAccount: {\r\n type: \"boolean\",\r\n title: \"Is cash account\"\r\n },\r\n radios: {\r\n title: \"Basic radio button example\",\r\n type: \"string\",\r\n enum: [\r\n \"a\",\r\n \"b\",\r\n \"c\"\r\n ]\r\n },\r\n comment: {\r\n title: \"Comment\",\r\n type: \"string\",\r\n maxLength: 20,\r\n validationMessage: \"Don't be greedy!\"\r\n }\r\n }\r\n };\r\n $scope.form = [\r\n \"*\",\r\n {\r\n \"key\": \"radios\",\r\n \"type\": \"radios\",\r\n \"titleMap\": [\r\n {\r\n \"value\": \"c\",\r\n \"name\": \"C\"\r\n },\r\n {\r\n \"value\": \"b\",\r\n \"name\": \"B\"\r\n },\r\n {\r\n \"value\": \"a\",\r\n \"name\": \"A\"\r\n }\r\n ]\r\n },\r\n {\r\n \"key\": \"comment\",\r\n \"type\": \"textarea\",\r\n \"placeholder\": \"Make a comment\"\r\n },\r\n {\r\n type: \"submit\",\r\n title: \"Save\"\r\n }\r\n ];\r\n $scope.tinymceOptions = {\r\n selector: 'textarea',\r\n plugins: 'link image table preview print code',\r\n toolbar: 'undo redo | bold italic | fontsizeselect | bullist numlist outdent indent | alignleft aligncenter alignright | file | code',\r\n fontsize_formats: '8pt 10pt 12pt 14pt 18pt 24pt 36pt',\r\n height: 300,\r\n skin_url: GlobalVar.isProd ? 'styles/tinymce/skins/lightgray' : '',\r\n visual: false,\r\n browser_spellcheck: true,\r\n contextmenu: false,\r\n statusbar: false,\r\n valid_children: \"+body[style]\"\r\n };\r\n $scope.model = { name: \"default\" };\r\n }\r\n return Controller;\r\n })();\r\n TestModule.Controller = Controller;\r\n})(TestModule || (TestModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('TestController', TestModule.Controller);\r\n/// \r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var Timer;\r\n (function (Timer) {\r\n var TimerVo = (function () {\r\n function TimerVo() {\r\n }\r\n return TimerVo;\r\n })();\r\n Timer.TimerVo = TimerVo;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\"];\r\n function Service(httpService) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n }\r\n Service.prototype.getTimerList = function (dateFrom, dateTo) {\r\n return this.httpService.get(this.getUrl() +\r\n 'fromdate/' +\r\n dateFrom.format('YYYY-MM-DD') +\r\n '/todate/' +\r\n dateTo.format('YYYY-MM-DD'));\r\n };\r\n Service.prototype.getTimer = function (nodeId) {\r\n return this.httpService.get(this.getUrl() + nodeId);\r\n };\r\n Service.prototype.setTimer = function (timer) {\r\n var timerRequest = new TimerRequest();\r\n timerRequest.FollowUpDateTime = timer.FollowUpDateTime;\r\n timerRequest.CallbackCommand = timer.CallbackCommand;\r\n return this.httpService.post(this.getUrl(), timerRequest);\r\n };\r\n Service.prototype.cancelTimer = function (timerId) {\r\n return this.httpService.post(this.getUrl() + timerId);\r\n };\r\n Service.prototype.getUrl = function () {\r\n return 'v1/infrastructure/timer/';\r\n };\r\n return Service;\r\n })();\r\n Timer.Service = Service;\r\n var TimerRequest = (function () {\r\n function TimerRequest() {\r\n }\r\n return TimerRequest;\r\n })();\r\n })(Timer = Domain.Timer || (Domain.Timer = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('timerDomainService', Domain.Timer.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar TimerModule;\r\n(function (TimerModule) {\r\n var Timer = Domain.Timer.TimerVo;\r\n var SetTimerController = (function () {\r\n SetTimerController.$inject = [\"$scope\", \"$rootScope\", \"timerDomainService\", \"locationService\", \"showDialog\", \"moment\", \"$filter\"];\r\n function SetTimerController($scope, $rootScope, timerDomainService, locationService, showDialog, moment, $filter) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.timerDomainService = timerDomainService;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.moment = moment;\r\n this.$filter = $filter;\r\n $scope.title = 'Set timer';\r\n $scope.saveTimer = function (timer) {\r\n $scope.timer.FollowUpDateTime = moment($scope.timer.FollowUpDateTime, \"DD/MM/YYYY HH:mm\").toJSON();\r\n timerDomainService.setTimer(timer).then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n showDialog.info(\"The new timer was successfully setted.\");\r\n $rootScope.back();\r\n }\r\n });\r\n };\r\n $scope.done = function (isValid) {\r\n if (isValid) {\r\n $scope.saveTimer($scope.timer);\r\n }\r\n };\r\n $scope.timer = new Timer();\r\n }\r\n return SetTimerController;\r\n })();\r\n TimerModule.SetTimerController = SetTimerController;\r\n})(TimerModule || (TimerModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('SetTimerController', TimerModule.SetTimerController);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar TimerModule;\r\n(function (TimerModule) {\r\n var TimerController = (function () {\r\n TimerController.$inject = [\"$scope\", \"$rootScope\", \"timerDomainService\", \"locationService\", \"showDialog\", \"$filter\", \"moment\"];\r\n function TimerController($scope, $rootScope, timerDomainService, locationService, showDialog, $filter, moment) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.timerDomainService = timerDomainService;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.$filter = $filter;\r\n this.moment = moment;\r\n $scope.datePattern = \"dd/MM/yyyy HH:mm\";\r\n $scope.timers = [];\r\n $scope.searchText = '';\r\n $scope.goToCreateTimer = function () {\r\n locationService.goToCreateTimer();\r\n };\r\n $scope.deleteTimer = function (timer) {\r\n showDialog.confirm(\"Are you sure want to cancel timer: \" + timer.TimerId)\r\n .then(function () {\r\n timerDomainService.cancelTimer(timer.TimerId)\r\n .then(function (response) {\r\n if (response.Sucess === false) {\r\n showDialog.error(response.ResponseMessage);\r\n }\r\n else {\r\n showDialog.info(\"The timer: \" + timer.TimerId + \" was successfully canceled.\");\r\n _this.updateTimers();\r\n }\r\n });\r\n });\r\n };\r\n $scope.changeSearchText = function (text) {\r\n $scope.timers = text ? $filter('filter')($scope.timersInMemory, text) : $scope.timersInMemory;\r\n };\r\n $scope.changeFilterByDate = function (first) {\r\n if (first) {\r\n $scope.configTo.min = $scope.dateFrom;\r\n }\r\n else {\r\n $scope.configFrom.max = $scope.dateTo;\r\n }\r\n _this.updateTimers();\r\n };\r\n $scope.$watch('timersInMemory', function () {\r\n $scope.timersCount = $scope.timersInMemory\r\n .reduce(function (previousValue, currentValue) { return (previousValue + currentValue.Timers.length); }, 0);\r\n });\r\n this.init();\r\n }\r\n TimerController.prototype.init = function () {\r\n this.setDefaultFilterValues();\r\n this.updateTimers();\r\n };\r\n TimerController.prototype.setDefaultFilterValues = function () {\r\n var now = this.moment.utc();\r\n this.$scope.dateFrom = this.moment(now);\r\n this.$scope.dateTo = this.moment(now).add(1, 'months');\r\n var configFrom = new DatePickerModule.Config();\r\n configFrom.format = 'dd MM, yy';\r\n configFrom.max = this.$scope.dateTo;\r\n configFrom.min = this.moment(now);\r\n this.$scope.configFrom = configFrom;\r\n var configTo = new DatePickerModule.Config();\r\n configTo.format = 'dd MM, yy';\r\n configTo.min = this.$scope.dateFrom;\r\n this.$scope.configTo = configTo;\r\n };\r\n TimerController.prototype.updateTimers = function () {\r\n var _this = this;\r\n var that = this;\r\n that.timerDomainService.getTimerList(that.$scope.dateFrom, that.$scope.dateTo)\r\n .then(function (response) {\r\n _this.$scope.timersInMemory = response;\r\n _this.$scope.changeSearchText(_this.$scope.searchText);\r\n });\r\n };\r\n return TimerController;\r\n })();\r\n TimerModule.TimerController = TimerController;\r\n})(TimerModule || (TimerModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('TimerController', TimerModule.TimerController);\r\n/// \r\nvar ModalModule;\r\n(function (ModalModule) {\r\n var InviteDoctorController = (function () {\r\n InviteDoctorController.$inject = [\"$scope\", \"modalService\", \"$modalInstance\", \"clinicalDomain\", \"$routeParams\"];\r\n function InviteDoctorController($scope, modalService, $modalInstance, clinicalDomain, $routeParams) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.modalService = modalService;\r\n this.$modalInstance = $modalInstance;\r\n this.clinicalDomain = clinicalDomain;\r\n this.$routeParams = $routeParams;\r\n $scope.openCellPhoneDialog = function () {\r\n modalService.openNumbers('cellphone', 'Enter cellphone')\r\n .then(function (cellPhone) {\r\n if (cellPhone) {\r\n $scope.model.cellphone = cellPhone;\r\n }\r\n });\r\n };\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss();\r\n };\r\n $scope.invite = function () {\r\n if ($scope.model.cellphone !== \"\" && $scope.model.email !== \"\" && $scope.model.name !== \"\") {\r\n var body = {\r\n ContactNumber: $scope.model.cellphone,\r\n Name: $scope.model.name,\r\n Email: $scope.model.email\r\n };\r\n clinicalDomain.inviteDoctor($routeParams.practiceId, body).\r\n then(function (response) {\r\n if (!response.Sucess) {\r\n modalService.error(response.ResponseMessage);\r\n }\r\n else {\r\n modalService.info(\"Thank you for sending an invite\");\r\n $modalInstance.close($scope.model);\r\n }\r\n });\r\n }\r\n else {\r\n modalService.error(\"Please enter valid info in the highlighted fields\");\r\n }\r\n };\r\n $scope.model = {};\r\n $scope.model.cellphone = \"\";\r\n }\r\n return InviteDoctorController;\r\n })();\r\n ModalModule.InviteDoctorController = InviteDoctorController;\r\n})(ModalModule || (ModalModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('InviteDoctorController', ModalModule.InviteDoctorController);\r\n/// \r\nvar UserAccountModule;\r\n(function (UserAccountModule) {\r\n var UserAccountController = (function () {\r\n UserAccountController.$inject = [\"$scope\", \"$routeParams\", \"$rootScope\", \"userService\", \"showDialog\", \"$filter\", \"accountDomain\", \"modalService\", \"locationService\", \"providerService\"];\r\n function UserAccountController($scope, $routeParams, $rootScope, userService, showDialog, $filter, accountDomain, modalService, locationService, providerService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$routeParams = $routeParams;\r\n this.$rootScope = $rootScope;\r\n this.userService = userService;\r\n this.showDialog = showDialog;\r\n this.$filter = $filter;\r\n this.accountDomain = accountDomain;\r\n this.modalService = modalService;\r\n this.locationService = locationService;\r\n this.providerService = providerService;\r\n $scope.userId = $routeParams.userId;\r\n $scope.changePassword = function () {\r\n _this.locationService.goToChangePassword($routeParams.practiceId, $scope.userId);\r\n };\r\n $scope.goToHome = function () {\r\n _this.locationService.goToHome($routeParams.practiceId);\r\n };\r\n $scope.editUser = function () {\r\n if (_this.$scope.showAdminLinks) {\r\n _this.locationService.goToEditUser($scope.userId);\r\n }\r\n };\r\n $scope.openAddressBook = function () {\r\n _this.locationService.goToAddressBook($routeParams.practiceId);\r\n };\r\n $scope.openNotificationsBulkSend = function () {\r\n _this.locationService.goToNotificationsBulkSend($routeParams.practiceId);\r\n };\r\n $scope.openTemplates = function () {\r\n _this.locationService.goToClinicalTemplates($routeParams.practiceId);\r\n };\r\n $scope.openTemplatesBulkImport = function () {\r\n _this.locationService.goToTemplatesBulkImport($routeParams.practiceId);\r\n };\r\n $scope.openPractices = function () {\r\n _this.locationService.goToPractices();\r\n };\r\n $scope.editPractice = function () {\r\n var practiceId = $routeParams.practiceId;\r\n _this.locationService.goToEditPractice(practiceId);\r\n };\r\n $scope.openPracticeOptions = function () {\r\n var practiceId = $routeParams.practiceId;\r\n _this.locationService.goToPracticeOptions(practiceId);\r\n };\r\n $scope.openReports = function () {\r\n var practiceId = $routeParams.practiceId;\r\n _this.locationService.goToPowerBi(practiceId);\r\n };\r\n $scope.openFailedInvoices = function () {\r\n _this.locationService.goToFailedInvoices();\r\n };\r\n $scope.openUsers = function () {\r\n _this.locationService.goToUsers();\r\n };\r\n $scope.openTenants = function () {\r\n _this.locationService.goToTenants();\r\n };\r\n $scope.openCardReaders = function () {\r\n _this.locationService.goToCardReaders();\r\n };\r\n $scope.openCardPayments = function () {\r\n _this.locationService.goToCardPayments();\r\n };\r\n $scope.openPublicKeys = function () {\r\n _this.locationService.goToPublicKeys();\r\n };\r\n $scope.openAudit = function () {\r\n _this.locationService.gotToAudit();\r\n };\r\n $scope.openTenantEvents = function () {\r\n var practiceId = $routeParams.practiceId;\r\n _this.locationService.goToTenantEvents(practiceId);\r\n };\r\n $scope.openSpecialityRules = function () {\r\n _this.locationService.goToSpecialityRules();\r\n };\r\n $scope.openTestAPI = function () {\r\n _this.locationService.gotToTestApi();\r\n };\r\n this.init();\r\n }\r\n UserAccountController.prototype.init = function () {\r\n var _this = this;\r\n this.accountDomain.getUser(this.$scope.userId)\r\n .then(function (response) {\r\n _this.$scope.user = response;\r\n for (var i = 0; i < response.Claims.length; i++) {\r\n if (response.Claims[i].ClaimScope === '*') {\r\n _this.$scope.showAdminLinks = true;\r\n return;\r\n }\r\n }\r\n });\r\n var practiceId = this.$routeParams.practiceId;\r\n this.providerService.getProviderOptions(practiceId)\r\n .then(function (options) {\r\n _this.$scope.isPowerBIEnabled = options.isPowerBIEnabled;\r\n });\r\n };\r\n UserAccountController.prototype.updateUsers = function () {\r\n };\r\n return UserAccountController;\r\n })();\r\n UserAccountModule.UserAccountController = UserAccountController;\r\n})(UserAccountModule || (UserAccountModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('UserAccountController', UserAccountModule.UserAccountController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar UserModule;\r\n(function (UserModule) {\r\n var ConfirmPassword = (function () {\r\n function ConfirmPassword() {\r\n }\r\n return ConfirmPassword;\r\n })();\r\n UserModule.ConfirmPassword = ConfirmPassword;\r\n var UserAbsController = (function () {\r\n UserAbsController.$inject = [\"$rootScope\", \"$scope\", \"moment\", \"practiceService\"];\r\n function UserAbsController($rootScope, $scope, moment, practiceService) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$rootScope = $rootScope;\r\n this.$scope = $scope;\r\n this.moment = moment;\r\n this.practiceService = practiceService;\r\n $scope.roles = [\"doctor\", \"front-office-user\", \"receptionist\", \"system-admin\", \"practicing-nurse\", \"triage-nurse\"];\r\n $scope.changePassword = function () {\r\n if ($scope.user && $scope.confirmPassword) {\r\n $scope.confirmPassword.matched = $scope.confirmPassword.value == $scope.user.Password;\r\n $scope.userForm.confirm.$setValidity('notMatched', $scope.confirmPassword.matched);\r\n }\r\n };\r\n $scope.addRole = function () {\r\n var role = new Domain.Account.Claim();\r\n role.ClaimType = 'role';\r\n if (!$scope.user.Claims) {\r\n $scope.user.Claims = [];\r\n }\r\n $scope.user.Claims.push(role);\r\n };\r\n $scope.deleteRole = function (index) {\r\n if ($scope.user.Claims && index >= 0) {\r\n $scope.user.Claims.splice(index, 1);\r\n }\r\n };\r\n $scope.searchPractices = function (text) {\r\n if (text === '' || text === 'All') {\r\n text = '';\r\n }\r\n practiceService.getProvidersPageAndSearch(text, 0, 100)\r\n .then(function (practicesPage) {\r\n if (practicesPage) {\r\n $scope.practices = [].concat(practicesPage);\r\n }\r\n });\r\n };\r\n $scope.loadPractices = function () {\r\n practiceService.getAllPractices()\r\n .then(function (response) {\r\n $scope.practices = response;\r\n });\r\n };\r\n $scope.rollbackUserRoles = function () {\r\n $scope.user.Claims.splice(1, $scope.user.Claims.length - 1);\r\n };\r\n $scope.validate = function (isValid, funcSuccess, funcError) {\r\n if (!$scope.confirmPassword.matched) {\r\n funcError(UserAbsController.PASSWORD_NOT_MATCHED);\r\n }\r\n else if (!isValid) {\r\n funcError(UserAbsController.FIELD_NOT_FILL);\r\n }\r\n else {\r\n funcSuccess();\r\n }\r\n };\r\n $scope.clearExpirationTime = function () {\r\n _this.$scope.user.ExpirationTime = null;\r\n _this.$scope.expirationTimeStr = null;\r\n };\r\n $scope.onTimeOfServiceChange = function (date) {\r\n var consMoment = moment(new Date(date));\r\n _this.$scope.user.ExpirationTime = consMoment.utc().format(ServerDateFormat);\r\n };\r\n this.init();\r\n }\r\n UserAbsController.prototype.init = function () {\r\n this.$scope.practices = [];\r\n this.$scope.confirmPassword = new ConfirmPassword();\r\n };\r\n UserAbsController.PASSWORD_NOT_MATCHED = \"Passwords doesn't matched !\";\r\n UserAbsController.FIELD_NOT_FILL = \"Please enter valid info in the highlighted fields !\";\r\n return UserAbsController;\r\n })();\r\n UserModule.UserAbsController = UserAbsController;\r\n})(UserModule || (UserModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('UserController', UserModule.UserAbsController);\r\n/// \r\n/// \r\n/// \r\nvar UserModule;\r\n(function (UserModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"accountDomain\"];\r\n function Service(accountDomain) {\r\n \"ngInject\";\r\n this.accountDomain = accountDomain;\r\n }\r\n Service.prototype.createUser = function (user) {\r\n return this.accountDomain.createUser(user);\r\n };\r\n Service.prototype.getUsers = function () {\r\n return this.accountDomain.getUsers();\r\n };\r\n Service.prototype.updateUser = function (user) {\r\n return this.accountDomain.updateUser(user);\r\n };\r\n Service.prototype.getUsersPageAndSearch = function (filter, pageCount, pageSize) {\r\n return this.accountDomain.getUsersPage(filter, pageCount, pageSize);\r\n };\r\n Service.prototype.getUser = function (userId) {\r\n return this.accountDomain.getUser(userId);\r\n };\r\n Service.prototype.deleteUser = function (userId) {\r\n return this.accountDomain.deleteUser(userId);\r\n };\r\n return Service;\r\n })();\r\n UserModule.Service = Service;\r\n})(UserModule || (UserModule = {}));\r\nangular.module('DoctorApp')\r\n .service('userService', UserModule.Service);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar UserModule;\r\n(function (UserModule) {\r\n var UserCreateController = (function () {\r\n UserCreateController.$inject = [\"$scope\", \"$rootScope\", \"locationService\", \"showDialog\", \"userService\", \"$controller\"];\r\n function UserCreateController($scope, $rootScope, locationService, showDialog, userService, $controller) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.userService = userService;\r\n this.$controller = $controller;\r\n angular.extend(this, $controller('UserController', { $scope: $scope }));\r\n $scope.done = function (isValid) {\r\n $scope.validate(isValid, function () {\r\n _this.saveUser($scope.user);\r\n }, function (error) {\r\n showDialog.error(error);\r\n });\r\n };\r\n this.init();\r\n }\r\n UserCreateController.prototype.init = function () {\r\n this.$scope.create = true;\r\n this.$scope.title = 'Create user';\r\n this.$scope.user = new Domain.Account.User();\r\n this.$scope.user.RequirePasswordChange = true;\r\n this.$scope.addRole();\r\n this.$scope.loadPractices();\r\n };\r\n UserCreateController.prototype.saveUser = function (user) {\r\n var _this = this;\r\n this.userService.createUser(user)\r\n .then(function (response) {\r\n if (response.Sucess) {\r\n _this.showDialog.info(\"The new user was successfully created.\");\r\n _this.$rootScope.back();\r\n }\r\n else {\r\n _this.showDialog.error(response.ResponseMessage);\r\n _this.$scope.rollbackUserRoles();\r\n }\r\n })\r\n .catch(function (error) {\r\n _this.$scope.rollbackUserRoles();\r\n });\r\n };\r\n return UserCreateController;\r\n })();\r\n UserModule.UserCreateController = UserCreateController;\r\n})(UserModule || (UserModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('UserCreateController', UserModule.UserCreateController);\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar UserModule;\r\n(function (UserModule) {\r\n var UserEditController = (function () {\r\n UserEditController.$inject = [\"$scope\", \"$rootScope\", \"locationService\", \"showDialog\", \"userService\", \"moment\", \"$routeParams\", \"$controller\"];\r\n function UserEditController($scope, $rootScope, locationService, showDialog, userService, moment, $routeParams, $controller) {\r\n \"ngInject\";\r\n var _this = this;\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.userService = userService;\r\n this.moment = moment;\r\n this.$routeParams = $routeParams;\r\n this.$controller = $controller;\r\n this.PASSWORD_TO_MEET_VALIDATION = 'Charlie1!';\r\n angular.extend(this, $controller('UserController', { $scope: $scope }));\r\n $scope.done = function (isValid) {\r\n $scope.validate(isValid, function () {\r\n _this.updateUser($scope.user);\r\n }, function (error) {\r\n showDialog.error(error);\r\n });\r\n };\r\n this.init();\r\n }\r\n UserEditController.prototype.init = function () {\r\n this.$scope.create = false;\r\n this.$scope.title = 'Edit user';\r\n this.getUser();\r\n };\r\n UserEditController.prototype.getUser = function () {\r\n var _this = this;\r\n var userId = this.$routeParams.userId;\r\n return this.userService.getUser(userId)\r\n .then(function (user) {\r\n _this.$scope.user = user;\r\n _this.$scope.user.Password = _this.PASSWORD_TO_MEET_VALIDATION;\r\n _this.$scope.confirmPassword.value = _this.PASSWORD_TO_MEET_VALIDATION;\r\n _this.$scope.confirmPassword.matched = true;\r\n _this.$scope.expirationTimeStr = _this.moment(user.ExpirationTime).format('D MMMM, YYYY LT');\r\n var providerId = user.Claims.length && user.Claims[0].ClaimScope;\r\n _this.$scope.searchPractices(providerId);\r\n })\r\n .catch(function () {\r\n _this.$rootScope.back();\r\n });\r\n };\r\n UserEditController.prototype.updateUser = function (user) {\r\n var _this = this;\r\n var userCopy = angular.copy(user);\r\n if (userCopy.Password === this.PASSWORD_TO_MEET_VALIDATION) {\r\n userCopy.Password = null;\r\n }\r\n this.userService.updateUser(userCopy)\r\n .then(function (response) {\r\n _this.$rootScope.back();\r\n });\r\n };\r\n UserEditController.DATE_OUT_PATTERN = 'D MMMM, YYYY';\r\n return UserEditController;\r\n })();\r\n UserModule.UserEditController = UserEditController;\r\n})(UserModule || (UserModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('UserEditController', UserModule.UserEditController);\r\n/// \r\n/// \r\n/// \r\n/// \r\nvar UserModule;\r\n(function (UserModule) {\r\n var UsersController = (function () {\r\n UsersController.$inject = [\"$scope\", \"$rootScope\", \"userService\", \"locationService\", \"showDialog\", \"$filter\", \"modalService\", \"$routeParams\"];\r\n function UsersController($scope, $rootScope, userService, locationService, showDialog, $filter, modalService, $routeParams) {\r\n \"ngInject\";\r\n this.$scope = $scope;\r\n this.$rootScope = $rootScope;\r\n this.userService = userService;\r\n this.locationService = locationService;\r\n this.showDialog = showDialog;\r\n this.$filter = $filter;\r\n this.modalService = modalService;\r\n this.$routeParams = $routeParams;\r\n $scope.goToCreateUser = function () {\r\n locationService.goToCreateUser();\r\n };\r\n $scope.editUser = function (user) {\r\n locationService.goToEditUser(user.UserId);\r\n };\r\n $scope.deleteUser = function (user) {\r\n showDialog.confirm(\"Are you sure want to delete user: \" + user.Username)\r\n .then(function () {\r\n return userService.deleteUser(user.UserId);\r\n })\r\n .then(function () {\r\n showDialog.info(\"The user: \" + user.Username + \" was successfully deleted.\");\r\n })\r\n .catch(function (error) {\r\n if (error) {\r\n showDialog.error(error);\r\n }\r\n });\r\n };\r\n $scope.loadNextPage = function () {\r\n if (!$scope.allPagesLoaded && !$scope.isRunningPage) {\r\n $scope.pageNo = $scope.pageNo + 1;\r\n $scope.isRunningPage = true;\r\n userService.getUsersPageAndSearch($scope.searchText, $scope.pageNo, $scope.pageSize)\r\n .then(function (usersPage) {\r\n if (usersPage) {\r\n for (var i = 0; i < usersPage.length; i++) {\r\n $scope.users.push(usersPage[i]);\r\n }\r\n }\r\n $scope.allPagesLoaded = !usersPage ||\r\n usersPage.length !== $scope.pageSize;\r\n $scope.isRunningPage = false;\r\n });\r\n }\r\n };\r\n $scope.doSearch = function () {\r\n var text = $scope.searchText;\r\n $scope.pageNo = 0;\r\n $scope.users = [];\r\n userService.getUsersPageAndSearch(text, $scope.pageNo, $scope.pageSize)\r\n .then(function (usersPage) {\r\n $scope.users = usersPage;\r\n $scope.allPagesLoaded = !usersPage ||\r\n usersPage.length !== $scope.pageSize;\r\n $scope.isRunningPage = false;\r\n });\r\n };\r\n this.init();\r\n }\r\n UsersController.prototype.init = function () {\r\n this.$scope.users = [];\r\n this.$scope.pageSize = 10;\r\n this.$scope.pageNo = 0;\r\n this.$scope.allPagesLoaded = false;\r\n this.$scope.searchText = this.$routeParams.practiceId || '';\r\n this.$scope.doSearch();\r\n };\r\n return UsersController;\r\n })();\r\n UserModule.UsersController = UsersController;\r\n})(UserModule || (UserModule = {}));\r\nangular.module('DoctorApp')\r\n .controller('UsersController', UserModule.UsersController);\r\n/// \r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var ChargeCode;\r\n (function (ChargeCode) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"authService\", \"$q\"];\r\n function Service(httpService, authService, $q) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.authService = authService;\r\n this.$q = $q;\r\n }\r\n Service.prototype.getUrl = function () {\r\n return '';\r\n };\r\n return Service;\r\n })();\r\n ChargeCode.Service = Service;\r\n })(ChargeCode = Domain.ChargeCode || (Domain.ChargeCode = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('chargeCodeDomain', Domain.ChargeCode.Service);\r\n/// \r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var Claim;\r\n (function (Claim) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"authService\", \"$q\"];\r\n function Service(httpService, authService, $q) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.authService = authService;\r\n this.$q = $q;\r\n }\r\n Service.prototype.getUrl = function () {\r\n return '';\r\n };\r\n return Service;\r\n })();\r\n Claim.Service = Service;\r\n })(Claim = Domain.Claim || (Domain.Claim = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('claimDomain', Domain.Claim.Service);\r\n/// \r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var Infrastructure;\r\n (function (Infrastructure) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"authService\", \"$q\"];\r\n function Service(httpService, authService, $q) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.authService = authService;\r\n this.$q = $q;\r\n }\r\n Service.prototype.getUrl = function () {\r\n return '';\r\n };\r\n return Service;\r\n })();\r\n Infrastructure.Service = Service;\r\n })(Infrastructure = Domain.Infrastructure || (Domain.Infrastructure = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('infrastructureDomain', Domain.Infrastructure.Service);\r\n/// \r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var NodePublic;\r\n (function (NodePublic) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"authService\", \"$q\"];\r\n function Service(httpService, authService, $q) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.authService = authService;\r\n this.$q = $q;\r\n }\r\n Service.prototype.getUrl = function () {\r\n return '';\r\n };\r\n return Service;\r\n })();\r\n NodePublic.Service = Service;\r\n })(NodePublic = Domain.NodePublic || (Domain.NodePublic = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('nodePublicDomain', Domain.NodePublic.Service);\r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var PowerBI;\r\n (function (PowerBI) {\r\n var PowerBIReport = (function () {\r\n function PowerBIReport() {\r\n }\r\n return PowerBIReport;\r\n })();\r\n PowerBI.PowerBIReport = PowerBIReport;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"$q\", \"$timeout\"];\r\n function Service(httpService, $q, $timeout) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.$q = $q;\r\n this.$timeout = $timeout;\r\n }\r\n Service.prototype.getReports = function (practiceId) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/powerbi/reports/\");\r\n };\r\n Service.prototype.getReport = function (practiceId, reportId) {\r\n return this.httpService.get(\"v1/\" + practiceId + \"/powerbi/reports/\" + reportId);\r\n };\r\n return Service;\r\n })();\r\n PowerBI.Service = Service;\r\n })(PowerBI = Domain.PowerBI || (Domain.PowerBI = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('powerbiService', Domain.PowerBI.Service);\r\n/// \r\n/// \r\n/// \r\nvar Domain;\r\n(function (Domain) {\r\n var WaitingRoom;\r\n (function (WaitingRoom) {\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"authService\", \"$q\"];\r\n function Service(httpService, authService, $q) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.authService = authService;\r\n this.$q = $q;\r\n }\r\n Service.prototype.getUrl = function () {\r\n return '';\r\n };\r\n return Service;\r\n })();\r\n WaitingRoom.Service = Service;\r\n })(WaitingRoom = Domain.WaitingRoom || (Domain.WaitingRoom = {}));\r\n})(Domain || (Domain = {}));\r\nangular.module('DoctorApp')\r\n .service('waitingRoomDomain', Domain.WaitingRoom.Service);\r\nvar UsageModule;\r\n(function (UsageModule) {\r\n (function (FeatureType) {\r\n FeatureType[FeatureType[\"HealthID\"] = 0] = \"HealthID\";\r\n FeatureType[FeatureType[\"HealthDocs\"] = 1] = \"HealthDocs\";\r\n FeatureType[FeatureType[\"PowerBI\"] = 2] = \"PowerBI\";\r\n FeatureType[FeatureType[\"PatientReport\"] = 3] = \"PatientReport\";\r\n FeatureType[FeatureType[\"PatientFiles\"] = 4] = \"PatientFiles\";\r\n FeatureType[FeatureType[\"AddressBook\"] = 5] = \"AddressBook\";\r\n FeatureType[FeatureType[\"PathologyReport\"] = 6] = \"PathologyReport\";\r\n FeatureType[FeatureType[\"PathologyReportWorkflow\"] = 7] = \"PathologyReportWorkflow\";\r\n })(UsageModule.FeatureType || (UsageModule.FeatureType = {}));\r\n var FeatureType = UsageModule.FeatureType;\r\n (function (ActionType) {\r\n ActionType[ActionType[\"ViewPatient\"] = 0] = \"ViewPatient\";\r\n ActionType[ActionType[\"ViewDocument\"] = 1] = \"ViewDocument\";\r\n ActionType[ActionType[\"ViewReport\"] = 2] = \"ViewReport\";\r\n ActionType[ActionType[\"SendEmail\"] = 3] = \"SendEmail\";\r\n ActionType[ActionType[\"NewContact\"] = 4] = \"NewContact\";\r\n ActionType[ActionType[\"UpdateContact\"] = 5] = \"UpdateContact\";\r\n ActionType[ActionType[\"DeleteContact\"] = 6] = \"DeleteContact\";\r\n ActionType[ActionType[\"UseContact\"] = 7] = \"UseContact\";\r\n })(UsageModule.ActionType || (UsageModule.ActionType = {}));\r\n var ActionType = UsageModule.ActionType;\r\n var UsageTypeUtil = (function () {\r\n function UsageTypeUtil() {\r\n }\r\n UsageTypeUtil.getFeature = function (featureType) {\r\n return this.FEATURES[featureType];\r\n };\r\n UsageTypeUtil.getAction = function (actionType) {\r\n return this.ACTIONS[actionType];\r\n };\r\n UsageTypeUtil.FEATURES = [\r\n 'HealthID',\r\n 'HealthDocs',\r\n 'PowerBI',\r\n 'PatientReport',\r\n 'myPatientFiles',\r\n 'AddressBook',\r\n 'PathologyReport',\r\n 'PathologyReportWorkflow'\r\n ];\r\n UsageTypeUtil.ACTIONS = [\r\n 'View Patient',\r\n 'View Document',\r\n 'View Report',\r\n 'Send Email',\r\n 'New Contact',\r\n 'Update Contact',\r\n 'Delete Contact',\r\n 'Use Contact'\r\n ];\r\n return UsageTypeUtil;\r\n })();\r\n UsageModule.UsageTypeUtil = UsageTypeUtil;\r\n})(UsageModule || (UsageModule = {}));\r\n/// \r\n/// \r\nvar InterceptorModule;\r\n(function (InterceptorModule) {\r\n var AuthService = (function () {\r\n AuthService.$inject = [\"$q\", \"locationService\", \"storageService\"];\r\n function AuthService($q, locationService, storageService) {\r\n \"ngInject\";\r\n var service = {};\r\n service.request = function (config) {\r\n var badChars = ['*'];\r\n config.headers = config.headers || {};\r\n var authData = storageService.getAuthorizationData();\r\n if (authData) {\r\n if (config.url.indexOf(GlobalVar.serverURL) >= 0) {\r\n config.headers.Authorization = 'Bearer ' + authData.token;\r\n }\r\n }\r\n if ((config.url.indexOf(\"billing/providers\") >= 0) &&\r\n (config.method == \"DELETE\")) {\r\n config.headers.Accept = \"application/json, text/json, */*\";\r\n config.headers[\"Content-Type\"] = \"application/json; charset=UTF-8\";\r\n }\r\n if ((config.method == \"GET\") && ((config.url.lastIndexOf(\"lookup\") > 0) || (config.url.lastIndexOf(\"/patient/patients/\") > 0))) {\r\n var search = config.url.substr(config.url.lastIndexOf(\"/\") + 1);\r\n var response = {\r\n \"status\": 777,\r\n \"statusText\": \"Search field cannot contain special characters.\"\r\n };\r\n if (search.lastIndexOf(\".\") === 0) {\r\n return $q.reject(response);\r\n }\r\n for (var i = 0; i < badChars.length; i++) {\r\n if (search.lastIndexOf(badChars[i]) >= 0) {\r\n return $q.reject(response);\r\n }\r\n }\r\n }\r\n return config;\r\n };\r\n service.responseError = function (rejection) {\r\n return $q.reject(rejection);\r\n };\r\n return service;\r\n }\r\n return AuthService;\r\n })();\r\n InterceptorModule.AuthService = AuthService;\r\n})(InterceptorModule || (InterceptorModule = {}));\r\nangular.module('DoctorApp')\r\n .service('authInterceptorService', InterceptorModule.AuthService);\r\n/// \r\nvar BrowserModule;\r\n(function (BrowserModule) {\r\n (function (Type) {\r\n Type[Type[\"CHROME\"] = 0] = \"CHROME\";\r\n Type[Type[\"SAFARI\"] = 1] = \"SAFARI\";\r\n Type[Type[\"FIREFOX\"] = 2] = \"FIREFOX\";\r\n Type[Type[\"IE\"] = 3] = \"IE\";\r\n Type[Type[\"UNKNOWN\"] = 4] = \"UNKNOWN\";\r\n })(BrowserModule.Type || (BrowserModule.Type = {}));\r\n var Type = BrowserModule.Type;\r\n var Service = (function () {\r\n Service.$inject = [\"$window\"];\r\n function Service($window) {\r\n \"ngInject\";\r\n this.$window = $window;\r\n }\r\n Service.prototype.getType = function () {\r\n var userAgent = this.$window.navigator.userAgent;\r\n var browsers = [/chrome/i, /safari/i, /firefox/i, /trident/i];\r\n for (var i = 0; i < browsers.length; i++) {\r\n if (browsers[i].test(userAgent)) {\r\n return i;\r\n }\r\n }\r\n return Type.UNKNOWN;\r\n };\r\n return Service;\r\n })();\r\n BrowserModule.Service = Service;\r\n})(BrowserModule || (BrowserModule = {}));\r\nangular.module('DoctorApp')\r\n .service('browser', BrowserModule.Service);\r\n/// \r\n/// \r\nvar InfrastructureModule;\r\n(function (InfrastructureModule) {\r\n var Service = (function () {\r\n Service.$inject = [\"$http\", \"$q\", \"authService\"];\r\n function Service($http, $q, authService) {\r\n \"ngInject\";\r\n this.$http = $http;\r\n this.$q = $q;\r\n this.authService = authService;\r\n this.offline = false;\r\n }\r\n Service.prototype.getNetworkState = function (practiceId) {\r\n var responseFail = { Sucess: false };\r\n var deferred = this.$q.defer();\r\n if (!practiceId) {\r\n deferred.resolve(responseFail);\r\n }\r\n else {\r\n var query = GlobalVar.serverURL + 'v1/' + practiceId + '/infrastructure/network/state';\r\n this.$http.get(query)\r\n .then(function (response) {\r\n deferred.resolve(response.data);\r\n })\r\n .catch(function () {\r\n deferred.resolve(responseFail);\r\n });\r\n }\r\n return deferred.promise;\r\n };\r\n return Service;\r\n })();\r\n InfrastructureModule.Service = Service;\r\n})(InfrastructureModule || (InfrastructureModule = {}));\r\nangular.module('DoctorApp')\r\n .service('infrastructureService', InfrastructureModule.Service);\r\n/// \r\n/// \r\nangular.module('DoctorApp')\r\n .service('moment', function () {\r\n moment.defaultFormat = 'YYYY-MM-DDTHH:mm:ss[Z]';\r\n return moment;\r\n});\r\n/// \r\n/// \r\nvar NotificationModule;\r\n(function (NotificationModule) {\r\n var Notification = (function () {\r\n function Notification() {\r\n }\r\n return Notification;\r\n })();\r\n NotificationModule.Notification = Notification;\r\n var Action = (function () {\r\n function Action() {\r\n }\r\n return Action;\r\n })();\r\n NotificationModule.Action = Action;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"$q\", \"modalService\"];\r\n function Service(httpService, $q, modalService) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.$q = $q;\r\n this.modalService = modalService;\r\n }\r\n Service.prototype.inviteDoctor = function (practiceId) {\r\n return this.modalService.showInviteDoctorDialog();\r\n };\r\n Service.prototype.notificationBulk = function (notifications) {\r\n return this.httpService.post(this.getUrl() + \"infrastructure/notifications/bulk\", notifications);\r\n };\r\n Service.prototype.notificationBulkFromFile = function (formData) {\r\n return this.httpService.post(this.getUrl() + \"infrastructure/notifications/bulkfromfile\", formData, {\r\n transformRequest: angular.identity,\r\n headers: { 'Content-Type': undefined }\r\n });\r\n };\r\n Service.prototype.raiseNotification = function (practiceId, notification) {\r\n var body = {\r\n Notification: notification,\r\n CorrelationId: [],\r\n OriginatedSystem: 'DoctorAppUI'\r\n };\r\n return this.httpService.post(this.getUrl() + practiceId + \"/infrastructure/notifications\", body);\r\n };\r\n Service.prototype.getNotifications = function (practiceId) {\r\n return this.httpService.get(this.getUrl() + practiceId + \"/infrastructure/notifications\");\r\n };\r\n Service.prototype.notificationAction = function (practiceId, notificationId, action) {\r\n return this.httpService.post(this.getUrl() + practiceId + \"/infrastructure/notifications/\" + notificationId + \"/action\", action);\r\n };\r\n Service.prototype.markNotificationViewed = function (practiceId, notificationId) {\r\n return this.httpService.post(this.getUrl() + practiceId + \"/infrastructure/notifications/\" + notificationId + \"/view\", {});\r\n };\r\n Service.prototype.getUrl = function () {\r\n return 'v1/';\r\n };\r\n return Service;\r\n })();\r\n NotificationModule.Service = Service;\r\n})(NotificationModule || (NotificationModule = {}));\r\nangular.module('DoctorApp')\r\n .service('notificationService', NotificationModule.Service);\r\n/// \r\nangular.module('DoctorApp')\r\n .service('promiseService', promiseService);\r\nfunction promiseService() {\r\n var service = {\r\n defer: function () {\r\n return new CreateDefer();\r\n }\r\n };\r\n function CreateDefer() {\r\n var context = this;\r\n this.resolve = function () {\r\n context.success.apply(this, arguments);\r\n };\r\n this.reject = function () {\r\n context.error.apply(this, arguments);\r\n };\r\n this.promise = {\r\n then: function (success, error) {\r\n context.success = success ? success : function () {\r\n };\r\n context.error = error ? error : function () {\r\n };\r\n }\r\n };\r\n }\r\n return service;\r\n}\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar UsageModule;\r\n(function (UsageModule) {\r\n var FeatureUsageBody = (function () {\r\n function FeatureUsageBody() {\r\n this.FeatureUsage = new FeatureUsage();\r\n }\r\n return FeatureUsageBody;\r\n })();\r\n UsageModule.FeatureUsageBody = FeatureUsageBody;\r\n var FeatureUsage = (function () {\r\n function FeatureUsage() {\r\n this.Id = \"\";\r\n }\r\n return FeatureUsage;\r\n })();\r\n UsageModule.FeatureUsage = FeatureUsage;\r\n var Service = (function () {\r\n Service.$inject = [\"httpService\", \"patientService\", \"storageService\", \"billingDomain\", \"moment\"];\r\n function Service(httpService, patientService, storageService, billingDomain, moment) {\r\n \"ngInject\";\r\n this.httpService = httpService;\r\n this.patientService = patientService;\r\n this.storageService = storageService;\r\n this.billingDomain = billingDomain;\r\n this.moment = moment;\r\n }\r\n Service.prototype.logFeatureUsed = function (body) {\r\n return this.httpService.put(this.getUrl() + 'infrastructure/featureusage', body);\r\n };\r\n Service.prototype.sendEmail = function (practiceId, subject, email, bodyText) {\r\n var body = new FeatureUsageBody();\r\n var featureType = UsageModule.FeatureType.PatientReport;\r\n var actionType = UsageModule.ActionType.SendEmail;\r\n body.FeatureUsage.TenantId = practiceId;\r\n body.FeatureUsage.Feature = UsageModule.UsageTypeUtil.getFeature(featureType);\r\n body.FeatureUsage.Action = UsageModule.UsageTypeUtil.getAction(actionType);\r\n body.FeatureUsage.Parameters = {\r\n Subject: subject,\r\n Email: email,\r\n Body: bodyText\r\n };\r\n body.FeatureUsage.Date = this.getToday();\r\n this.logFeatureUsed(body);\r\n };\r\n Service.prototype.useAddressBook = function (practiceId, username, actionType, entry) {\r\n var body = new FeatureUsageBody();\r\n var featureType = UsageModule.FeatureType.AddressBook;\r\n body.FeatureUsage.TenantId = practiceId;\r\n body.FeatureUsage.Feature = UsageModule.UsageTypeUtil.getFeature(featureType);\r\n body.FeatureUsage.Action = UsageModule.UsageTypeUtil.getAction(actionType);\r\n body.FeatureUsage.Parameters = {\r\n Category: entry.Category,\r\n Username: username,\r\n };\r\n if (actionType !== UsageModule.ActionType.NewContact) {\r\n body.FeatureUsage.Parameters.EntryId = entry.AddressBookEntryId;\r\n }\r\n body.FeatureUsage.Date = this.getToday();\r\n this.logFeatureUsed(body);\r\n };\r\n Service.prototype.openHealthDocs = function (practiceId, patientId) {\r\n var body = new FeatureUsageBody();\r\n var featureType = UsageModule.FeatureType.HealthDocs;\r\n var actionType = UsageModule.ActionType.ViewDocument;\r\n body.FeatureUsage.TenantId = practiceId;\r\n body.FeatureUsage.Feature = UsageModule.UsageTypeUtil.getFeature(featureType);\r\n body.FeatureUsage.Action = UsageModule.UsageTypeUtil.getAction(actionType);\r\n body.FeatureUsage.Date = this.getToday();\r\n body.FeatureUsage.Parameters = {\r\n PatientId: patientId\r\n };\r\n this.logFeatureUsed(body);\r\n };\r\n Service.prototype.openPatientFiles = function (practiceId, patientId, documentId, username) {\r\n var body = new FeatureUsageBody();\r\n var featureType = UsageModule.FeatureType.PatientFiles;\r\n var actionType = UsageModule.ActionType.ViewDocument;\r\n body.FeatureUsage.TenantId = practiceId;\r\n body.FeatureUsage.Feature = UsageModule.UsageTypeUtil.getFeature(featureType);\r\n body.FeatureUsage.Action = UsageModule.UsageTypeUtil.getAction(actionType);\r\n body.FeatureUsage.Date = this.getToday();\r\n body.FeatureUsage.Parameters = {\r\n PatientId: patientId,\r\n DocumentId: documentId,\r\n Username: username,\r\n System: \"DoctorApp Patient Timeline\"\r\n };\r\n this.logFeatureUsed(body);\r\n };\r\n Service.prototype.openHealthID = function (practiceId, patientId) {\r\n var _this = this;\r\n var body = new FeatureUsageBody();\r\n var featureType = UsageModule.FeatureType.HealthID;\r\n var actionType = UsageModule.ActionType.ViewPatient;\r\n body.FeatureUsage.TenantId = practiceId;\r\n body.FeatureUsage.Feature = UsageModule.UsageTypeUtil.getFeature(featureType);\r\n body.FeatureUsage.Action = UsageModule.UsageTypeUtil.getAction(actionType);\r\n body.FeatureUsage.Date = this.getToday();\r\n this.patientService.getPatientById(practiceId, patientId)\r\n .then(function (patient) {\r\n if (patient) {\r\n body.FeatureUsage.Parameters = {\r\n PatientID: patient.PatientId,\r\n PatientName: patient.PatientDetails.FirstName,\r\n PatientSurname: patient.PatientDetails.Surname,\r\n PatientDOB: patient.PatientDetails.DateOfBirth,\r\n PatientMemberNumber: patient.PatientDetails.IdentityNo\r\n };\r\n _this.logFeatureUsed(body);\r\n }\r\n });\r\n };\r\n Service.prototype.openPowerBI = function (practiceId, report) {\r\n var _this = this;\r\n var body = new FeatureUsageBody();\r\n var featureType = UsageModule.FeatureType.PowerBI;\r\n var actionType = UsageModule.ActionType.ViewReport;\r\n body.FeatureUsage.TenantId = practiceId;\r\n body.FeatureUsage.Feature = UsageModule.UsageTypeUtil.getFeature(featureType);\r\n body.FeatureUsage.Action = UsageModule.UsageTypeUtil.getAction(actionType);\r\n body.FeatureUsage.Date = this.getToday();\r\n this.billingDomain.getProviderById(practiceId)\r\n .then(function (provider) {\r\n body.FeatureUsage.Parameters = {\r\n ReportId: report.reportId,\r\n ReportName: report.name,\r\n BillingPracticeNumber: provider.PracticeNumber\r\n };\r\n _this.logFeatureUsed(body);\r\n });\r\n };\r\n Service.prototype.openedPathReport = function (practiceId, reportId, dateTime) {\r\n var body = new FeatureUsageBody();\r\n var featureType = UsageModule.FeatureType.PathologyReport;\r\n var actionType = UsageModule.ActionType.ViewReport;\r\n body.FeatureUsage.TenantId = practiceId;\r\n body.FeatureUsage.Feature = UsageModule.UsageTypeUtil.getFeature(featureType);\r\n body.FeatureUsage.Action = UsageModule.UsageTypeUtil.getAction(actionType);\r\n body.FeatureUsage.Date = this.getToday();\r\n body.FeatureUsage.Parameters = {\r\n ReportId: reportId,\r\n UserName: this.getUserName(),\r\n DateTime: dateTime\r\n };\r\n this.logFeatureUsed(body);\r\n };\r\n Service.prototype.openedPathReportWorkflow = function (practiceId, reportId, dateTime) {\r\n var body = new FeatureUsageBody();\r\n var featureType = UsageModule.FeatureType.PathologyReportWorkflow;\r\n var actionType = UsageModule.ActionType.ViewReport;\r\n body.FeatureUsage.TenantId = practiceId;\r\n body.FeatureUsage.Feature = UsageModule.UsageTypeUtil.getFeature(featureType);\r\n body.FeatureUsage.Action = UsageModule.UsageTypeUtil.getAction(actionType);\r\n body.FeatureUsage.Date = this.getToday();\r\n body.FeatureUsage.Parameters = {\r\n ReportId: reportId,\r\n UserName: this.getUserName(),\r\n DateTime: dateTime\r\n };\r\n this.logFeatureUsed(body);\r\n };\r\n Service.prototype.getUserName = function () {\r\n return this.storageService.getUser().name;\r\n };\r\n Service.prototype.getToday = function () {\r\n var now = this.moment.utc();\r\n return this.moment(now).format();\r\n };\r\n Service.prototype.getUrl = function () {\r\n return 'v1/';\r\n };\r\n return Service;\r\n })();\r\n UsageModule.Service = Service;\r\n})(UsageModule || (UsageModule = {}));\r\nangular.module('DoctorApp')\r\n .service('usageService', UsageModule.Service);\r\nvar UtilsXml = (function () {\r\n function UtilsXml() {\r\n }\r\n UtilsXml.loadXMLDoc = function (url) {\r\n if (!this.isIE()) {\r\n var xhttp = new XMLHttpRequest();\r\n xhttp.open(\"GET\", url, false);\r\n xhttp.send(\"\");\r\n return xhttp.responseXML;\r\n }\r\n else {\r\n var xmlDom = new ActiveXObject(\"Microsoft.XMLDOM\");\r\n xmlDom.async = false;\r\n xmlDom.validateOnParse = false;\r\n xmlDom.load(url);\r\n return xmlDom;\r\n }\r\n };\r\n UtilsXml.loadXMLString = function (xmlText) {\r\n if (!this.isIE()) {\r\n var parser = new DOMParser();\r\n return parser.parseFromString(xmlText, \"text/xml\");\r\n }\r\n else {\r\n var xmlDom = new ActiveXObject(\"Microsoft.XMLDOM\");\r\n xmlDom.async = false;\r\n xmlDom.loadXML(xmlText);\r\n return xmlDom;\r\n }\r\n };\r\n UtilsXml.generateContent = function (xml) {\r\n var xslUrl = this.checkStyle(xml);\r\n var xmlDoc = this.loadXMLString(xml);\r\n var xslDoc = this.loadXMLDoc(xslUrl);\r\n if (!this.isIE()) {\r\n var xsltProcessor = new XSLTProcessor();\r\n xsltProcessor.importStylesheet(xslDoc);\r\n return xsltProcessor.transformToFragment(xmlDoc, document);\r\n }\r\n else if (document.implementation && document.implementation.createDocument) {\r\n return xmlDoc.transformNode(xslDoc);\r\n }\r\n };\r\n UtilsXml.checkStyle = function (xml) {\r\n var reg = /ampath/gi;\r\n var isAmpath = reg.test(xml);\r\n return isAmpath ? this.ampathStylePath\r\n : this.lancetStylePath;\r\n };\r\n UtilsXml.isIE = function () {\r\n return !(DOMParser && XSLTProcessor);\r\n };\r\n UtilsXml.lancetStylePath = 'styles/clinical/labs/lancet/viewable-ext.xsl';\r\n UtilsXml.ampathStylePath = 'styles/clinical/labs/ampath/rs_xsl.xsl';\r\n return UtilsXml;\r\n})();\r\n//# sourceMappingURL=scripts.v4.71.2.js.map"]}