@openmrs/esm-stock-management-app 1.0.1-pre.777 → 1.0.1-pre.785

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.
Files changed (120) hide show
  1. package/__mocks__/index.ts +1 -0
  2. package/__mocks__/operation-type.mock.ts +532 -0
  3. package/dist/155.js +1 -0
  4. package/dist/155.js.map +1 -0
  5. package/dist/172.js +1 -1
  6. package/dist/20.js +1 -1
  7. package/dist/290.js +1 -1
  8. package/dist/493.js +2 -0
  9. package/dist/493.js.map +1 -0
  10. package/dist/606.js +1 -1
  11. package/dist/627.js +1 -1
  12. package/dist/{400.js → 914.js} +1 -1
  13. package/dist/914.js.map +1 -0
  14. package/dist/main.js +1 -1
  15. package/dist/main.js.map +1 -1
  16. package/dist/openmrs-esm-stock-management-app.js +1 -1
  17. package/dist/openmrs-esm-stock-management-app.js.buildmanifest.json +81 -57
  18. package/dist/openmrs-esm-stock-management-app.js.map +1 -1
  19. package/dist/routes.json +1 -1
  20. package/package.json +1 -1
  21. package/src/core/utils/utils.ts +29 -0
  22. package/src/index.ts +4 -0
  23. package/src/routes.json +9 -0
  24. package/src/stock-items/add-stock-item/transactions/printout/transactions-stockcard-printout.component.tsx +8 -12
  25. package/src/stock-items/add-stock-item/transactions/transactions.component.tsx +8 -12
  26. package/src/stock-items/stock-items.resource.ts +5 -5
  27. package/src/stock-lookups/stock-lookups.resource.ts +2 -2
  28. package/src/stock-operations/edit-stock-operation/edit-stock-operation-action-menu.component.tsx +41 -16
  29. package/src/stock-operations/{add-stock-operation/received-items.component.tsx → received-items.component.tsx} +1 -1
  30. package/src/stock-operations/stock-operation-reference.component.tsx +64 -0
  31. package/src/stock-operations/stock-operation-status/stock-operation-status-row.tsx +77 -0
  32. package/src/stock-operations/stock-operation-status/stock-operation-status.scss +32 -0
  33. package/src/stock-operations/stock-operation-status/stock-operation-status.tsx +45 -0
  34. package/src/stock-operations/stock-operation-types-selector/stock-operation-types-selector.component.tsx +30 -29
  35. package/src/stock-operations/stock-operation.utils.tsx +16 -79
  36. package/src/stock-operations/stock-operations-dialog/stock-operations-issue-stock-button.component.tsx +27 -39
  37. package/src/stock-operations/stock-operations-dialog/stock-operations-print-button.component.tsx +51 -59
  38. package/src/stock-operations/{stock-item-selector/stock-item-selector.resource.tsx → stock-operations-forms/hooks/useFilterableStockItems.ts} +4 -4
  39. package/src/stock-operations/stock-operations-forms/hooks/useFilteredOperationTypesByRoles.ts +30 -0
  40. package/src/stock-operations/stock-operations-forms/hooks/useOperationTypePermisions.ts +29 -0
  41. package/src/stock-operations/stock-operations-forms/hooks/useParties.ts +73 -0
  42. package/src/stock-operations/{users-selector/users-selector.resource.tsx → stock-operations-forms/hooks/useSearchUser.ts} +9 -7
  43. package/src/stock-operations/{batch-no-selector/batch-no-selector.resource.tsx → stock-operations-forms/hooks/useStockItemBatchNumbers.ts} +3 -3
  44. package/src/stock-operations/stock-operations-forms/hooks/useStockOperationLinks.ts +20 -0
  45. package/src/stock-operations/stock-operations-forms/input-components/batch-no-selector.component.tsx +72 -0
  46. package/src/stock-operations/stock-operations-forms/input-components/batch-no-selector.test.tsx +90 -0
  47. package/src/stock-operations/{add-stock-operation/stock-item-search/stock-item-search.scss → stock-operations-forms/input-components/input-components-styles.scss} +2 -2
  48. package/src/stock-operations/stock-operations-forms/input-components/qty-uim-selector.test.tsx +157 -0
  49. package/src/stock-operations/stock-operations-forms/input-components/quantity-uom-selector.component.tsx +53 -0
  50. package/src/stock-operations/stock-operations-forms/input-components/stock-item-search.component.tsx +56 -0
  51. package/src/stock-operations/stock-operations-forms/input-components/stock-operation-reason-selector.component.tsx +59 -0
  52. package/src/stock-operations/stock-operations-forms/input-components/stock-operation-reason-selector.test.tsx +216 -0
  53. package/src/stock-operations/stock-operations-forms/input-components/unique-batch-no-entry-input.component.tsx +59 -0
  54. package/src/stock-operations/stock-operations-forms/input-components/user-selector.test.tsx +110 -0
  55. package/src/stock-operations/stock-operations-forms/input-components/users-selector.component.tsx +111 -0
  56. package/src/stock-operations/stock-operations-forms/step1.test.tsx +303 -0
  57. package/src/stock-operations/stock-operations-forms/step2.test.tsx +250 -0
  58. package/src/stock-operations/stock-operations-forms/step3.test.tsx +223 -0
  59. package/src/stock-operations/stock-operations-forms/steps/base-operation-details-form-step.tsx +241 -0
  60. package/src/stock-operations/stock-operations-forms/steps/quantity-uom-cell.component.tsx +33 -0
  61. package/src/stock-operations/stock-operations-forms/steps/stock-availability-cell.component.tsx +51 -0
  62. package/src/stock-operations/stock-operations-forms/steps/stock-operation-item-batch-no-cell.component.tsx +40 -0
  63. package/src/stock-operations/stock-operations-forms/steps/stock-operation-item-cell.component.tsx +38 -0
  64. package/src/stock-operations/stock-operations-forms/steps/stock-operation-item-expiry-cell.component.tsx +41 -0
  65. package/src/stock-operations/stock-operations-forms/steps/stock-operation-items-form-step.component.tsx +281 -0
  66. package/src/stock-operations/stock-operations-forms/steps/stock-operation-items-form-step.scc.scss +64 -0
  67. package/src/stock-operations/stock-operations-forms/steps/stock-operation-submission-form-step.component.tsx +236 -0
  68. package/src/stock-operations/stock-operations-forms/stock-issue-form-initializer-with-related-requisition-operation.component.tsx +55 -0
  69. package/src/stock-operations/stock-operations-forms/stock-item-form/stock-item-form.scss +41 -0
  70. package/src/stock-operations/stock-operations-forms/stock-item-form/stock-item-form.workspace.tsx +197 -0
  71. package/src/stock-operations/stock-operations-forms/stock-operation-form-header.component.tsx +166 -0
  72. package/src/stock-operations/stock-operations-forms/stock-operation-form.component.tsx +200 -0
  73. package/src/stock-operations/stock-operations-forms/stock-operation-form.scss +111 -0
  74. package/src/stock-operations/stock-operations-forms/stock-operation-related-link.component.tsx +45 -0
  75. package/src/stock-operations/stock-operations-forms/stock-operation-stepper/stepper.scss +41 -0
  76. package/src/stock-operations/stock-operations-forms/stock-operation-stepper/stock-operation-stepper.component.tsx +52 -0
  77. package/src/stock-operations/stock-operations-forms/stock-operations-form-utils.ts +32 -0
  78. package/src/stock-operations/stock-operations-table.component.tsx +20 -56
  79. package/src/stock-operations/stock-operations.resource.ts +16 -13
  80. package/src/stock-operations/validation-schema.ts +72 -14
  81. package/dist/400.js.map +0 -1
  82. package/dist/766.js +0 -2
  83. package/dist/766.js.map +0 -1
  84. package/src/stock-operations/add-stock-operation/add-stock-operation.component.tsx +0 -349
  85. package/src/stock-operations/add-stock-operation/add-stock-operation.resource.tsx +0 -27
  86. package/src/stock-operations/add-stock-operation/add-stock-operation.scss +0 -60
  87. package/src/stock-operations/add-stock-operation/add-stock-operation.test.tsx +0 -192
  88. package/src/stock-operations/add-stock-operation/add-stock-operation.utils.tsx +0 -152
  89. package/src/stock-operations/add-stock-operation/add-stock-utils.ts +0 -103
  90. package/src/stock-operations/add-stock-operation/base-operation-details.component.tsx +0 -439
  91. package/src/stock-operations/add-stock-operation/base-operation-details.scss +0 -30
  92. package/src/stock-operations/add-stock-operation/stock-item-search/stock-item-search.component.tsx +0 -70
  93. package/src/stock-operations/add-stock-operation/stock-items-addition-row.component.tsx +0 -360
  94. package/src/stock-operations/add-stock-operation/stock-items-addition-row.resource.tsx +0 -0
  95. package/src/stock-operations/add-stock-operation/stock-items-addition-row.scss +0 -12
  96. package/src/stock-operations/add-stock-operation/stock-items-addition-row.test.tsx +0 -10
  97. package/src/stock-operations/add-stock-operation/stock-items-addition.component.scss +0 -17
  98. package/src/stock-operations/add-stock-operation/stock-items-addition.component.tsx +0 -254
  99. package/src/stock-operations/add-stock-operation/stock-operation-context/useStockOperationContext.tsx +0 -16
  100. package/src/stock-operations/add-stock-operation/stock-operation-reference.component.tsx +0 -39
  101. package/src/stock-operations/add-stock-operation/stock-operation-related-link.component.tsx +0 -38
  102. package/src/stock-operations/add-stock-operation/stock-operation-status.component.tsx +0 -170
  103. package/src/stock-operations/add-stock-operation/stock-operation-submission.component.tsx +0 -189
  104. package/src/stock-operations/add-stock-operation/stock-operation-submission.test.tsx +0 -138
  105. package/src/stock-operations/add-stock-operation/types.ts +0 -55
  106. package/src/stock-operations/add-stock-operation/validationSchema.ts +0 -54
  107. package/src/stock-operations/batch-no-selector/batch-no-selector.component.tsx +0 -114
  108. package/src/stock-operations/batch-no-selector/batch-no-selector.scss +0 -0
  109. package/src/stock-operations/batch-no-selector/batch-no-selector.test.tsx +0 -101
  110. package/src/stock-operations/party-selector/party-selector.component.tsx +0 -59
  111. package/src/stock-operations/qty-uom-selector/qty-uom-selector.component.tsx +0 -65
  112. package/src/stock-operations/qty-uom-selector/qty-uom-selector.resource.tsx +0 -0
  113. package/src/stock-operations/qty-uom-selector/qty-uom-selector.scss +0 -0
  114. package/src/stock-operations/qty-uom-selector/qty-uom-selector.test.tsx +0 -10
  115. package/src/stock-operations/stock-item-selector/stock-item-selector.component.tsx +0 -69
  116. package/src/stock-operations/stock-item-selector/stock-item-selector.scss +0 -0
  117. package/src/stock-operations/stock-item-selector/stock-item-selector.test.tsx +0 -10
  118. package/src/stock-operations/stock-operation-reason-selector/stock-operation-reason-selector.component.tsx +0 -62
  119. package/src/stock-operations/users-selector/users-selector.component.tsx +0 -75
  120. /package/dist/{766.js.LICENSE.txt → 493.js.LICENSE.txt} +0 -0
