From f1f1523ff54887e9889ac0ec0d665471eee892cc Mon Sep 17 00:00:00 2001 From: jabahum Date: Thu, 27 Mar 2025 10:56:07 +0300 Subject: [PATCH] use new check in endpoint --- .../active-visits/patient-queues.resource.ts | 27 +++++++++- .../visit-form/visit-form.component.tsx | 51 +++---------------- 2 files changed, 34 insertions(+), 44 deletions(-) diff --git a/packages/esm-patient-queues-app/src/active-visits/patient-queues.resource.ts b/packages/esm-patient-queues-app/src/active-visits/patient-queues.resource.ts index 6f9b15b5..76366865 100644 --- a/packages/esm-patient-queues-app/src/active-visits/patient-queues.resource.ts +++ b/packages/esm-patient-queues-app/src/active-visits/patient-queues.resource.ts @@ -6,7 +6,6 @@ import { NewVisitPayload, ProviderResponse } from '../types'; import { ResourceFilterCriteria, ResourceRepresentation, toQueryParams } from '../resource-filter-criteria'; import { PageableResult } from '../pageable-result'; import { useEffect, useState } from 'react'; -import { QueueStatus } from '../utils/utils'; import last from 'lodash-es/last'; export interface PatientQueueFilter extends ResourceFilterCriteria { @@ -27,6 +26,19 @@ export interface NewQueuePayload { queueRoom: string; } +export interface NewCheckInPayload { + patient: string; + provider: string; + currentLocation: string; + locationTo: string; + patientStatus: string; + priority: number; + priorityComment: string; + visitComment: string; + queueRoom: string; + visitType: string; +} + export interface LocationResponse { uuid: string; display: string; @@ -323,6 +335,19 @@ export async function addQueueEntry(payload: NewQueuePayload) { }); } +export async function checkInQueue(payload: NewCheckInPayload) { + const abortController = new AbortController(); + + return await openmrsFetch(`${restBaseUrl}/checkinpatient`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + signal: abortController.signal, + body: payload, + }); +} + export function generateVisitQueueNumber(location: string, patient: string) { const abortController = new AbortController(); return openmrsFetch(`${restBaseUrl}/queuenumber?patient=${patient}&location=${location}`, { diff --git a/packages/esm-patient-queues-app/src/components/visit-form/visit-form.component.tsx b/packages/esm-patient-queues-app/src/components/visit-form/visit-form.component.tsx index 1f83809e..845e1590 100644 --- a/packages/esm-patient-queues-app/src/components/visit-form/visit-form.component.tsx +++ b/packages/esm-patient-queues-app/src/components/visit-form/visit-form.component.tsx @@ -18,26 +18,20 @@ import { restBaseUrl, showNotification, showToast, - toDateObjectStrict, - toOmrsIsoString, useLayoutType, usePatient, useSession, useVisitTypes, } from '@openmrs/esm-framework'; -import dayjs from 'dayjs'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import styles from './visit-form.scss'; -import { NewVisitPayload } from '../../types'; -import { amPm, convertTime12to24 } from '../../helpers/time-helpers'; import { useQueueRoomLocations } from '../../hooks/useQueueRooms'; import Overlay from '../overlay/overlay.component'; import { - NewQueuePayload, - addQueueEntry, + NewCheckInPayload, checkCurrentVisit, - createVisit, + checkInQueue, useProviders, } from '../../active-visits/patient-queues.resource'; import { Controller, useForm } from 'react-hook-form'; @@ -62,11 +56,7 @@ const StartVisitForm: React.FC = ({ patientUuid, closePanel, hea const { patient } = usePatient(patientUuid); const [isSubmitting, setIsSubmitting] = useState(false); - const [timeFormat, setTimeFormat] = useState(new Date().getHours() >= 12 ? 'PM' : 'AM'); - const [visitDate, setVisitDate] = useState(new Date()); - const [visitTime, setVisitTime] = useState(dayjs(new Date()).format('hh:mm')); const allVisitTypes = useVisitTypes(); - const [selectedLocation, setSelectedLocation] = useState(''); const [visitType, setVisitType] = useState(''); const [priorityComment, setPriorityComment] = useState(''); const priorityLevels = [1, 2, 3]; @@ -94,7 +84,6 @@ const StartVisitForm: React.FC = ({ patientUuid, closePanel, hea useEffect(() => { if (queueRoomLocations?.length && sessionUser) { - setSelectedLocation(sessionUser?.sessionLocation?.display); setVisitType(allVisitTypes?.length > 0 ? allVisitTypes[0].uuid : null); } }, [sessionUser, queueRoomLocations?.length, queueRoomLocations, allVisitTypes]); @@ -115,42 +104,21 @@ const StartVisitForm: React.FC = ({ patientUuid, closePanel, hea }); return; } - - const [hours, minutes] = convertTime12to24(visitTime, timeFormat); - - const payload: NewVisitPayload = { - patient: patientUuid, - startDatetime: toDateObjectStrict( - toOmrsIsoString( - new Date(dayjs(visitDate).year(), dayjs(visitDate).month(), dayjs(visitDate).date(), hours, minutes), - ), - ), - visitType, - location: selectedNextQueueLocation, - attributes: [], - }; - - // Attempt to save the visit - const response = await createVisit(payload); - - if (response.status !== 201) { - throw new Error(t('visitCreationFailed', 'Failed to create visit.')); - } - // Add new queue entry - const request: NewQueuePayload = { + const request: NewCheckInPayload = { patient: patientUuid, provider: selectedProvider, - locationFrom: sessionUser?.sessionLocation?.uuid, + currentLocation: sessionUser?.sessionLocation?.uuid, locationTo: selectedNextQueueLocation, - status: QueueStatus.Pending, + patientStatus: QueueStatus.Pending, priority: contentSwitcherIndex, priorityComment: priorityComment, - comment: 'NA', + visitComment: 'NA', queueRoom: selectedNextQueueLocation, + visitType: visitType, }; - const createQueueResponse = await addQueueEntry(request); + const createQueueResponse = await checkInQueue(request); if (createQueueResponse.status === 201) { showToast({ @@ -182,9 +150,6 @@ const StartVisitForm: React.FC = ({ patientUuid, closePanel, hea selectedNextQueueLocation, selectedProvider, t, - timeFormat, - visitDate, - visitTime, visitType, sessionUser?.sessionLocation?.uuid, ],