@openmrs/esm-stock-management-app 1.0.1-pre.740 → 1.0.1-pre.742

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. package/dist/172.js +1 -1
  2. package/dist/20.js +1 -1
  3. package/dist/290.js +1 -1
  4. package/dist/606.js +1 -1
  5. package/dist/627.js +1 -1
  6. package/dist/651.js +2 -0
  7. package/dist/651.js.map +1 -0
  8. package/dist/667.js +1 -0
  9. package/dist/667.js.map +1 -0
  10. package/dist/main.js +1 -1
  11. package/dist/main.js.map +1 -1
  12. package/dist/openmrs-esm-stock-management-app.js +1 -1
  13. package/dist/openmrs-esm-stock-management-app.js.buildmanifest.json +59 -59
  14. package/dist/openmrs-esm-stock-management-app.js.map +1 -1
  15. package/dist/routes.json +1 -1
  16. package/package.json +2 -1
  17. package/src/index.ts +2 -1
  18. package/src/routes.json +5 -1
  19. package/src/stock-items/add-stock-item/transactions/printout/printable-transaction-footer.component.tsx +34 -0
  20. package/src/stock-items/add-stock-item/transactions/printout/printable-transaction-footer.scss +24 -0
  21. package/src/stock-items/add-stock-item/transactions/printout/printable-transaction-header.component.tsx +52 -0
  22. package/src/stock-items/add-stock-item/transactions/printout/printable-transaction-header.scss +61 -0
  23. package/src/stock-items/add-stock-item/transactions/printout/printable-transaction.scss +71 -0
  24. package/src/stock-items/add-stock-item/transactions/printout/transactions-print-action.component.tsx +50 -0
  25. package/src/stock-items/add-stock-item/transactions/printout/transactions-print-preview.modal.tsx +40 -0
  26. package/src/stock-items/add-stock-item/transactions/printout/transactions-printout.component.tsx +64 -0
  27. package/src/stock-items/add-stock-item/transactions/transactions.component.tsx +37 -14
  28. package/src/stock-items/add-stock-item/transactions/transactions.resource.tsx +39 -0
  29. package/dist/273.js +0 -2
  30. package/dist/273.js.map +0 -1
  31. package/dist/973.js +0 -1
  32. package/dist/973.js.map +0 -1
  33. /package/dist/{273.js.LICENSE.txt → 651.js.LICENSE.txt} +0 -0
