@openmrs/esm-stock-management-app 1.0.1-pre.510 → 1.0.1-pre.515

Sign up to get free protection for your applications and to get access to all the features.
@@ -85,9 +85,9 @@
85
85
  "initial": false,
86
86
  "entry": false,
87
87
  "recorded": false,
88
- "size": 1733627,
88
+ "size": 1739598,
89
89
  "sizes": {
90
- "javascript": 1733417,
90
+ "javascript": 1739388,
91
91
  "consume-shared": 210
92
92
  },
93
93
  "names": [],
@@ -101,7 +101,7 @@
101
101
  "auxiliaryFiles": [
102
102
  "157.js.map"
103
103
  ],
104
- "hash": "2bdfef68656abb81",
104
+ "hash": "9436c8267fdd9e7a",
105
105
  "childrenByOrder": {}
106
106
  },
107
107
  {
@@ -109,10 +109,10 @@
109
109
  "initial": true,
110
110
  "entry": true,
111
111
  "recorded": false,
112
- "size": 5402054,
112
+ "size": 5408025,
113
113
  "sizes": {
114
114
  "consume-shared": 252,
115
- "javascript": 5380104,
115
+ "javascript": 5386075,
116
116
  "share-init": 252,
117
117
  "runtime": 21446
118
118
  },
@@ -129,7 +129,7 @@
129
129
  "auxiliaryFiles": [
130
130
  "main.js.map"
131
131
  ],
132
- "hash": "ce8d6a466f812c73",
132
+ "hash": "bf2614b80366728b",
133
133
  "childrenByOrder": {}
134
134
  },
