@openmrs/esm-stock-management-app 1.0.1-pre.543 → 1.0.1-pre.548

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. package/dist/271.js +1 -1
  2. package/dist/{157.js → 281.js} +1 -1
  3. package/dist/281.js.map +1 -0
  4. package/dist/319.js +1 -1
  5. package/dist/460.js +1 -1
  6. package/dist/574.js +1 -1
  7. package/dist/757.js +1 -1
  8. package/dist/788.js +1 -1
  9. package/dist/807.js +1 -1
  10. package/dist/833.js +1 -1
  11. package/dist/main.js +1 -1
  12. package/dist/main.js.map +1 -1
  13. package/dist/openmrs-esm-stock-management-app.js +1 -1
  14. package/dist/openmrs-esm-stock-management-app.js.buildmanifest.json +52 -52
  15. package/dist/routes.json +1 -1
  16. package/package.json +1 -1
  17. package/src/stock-home/stock-home-detail-cards.component.tsx +3 -3
  18. package/src/stock-home/stock-home-metrics.tsx +6 -1
  19. package/src/stock-items/add-stock-item/packaging-units/packaging-units-delete-modal.component.tsx +4 -1
  20. package/src/stock-items/add-stock-item/stock-item-details/stock-item-details.component.tsx +1 -1
  21. package/src/stock-items/add-stock-item/stock-item-units-edit/stock-item-units-edit.component.tsx +20 -15
  22. package/src/stock-operations/add-stock-operation/base-operation-details.component.tsx +4 -4
  23. package/src/stock-operations/add-stock-operation/received-items.component.tsx +6 -3
  24. package/src/stock-operations/add-stock-operation/stock-items-addition.component.tsx +3 -3
  25. package/src/stock-operations/stock-operation-types-selector/stock-operation-types-selector.component.tsx +2 -2
  26. package/src/stock-operations/stock-operations-dialog/stock-operations-dialog.component.tsx +16 -6
  27. package/src/stock-operations/stock-operations-filters.component.tsx +1 -1
  28. package/src/stock-operations/stock-operations-table.component.tsx +82 -122
  29. package/src/stock-operations/stock-operations-table.scss +61 -0
  30. package/src/stock-operations/stock-operations.resource.ts +0 -1
  31. package/translations/am.json +20 -11
  32. package/translations/ar.json +24 -15
  33. package/translations/en.json +20 -11
  34. package/translations/es.json +25 -16
  35. package/translations/fr.json +32 -23
  36. package/translations/he.json +21 -12
  37. package/translations/km.json +22 -13
  38. package/translations/zh.json +20 -11
  39. package/dist/157.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import React, { useCallback, useEffect, useMemo, useState } from "react";
1
+ import React, { useCallback, useMemo, useState } from "react";
2
2
  import { useStockOperationPages } from "./stock-operations-table.resource";
3
3
  import { ResourceRepresentation } from "../core/api/api";
