Skip to content

Commit c27edfb

Browse files
committed
BN-173|Fix Visit Location UUID
1 parent 70cd18c commit c27edfb

File tree

8 files changed

+56
-6
lines changed

8 files changed

+56
-6
lines changed

apps/registration/src/pages/createPatientPage/visitTypeSelector.tsx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ import {
55
notificationService,
66
createVisit,
77
getActiveVisitByPatient,
8-
type CreateVisitRequest,
8+
getUserLoginLocation,
9+
getVisitLocationUUID,
910
dispatchAuditEvent,
1011
AUDIT_LOG_EVENT_DETAILS,
12+
type CreateVisitRequest,
1113
type AuditEventType,
1214
} from '@bahmni-frontend/bahmni-services';
1315
import { useQuery } from '@tanstack/react-query';
@@ -33,6 +35,13 @@ export const VisitTypeSelector = ({ onVisitSave }: VisitTypeSelectorProps) => {
3335
gcTime: 10 * 60 * 1000,
3436
});
3537

38+
const { data: visitLocationUUID } = useQuery({
39+
queryKey: ['visitLocationUUID'],
40+
queryFn: () => getVisitLocationUUID(getUserLoginLocation().uuid),
41+
staleTime: 5 * 60 * 1000,
42+
gcTime: 10 * 60 * 1000,
43+
});
44+
3645
const createVisitAndLogAudit = async () => {
3746
const result = await createVisit(visitPayload!);
3847

@@ -95,21 +104,21 @@ export const VisitTypeSelector = ({ onVisitSave }: VisitTypeSelectorProps) => {
95104
const patientIndex = parts.indexOf('patient');
96105
const uuidFromUrl = patientIndex !== -1 ? parts[patientIndex + 1] : null;
97106

98-
if (!patientUUID) {
107+
if (!patientUUID && visitLocationUUID) {
99108
if (uuidFromUrl) {
100109
setVisitPayload({
101110
patient: uuidFromUrl,
102111
visitType: selectedItem.uuid,
103-
location: '72636eba-29bf-4d6c-97c4-4b04d87a95b5',
112+
location: visitLocationUUID.uuid,
104113
});
105114
setPatientUUID(uuidFromUrl);
106115
} else {
107116
const newPatientUuid = await onVisitSave();
108-
if (newPatientUuid) {
117+
if (newPatientUuid && visitLocationUUID) {
109118
setVisitPayload({
110119
patient: newPatientUuid,
111120
visitType: selectedItem.uuid,
112-
location: '72636eba-29bf-4d6c-97c4-4b04d87a95b5',
121+
location: visitLocationUUID.uuid,
113122
});
114123
}
115124
setPatientUUID(newPatientUuid);

packages/bahmni-services/src/constants/app.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@ export const OBSERVATION_FORMS_URL =
88
OPENMRS_REST_V1 + '/bahmniie/form/latestPublishedForms';
99
export const USER_PINNED_PREFERENCE_URL = (userUuid: string) =>
1010
OPENMRS_REST_V1 + `/user/${userUuid}?v=full`;
11+
export const VISIT_LOCATION_UUID =
12+
OPENMRS_REST_V1 + '/bahmnicore/visitLocation/';

packages/bahmni-services/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export {
1313
getGenders,
1414
getAddressHierarchyEntries,
1515
getVisitTypes,
16+
getVisitLocationUUID,
1617
type FormattedPatientData,
1718
type PatientSearchResult,
1819
type PatientSearchResultBundle,
@@ -28,6 +29,7 @@ export {
2829
type PatientAttribute,
2930
type AddressHierarchyEntry,
3031
type VisitType,
32+
type VisitLocationResponse,
3133
} from './patientService';
3234
export { getFormattedError } from './errorHandling';
3335
export {

packages/bahmni-services/src/patientService/__tests__/patientService.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
getVisitTypes,
3232
createVisit,
3333
getActiveVisitByPatient,
34+
getVisitLocationUUID,
3435
} from '../patientService';
3536

3637
// Mock the api module
@@ -1723,4 +1724,20 @@ describe('Patient Service', () => {
17231724
expect(result).toEqual(mockResponse);
17241725
});
17251726
});
1727+
describe('getVisitLocationUUID', () => {
1728+
it('should fetch visit location from login location', async () => {
1729+
const loginLocation = 'c22a5000-3f10-11e4-adec-0800271c1b75';
1730+
const mockResponse = { uuid: '72636eba-29bf-4d6c-97c4-4b04d87a95b5' };
1731+
mockedGet.mockResolvedValueOnce(mockResponse);
1732+
1733+
const result = await getVisitLocationUUID(loginLocation);
1734+
1735+
expect(mockedGet).toHaveBeenCalledWith(
1736+
expect.stringContaining(
1737+
`/ws/rest/v1/bahmnicore/visitLocation/${loginLocation}`,
1738+
),
1739+
);
1740+
expect(result).toEqual(mockResponse);
1741+
});
1742+
});
17261743
});

packages/bahmni-services/src/patientService/constants.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import { PatientSearchField } from '../configService/models/registrationConfig';
2-
import { OPENMRS_FHIR_R4, OPENMRS_REST_V1 } from '../constants/app';
2+
import {
3+
OPENMRS_FHIR_R4,
4+
OPENMRS_REST_V1,
5+
VISIT_LOCATION_UUID,
6+
} from '../constants/app';
37

48
export const PATIENT_RESOURCE_URL = (patientUUID: string) =>
59
OPENMRS_FHIR_R4 + `/Patient/${patientUUID}`;
@@ -89,6 +93,8 @@ export const GET_ACTIVE_VISIT_URL = (patientUuid: string) =>
8993
OPENMRS_REST_V1 +
9094
`/visit?includeInactive=false&patient=${patientUuid}&v=custom:(uuid,visitType,location:(uuid))`;
9195

96+
export const GET_VISIT_LOCATION = (loginLocation: string) =>
97+
VISIT_LOCATION_UUID + `${loginLocation}`;
9298
export const ADDRESS_HIERARCHY_URL = (
9399
addressField: string,
94100
searchString: string,

packages/bahmni-services/src/patientService/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export {
1111
getGenders,
1212
getAddressHierarchyEntries,
1313
getVisitTypes,
14+
getVisitLocationUUID,
1415
} from './patientService';
1516
export {
1617
type FormattedPatientData,
@@ -28,4 +29,5 @@ export {
2829
type PatientAttribute,
2930
type AddressHierarchyEntry,
3031
type VisitType,
32+
type VisitLocationResponse,
3133
} from './models';

packages/bahmni-services/src/patientService/models.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,3 +154,7 @@ export interface CreateVisitRequest {
154154
visitType: string;
155155
location: string;
156156
}
157+
158+
export interface VisitLocationResponse {
159+
uuid: string;
160+
}

packages/bahmni-services/src/patientService/patientService.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
ADDRESS_HIERARCHY_MIN_SEARCH_LENGTH,
2020
UUID_PATTERN,
2121
VISIT_TYPES_URL,
22+
GET_VISIT_LOCATION,
2223
} from './constants';
2324
import {
2425
FormattedPatientData,
@@ -30,6 +31,7 @@ import {
3031
AddressHierarchyEntry,
3132
VisitType,
3233
CreateVisitRequest,
34+
VisitLocationResponse,
3335
} from './models';
3436

3537
export const getPatientById = async (patientUUID: string): Promise<Patient> => {
@@ -373,3 +375,9 @@ export const getActiveVisitByPatient = async (
373375
): Promise<unknown> => {
374376
return get<unknown>(GET_ACTIVE_VISIT_URL(patientUuid));
375377
};
378+
379+
export const getVisitLocationUUID = async (
380+
loginLocation: string,
381+
): Promise<VisitLocationResponse> => {
382+
return get<VisitLocationResponse>(GET_VISIT_LOCATION(loginLocation));
383+
};

0 commit comments

Comments
 (0)