@ampath/esm-dispensing-app 1.10.0-next.21 → 1.10.0-next.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -136,7 +136,7 @@
136
136
  "auxiliaryFiles": [
137
137
  "963.js.map"
138
138
  ],
139
- "hash": "19b67e0ea74b31a4",
139
+ "hash": "c22f096f35decd72",
140
140
  "childrenByOrder": {}
141
141
  },
142
142
  {
@@ -182,7 +182,7 @@
182
182
  "auxiliaryFiles": [
183
183
  "1043.js.map"
184
184
  ],
185
- "hash": "d50e59843c8f013c",
185
+ "hash": "3ea1a528256fd158",
186
186
  "childrenByOrder": {}
187
187
  },
188
188
  {
@@ -493,7 +493,7 @@
493
493
  "auxiliaryFiles": [
494
494
  "3568.js.map"
495
495
  ],
496
- "hash": "b478e7dca213847e",
496
+ "hash": "ee1e7730f1b94e62",
497
497
  "childrenByOrder": {}
498
498
  },
499
499
  {
@@ -523,9 +523,9 @@
523
523
  "initial": false,
524
524
  "entry": false,
525
525
  "recorded": false,
526
- "size": 420862,
526
+ "size": 410460,
527
527
  "sizes": {
528
- "javascript": 420862
528
+ "javascript": 410460
529
529
  },
530
530
  "names": [],
531
531
  "idHints": [],
@@ -538,7 +538,7 @@
538
538
  "auxiliaryFiles": [
539
539
  "3693.js.map"
540
540
  ],
541
- "hash": "1c762213ead18534",
541
+ "hash": "39d09212f4e31e46",
542
542
  "childrenByOrder": {}
543
543
  },
544
544
  {
@@ -584,7 +584,7 @@
584
584
  "auxiliaryFiles": [
585
585
  "4099.js.map"
586
586
  ],
587
- "hash": "aed00fc516ce4dd2",
587
+ "hash": "140256ea3ab2aaae",
588
588
  "childrenByOrder": {}
589
589
  },
590
590
  {
@@ -1129,7 +1129,7 @@
1129
1129
  "auxiliaryFiles": [
1130
1130
  "6841.js.map"
1131
1131
  ],
1132
- "hash": "3af2687c7a431016",
1132
+ "hash": "5b2edd8041389f9b",
1133
1133
  "childrenByOrder": {}
1134
1134
  },
1135
1135
  {
@@ -1439,10 +1439,10 @@
1439
1439
  "initial": true,
1440
1440
  "entry": true,
1441
1441
  "recorded": false,
1442
- "size": 3738287,
1442
+ "size": 3727885,
1443
1443
  "sizes": {
1444
1444
  "consume-shared": 210,
1445
- "javascript": 3716038,
1445
+ "javascript": 3705636,
1446
1446
  "share-init": 336,
1447
1447
  "runtime": 21703
1448
1448
  },
@@ -1459,7 +1459,7 @@
1459
1459
  "auxiliaryFiles": [
1460
1460
  "main.js.map"
1461
1461
  ],
1462
- "hash": "78d4663c6c512e52",
1462
+ "hash": "fed018c9e1c54d07",
1463
1463
  "childrenByOrder": {}
1464
1464
  },
