diff --git a/src/components/action-buttons.component.tsx b/src/components/action-buttons.component.tsx index a3687a2..01a8057 100644 --- a/src/components/action-buttons.component.tsx +++ b/src/components/action-buttons.component.tsx @@ -10,7 +10,7 @@ import { getMostRecentMedicationDispenseStatus, } from '../utils'; import { type PharmacyConfig } from '../config-schema'; -import { initiateMedicationDispenseBody } from '../medication-dispense/medication-dispense.resource'; +import { initiateMedicationDispenseBody, useProviders } from '../medication-dispense/medication-dispense.resource'; import DispenseForm from '../forms/dispense-form.component'; import PauseDispenseForm from '../forms/pause-dispense-form.component'; import CloseDispenseForm from '../forms/close-dispense-form.component'; @@ -26,6 +26,7 @@ const ActionButtons: React.FC = ({ medicationRequestBundle, const { t } = useTranslation(); const config = useConfig(); const session = useSession(); + const providers = useProviders(config.dispenserProviderRoles); const mostRecentMedicationDispenseStatus: MedicationDispenseStatus = getMostRecentMedicationDispenseStatus( medicationRequestBundle.dispenses, ); @@ -64,7 +65,12 @@ const ActionButtons: React.FC = ({ medicationRequestBundle, = ({ medicationRequestBundle, , ) @@ -100,7 +111,12 @@ const ActionButtons: React.FC = ({ medicationRequestBundle, , ) diff --git a/src/forms/dispense-form.component.tsx b/src/forms/dispense-form.component.tsx index 9e42b6a..305c22f 100644 --- a/src/forms/dispense-form.component.tsx +++ b/src/forms/dispense-form.component.tsx @@ -140,6 +140,8 @@ const DispenseForm: React.FC = ({ const checkIsValid = () => { if ( medicationDispensePayload && + medicationDispensePayload.performer && + medicationDispensePayload.performer[0]?.actor.reference && medicationDispensePayload.quantity?.value && (!quantityRemaining || medicationDispensePayload?.quantity?.value <= quantityRemaining) && medicationDispensePayload.quantity?.code && diff --git a/src/forms/medication-dispense-review.component.test.tsx b/src/forms/medication-dispense-review.component.test.tsx index 9564da6..4a15549 100644 --- a/src/forms/medication-dispense-review.component.test.tsx +++ b/src/forms/medication-dispense-review.component.test.tsx @@ -8,6 +8,7 @@ jest.mock('@openmrs/esm-framework', () => { return { __esModule: true, ...originalModule, + OpenmrsDatePicker: jest.fn(() =>
), useConfig: jest.fn(() => ({ dispenseBehavior: { allowModifyingPrescription: false, @@ -129,7 +130,7 @@ describe('Medication Dispense Review Component tests', () => { }; const mockUpdate: Function = jest.fn(); - const { getByText, container } = render( + render( = ({ const isTablet = useLayoutType() === 'tablet'; const allowEditing = config.dispenseBehavior.allowModifyingPrescription; - const providerRoles = config.dispenserProviderRoles; const { orderConfigObject } = useOrderConfig(); const { substitutionTypeValueSet } = useSubstitutionTypeValueSet(config.valueSets.substitutionType.uuid); const { substitutionReasonValueSet } = useSubstitutionReasonValueSet(config.valueSets.substitutionReason.uuid); - const providers = useProviders(providerRoles); + const providers = useProviders(config.dispenserProviderRoles); // get the medication request associated with this dispense event // (we fetch this so that we can use it below to determine if the formulation dispensed varies from what was @@ -504,6 +503,7 @@ const MedicationDispenseReview: React.FC = ({ { @@ -515,36 +515,37 @@ const MedicationDispenseReview: React.FC = ({ : selectedDate.toString(), // to preserve any time component, only update if the day actually changes }); }} - value={dayjs(medicationDispense.whenHandedOver).toDate()}> - - + value={dayjs(medicationDispense.whenHandedOver).startOf('day').toDate()}> - provider.uuid === medicationDispense?.performer[0].actor.reference.split('/')[1], - ) - : null - } - onChange={({ selectedItem }) => { - updateMedicationDispense({ - ...medicationDispense, - performer: [ - { - actor: { - reference: `Practitioner/${selectedItem?.uuid}`, + {providers && ( + provider.uuid === medicationDispense?.performer[0].actor.reference.split('/')[1], + ) + : null + } + onChange={({ selectedItem }) => { + updateMedicationDispense({ + ...medicationDispense, + performer: [ + { + actor: { + reference: `Practitioner/${selectedItem?.uuid}`, + }, }, - }, - ], - }); - }} - items={providers} - itemToString={(item) => item?.person?.display} - titleText={t('dispensedBy', 'Dispensed by')} - /> + ], + }); + }} + items={providers} + itemToString={(item) => item?.person?.display} + required + titleText={t('dispensedBy', 'Dispensed by')} + /> + )}
); diff --git a/src/medication-dispense/medication-dispense.resource.test.tsx b/src/medication-dispense/medication-dispense.resource.test.tsx index 39c38ed..c0c0e03 100644 --- a/src/medication-dispense/medication-dispense.resource.test.tsx +++ b/src/medication-dispense/medication-dispense.resource.test.tsx @@ -13,6 +13,7 @@ import { type MedicationRequest, MedicationDispenseStatus, MedicationRequestStatus, + type Provider, } from '../types'; import dayjs from 'dayjs'; @@ -47,7 +48,7 @@ describe('Medication Dispense Resource tests', () => { }; const abortController: AbortController = { signal: undefined, - abort(reason?: any): void {}, + abort(): void {}, }; saveMedicationDispense(medicationDispense, MedicationDispenseStatus.completed, abortController); @@ -80,7 +81,7 @@ describe('Medication Dispense Resource tests', () => { }; const abortController: AbortController = { signal: undefined, - abort(reason?: any): void {}, + abort(): void {}, }; saveMedicationDispense(medicationDispense, MedicationDispenseStatus.completed, abortController); @@ -205,11 +206,18 @@ describe('Medication Dispense Resource tests', () => { links: undefined, }, }; - const medicationRequestExpirationPeriodInDay = 30; + + const providers: Provider[] = [ + { + uuid: 'ghi789', + person: null, + }, + ]; const medicationDispense: MedicationDispense = initiateMedicationDispenseBody( activeMedicationRequest, session, + providers, true, ); diff --git a/src/medication-dispense/medication-dispense.resource.tsx b/src/medication-dispense/medication-dispense.resource.tsx index de5a196..66f17f9 100644 --- a/src/medication-dispense/medication-dispense.resource.tsx +++ b/src/medication-dispense/medication-dispense.resource.tsx @@ -6,6 +6,7 @@ import { type MedicationDispenseStatus, type MedicationRequest, type OrderConfig, + type Provider, type ProviderRequestResponse, type ValueSet, } from '../types'; @@ -96,6 +97,7 @@ export function useValueSet(uuid: string) { export function initiateMedicationDispenseBody( medicationRequest: MedicationRequest, session: Session, + providers: Provider[], populateDispenseInformation: boolean, ): MedicationDispense { let medicationDispense: MedicationDispense = { @@ -113,7 +115,12 @@ export function initiateMedicationDispenseBody( performer: [ { actor: { - reference: session?.currentProvider ? `Practitioner/${session.currentProvider.uuid}` : '', + reference: + session?.currentProvider && + providers && + providers.some((provider) => provider.uuid == session.currentProvider.uuid) + ? `Practitioner/${session.currentProvider.uuid}` + : '', }, }, ],