@@ -0,0 +1,50 @@
1
+ import React from 'react';
2
+ import { Button, Stack, ComboButton, MenuItem } from '@carbon/react';
3
+ import { Printer } from '@carbon/react/icons';
4
+ import { useTranslation } from 'react-i18next';
5
+ import { useStockItem } from '../../../stock-items.resource';
6
+ import { showModal } from '@openmrs/esm-framework';
7
+ import styles from './printable-transaction.scss';
8
+
9
+ type Props = {
10
+ itemUuid: string;
11
+ columns: any;
12
+ data: any;
13
+ };
14
+
15
+ const TransactionsPrintAction: React.FC<Props> = ({ columns, data, itemUuid }) => {
16
+ const { t } = useTranslation();
17
+
18
+ const { item: stockItem, isLoading: isStockItemLoading } = useStockItem(itemUuid);
19
+
20
+ const handleClick = () => {
21
+ // stockItem.drugName || stockItem.conceptName || ''
22
+ const dispose = showModal('transactions-print-preview-modal', {
23
+ onClose: () => dispose(),
24
+ title: stockItem.drugName || stockItem.conceptName || '',
25
+ columns,
26
+ data,
27
+ });
28
+ };
29
+
30
+ return (
31
+ <>
32
+ <ComboButton label="Print">
33
+ <MenuItem
34
+ label={t('printStockCard', 'Print Stock Card')}
35
+ renderIcon={(props) => <Printer size={24} {...props} />}
36
+ iconDescription="Print Stock Card"
37
+ />
38
+ <MenuItem
39
+ label={t('printBinCard', 'Print Bin Card')}
40
+ renderIcon={(props) => <Printer size={24} {...props} />}
41
+ iconDescription="Print Bin Card"
42
+ onClick={handleClick}
43
+ disabled={isStockItemLoading}
44
+ />
45
+ </ComboButton>
46
+ </>
47
+ );
48
+ };
49
+
50
+ export default TransactionsPrintAction;
@@ -0,0 +1,40 @@
1
+ import React, { useRef } from 'react';
2
+ import TransactionsPrintout from './transactions-printout.component';
3
+ import { ModalBody, ModalHeader, ModalFooter, Button } from '@carbon/react';
4
+ import { useTranslation } from 'react-i18next';
5
+ import { useReactToPrint } from 'react-to-print';
6
+ type Props = {
7
+ onClose?: () => void;
8
+ title?: string;
9
+ columns: any;
10
+ data: any;
11
+ };
12
+
13
+ const TransactionsPrintPreview: React.FC<Props> = ({ onClose, title, columns, data }) => {
14
+ const { t } = useTranslation();
15
+ const ref = useRef<HTMLDivElement>(null);
16
+
17
+ const handlePrint = useReactToPrint({
18
+ content: () => ref.current,
19
+ });
20
+ return (
21
+ <>
22
+ <ModalHeader closeModal={onClose} title={t('printbincard', 'Print Bin Card')} />
23
+ <ModalBody>
24
+ <div ref={ref}>
25
+ <TransactionsPrintout title={title} columns={columns} data={data} />
26
+ </div>
27
+ </ModalBody>
28
+ <ModalFooter>
29
+ <Button kind="secondary" onClick={onClose}>
30
+ {t('cancel', 'Cancel')}
31
+ </Button>
32
+ <Button type="button" onClick={handlePrint}>
33
+ {t('print', 'Print')}
34
+ </Button>
35
+ </ModalFooter>
36
+ </>
37
+ );
38
+ };
39
+
40
+ export default TransactionsPrintPreview;
@@ -0,0 +1,64 @@
1
+ import React, { useMemo } from 'react';
2
+ import {
3
+ DataTable,
4
+ TableContainer,
5
+ Table,
6
+ TableHead,
7
+ TableRow,
8
+ TableHeader,
9
+ TableBody,
10
+ TableCell,
11
+ } from '@carbon/react';
12
+ import { useStockItem } from '../../../stock-items.resource';
13
+ import PrintableTransactionHeader from './printable-transaction-header.component';
14
+ import PrintableTransactionFooter from './printable-transaction-footer.component';
15
+ import styles from './printable-transaction.scss';
16
+
17
+ type Props = {
18
+ title: string;
19
+ columns: any;
20
+ data: any;
21
+ };
22
+
23
+ const TransactionsPrintout: React.FC<Props> = ({ columns, data, title }) => {
24
+ return (
25
+ <div>
26
+ <PrintableTransactionHeader itemName={title} />
27
+
28
+ <div className={styles.itemsContainer}>
29
+ <div className={styles.tableContainer}>
30
+ <DataTable data-floating-menu-container rows={data} headers={columns} useZebraStyles>
31
+ {({ rows, headers, getHeaderProps, getTableProps, onInputChange }) => (
32
+ <div>
33
+ <TableContainer>
34
+ <Table {...getTableProps()}>
35
+ <TableHead>
36
+ <TableRow>
37
+ {headers.map((header) => (
38
+ <TableHeader {...getHeaderProps({ header })}>{header.header}</TableHeader>
39
+ ))}
40
+ </TableRow>
41
+ </TableHead>
42
+ <TableBody style={{ fontSize: '8px' }}>
43
+ {rows.map((row) => (
44
+ <TableRow key={row.id}>
45
+ {row.cells.map((cell) => (
46
+ <TableCell key={cell.id}>{cell.value}</TableCell>
47
+ ))}
48
+ </TableRow>
49
+ ))}
50
+ </TableBody>
51
+ </Table>
52
+ </TableContainer>
53
+ </div>
54
+ )}
55
+ </DataTable>
56
+ </div>
57
+ </div>
58
+
59
+ <PrintableTransactionFooter title={''} />
60
+ </div>
61
+ );
62
+ };
63
+
64
+ export default TransactionsPrintout;
@@ -1,15 +1,19 @@
1
1
  import React, { useEffect, useMemo, useState } from 'react';
2
2
  import { useStockItemsTransactions } from './transactions.resource';
3
- import { DataTableSkeleton } from '@carbon/react';
3
+ import { DataTableSkeleton, Button } from '@carbon/react';
4
4
  import { formatDisplayDate } from '../../../core/utils/datetimeUtils';
5
5
  import { ArrowLeft } from '@carbon/react/icons';
6
6
  import DataList from '../../../core/components/table/table.component';
7
7
  import { StockOperationType } from '../../../core/api/types/stockOperation/StockOperationType';
8
8
  import TransactionsLocationsFilter from './transaction-filters/transaction-locations-filter.component';
9
9
  import { useForm } from 'react-hook-form';
10
- import { StockItemInventoryFilter } from '../../stock-items.resource';
10
+ import { StockItemInventoryFilter, useStockItem } from '../../stock-items.resource';
11
11
  import { useTranslation } from 'react-i18next';
12
12
  import StockOperationReference from '../../../stock-operations/add-stock-operation/stock-operation-reference.component';
