From dcfc428c33d866cdd4f2220a7c4d0dc6b0f9089d Mon Sep 17 00:00:00 2001 From: ajinkya8010 Date: Wed, 9 Jul 2025 23:58:36 +0530 Subject: [PATCH] Prevent duplicate data upload for encounter types without ID column --- src/upload/UploadDashboard.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/upload/UploadDashboard.js b/src/upload/UploadDashboard.js index 9ddd482f2..b1e41c468 100644 --- a/src/upload/UploadDashboard.js +++ b/src/upload/UploadDashboard.js @@ -70,6 +70,27 @@ class ReviewStatus { const isMetadataDiffReviewEnabled = true; +const uploadTypesThatRequireId = [ + "Child Test new update registration", + "Pulse Polio enrolment", + "Regular Assessment Encounter", + "Updated type registration" +]; + +function getCSVHeaders(file) { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = event => { + const text = event.target.result; + const lines = text.split("\n"); + const headers = lines[0].split(",").map(h => h.trim().replace(/"/g, "")); + resolve(headers); + }; + reader.onerror = reject; + reader.readAsText(file); + }); +} + const UploadDashboard = ({ getStatuses, getUploadTypes, uploadTypes = new UploadTypes(), userRoles }) => { const classes = useStyles(); @@ -123,6 +144,15 @@ const UploadDashboard = ({ getStatuses, getUploadTypes, uploadTypes = new Upload const handleUploadFile = useCallback(async () => { try { + if (uploadTypesThatRequireId.includes(uploadType)) { + const headers = await getCSVHeaders(file); + const requiredColumn = "Id from previous system"; + if (!headers.includes(requiredColumn)) { + alert(`The uploaded file must contain the "${requiredColumn}" column to prevent duplication.`); + return; + } + } + const locationUploadModeValue = uploadType === UPLOAD_TYPES.LOCATIONS ? locationUploadMode : ""; const encounterUploadModeValue = isEncounterType(uploadType) ? encounterUploadMode : ""; const [ok, error] = await api.bulkUpload(