135
135
  {
package/dist/routes.json CHANGED
@@ -1 +1 @@
1
- {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":">=1.2","webservices.rest":"^2.24.0"},"extensions":[{"name":"stock-nav-menu","slot":"stock-sidebar-slot","component":"stockNavMenu","online":true,"offline":true},{"name":"overview-db-link","slot":"stock-page-dashboard-slot","component":"stockOverviewLink","meta":{"name":"overview","slot":"overview-dashboard-slot","title":"overview"},"order":0,"online":true,"offline":true},{"name":"stock-overview-db","slot":"overview-dashboard-slot","component":"stockOverview"},{"name":"operations-db-link","slot":"stock-page-dashboard-slot","component":"stockOperationsLink","meta":{"name":"operations","slot":"operations-dashboard-slot","title":"operations"},"order":2,"online":true,"offline":true},{"name":"stock-operations-db","slot":"operations-dashboard-slot","component":"stockOperations"},{"name":"items-db-link","slot":"stock-page-dashboard-slot","component":"stockItemsLink","meta":{"name":"items","slot":"items-dashboard-slot","title":"items"},"order":1,"online":true,"offline":true},{"name":"stock-items-db","slot":"items-dashboard-slot","component":"stockItems"},{"name":"user-scopes-db-link","slot":"stock-page-dashboard-slot","component":"stockUserScopesLink","meta":{"name":"user-scopes","slot":"user-scopes-dashboard-slot","title":"user-scopes"},"order":3,"online":true,"offline":true},{"name":"stock-user-scopes-db","slot":"user-scopes-dashboard-slot","component":"stockUserScopes"},{"name":"sources-db-link","slot":"stock-page-dashboard-slot","component":"stockSourcesLink","meta":{"name":"sources","slot":"sources-dashboard-slot","title":"Sources"},"order":2,"online":true,"offline":true},{"name":"stock-sources-db","slot":"sources-dashboard-slot","component":"stockSources"},{"name":"locations-db-link","slot":"stock-page-dashboard-slot","component":"stockLocationsLink","meta":{"name":"locations","slot":"locations-dashboard-slot","title":"Locations"},"order":4,"online":true,"offline":true},{"name":"stock-locations-db","slot":"locations-dashboard-slot","component":"stockLocations"},{"name":"reports-db-link","slot":"stock-page-dashboard-slot","component":"stockReportsLink","meta":{"name":"reports","slot":"reports-dashboard-slot","title":"Reports"},"order":5,"online":true,"offline":true},{"name":"stock-reports-db","slot":"reports-dashboard-slot","component":"stockReports"},{"name":"settings-db-link","slot":"stock-page-dashboard-slot","component":"stockSettingsLink","meta":{"name":"settings","slot":"settings-dashboard-slot","title":"Settings"},"order":6,"online":true,"offline":true},{"name":"stock-settings-db","slot":"settings-dashboard-slot","component":"stockSettings"},{"name":"stock-management-admin-card-link","slot":"system-admin-page-card-link-slot","component":"stockManagementAdminCardLink"},{"name":"stock-operation-dialog","component":"stockOperationDialog"},{"name":"import-bulk-stock-items","component":"importBulkStockItemsDialog"},{"name":"delete-stock-modal","component":"deleteStockModal"},{"name":"delete-stock-user-scope-modal","component":"deleteUserScopeModal"},{"name":"stock-management-app-menu-item","component":"stockManagementAppMenuItem","slot":"app-menu-item-slot","meta":{"name":" Stock Management"}},{"name":"delete-stock-rule-modal","component":"deleteStockRuleModal"},{"name":"delete-packaging-unit-modal","component":"deletePackagingUnitModal"},{"name":"delete-packaging-unit-button","component":"deletePackagingUnitButton"}],"pages":[{"component":"root","route":"stock-management"}],"version":"1.0.1-pre.510"}
1
+ {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":">=1.2","webservices.rest":"^2.24.0"},"extensions":[{"name":"stock-nav-menu","slot":"stock-sidebar-slot","component":"stockNavMenu","online":true,"offline":true},{"name":"overview-db-link","slot":"stock-page-dashboard-slot","component":"stockOverviewLink","meta":{"name":"overview","slot":"overview-dashboard-slot","title":"overview"},"order":0,"online":true,"offline":true},{"name":"stock-overview-db","slot":"overview-dashboard-slot","component":"stockOverview"},{"name":"operations-db-link","slot":"stock-page-dashboard-slot","component":"stockOperationsLink","meta":{"name":"operations","slot":"operations-dashboard-slot","title":"operations"},"order":2,"online":true,"offline":true},{"name":"stock-operations-db","slot":"operations-dashboard-slot","component":"stockOperations"},{"name":"items-db-link","slot":"stock-page-dashboard-slot","component":"stockItemsLink","meta":{"name":"items","slot":"items-dashboard-slot","title":"items"},"order":1,"online":true,"offline":true},{"name":"stock-items-db","slot":"items-dashboard-slot","component":"stockItems"},{"name":"user-scopes-db-link","slot":"stock-page-dashboard-slot","component":"stockUserScopesLink","meta":{"name":"user-scopes","slot":"user-scopes-dashboard-slot","title":"user-scopes"},"order":3,"online":true,"offline":true},{"name":"stock-user-scopes-db","slot":"user-scopes-dashboard-slot","component":"stockUserScopes"},{"name":"sources-db-link","slot":"stock-page-dashboard-slot","component":"stockSourcesLink","meta":{"name":"sources","slot":"sources-dashboard-slot","title":"Sources"},"order":2,"online":true,"offline":true},{"name":"stock-sources-db","slot":"sources-dashboard-slot","component":"stockSources"},{"name":"locations-db-link","slot":"stock-page-dashboard-slot","component":"stockLocationsLink","meta":{"name":"locations","slot":"locations-dashboard-slot","title":"Locations"},"order":4,"online":true,"offline":true},{"name":"stock-locations-db","slot":"locations-dashboard-slot","component":"stockLocations"},{"name":"reports-db-link","slot":"stock-page-dashboard-slot","component":"stockReportsLink","meta":{"name":"reports","slot":"reports-dashboard-slot","title":"Reports"},"order":5,"online":true,"offline":true},{"name":"stock-reports-db","slot":"reports-dashboard-slot","component":"stockReports"},{"name":"settings-db-link","slot":"stock-page-dashboard-slot","component":"stockSettingsLink","meta":{"name":"settings","slot":"settings-dashboard-slot","title":"Settings"},"order":6,"online":true,"offline":true},{"name":"stock-settings-db","slot":"settings-dashboard-slot","component":"stockSettings"},{"name":"stock-management-admin-card-link","slot":"system-admin-page-card-link-slot","component":"stockManagementAdminCardLink"},{"name":"stock-operation-dialog","component":"stockOperationDialog"},{"name":"import-bulk-stock-items","component":"importBulkStockItemsDialog"},{"name":"delete-stock-modal","component":"deleteStockModal"},{"name":"delete-stock-user-scope-modal","component":"deleteUserScopeModal"},{"name":"stock-management-app-menu-item","component":"stockManagementAppMenuItem","slot":"app-menu-item-slot","meta":{"name":" Stock Management"}},{"name":"delete-stock-rule-modal","component":"deleteStockRuleModal"},{"name":"delete-packaging-unit-modal","component":"deletePackagingUnitModal"},{"name":"delete-packaging-unit-button","component":"deletePackagingUnitButton"}],"pages":[{"component":"root","route":"stock-management"}],"version":"1.0.1-pre.515"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openmrs/esm-stock-management-app",
3
- "version": "1.0.1-pre.510",
3
+ "version": "1.0.1-pre.515",
4
4
  "license": "MPL-2.0",
5
5
  "description": "Stock management microfrontend for OpenMRS 3.x",
6
6
  "browser": "dist/openmrs-esm-stock-management-app.js",
@@ -28,18 +28,59 @@ import {
28
28
  OperationType,
29
29
  StockOperationTypeIsStockIssue,
30
30
  StockOperationType,
31
+ StockOperationTypeCanBeRelatedToRequisition,
32
+ operationFromString,
31
33
  } from "../../core/api/types/stockOperation/StockOperationType";
32
- import { operationStatusColor } from "../stock-operations.resource";
34
+ import {
35
+ getStockOperationLinks,
36
+ operationStatusColor,
37
+ } from "../stock-operations.resource";
33
38
  import styles from "./add-stock-operation.scss";
39
+ import { useStockOperationTypes } from "../../stock-lookups/stock-lookups.resource";
40
+ import { StockOperationLinkDTO } from "../../core/api/types/stockOperation/StockOperationLinkDTO";
34
41
 
35
42
  const AddStockOperation: React.FC<AddStockOperationProps> = (props) => {
36
43
  const { t } = useTranslation();
37
44
  const { isEditing, canEdit, canPrint } = props;
38
45
  const { isLoading, isError, result } = useInitializeStockOperations(props);
46
+ const [operationLinks, setOperationLinks] =
47
+ useState<StockOperationLinkDTO[]>();
39
48
  const [manageStockItems, setManageStockItems] = useState(props?.isEditing);
49
+ const { types } = useStockOperationTypes();
50
+ const [requisition, setRequisition] = useState(props?.model?.uuid);
40
51
  const [manageSubmitOrComplete, setManageSubmitOrComplete] = useState(
41
52
  props?.isEditing
42
53
  );
54
+
55
+ const currentStockOperationType = types?.results?.find(
56
+ (p) => p.operationType === props.model?.operationType
57
+ );
58
+
59
+ useEffect(() => {
60
+ if (
61
+ currentStockOperationType?.operationType ===
62
+ OperationType.REQUISITION_OPERATION_TYPE ||
63
+ props.model?.operationType === OperationType.REQUISITION_OPERATION_TYPE
64
+ ) {
65
+ setRequisition(props.model?.uuid);
66
+ }
67
+ }, [currentStockOperationType, props.model?.operationType]);
68
+
69
+ useEffect(() => {
70
+ if (
71
+ isEditing ||
72
+ StockOperationTypeCanBeRelatedToRequisition(
73
+ operationFromString(currentStockOperationType?.name.toLowerCase())
74
+ ) ||
75
+ OperationType.REQUISITION_OPERATION_TYPE ===
76
+ currentStockOperationType?.operationType
77
+ ) {
78
+ getStockOperationLinks(requisition).then((resp) => {
79
+ setOperationLinks(resp.data?.results);
80
+ });
81
+ }
82
+ }, [currentStockOperationType, requisition, props.model?.uuid]);
83
+
43
84
  const [selectedIndex, setSelectedIndex] = useState(0);
44
85
  const [canReceiveItems, setCanReceiveItems] = useState(false);
45
86
 
@@ -506,6 +547,62 @@ const AddStockOperation: React.FC<AddStockOperationProps> = (props) => {
506
547
  )}
507
548
  </div>
508
549
  )}
550
+ {operationLinks && operationLinks?.length > 0 && (
551
+ <div style={{ margin: "10px" }}>
552
+ <h6 style={{ color: "#24a148" }}>Related Transactions:</h6>
553
+ {operationLinks.map(
554
+ (item) =>
555
+ (props.model?.uuid === item?.parentUuid ||
556
+ currentStockOperationType.uuid === item?.parentUuid) && (
557
+ <>
558
+ <span>{item?.childOperationTypeName}</span>
559
+ <span className={item?.childVoided ? "voided" : ""}>
560
+ <span> </span>
561
+ {item?.childVoided && item?.childOperationNumber}
562
+ {!item?.childVoided && (
563
+ <span
564
+ style={{
565
+ marginLeft: "2px",
566
+ color: "#0f62fe",
567
+ }}
568
+ >
569
+ {item?.childOperationNumber}
570
+ </span>
571
+ )}
572
+ </span>
573
+ <span> </span>
574
+ <span>[{item?.childStatus}]</span>
575
+ </>
576
+ )
577
+ )}
578
+ <span> </span>
579
+ {operationLinks.map(
580
+ (item) =>
581
+ (props.model?.uuid === item?.childUuid ||
582
+ currentStockOperationType.uuid === item?.childUuid) && (
583
+ <>
584
+ <span>{item?.parentOperationTypeName}</span>
585
+ <span className={item?.parentVoided ? "voided" : ""}>
586
+ <span> </span>
587
+ {item?.parentVoided && item?.parentOperationNumber}
588
+ {!item?.parentVoided && (
589
+ <span
590
+ style={{
591
+ marginLeft: "2px",
592
+ color: "#0f62fe",
593
+ }}
594
+ >
595
+ {item?.parentOperationNumber}
596
+ </span>
597
+ )}
598
+ </span>
599
+ <span> </span>
600
+ <span>[{item?.parentStatus}]</span>
601
+ </>
602
+ )
603
+ )}
604
+ </div>
605
+ )}
509
606
 
510
607
  <StockOperation>
511
608
  <VerticalTabs
@@ -57,14 +57,7 @@ const EditStockOperationActionMenu: React.FC<
57
57
  iconDescription={"View"}
58
58
  kind="ghost"
59
59
  onClick={() => {
60
- launchAddOrEditDialog(
61
- t,
62
- model ?? operation,
63
- true,
64
- type,
65
- operations,
66
- false
67
- );
60
+ launchAddOrEditDialog(t, model ?? operation, true, type, operations);
68
61
  }}
69
62
  >
70
63
  {operationNumber ? operationNumber : `${model?.operationNumber}`}
@@ -27,7 +27,8 @@ export const addOrEditStockOperation = async (
27
27
  isEditing: boolean,
28
28
  operation?: StockOperationType,
29
29
  operations?: StockOperationType[],
30
- canPrint?: boolean
30
+ canPrint?: boolean,
31
+ printEnabled?: boolean
31
32
  ) => {
32
33
  const payload = stockOperation;
33
34
  try {
@@ -83,6 +84,9 @@ export const launchAddOrEditDialog = (
83
84
  operations?: StockOperationType[],
84
85
  canPrint?: boolean
85
86
  ) => {
87
+ const printEnabled =
88
+ canPrint !== undefined ? canPrint : stockOperation?.status === "COMPLETED";
89
+
86
90
  launchOverlay(
87
91
  isEditing
88
92
  ? t("editOperationTitle", "Edit {{operationType}}", {
@@ -100,7 +104,8 @@ export const launchAddOrEditDialog = (
100
104
  isEditing,
101
105
  operation,
102
106
  operations,
103
- canPrint
107
+ canPrint,
108
+ printEnabled
104
109
  )
105
110
  }
106
111
  isEditing={isEditing}
@@ -108,6 +113,7 @@ export const launchAddOrEditDialog = (
108
113
  canEdit={
109
114
  isEditing ? (stockOperation?.status === "NEW" ? true : false) : true
110
115
  }
116
+ canPrint={printEnabled}
111
117
  />
112
118
  );
113
119
  };
@@ -54,17 +54,17 @@ export function useStockOperations(filter: StockOperationFilter) {
54
54
  }
55
55
 
56
56
  // getStockOperationLinks
57
- export function useStockOperationLinks(filter: string) {
57
+ export function getStockOperationLinks(filter: string) {
58
58
  const apiUrl = `${restBaseUrl}/stockmanagement/stockoperationlink?v=default&q=${filter}`;
59
- const { data, error, isLoading } = useSWR<
60
- { data: PageableResult<StockOperationLinkDTO> },
61
- Error
62
- >(apiUrl, openmrsFetch);
63
- return {
64
- items: data.data ? data.data : [],
65
- isLoading,
66
- isError: error,
67
- };
59
+ const abortController = new AbortController();
60
+
61
+ return openmrsFetch(apiUrl, {
62
+ method: "GET",
63
+ headers: {
64
+ "Content-Type": "application/json",
65
+ },
66
+ signal: abortController.signal,
67
+ });
68
68
  }
69
69
 
70
70
  // getStockOperation