13
+ import { Add } from '@carbon/react/icons';
14
+ import { Printer } from '@carbon/react/icons';
15
+ import TransactionsPrintout from './printout/transactions-printout.component';
16
+ import TransactionsPrintAction from './printout/transactions-print-action.component';
13
17
 
14
18
  interface TransactionsProps {
15
19
  onSubmit?: () => void;
@@ -20,8 +24,16 @@ const Transactions: React.FC<TransactionsProps> = ({ stockItemUuid }) => {
20
24
  const { t } = useTranslation();
21
25
 
22
26
  const [stockItemFilter, setStockItemFilter] = useState<StockItemInventoryFilter>();
23
- const { isLoading, items, tableHeaders, totalCount, setCurrentPage, setStockItemUuid, setLocationUuid } =
24
- useStockItemsTransactions(stockItemFilter);
27
+ const {
28
+ isLoading,
29
+ items,
30
+ tableHeaders,
31
+ totalCount,
32
+ setCurrentPage,
33
+ setStockItemUuid,
34
+ setLocationUuid,
35
+ printHeaders,
36
+ } = useStockItemsTransactions(stockItemFilter);
25
37
 
26
38
  useEffect(() => {
27
39
  setStockItemUuid(stockItemUuid);
@@ -96,6 +108,14 @@ const Transactions: React.FC<TransactionsProps> = ({ stockItemUuid }) => {
96
108
  stockItemTransaction?.packagingUomName ?? ''
97
109
  } of ${stockItemTransaction.packagingUomFactor}`
98
110
  : '',
111
+ totalin:
112
+ stockItemTransaction?.quantity >= 0
113
+ ? `${stockItemTransaction?.quantity * Number(stockItemTransaction.packagingUomFactor)}`
114
+ : '',
115
+ totalout:
116
+ stockItemTransaction?.quantity < 0
117
+ ? `${-1 * stockItemTransaction?.quantity * Number(stockItemTransaction.packagingUomFactor)}`
118
+ : '',
99
119
  }));
100
120
  }, [items]);
101
121
 
@@ -106,16 +126,19 @@ const Transactions: React.FC<TransactionsProps> = ({ stockItemUuid }) => {
106
126
  return (
107
127
  <DataList
108
128
  children={() => (
109
- <TransactionsLocationsFilter
110
- onLocationIdChange={(q) => {
111
- setLocationUuid(q);
112
- setStockItemFilter({ ...stockItemFilter, locationUuid: q });
113
- }}
114
- name={'TransactionLocationUuid'}
115
- placeholder={t('filterByLocation', 'Filter by Location')}
116
- control={control}
117
- controllerName="TransactionLocationUuid"
118
- />
129
+ <>
130
+ <TransactionsPrintAction columns={printHeaders} data={tableRows} itemUuid={stockItemUuid} />
131
+ <TransactionsLocationsFilter
132
+ onLocationIdChange={(q) => {
133
+ setLocationUuid(q);
134
+ setStockItemFilter({ ...stockItemFilter, locationUuid: q });
135
+ }}
136
+ name={'TransactionLocationUuid'}
137
+ placeholder={t('filterByLocation', 'Filter by Location')}
138
+ control={control}
139
+ controllerName="TransactionLocationUuid"
140
+ />
141
+ </>
119
142
  )}
120
143
  columns={tableHeaders}
121
144
  data={tableRows}
@@ -76,6 +76,44 @@ export function useStockItemsTransactions(filter?: StockItemInventoryFilter) {
76
76
  [],
77
77
  );
78
78
 
79
+ const printHeaders = useMemo(
80
+ () => [
81
+ {
82
+ key: 'date',
83
+ header: 'Date',
84
+ },
85
+ {
86
+ key: 'location',
87
+ header: 'Location',
88
+ },
89
+ {
90
+ key: 'transaction',
91
+ header: 'Transaction',
92
+ },
93
+ {
94
+ key: 'totalin',
95
+ header: 'IN',
96
+ },
97
+ {
98
+ key: 'totalout',
99
+ header: 'OUT',
100
+ },
101
+ {
102
+ key: 'batch',
103
+ header: 'Batch',
104
+ },
105
+ {
106
+ key: 'reference',
107
+ header: 'Reference',
108
+ },
109
+ {
110
+ key: 'status',
111
+ header: 'Status',
112
+ },
113
+ ],
114
+ [],
115
+ );
116
+
79
117
  return {
80
118
  items: items.results,
81
119
  totalCount: items.totalCount,
@@ -92,5 +130,6 @@ export function useStockItemsTransactions(filter?: StockItemInventoryFilter) {
92
130
  setLocationUuid,
93
131
  setPartyUuid,
94
132
  setStockBatchUuid,
133
+ printHeaders,
95
134
  };
96
135
  }