@@ -1,30 +0,0 @@
1
- @use '@carbon/layout';
2
- @use '@carbon/type';
3
- @use '~@openmrs/esm-styleguide/src/vars' as *;
4
-
5
- .verticalForm {
6
- display: flex;
7
- grid-row-gap: 2em;
8
- padding-top: layout.$spacing-05;
9
- align-content: space-between;
10
- flex-direction: column;
11
-
12
- :global(.cds--form-item) {
13
- flex: none !important;
14
- }
15
-
16
- :global(.cds--label) {
17
- color: black;
18
- display: inline-block;
19
- font-size: var(--cds-label-01-font-size);
20
- font-weight: bold;
21
- letter-spacing: var(--cds-label-01-letter-spacing, 0.32px);
22
- line-height: layout.$spacing-05;
23
- margin-bottom: layout.$spacing-03;
24
- vertical-align: baseline;
25
- }
26
- }
27
-
28
- .formContainer {
29
- margin: layout.$spacing-05;
30
- }
@@ -1,70 +0,0 @@
1
- import React, { useEffect, useState } from 'react';
2
- import { Search, ClickableTile } from '@carbon/react';
3
- import { useTranslation } from 'react-i18next';
4
- import { useDebounce } from '@openmrs/esm-framework';
5
- import { useStockItems } from '../../stock-item-selector/stock-item-selector.resource';
6
- import { useFormContext, type UseFieldArrayReturn } from 'react-hook-form';
7
- import { StockOperationItemDTO } from '../../../core/api/types/stockOperation/StockOperationItemDTO';
8
- import { getStockOperationUniqueId } from '../../stock-operation.utils';
9
- import styles from './stock-item-search.scss';
10
-
11
- type StockItemSearchProps = UseFieldArrayReturn<
12
- {
13
- stockItems: StockOperationItemDTO[];
14
- },
15
- 'stockItems',
16
- 'id'
17
- >;
18
-
19
- const StockItemSearch: React.FC<StockItemSearchProps> = ({ append, fields }) => {
20
- const { t } = useTranslation();
21
- const { isLoading, stockItemsList, setSearchString } = useStockItems({});
22
- const [searchTerm, setSearchTerm] = useState('');
23
- const { setValue, getValues } = useFormContext();
24
- const debouncedSearchTerm = useDebounce(searchTerm);
25
-
26
- useEffect(() => {
27
- if (debouncedSearchTerm?.length !== 0) {
28
- setSearchString(debouncedSearchTerm);
29
- }
30
- }, [debouncedSearchTerm, setSearchString]);
31
-
32
- const handleOnSearchResultClick = (stockItem) => {
33
- const itemId = `new-item-${getStockOperationUniqueId()}`;
34
- append({
35
- ...stockItem,
36
- uuid: itemId,
37
- id: itemId,
38
- stockItemUuid: stockItem.uuid,
39
- stockItemName: stockItem.commonName,
40
- });
41
- setSearchTerm('');
42
- setValue(`stockItems[${fields.length}].stockItemUuid`, stockItem.uuid);
43
- };
44
- return (
45
- <div className={styles.stockItemSearchContainer}>
46
- <div style={{ display: 'flex' }}>
47
- <Search
48
- size="lg"
49
- placeholder="Find your items"
50
- labelText="Search"
51
- closeButtonLabelText="Clear search input"
52
- value={searchTerm}
53
- id="search-1"
54
- onChange={(e) => setSearchTerm(e.target.value)}
55
- />
56
- </div>
57
- {searchTerm && stockItemsList?.length > 0 && (
58
- <div className={styles.searchResults}>
59
- {stockItemsList?.slice(0, 5).map((stockItem) => (
60
- <ClickableTile onClick={() => handleOnSearchResultClick(stockItem)} key={stockItem?.uuid}>
61
- {stockItem?.commonName}
62
- </ClickableTile>
63
- ))}
64
- </div>
65
- )}
66
- </div>
67
- );
68
- };
69
-
70
- export default StockItemSearch;
@@ -1,360 +0,0 @@
1
- import React, { ChangeEvent, useMemo, useState } from 'react';
2
- import { isDesktop } from '@openmrs/esm-framework';
3
- import { Button, DatePicker, DatePickerInput, Link, NumberInput, TableCell, TableRow, TextInput } from '@carbon/react';
4
- import { TrashCan } from '@carbon/react/icons';
5
- import { StockOperationItemFormData } from '../validation-schema';
6
- import {
7
- Control,
8
- FieldArrayWithId,
9
- FieldErrors,
10
- UseFieldArrayAppend,
11
- UseFieldArrayRemove,
12
- UseFormSetValue,
13
- } from 'react-hook-form';
14
- import {
15
- DATE_PICKER_CONTROL_FORMAT,
16
- DATE_PICKER_FORMAT,
17
- URL_STOCK_ITEM,
18
- formatForDatePicker,
19
- today,
20
- } from '../../constants';
21
- import { StockBatchDTO } from '../../core/api/types/stockItem/StockBatchDTO';
22
- import { StockItemPackagingUOMDTO } from '../../core/api/types/stockItem/StockItemPackagingUOM';
23
- import { StockItemInventory } from '../../core/api/types/stockItem/StockItemInventory';
24
- import { StockOperationItemDTO } from '../../core/api/types/stockOperation/StockOperationItemDTO';
25
- import { StockItemDTO } from '../../core/api/types/stockItem/StockItem';
26
- import QtyUomSelector from '../qty-uom-selector/qty-uom-selector.component';
27
- import BatchNoSelector from '../batch-no-selector/batch-no-selector.component';
28
-
29
- import styles from './stock-items-addition-row.scss';
30
- import { useStockItemBatchInformationHook } from '../../stock-items/add-stock-item/batch-information/batch-information.resource';
31
-
32
- interface StockItemsAdditionRowProps {
33
- canEdit?: boolean;
34
- rows: StockOperationItemFormData[];
35
- showQuantityRequested?: boolean;
36
- requiresActualBatchInformation?: boolean;
37
- requiresBatchUuid?: boolean;
38
- canUpdateBatchInformation?: boolean;
39
- canCapturePurchasePrice?: boolean;
40
- batchNos?: {
41
- [key: string]: StockBatchDTO[];
42
- };
43
- itemUoM?: {
44
- [key: string]: StockItemPackagingUOMDTO[];
45
- };
46
- batchBalance?: {
47
- [key: string]: StockItemInventory;
48
- };
49
- control: Control<{
50
- stockItems: StockOperationItemDTO[];
51
- }>;
52
- setValue: UseFormSetValue<{
53
- stockItems: StockOperationItemDTO[];
54
- }>;
55
- errors: FieldErrors<{
56
- stockItems: StockOperationItemDTO[];
57
- }>;
58
- remove: UseFieldArrayRemove;
59
- append: UseFieldArrayAppend<
60
- {
61
- stockItems: StockOperationItemDTO[];
62
- },
63
- 'stockItems'
64
- >;
65
- fields: FieldArrayWithId<
66
- {
67
- stockItems: StockOperationItemDTO[];
68
- },
69
- 'stockItems'
70
- >[];
71
- }
72
-
73
- const StockItemsAdditionRow: React.FC<StockItemsAdditionRowProps> = ({
74
- canEdit,
75
- showQuantityRequested,
76
- requiresActualBatchInformation,
77
- requiresBatchUuid,
78
- canUpdateBatchInformation,
79
- canCapturePurchasePrice,
80
- batchBalance,
81
- control,
82
- setValue,
83
- errors,
84
- remove,
85
- fields,
86
- }) => {
87
- const [stockItemUuid, setStockItemUuid] = useState<string | null | undefined>();
88
- const [stockItemExpiry, setStockItemExpiy] = useState<Date | null | undefined>();
89
-
90
- const handleStockItemChange = (index: number, data?: StockItemDTO) => {
91
- if (!data) return;
92
- const item = fields[index];
93
- if (item) {
94
- item.stockItemName =
95
- (data?.drugName
96
- ? `${data?.drugName}${
97
- data?.commonName ?? data?.conceptName ? ` (${data?.commonName ?? data?.conceptName})` : ''
98
- }`
99
- : null) ?? data?.conceptName;
100
-
101
- const configureExpiration = data?.hasExpiration ?? true;
102
- item.hasExpiration = configureExpiration;
103
- if (!configureExpiration) {
104
- item.expiration = null;
105
- }
106
-
107
- item.stockItemUuid = data?.uuid;
108
-
109
- item.stockItemPackagingUOMUuid = null;
110
- item.stockItemPackagingUOMName = null;
111
-
112
- item.stockBatchUuid = null;
113
- if (requiresBatchUuid) {
114
- // handleStockBatchSearch(row, "", data.selectedItem?.uuid);
115
- }
116
- }
117
- };
118
- const isStockItem = (obj: any): obj is StockItemDTO => {
119
- return typeof obj === 'object' && obj !== null && 'drugName' in obj;
120
- };
121
-
122
- const StockAvailability: React.FC<{ stockItemUuid: string }> = ({ stockItemUuid }) => {
123
- const { items } = useStockItemBatchInformationHook({
124
- stockItemUuid: stockItemUuid,
125
- includeBatchNo: true,
126
- });
127
-
128
- const totalQuantity = useMemo(() => {
129
- if (!items?.length) return 0;
130
- return items.reduce((total, batch) => {
131
- return total + (Number(batch.quantity) || 0);
132
- }, 0);
133
- }, [items]);
134
- const commonUOM = useMemo(() => {
135
- if (!items?.length) return '';
136
- return items[0]?.quantityUoM || '';
137
- }, [items]);
138
-
139
- return (
140
- <div className={styles.availability}>
141
- {totalQuantity > 0 ? (
142
- <span>
143
- Available: {totalQuantity.toLocaleString()} {commonUOM}
144
- </span>
145
- ) : (
146
- <span className={styles.outOfStock}>Out of Stock</span>
147
- )}
148
- </div>
149
- );
150
- };
151
- return (
152
- <>
153
- {fields?.map((row, index) => {
154
- const stockItemId = `stockItems.${index}.stockItemUuid`;
155
- return (
156
- <TableRow className={isDesktop ? styles.desktopRow : styles.tabletRow} key={row?.uuid}>
157
- <TableCell>
158
- {row?.stockItemUuid && isStockItem(row?.stockItemUuid) ? (
159
- <Link target={'_blank'} to={URL_STOCK_ITEM(row?.stockItemUuid)}>
160
- {row?.stockItemUuid.drugName || 'No stock item name'}
161
- </Link>
162
- ) : (
163
- <Link target={'_blank'} to={URL_STOCK_ITEM(row?.stockItemUuid)}>
164
- {row?.stockItemName || 'No name available'}
165
- </Link>
166
- )}
167
- </TableCell>
168
- <TableCell>
169
- <div className={styles.cellContent}>
170
- {row?.stockItemUuid && <StockAvailability stockItemUuid={row.stockItemUuid} />}
171
- </div>
172
- </TableCell>
173
- {showQuantityRequested && (
174
- <TableCell>
175
- <div className={styles.cellContent}>
176
- {row?.quantityRequested?.toLocaleString() ?? ''} {row?.quantityRequestedPackagingUOMName ?? ''}
177
- </div>
178
- </TableCell>
179
- )}
180
- {(requiresActualBatchInformation || requiresBatchUuid) && (
181
- <TableCell>
182
- <div className={styles.cellContent}>
183
- {requiresActualBatchInformation &&
184
- (canEdit || (canUpdateBatchInformation && row?.permission?.canUpdateBatchInformation)) && (
185
- <TextInput
186
- size="sm"
187
- maxLength={50}
188
- onChange={(e: ChangeEvent<HTMLInputElement>) =>
189
- setValue(`stockItems.${index}.batchNo`, e.target.value)
190
- }
191
- defaultValue={row.batchNo}
192
- invalidText=""
193
- invalid={errors?.stockItems?.[index]?.batchNo}
194
- />
195
- )}
196
- {requiresBatchUuid && !requiresActualBatchInformation && canEdit && (
197
- <BatchNoSelector
198
- batchUuid={row?.stockBatchUuid}
199
- onBatchNoChanged={(item) => {
200
- setValue(`stockItems.${index}.batchNo`, item?.batchNo ?? '');
201
- setValue(`stockItems.${index}.expiration`, item?.expiration);
202
- setStockItemExpiy(item?.expiration);
203
- }}
204
- placeholder={'Filter...'}
205
- invalid={!!errors?.stockItems?.[index]?.stockBatchUuid}
206
- control={control as unknown as Control}
207
- controllerName={`stockItems.${index}.stockBatchUuid`}
208
- name={`stockItems.${index}.stockBatchUuid`}
209
- stockItemUuid={row.stockItemUuid}
210
- selectedItem={stockItemUuid}
211
- />
212
- )}
213
- {!(canUpdateBatchInformation && row?.permission?.canUpdateBatchInformation) &&
214
- !canEdit &&
215
- row?.batchNo}
216
- </div>
217
- </TableCell>
218
- )}
219
- {(requiresActualBatchInformation || requiresBatchUuid) && (
220
- <TableCell>
221
- <div className={styles.cellContent}>
222
- {(canEdit || (canUpdateBatchInformation && row?.permission?.canUpdateBatchInformation)) &&
223
- requiresActualBatchInformation && (
224
- <DatePicker
225
- id={`expiration-${row.uuid}`}
226
- datePickerType="single"
227
- minDate={formatForDatePicker(today())}
228
- locale="en"
229
- dateFormat={DATE_PICKER_CONTROL_FORMAT}
230
- onChange={([newDate]) => {
231
- setValue(`stockItems.${index}.expiration`, newDate);
232
- }}
233
- >
234
- <DatePickerInput
235
- size="sm"
236
- autoComplete="off"
237
- id={`expiration-input-${row.uuid}`}
238
- name="operationDate"
239
- placeholder={DATE_PICKER_FORMAT}
240
- defaultValue={formatForDatePicker(row?.expiration)}
241
- invalid={!!errors?.stockItems?.[index]?.expiration}
242
- />
243
- </DatePicker>
244
- )}
245
- {requiresBatchUuid && !requiresActualBatchInformation && canEdit && (
246
- <DatePicker
247
- id={`expiration-${row.uuid}`}
248
- datePickerType="single"
249
- minDate={formatForDatePicker(today())}
250
- readOnly={true}
251
- locale="en"
252
- dateFormat={DATE_PICKER_CONTROL_FORMAT}
253
- onChange={([newDate]) => {
254
- setValue(`stockItems.${index}.expiration`, newDate);
255
- }}
256
- >
257
- <DatePickerInput
258
- size="sm"
259
- autoComplete="off"
260
- id={`expiration-input-${row.uuid}`}
261
- name="operationDate"
262
- placeholder={DATE_PICKER_FORMAT}
263
- value={formatForDatePicker(stockItemExpiry)}
264
- defaultValue={formatForDatePicker(stockItemExpiry)}
265
- invalid={!!errors?.stockItems?.[index]?.expiration}
266
- />
267
- </DatePicker>
268
- )}
269
- {((!(canUpdateBatchInformation && row?.permission?.canUpdateBatchInformation) && !canEdit) ||
270
- requiresBatchUuid) &&
271
- formatForDatePicker(row.expiration)}
272
- </div>
273
- </TableCell>
274
- )}
275
- <TableCell>
276
- <div className={styles.cellContent}>
277
- {canEdit && (
278
- <NumberInput
279
- allowEmpty
280
- className="small-placeholder-text"
281
- disableWheel
282
- hideSteppers
283
- size="sm"
284
- id={`qty-${row?.uuid}`}
285
- onChange={(e: any) => setValue(`stockItems.${index}.quantity`, e?.target?.value)}
286
- value={row?.quantity ?? ''}
287
- invalidText={errors?.stockItems?.[index]?.quantity?.message}
288
- placeholder={
289
- requiresBatchUuid && !requiresActualBatchInformation && row?.stockBatchUuid in batchBalance
290
- ? `Bal: ${batchBalance[row?.stockBatchUuid]?.quantity?.toLocaleString() ?? ''} ${
291
- batchBalance[row?.stockBatchUuid]?.quantityUoM ?? ''
292
- }`
293
- : ''
294
- }
295
- invalid={!!errors?.stockItems?.[index]?.quantity}
296
- />
297
- )}
298
- {!canEdit && row?.quantity?.toLocaleString()}
299
- </div>
300
- </TableCell>
301
- <TableCell>
302
- <div className={styles.cellContent}>
303
- {canEdit && (
304
- <QtyUomSelector
305
- stockItemUuid={row.stockItemUuid}
306
- onStockPackageChanged={(selectedItem) => {
307
- setValue(`stockItems.${index}.stockItemPackagingUOMUuid`, selectedItem?.uuid);
308
- }}
309
- placeholder={'Filter...'}
310
- invalid={!!errors?.stockItems?.[index]?.stockItemPackagingUOMUuid}
311
- control={control as unknown as Control}
312
- controllerName={`stockItems.${index}.stockItemPackagingUOMUuid`}
313
- name={`stockItems.${index}.stockItemPackagingUOMUuid`}
314
- />
315
- )}
316
- {!canEdit && row?.stockItemPackagingUOMName}
317
- </div>
318
- </TableCell>
319
- {canCapturePurchasePrice && (
320
- <TableCell>
321
- <div className={styles.cellContent}>
322
- <div className={styles.cellContent}>
323
- {canEdit && (
324
- <NumberInput
325
- allowEmpty
326
- disableWheel
327
- size="sm"
328
- invalid={!!errors?.stockItems?.[index]?.purchasePrice}
329
- invalidText=""
330
- id={`purchaseprice-${row.uuid}`}
331
- onChange={(e: any) => setValue(`stockItems.${index}.purchasePrice`, e?.target?.value)}
332
- value={row?.purchasePrice ?? ''}
333
- title=""
334
- />
335
- )}
336
- {!canEdit && row?.purchasePrice?.toLocaleString()}
337
- </div>
338
- </div>
339
- </TableCell>
340
- )}
341
- {canEdit && (
342
- <TableCell>
343
- <Button
344
- type="button"
345
- size="sm"
346
- className="submitButton clear-padding-margin"
347
- iconDescription={'Delete'}
348
- kind="ghost"
349
- renderIcon={TrashCan}
350
- onClick={() => remove(index)}
351
- />
352
- </TableCell>
353
- )}
354
- </TableRow>
355
- );
356
- })}
357
- </>
358
- );
359
- };
360
- export default StockItemsAdditionRow;
@@ -1,12 +0,0 @@
1
- .availability {
2
- font-size: 0.875rem;
3
-
4
- .outOfStock {
5
- color: #da1e28;
6
- }
7
- }
8
- .cellContent {
9
- display: flex;
10
- align-items: center;
11
- gap: 0.5rem;
12
- }
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
-
3
- import { render } from '@testing-library/react';
4
- import StockItemsAdditionRow from './stock-items-addition-row.component';
5
-
6
- describe('Test the stock items addition row', () => {
7
- it(`renders without dying`, () => {
8
- // render(<StockItemsAdditionRow />);
9
- });
10
- });
@@ -1,17 +0,0 @@
1
- .tableContainer {
2
- :global(.cds--data-table-content) {
3
- height: calc(100vh - 150px);
4
- }
5
- }
6
- .tableHeader {
7
- width: 3% !important;
8
- }
9
- .tableBody {
10
- display: flex;
11
- flex-direction: row;
12
- width: 3% !important;
13
- gap: 8px;
14
- }
15
- .dataTable {
16
- width: 100%;
17
- }