1465
1465
  {
package/dist/routes.json CHANGED
@@ -1 +1 @@
1
- {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":">=1.2","webservices.rest":">=2.2.0"},"pages":[{"component":"dispensing","route":"dispensing","online":true,"offline":true}],"extensions":[{"name":"dispensing-link","slot":"app-menu-slot","component":"dispensingLink","online":true,"offline":true},{"name":"patient-diagnoses","component":"patientDiagnoses","slot":"dispensing-condition-and-diagnoses","online":true,"offline":true},{"name":"patient-conditions","component":"patientConditions","slot":"dispensing-condition-and-diagnoses","online":true,"offline":true},{"name":"dispensing-dashboard","slot":"dispensing-dashboard-slot","component":"dispensingDashboard","online":true,"offline":true},{"name":"dispensing-dashboard-link","component":"dispensingDashboardLink","meta":{"name":"dispensing","slot":"dispensing-dashboard-slot","title":"Dispensing"}},{"name":"dispense-action-button","slot":"prescription-action-button-slot","component":"dispenseActionButton"},{"name":"pause-action-button","slot":"prescription-action-button-slot","component":"pauseActionButton"},{"name":"close-action-button","slot":"prescription-action-button-slot","component":"closeActionButton"},{"name":"generate-bill-action-button","slot":"prescription-action-button-slot","component":"generateBillActionButton"}],"workspaces2":[{"name":"close-dispense-workspace","component":"closeDispenseWorkspace","window":"dispensing-window"},{"name":"pause-dispense-workspace","component":"pauseDispenseWorkspace","window":"dispensing-window"},{"name":"dispense-workspace","component":"dispenseWorkspace","window":"dispensing-window"},{"name":"dispensing-patient-search-workspace","component":"@openmrs/esm-patient-search-app#patientSearchWorkspace2","window":"fill-prescription-window"},{"name":"dispensing-start-visit-workspace","component":"@openmrs/esm-patient-chart-app#exportedVisitForm","window":"fill-prescription-window"},{"name":"dispensing-order-basket-workspace","component":"@openmrs/esm-patient-orders-app#exportedOrderBasketWorkspace","window":"fill-prescription-window"},{"name":"dispensing-order-basket-add-drug-order-workspace","component":"@openmrs/esm-patient-medications-app#exportedAddDrugOrderWorkspace","window":"fill-prescription-window"}],"workspaceWindows2":[{"name":"dispensing-window","group":"dispensing-group"},{"name":"fill-prescription-window","group":"dispensing-group"}],"workspaceGroups2":[{"name":"dispensing-group","overlay":true}],"modals":[{"name":"prescription-print-preview-modal","component":"printPrescriptionPreviewModal"},{"name":"delete-confirm-modal","component":"deleteConfirmModal"},{"name":"on-prescription-filled-modal","component":"onPrescriptionFilledModal"}],"version":"1.10.0-next.21"}
1
+ {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":">=1.2","webservices.rest":">=2.2.0"},"pages":[{"component":"dispensing","route":"dispensing","online":true,"offline":true}],"extensions":[{"name":"dispensing-link","slot":"app-menu-slot","component":"dispensingLink","online":true,"offline":true},{"name":"patient-diagnoses","component":"patientDiagnoses","slot":"dispensing-condition-and-diagnoses","online":true,"offline":true},{"name":"patient-conditions","component":"patientConditions","slot":"dispensing-condition-and-diagnoses","online":true,"offline":true},{"name":"dispensing-dashboard","slot":"dispensing-dashboard-slot","component":"dispensingDashboard","online":true,"offline":true},{"name":"dispensing-dashboard-link","component":"dispensingDashboardLink","meta":{"name":"dispensing","slot":"dispensing-dashboard-slot","title":"Dispensing"}},{"name":"dispense-action-button","slot":"prescription-action-button-slot","component":"dispenseActionButton"},{"name":"pause-action-button","slot":"prescription-action-button-slot","component":"pauseActionButton"},{"name":"close-action-button","slot":"prescription-action-button-slot","component":"closeActionButton"},{"name":"generate-bill-action-button","slot":"prescription-action-button-slot","component":"generateBillActionButton"}],"workspaces2":[{"name":"close-dispense-workspace","component":"closeDispenseWorkspace","window":"dispensing-window"},{"name":"pause-dispense-workspace","component":"pauseDispenseWorkspace","window":"dispensing-window"},{"name":"dispense-workspace","component":"dispenseWorkspace","window":"dispensing-window"},{"name":"dispensing-patient-search-workspace","component":"@openmrs/esm-patient-search-app#patientSearchWorkspace2","window":"fill-prescription-window"},{"name":"dispensing-start-visit-workspace","component":"@openmrs/esm-patient-chart-app#exportedVisitForm","window":"fill-prescription-window"},{"name":"dispensing-order-basket-workspace","component":"@openmrs/esm-patient-orders-app#exportedOrderBasketWorkspace","window":"fill-prescription-window"},{"name":"dispensing-order-basket-add-drug-order-workspace","component":"@openmrs/esm-patient-medications-app#exportedAddDrugOrderWorkspace","window":"fill-prescription-window"}],"workspaceWindows2":[{"name":"dispensing-window","group":"dispensing-group"},{"name":"fill-prescription-window","group":"dispensing-group"}],"workspaceGroups2":[{"name":"dispensing-group","overlay":true}],"modals":[{"name":"prescription-print-preview-modal","component":"printPrescriptionPreviewModal"},{"name":"delete-confirm-modal","component":"deleteConfirmModal"},{"name":"on-prescription-filled-modal","component":"onPrescriptionFilledModal"}],"version":"1.10.0-next.23"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ampath/esm-dispensing-app",
3
- "version": "1.10.0-next.21",
3
+ "version": "1.10.0-next.23",
4
4
  "license": "MPL-2.0",
5
5
  "description": "Medication dispensing application",
6
6
  "browser": "dist/openmrs-esm-dispensing-app.js",
@@ -1,7 +1,6 @@
1
- import { openmrsFetch, type OpenmrsResource, restBaseUrl } from '@openmrs/esm-framework';
1
+ import { openmrsFetch, type OpenmrsResource, restBaseUrl, useConfig } from '@openmrs/esm-framework';
2
2
  import useSWR, { mutate } from 'swr';
3
3
  import { type BillInvoice } from '../types';
4
- import { getHieBaseUrl, postJson } from '../utils';
5
4
  import { useCallback } from 'react';
6
5
  import dayjs from 'dayjs';
7
6
 
@@ -39,12 +38,6 @@ export function useInvalidateBills(patientUuid: string) {
39
38
  }, [patientUuid]);
40
39
  }
41
40
 
42
- export const getOrderNumberFromHie = async (orderNumber: string) => {
43
- const hieBaseUrl = await getHieBaseUrl();
44
- const url = `${hieBaseUrl}/bill-order?order_no=${orderNumber}`;
45
- return postJson<{ bill_uuid: string; line_item_uuid: string }>(url, null, 'GET');
46
- };
47
-
48
41
  export const usePatientBills = (patientUuid: string, billStatus: string = 'PENDING,POSTED') => {
49
42
  const url = `${restBaseUrl}/billing/bill?patientUuid=${patientUuid}&status=${billStatus}&v=custom:(uuid,lineItems,dateCreated)`;
50
43
 
@@ -76,14 +69,50 @@ export const usePatientBills = (patientUuid: string, billStatus: string = 'PENDI
76
69
  };
77
70
  };
78
71
 
79
- export const getOdooBills = async (patientUuid: string) => {
80
- const url = `/openmrs/etl/odoo/billing/patient/${patientUuid}`;
81
- return postJson<{
82
- orders: Array<{
83
- order_lines: Array<{
84
- billing_status: string;
85
- openmrs_order_id: string;
72
+ export const useOrderBill = (orderNumber: string) => {
73
+ const { hieBaseUrl } = useConfig({
74
+ externalModuleName: '@ampath/esm-dha-workflow-app',
75
+ });
76
+ const url = `${hieBaseUrl}/bill-order?order_no=${orderNumber}`;
77
+
78
+ const {
79
+ data,
80
+ error,
81
+ isLoading,
82
+ isValidating,
83
+ mutate: mutated,
84
+ } = useSWR<{ data: { bill_uuid: string; line_item_uuid: string } }>(url, openmrsFetch);
85
+
86
+ const results = data?.data;
87
+
88
+ return {
89
+ orderBill: results,
90
+ error,
91
+ isLoadingOrderBill: isLoading,
92
+ isValidating,
93
+ mutated,
94
+ };
95
+ };
96
+
97
+ export const useOdooBills = (patientUuid: string, enableOdooBilling: boolean = false) => {
98
+ const url = enableOdooBilling ? `etl/odoo/billing/patient/${patientUuid}` : null;
99
+
100
+ const { data, error, isLoading } = useSWR<{
101
+ data: {
102
+ orders: Array<{
103
+ order_lines: Array<{
104
+ billing_status: string;
105
+ openmrs_order_id: string;
106
+ }>;
86
107
  }>;
87
- }>;
88
- }>(url, null, 'GET');
108
+ };
109
+ }>(url, openmrsFetch);
110
+
111
+ const results = data?.data;
112
+
113
+ return {
114
+ odooBills: results,
115
+ error,
116
+ isLoadingOdooBills: isLoading,
117
+ };
89
118
  };
@@ -16,7 +16,7 @@ import {
16
16
  import { type PharmacyConfig } from '../config-schema';
17
17
  import { useProviders } from '../medication-dispense/medication-dispense.resource';
18
18
  import styles from './action-buttons.scss';
19
- import { getOdooBills, getOrderNumberFromHie } from '../bill/bill.resource';
19
+ import { useOdooBills, useOrderBill } from '../bill/bill.resource';
20
20
  import { InlineLoading } from '@carbon/react';
21
21
 
22
22
  interface ActionButtonsProps {
@@ -45,7 +45,6 @@ const ActionButtons: React.FC<ActionButtonsProps> = ({
45
45
  mutated,
46
46
  }) => {
47
47
  const [status, setStatus] = useState<BillStatus>('BLANK');
48
- const [isLoadingOdooBills, setIsLoadingOdooBills] = useState(false);
49
48
  const config = useConfig<PharmacyConfig>();
50
49
  const session = useSession();
51
50
  const providers = useProviders(config.dispenserProviderRoles);
@@ -57,13 +56,16 @@ const ActionButtons: React.FC<ActionButtonsProps> = ({
57
56
  return {} as Order;
58
57
  }, [orders, medicationRequestBundle, isLoadingOrders]);
59
58
 
59
+ const { orderBill, isLoadingOrderBill } = useOrderBill(order?.orderNumber);
60
+ const { odooBills, isLoadingOdooBills } = useOdooBills(order?.patient?.uuid, config.enableOdooBilling);
61
+
60
62
  useEffect(() => {
61
- const getBillStatus = async () => {
62
- try {
63
- const response = await getOrderNumberFromHie(order?.orderNumber);
64
- const billUuid = response.bill_uuid;
63
+ if (!config.enableOdooBilling) {
64
+ if (!isLoading && !isLoadingOrderBill && orderBill) {
65
+ const billUuid = orderBill?.bill_uuid;
66
+ const lineItemUuid = orderBill?.line_item_uuid;
65
67
  const bill = bills.find((b) => b.uuid === billUuid);
66
- const lineItem = bill?.lineItems?.find((i) => i.uuid === response?.line_item_uuid);
68
+ const lineItem = bill?.lineItems?.find((i) => i.uuid === lineItemUuid);
67
69
  if (lineItem) {
68
70
  if (!config.blockedPaymentModes.includes(lineItem.priceName.toUpperCase())) {
69
71
  setStatus('PAID');
@@ -73,40 +75,29 @@ const ActionButtons: React.FC<ActionButtonsProps> = ({
73
75
  } else {
74
76
  setStatus('BLANK');
75
77
  }
76
- } catch (error) {
77
- setStatus('BLANK');
78
78
  }
79
- };
80
-
81
- const odooBills = async () => {
82
- try {
83
- setIsLoadingOdooBills(true);
84
- const results = await getOdooBills(order?.patient?.uuid);
85
- if (results.orders && results.orders[0].order_lines && results.orders[0].order_lines.length) {
86
- const currentOrder = results.orders[0].order_lines.find((o) => o.openmrs_order_id === order?.uuid);
87
- if (currentOrder) {
88
- if (currentOrder.billing_status.toUpperCase() === 'PAID') {
89
- setStatus('PAID');
90
- } else {
91
- setStatus('PENDING');
92
- }
79
+ } else {
80
+ if (odooBills && odooBills.orders && odooBills.orders[0].order_lines && odooBills.orders[0].order_lines.length) {
81
+ const currentOrder = odooBills.orders[0].order_lines.find((o) => o.openmrs_order_id === order?.uuid);
82
+ if (currentOrder) {
83
+ if (currentOrder.billing_status.toUpperCase() === 'PAID') {
84
+ setStatus('PAID');
85
+ } else {
86
+ setStatus('PENDING');
93
87
  }
94
88
  }
95
- } catch (error) {
96
- console.error(error);
97
- } finally {
98
- setIsLoadingOdooBills(false);
99
- }
100
- };
101
-
102
- if (config.enableOdooBilling) {
103
- odooBills();
104
- } else {
105
- if (order?.orderNumber) {
106
- getBillStatus();
107
89
  }
108
90
  }
109
- }, [order, bills, isLoadingOrders, config.enableOdooBilling, config.blockedPaymentModes]);
91
+ }, [
92
+ order,
93
+ isLoading,
94
+ bills,
95
+ odooBills,
96
+ orderBill,
97
+ isLoadingOrderBill,
98
+ config.blockedPaymentModes,
99
+ config.enableOdooBilling,
100
+ ]);
110
101
 
111
102
  const mostRecentMedicationDispenseStatus: MedicationDispenseStatus = getMostRecentMedicationDispenseStatus(
112
103
  medicationRequestBundle.dispenses,
@@ -161,7 +152,7 @@ const ActionButtons: React.FC<ActionButtonsProps> = ({
161
152
  mutated,
162
153
  };
163
154
 
164
- if (isLoadingOdooBills) {
155
+ if (isLoadingOdooBills || isLoading || isLoadingOrderBill) {
165
156
  return <InlineLoading />;
166
157
  }
167
158