Skip to content

Commit

Permalink
Merge pull request #52 from OpenLMIS/OLMIS-7987
Browse files Browse the repository at this point in the history
OLMIS-7987: Move Submit Requisitionless Orders functionalities from Angola to Core instance
  • Loading branch information
DominikNoga authored Oct 9, 2024
2 parents 131bf10 + 3163a6b commit bf4c23d
Show file tree
Hide file tree
Showing 13 changed files with 837 additions and 458 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
7.0.13-SNAPSHOT / WIP
==================
New functionalities that are backwards-compatible:
* [OLMIS-7987](https://openlmis.atlassian.net/browse/OLMIS-7987): Move Submit Requisitionless Orders functionalities from Angola to Core instance

Bug fixes:
* [OLMIS-7992](https://openlmis.atlassian.net/browse/OLMIS-7992): Fix passing parameter to hasRoleWithRightForProgramAndSupervisoryNode function
Expand Down
37 changes: 34 additions & 3 deletions src/requisition-order-create/messages_en.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,39 @@
{
"requisition.orderCreate": "Create Order",
"requisition.orderCreate.submitted": "Order created successfully",
"requisition.orderCreate": "Create Orders",
"requisition.orderCreate.cancel": "Cancel",
"requisition.orderCreate.loading": "Loading",
"requisition.orderCreate.view": "View",
"requisition.orderCreate.printOrder": "Print Order",
"requisition.orderCreate.edit": "Edit",
"requisition.orderCreate.create": "Create Order",
"requisition.orderCreate.saveDraft": "Save Draft",
"requisition.orderCreate.submitted": "Orders created successfully",
"requisition.orderCreate.createdOrderSent.success": "Offline created order sent successfully.",
"requisition.orderCreate.createdOrderSent.error": "Error occurred while sending offline created order.",
"requisition.orderCreate.draftUpdate.success": "Draft order update success.",
"requisition.orderCreate.draftUpdate.error": "Error occurred while updating draft order."
"requisition.orderCreate.draftUpdate.error": "Error occurred while updating draft order.",
"requisition.orderCreate.delete": "Delete",
"requisition.orderCreate.deleteBatch": "Delete Batch",
"requisition.orderCreate.delete.prompt": "Are you sure you want to delete this order?",
"requisition.orderCreate.delete.prompt.batch": "Are you sure you want to delete available orders?",
"requisition.orderCreate.delete.error": "Error occurred while deleting order(s).",
"requisition.orderCreate.delete.success": "Order(s) deleted successfully.",
"requisition.orderCreate.program": "Program",
"requisition.orderCreate.program.placeholder": "Select Program",
"requisition.orderCreate.reqFacility": "Requesting Facility",
"requisition.orderCreate.reqFacility.placeholder": "Select Requesting Facility",
"requisition.orderCreate.supFacility": "Supplying Facility",
"requisition.orderCreate.supFacility.placeholder": "Select Supplying Facility",
"requisition.orderCreate.table.productCode": "Product Code",
"requisition.orderCreate.table.product": "Product",
"requisition.orderCreate.table.soh": "SOH",
"requisition.orderCreate.table.quantity": "Quantity",
"requisition.orderCreate.table.actions": "Actions",
"requisition.orderCreate.table.facility": "Facility",
"requisition.orderCreate.table.addProduct": "Add",
"requisition.orderCreate.table.productAlreadyAdded": "This product was already added to the table",
"requisition.orderCreate.requisistionInfo.status": "Status",
"requisition.orderCreate.requisistionInfo.dateCreated": "Date Created",
"requisition.orderCreate.searchSelect.placeholder": "Select an option",
"requisition.orderCreate.searchSelect.empty.message": "Not found"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
export const getMappedRequestingFacilities = (facilities, userId, selectedProgram, selectedSupplyingFacility) => {
return facilities.map((facilityId) => ({
emergency: true,
createdBy: { id: userId },
program: { id: selectedProgram },
requestingFacility: { id: facilityId },
receivingFacility: { id: facilityId },
supplyingFacility: { id: selectedSupplyingFacility },
facility: { id: facilityId }
}));
};

export const goToOrderEdit = (orders, orderService, history) => {
const orderCreationPromises = orders.map(order => orderService.create(order));
Promise.all(orderCreationPromises).then((createdOrders) => {
const ordersIds = createdOrders.map(order => order.id).join(',');
history.push(`/requisitions/orderCreate/${ordersIds}`);
});
};

const getSupervisoryNodes = (selectedRequestingFacilities, selectedProgram, supervisoryNodeResource) => {
const supervisoryNodeResourcePromisses = selectedRequestingFacilities.map(facilityId => supervisoryNodeResource.query({
programId: selectedProgram,
facilityId: facilityId
}));

return Promise.all(supervisoryNodeResourcePromisses);
}

const assignNodeToArray = (acc, obj, mappedPages) => {
if (!acc.some(existingObj => existingObj.id === obj.id)) {
if (mappedPages.every(page => page.some(item => item.id === obj.id))) {
acc.push(obj);
}
}
};

const getNodesValue = (pages) => {
const mappedPages = pages.map(page => page.content);
const nodes = mappedPages.reduce((acc, arr) => {
arr.forEach(obj => {
assignNodeToArray(acc, obj, mappedPages);
});
return acc;
}, []);
return nodes;
}

const getSupplyLines = (nodes, supplyLineResource, selectedProgram) => {
return Promise.all(nodes.map((node) => (
supplyLineResource.query({
programId: selectedProgram,
supervisoryNodeId: node.id
})
)))
}

const setSupplyingFacilities = (supplyLinesResources, facilityService, setSupplyingFacilityOptions) => {
const supplyLines = _.flatten(supplyLinesResources.map((it) => (it.content)));
const facilityIds = _.uniq(supplyLines.map((it) => (it.supplyingFacility.id)));

if (facilityIds.length > 0) {
facilityService.query({
id: facilityIds
})
.then((resp) => {
const facilities = resp.content;
setSupplyingFacilityOptions(facilities.map(facility => ({ name: facility.name, value: facility.id })));
});
} else {
setSupplyingFacilityOptions([]);
}
}

export const updateSupplyingFacilitiesValue = (selectedProgram, selectedRequestingFacilities, supervisoryNodeResource, supplyLineResource, facilityService, setSupplyingFacilityOptions) => {
if (selectedProgram && selectedRequestingFacilities) {
getSupervisoryNodes(selectedRequestingFacilities, selectedProgram, supervisoryNodeResource)
.then((pages) => {
const nodes = getNodesValue(pages);

if (nodes.length > 0) {
getSupplyLines(nodes, supplyLineResource, selectedProgram)
.then((supplyLinesResources) => {
setSupplyingFacilities(supplyLinesResources, facilityService, setSupplyingFacilityOptions);
});
} else {
setSupplyingFacilityOptions([]);
}
});
} else {
setSupplyingFacilityOptions([]);
}
}
Loading

0 comments on commit bf4c23d

Please sign in to comment.