4
4
  import {
@@ -30,10 +30,10 @@ import {
30
30
  DatePicker,
31
31
  TableToolbarMenu,
32
32
  TableToolbarAction,
33
+ InlineLoading,
33
34
  } from "@carbon/react";
34
35
  import { ArrowRight } from "@carbon/react/icons";
35
36
  import { formatDisplayDate } from "../core/utils/datetimeUtils";
36
- import styles from "../stock-items/stock-items-table.scss";
37
37
  import {
38
38
  StockOperationStatusCancelled,
39
39
  StockOperationStatusNew,
@@ -43,8 +43,8 @@ import {
43
43
  import {
44
44
  isDesktop,
45
45
  restBaseUrl,
46
- showModal,
47
46
  useConfig,
47
+ showModal,
48
48
  } from "@openmrs/esm-framework";
49
49
  import StockOperationTypesSelector from "./stock-operation-types-selector/stock-operation-types-selector.component";
50
50
  import { launchAddOrEditDialog } from "./stock-operation.utils";
@@ -59,6 +59,9 @@ import {
59
59
  StockFilters,
60
60
  } from "../constants";
61
61
  import { handleMutate } from "../utils";
62
+
63
+ import styles from "./stock-operations-table.scss";
64
+
62
65
  interface StockOperationsTableProps {
63
66
  status?: string;
64
67
  }
@@ -95,6 +98,12 @@ const StockOperations: React.FC<StockOperationsTableProps> = () => {
95
98
  []
96
99
  );
97
100
 
101
+ const [selectedFromDate, setSelectedFromDate] = useState(null);
102
+ const [selectedToDate, setSelectedToDate] = useState(null);
103
+ const [selectedSources, setSelectedSources] = useState<string[]>([]);
104
+ const [selectedStatus, setSelectedStatus] = useState<string[]>([]);
105
+ const [selectedOperations, setSelectedOperations] = useState<string[]>([]);
106
+
98
107
  const {
99
108
  items,
100
109
  tableHeaders,
@@ -108,17 +117,24 @@ const StockOperations: React.FC<StockOperationsTableProps> = () => {
108
117
  } = useStockOperationPages({
109
118
  v: ResourceRepresentation.Full,
110
119
  totalCount: true,
120
+ operationDateMin: selectedFromDate?.toISOString(),
121
+ operationDateMax: selectedToDate?.toISOString(),
122
+ status: selectedStatus.join(","),
123
+ sourceTypeUuid: selectedSources.join(","),
124
+ operationTypeUuid: selectedOperations.join(","),
111
125
  });
112
126
 
113
- const [filteredItems, setFilteredItems] = useState(items);
114
- const [selectedFromDate, setSelectedFromDate] = useState(null);
115
- const [selectedToDate, setSelectedToDate] = useState(null);
116
- const [selectedSources, setSelectedSources] = useState<string[]>([]);
117
- const [selectedStatus, setSelectedStatus] = useState<string[]>([]);
118
- const [selectedOperations, setSelectedOperations] = useState<string[]>([]);
127
+ const filterApplied =
128
+ selectedFromDate ||
129
+ selectedToDate ||
130
+ selectedSources.length ||
131
+ selectedStatus.length ||
132
+ selectedOperations.length;
133
+
119
134
  const config = useConfig();
120
135
 
121
136
  let operations: StockOperationType[] | null | undefined;
137
+
122
138
  const handleOnComplete = () => {
123
139
  const dispose = showModal("stock-operation-dialog", {
124
140
  title: "complete",
@@ -127,19 +143,6 @@ const StockOperations: React.FC<StockOperationsTableProps> = () => {
127
143
  handleMutate(`${restBaseUrl}/stockmanagement/stockoperation`);
128
144
  };
129
145
 
130
- useEffect(() => {
131
- filterItems();
132
- }, [
133
- selectedFromDate,
134
- selectedToDate,
135
- selectedSources,
136
- selectedStatus,
137
- selectedOperations,
138
- currentPage,
139
- currentPageSize,
140
- items,
141
- ]);
142
-
143
146
  const handleOnFilterChange = useCallback((selectedItems, filterType) => {
144
147
  if (filterType === StockFilters.SOURCES) {
145
148
  setSelectedSources(selectedItems);
@@ -165,51 +168,15 @@ const StockOperations: React.FC<StockOperationsTableProps> = () => {
165
168
  }
166
169
  };
167
170
 
168
- const filterItems = () => {
169
- let filtered = items;
170
-
171
- if (selectedSources.length > 0) {
172
- filtered = filtered.filter((row) =>
173
- selectedSources.includes(row.sourceName)
174
- );
175
- }
176
- if (selectedOperations.length > 0) {
177
- filtered = filtered.filter((row) =>
178
- selectedOperations.includes(row.operationTypeName)
179
- );
180
- }
181
- if (selectedStatus.length > 0) {
182
- filtered = filtered.filter((row) => selectedStatus.includes(row.status));
183
- }
184
- if (selectedFromDate && selectedToDate) {
185
- filtered = filtered.filter((row) => {
186
- const itemDate = new Date(row.operationDate);
187
- return itemDate >= selectedFromDate && itemDate <= selectedToDate;
188
- });
189
- } else if (selectedFromDate) {
190
- filtered = filtered.filter((row) => {
191
- const itemDate = new Date(row.operationDate);
192
- return itemDate >= selectedFromDate;
193
- });
194
- } else if (selectedToDate) {
195
- filtered = filtered.filter((row) => {
196
- const itemDate = new Date(row.operationDate);
197
- return itemDate <= selectedToDate;
198
- });
199
- }
200
-
201
- setFilteredItems(filtered);
202
- };
203
-
204
171
  const tableRows = useMemo(() => {
205
- return filteredItems?.map((stockOperation, index) => ({
172
+ return items?.map((stockOperation, index) => ({
206
173
  ...stockOperation,
207
174
  id: stockOperation?.uuid,
208
175
  key: `key-${stockOperation?.uuid}`,
209
176
  operationTypeName: `${stockOperation?.operationTypeName}`,
210
177
  operationNumber: (
211
178
  <EditStockOperationActionMenu
212
- model={filteredItems[index]}
179
+ model={items[index]}
213
180
  operations={operations}
214
181
  />
215
182
  ),
@@ -348,7 +315,7 @@ const StockOperations: React.FC<StockOperationsTableProps> = () => {
348
315
  onClick={() => {
349
316
  launchAddOrEditDialog(
350
317
  t,
351
- filteredItems[index],
318
+ items[index],
352
319
  true,
353
320
  operation,
354
321
  operations,
@@ -359,9 +326,9 @@ const StockOperations: React.FC<StockOperationsTableProps> = () => {
359
326
  </OverflowMenu>
360
327
  ),
361
328
  }));
362
- }, [handleOnComplete, filteredItems, operation, operations, t]);
329
+ }, [items, operation, operations, t]);
363
330
 
364
- if (isLoading) {
331
+ if (isLoading && !filterApplied) {
365
332
  return (
366
333
  <DataTableSkeleton
367
334
  className={styles.dataTableSkeleton}
@@ -531,47 +498,39 @@ const StockOperations: React.FC<StockOperationsTableProps> = () => {
531
498
  <StructuredListBody>
532
499
  <StructuredListRow>
533
500
  <StructuredListCell noWrap>
534
- {filteredItems[index]?.dateCreated
535
- ? formatDisplayDate(
536
- filteredItems[index]?.dateCreated
537
- )
501
+ {items[index]?.dateCreated
502
+ ? formatDisplayDate(items[index]?.dateCreated)
538
503
  : ""}
539
504
  &nbsp;
540
- {filteredItems[index]?.dateCreated ? "By" : ""}
505
+ {items[index]?.dateCreated ? "By" : ""}
541
506
  &nbsp;
542
- {filteredItems[index]?.dateCreated
543
- ? filteredItems[index]?.creatorFamilyName
507
+ {items[index]?.dateCreated
508
+ ? items[index]?.creatorFamilyName
544
509
  : ""}
545
510
  </StructuredListCell>
546
511
  <StructuredListCell>
547
- {filteredItems[index]?.completedDate
512
+ {items[index]?.completedDate
548
513
  ? formatDisplayDate(
549
- filteredItems[index]?.completedDate
514
+ items[index]?.completedDate
550
515
  )
551
516
  : ""}
552
517
  &nbsp;
553
- {filteredItems[index]?.completedDate
554
- ? "By"
555
- : ""}
518
+ {items[index]?.completedDate ? "By" : ""}
556
519
  &nbsp;
557
- {filteredItems[index]?.completedDate
558
- ? filteredItems[index]?.creatorFamilyName
520
+ {items[index]?.completedDate
521
+ ? items[index]?.creatorFamilyName
559
522
  : ""}
560
523
  </StructuredListCell>
561
524
  <StructuredListCell>
562
- {filteredItems[index]?.stockOperationItems
563
- ? filteredItems[
564
- index
565
- ].stockOperationItems?.map(
525
+ {items[index]?.stockOperationItems
526
+ ? items[index].stockOperationItems?.map(
566
527
  (item) => item.batchNo
567
528
  )[0]
568
529
  : ""}
569
530
  </StructuredListCell>
570
531
  <StructuredListCell>
571
- {filteredItems[index]?.stockOperationItems
572
- ? filteredItems[
573
- index
574
- ].stockOperationItems?.map(
532
+ {items[index]?.stockOperationItems
533
+ ? items[index].stockOperationItems?.map(
575
534
  (item) => item.quantity
576
535
  )[0]
577
536
  : ""}
@@ -579,61 +538,55 @@ const StockOperations: React.FC<StockOperationsTableProps> = () => {
579
538
  </StructuredListRow>
580
539
  <StructuredListRow>
581
540
  <StructuredListCell noWrap>
582
- {filteredItems[index]?.stockOperationItems.map(
541
+ {items[index]?.stockOperationItems.map(
583
542
  (item) => item.quantity
584
543
  )[1]
585
- ? formatDisplayDate(
586
- filteredItems[index]?.dateCreated
587
- )
544
+ ? formatDisplayDate(items[index]?.dateCreated)
588
545
  : ""}
589
546
  &nbsp;
590
- {filteredItems[index]?.stockOperationItems.map(
547
+ {items[index]?.stockOperationItems.map(
591
548
  (item) => item.quantity
592
549
  )[1]
593
550
  ? "By"
594
551
  : ""}
595
552
  &nbsp;
596
- {filteredItems[index]?.stockOperationItems.map(
553
+ {items[index]?.stockOperationItems.map(
597
554
  (item) => item.quantity
598
555
  )[1]
599
- ? filteredItems[index]?.creatorFamilyName
556
+ ? items[index]?.creatorFamilyName
600
557
  : ""}
601
558
  </StructuredListCell>
602
559
  <StructuredListCell>
603
- {filteredItems[index]?.stockOperationItems.map(
560
+ {items[index]?.stockOperationItems.map(
604
561
  (item) => item.quantity
605
562
  )[1]
606
563
  ? formatDisplayDate(
607
- filteredItems[index]?.completedDate
564
+ items[index]?.completedDate
608
565
  )
609
566
  : ""}
610
567
  &nbsp;
611
- {filteredItems[index]?.stockOperationItems.map(
568
+ {items[index]?.stockOperationItems.map(
612
569
  (item) => item.quantity
613
- )[1] && filteredItems[index]?.completedDate
570
+ )[1] && items[index]?.completedDate
614
571
  ? "By"
615
572
  : ""}
616
573
  &nbsp;
617
- {filteredItems[index]?.stockOperationItems.map(
574
+ {items[index]?.stockOperationItems.map(
618
575
  (item) => item.quantity
619
- )[1] && filteredItems[index]?.completedDate
576
+ )[1] && items[index]?.completedDate
620
577
  ? items[index]?.creatorFamilyName
621
578
  : ""}
622
579
  </StructuredListCell>
623
580
  <StructuredListCell>
624
- {filteredItems[index]?.stockOperationItems
625
- ? filteredItems[
626
- index
627
- ].stockOperationItems?.map(
581
+ {items[index]?.stockOperationItems
582
+ ? items[index].stockOperationItems?.map(
628
583
  (item) => item.batchNo
629
584
  )[1]
630
585
  : ""}
631
586
  </StructuredListCell>
632
587
  <StructuredListCell>
633
- {filteredItems[index]?.stockOperationItems
634
- ? filteredItems[
635
- index
636
- ].stockOperationItems?.map(
588
+ {items[index]?.stockOperationItems
589
+ ? items[index].stockOperationItems?.map(
637
590
  (item) => item.quantity
638
591
  )[1]
639
592
  : ""}
@@ -647,7 +600,7 @@ const StockOperations: React.FC<StockOperationsTableProps> = () => {
647
600
  })}
648
601
  </TableBody>
649
602
  </Table>
650
- {rows.length === 0 ? (
603
+ {rows.length === 0 && !isLoading ? (
651
604
  <div className={styles.tileContainer}>
652
605
  <Tile className={styles.tile}>
653
606
  <div className={styles.tileContent}>
@@ -661,24 +614,31 @@ const StockOperations: React.FC<StockOperationsTableProps> = () => {
661
614
  </Tile>
662
615
  </div>
663
616
  ) : null}
617
+ {filterApplied && isLoading && (
618
+ <div className={styles.rowLoadingContainer}>
619
+ <InlineLoading description={t("loading", "Loading...")} />
620
+ </div>
621
+ )}
664
622
  </TableContainer>
665
623
  )}
666
624
  ></DataTable>
667
- <Pagination
668
- page={currentPage}
669
- pageSize={currentPageSize}
670
- pageSizes={pageSizes}
671
- totalItems={totalItems}
672
- onChange={({ pageSize, page }) => {
673
- if (pageSize !== currentPageSize) {
674
- setPageSize(pageSize);
675
- }
676
- if (page !== currentPage) {
677
- goTo(page);
678
- }
679
- }}
680
- className={styles.paginationOverride}
681
- />
625
+ {items.length > 0 && (
626
+ <Pagination
627
+ page={currentPage}
628
+ pageSize={currentPageSize}
629
+ pageSizes={pageSizes}
630
+ totalItems={totalItems}
631
+ onChange={({ pageSize, page }) => {
632
+ if (pageSize !== currentPageSize) {
633
+ setPageSize(pageSize);
634
+ }
635
+ if (page !== currentPage) {
636
+ goTo(page);
637
+ }
638
+ }}
639
+ className={styles.paginationOverride}
640
+ />
641
+ )}
682
642
  </div>
683
643
  );
684
644
  };
@@ -0,0 +1,61 @@
1
+ @use '@carbon/styles/scss/spacing';
2
+ @use '@carbon/styles/scss/type';
3
+ @import "~@openmrs/esm-styleguide/src/vars";
4
+ @import '../root.scss';
5
+
6
+ .tileContainer {
7
+ background-color: $ui-02;
8
+ border-top: 1px solid $ui-03;
9
+ padding: 5rem 0;
10
+ }
11
+
12
+ .tile {
13
+ margin: auto;
14
+ width: fit-content;
15
+ }
16
+
17
+ .tileContent {
18
+ display: flex;
19
+ flex-direction: column;
20
+ align-items: center;
21
+ }
22
+
23
+ .content {
24
+ @include type.type-style('heading-compact-02');
25
+ color: $text-02;
26
+ margin-bottom: 0.5rem;
27
+ }
28
+
29
+ .helper {
30
+ @include type.type-style('body-compact-01');
31
+ color: $text-02;
32
+ }
33
+
34
+ .toolbarContent {
35
+ display: flex;
36
+ align-items: center;
37
+ }
38
+
39
+ .filterContainer {
40
+ display: flex;
41
+ align-items: center;
42
+ }
43
+
44
+ .dateAlign {
45
+ padding-top: spacing.$spacing-03;
46
+ height: 100%;
47
+ }
48
+
49
+ .filterContainer {
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: space-between;
53
+ margin-bottom: spacing.$spacing-05;
54
+ }
55
+
56
+ .rowLoadingContainer {
57
+ text-align: center;
58
+ padding: 5rem 2rem;
59
+ margin: auto;
60
+ width: 20%;
61
+ }
@@ -7,7 +7,6 @@ import useSWR from "swr";
7
7
  import { ResourceFilterCriteria, toQueryParams } from "../core/api/api";
8
8
  import { PageableResult } from "../core/api/types/PageableResult";
9
9
  import { StockOperationDTO } from "../core/api/types/stockOperation/StockOperationDTO";
10
- import { StockOperationLinkDTO } from "../core/api/types/stockOperation/StockOperationLinkDTO";
11
10
  import { StopOperationAction } from "../core/api/types/stockOperation/StockOperationAction";
12
11
  import { InventoryGroupBy } from "../core/api/types/stockItem/StockItem";
13
12
 
@@ -23,6 +23,7 @@
23
23
  "alertRole": "እርምጃ ሚና",
24
24
  "all": "ሁሉም",
25
25
  "approve": "ተግባር",
26
+ "batch": "ባች ቁጥር",
26
27
  "batchInformation": "የአጠቃላይ መረጃ",
27
28
  "batchJob": "አጠቃላይ ስራ",
28
29
  "batchJobErrorMessage": "የአጠቃላይ ስራ መፍጠር ስህተት",
@@ -33,6 +34,7 @@
33
34
  "by": "በ",
34
35
  "cancel": "ሰርዝ",
35
36
  "cancelled": "ተሰርዝ",
37
+ "category": "ምድብ",
36
38
  "checkFilters": "ላይ ያሉትን ስንስና ይፈትሹ",
37
39
  "childLocations": "የሕፃናት ቦታዎች",
38
40
  "chooseACategory": "አንድ ክፍል ይምረጡ",
@@ -61,6 +63,7 @@
61
63
  "dateCompleted": "ቀን ተጠናቋል",
62
64
  "dateCreated": "ቀን ተፈጠረ",
63
65
  "dateRequested": "ቀን ተጠየቀ",
66
+ "defaultStockOperationsPackagingUnit": "ነባሪ የአክሲዮን ኦፕሬሽኖች ማሸጊያ ክፍል",
64
67
  "defaultStockOperationsUoMName": "በትር ማስገባት",
65
68
  "delete": "አጥፋ",
66
69
  "deleteConfirmationText": "እርስዎ ይህን የተጠቃሚ እንደምን ያጥፋሉ? ይህ እርምጃ አይመለስም።",
@@ -111,14 +114,12 @@
111
114
  "errorDeletingRule": "ህግ ማጥፋት ስህተት",
112
115
  "errorDeletingSource": "ምንጭ ማጥፋት ስህተት",
113
116
  "errorDeletingUserScope": "የተጠቃሚ ወሰን መሰረዝ ላይ ስህተት",
114
- "errorDescription": "",
115
- "errorDescriptionTitle": "በቅጽ መጠቀም ላይ ስህተት",
116
117
  "errorEditingStockItem": "የተመንዝር እቃ ማስተካከያ ስህተት",
117
118
  "errorLoadingStockOperation": "የተመንዝር እቃ ማስገባት ስህተት",
118
119
  "errorSavingBaseOperation": "በመሠረት እንዴት መቆርጣት ስህተት",
119
120
  "errorSavingForm": "ቅጽ መቆርጣት ስህተት",
120
121
  "errorSavingUserRoleScope": "የተጠቃሚ ሚና ድርጊት መቆርጣት ስህተት",
121
- "errorStockMetric": "",
122
+ "errorStockMetric": "Error fetching stock metrics",
122
123
  "errorUploadingItems": "የአክሲዮን ንጥሎችን በመስቀል ላይ ስህተት ተፈጥሯል።",
123
124
  "evaluationFrequency": "የእንቅስቃሴ እንደምን ተግባር (ደቂቀ ደቂቀ)",
124
125
  "expirationNotice": "የመጨረሻ ማስታወቂያ (ቀን)",
@@ -142,11 +143,11 @@
142
143
  "importStockItems": "የተመንዝር እቃዎችን አስመጣ",
143
144
  "in6Months": "በ 6 ወራት ውስጥ",
144
145
  "includeChildLocations": "የልጆች አካባቢዎችን ያካትቱ",
145
- "Inventory Alerts": "የእንቅስቃሴ ማስጠንቀቂያዎች",
146
+ "inventory Alerts": "የእቃ ዝርዝር ማንቂያዎች",
146
147
  "inventoryAlertNull": "የእንቅስቃሴ ማስጠንቀቂያ የለም",
147
148
  "inventoryBy": "እንቅስቃሴ እንደ",
148
149
  "issueStock": "የተመንዝር ማቅረብ",
149
- "Issuing": "እንደምንዝር",
150
+ "issuing": "በማውጣት ላይ",
150
151
  "issuingNull": "የማቅረብ የለም",
151
152
  "item": "እቃ",
152
153
  "itemAlreadyExists": "እቃው ቀድሞ አለ",
@@ -185,6 +186,9 @@
185
186
  "noViewPrivilegesDescription": "ትርጉም አልተሰጠም",
186
187
  "number": "ቁጥር",
187
188
  "operationDate": "የእንቅስቃሴ ቀን",
189
+ "operationModalTitle": "{{title}} ኦፕሬሽን",
190
+ "operationSuccessful": "በተሳካ ሁኔታ አለህ {{title}} ኦፕሬሽን",
191
+ "operationSuccessTitle": "{{title}} ኦፕሬሽን",
188
192
  "orderLevel": "እንደ መዝገብ አስተካክል:",
189
193
  "other": "ሌላ",
190
194
  "outofstock": "የተጠናቀቀ",
@@ -203,30 +207,35 @@
203
207
  "providersAvailableToday": "የተዘገበ እንደምንዝር",
204
208
  "purchasePrice": "የግዢ ዋጋ",
205
209
  "purchasePricePackagingUnit": "የግዢ ዋጋ የጥቅም እቃ:",
206
- "qty": "ብዛት",
207
- "qtyIssued": "ብዛት እንደምንዝር",
208
210
  "quantities": "ብዛቶች",
209
211
  "quantity": "ብዛት ድንጋይ",
212
+ "quantityIssued": "የተሰጠው ብዛት",
213
+ "quantityReceived": "የተቀበለው መጠን",
210
214
  "quantityRequested": "የተጠየቀ ብዛት",
215
+ "quantitySent": "ብዛት ተልኳል።",
211
216
  "quantityUnit": "የብዛት እቃ",
212
- "quantityUom": "ብዛት የእንቅስቃሴ",
217
+ "quantityUoM": "የመለኪያ ብዛት (UoM)",
213
218
  "rank": "እኩል",
214
219
  "reason": "ምክንያት",
215
220
  "reasonLabel": "እቅድ ያስረዱኝ:",
216
221
  "reasonPlaceholder": "ምክንያት እዚህ ግብዣ",
222
+ "receivedItems": "የተቀበሉት እቃዎች",
217
223
  "receivedNull": "የተቀበለ የለም",
218
224
  "receivedView": "ሁሉንም ይያዙ",
219
- "Receiving": "እንደምንዝር",
225
+ "receiving": "መቀበል",
220
226
  "references": "እቅድ",
221
227
  "reject": "ድርስ",
222
228
  "rejected": "ተከስቷል",
223
229
  "rejectOrder": "የማድረግ ትእዛዝ",
230
+ "remarks": "አስተያየቶች",
224
231
  "removePackagingUnit": "የጥቅም እቃን አስወግድ",
225
232
  "removePackagingUnitConfirmation": "እቅድ አስወግድ",
226
233
  "reorderLevel": "እንደ ተደርጓል",
234
+ "reorderLevelPackagingUnit": "የማሸጊያ ክፍልን እንደገና ይዘዙ",
227
235
  "report": "ሪፖርት",
228
236
  "ReportDescription": "ተጠየቁት ሪፖርቶች ዝርዝር",
229
237
  "reportName": "ሪፖርት",
238
+ "requested": "ተጠይቋል",
230
239
  "requestedBy": "በሚጠየቁት",
231
240
  "responsiblePerson": "የተጠቃሚ ሰው",
232
241
  "return": "እንደምንዝር",
@@ -259,6 +268,8 @@
259
268
  "stockOperation": "የተመንዝር እንቅስቃሴ",
260
269
  "stockOperationAdded": "የተመንዝር እንቅስቃሴ በተሳካ ሁኔታ ተጨምሯል",
261
270
  "stockOperationEdited": "የተመንዝር እንቅስቃሴ በተሳካ ሁኔታ ተለዋዋጭነት ሰጠ",
271
+ "stockOperationErrorDescription": "ዝርዝሮች፡ {{message}}",
272
+ "stockOperationErrorTitle": "ቅጽ በማስቀመጥ ላይ ስህተት",
262
273
  "stockOperations": "የተመንዝር እንቅስቃሴዎች",
263
274
  "stockOperationTrackMovement": "የአክሲዮን እንቅስቃሴን ለመከታተል የአክሲዮን ክንዋኔዎች።",
264
275
  "stockRuleAddedSuccessfully": "የአክሲዮን ደንብ በተሳካ ሁኔታ ታክሏል።",
@@ -272,10 +283,8 @@
272
283
  "submitted": "ተጠይቷል",
273
284
  "successfullysaved": "የተጠቃሚ ሚና አካባቢ በተሳካ ሁኔታ ተስተካክሏል",
274
285
  "SuccessfullyUploadedStockItem": "የአክሲዮን ንጥሎችን በተሳካ ሁኔታ ሰቅለዋል።",
275
- "successMessage": "ተጠቃሚ ሚና እንደምንዝር",
276
286
  "tabletOverlay": "ታብሌት አውርስ",
277
287
  "tags": "ታጣቂዎች",
278
- "title": "ርዕስ",
279
288
  "toggleMessage": "ይህንን አስተዋውቅ በተመረጡት ቦታ ላይ ይጠቀሙ።",
280
289
  "tradeName": "የንግድ ስም",
281
290
  "transactions": "ግብይቶች",