From a2c0dbefc3117aa19574e2abfafee15e98d50be6 Mon Sep 17 00:00:00 2001 From: Aysel Afsar Date: Wed, 16 Mar 2016 21:23:48 -0400 Subject: [PATCH] - Return modalities attribute by merging modality and modalitiesInStudy attributes to be able to filter if only modality tag exists - Remove modality tag in filter object and filter modalities of studies returned from WorklistSearch method --- Packages/dicomweb/package.js | 1 + Packages/dicomweb/server/getModalities.js | 21 ++++++++++++++++ .../server/services/dimse/studies.js | 2 +- .../server/services/qido/studies.js | 8 +++--- .../worklistResult/worklistResult.js | 25 ++++++++++++++++--- 5 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 Packages/dicomweb/server/getModalities.js diff --git a/Packages/dicomweb/package.js b/Packages/dicomweb/package.js index b52ab9943..e59ea1f99 100644 --- a/Packages/dicomweb/package.js +++ b/Packages/dicomweb/package.js @@ -13,6 +13,7 @@ Package.onUse(function(api) { api.addFiles('server/getName.js', 'server'); api.addFiles('server/getNumber.js', 'server'); api.addFiles('server/getString.js', 'server'); + api.addFiles('server/getModalities.js', 'server'); api.export('DICOMWeb', ['client', 'server']); }); diff --git a/Packages/dicomweb/server/getModalities.js b/Packages/dicomweb/server/getModalities.js new file mode 100644 index 000000000..672c7da7d --- /dev/null +++ b/Packages/dicomweb/server/getModalities.js @@ -0,0 +1,21 @@ +DICOMWeb.getModalities = function(modality, modalitiesInStudy) { + var modalities = {}; + if (modality) { + modalities = modality; + } + + if (modalitiesInStudy) { + // Find vr in modalities + if (modalities.vr && modalities.vr === modalitiesInStudy.vr) { + for (var i = 0; i < modalitiesInStudy.Value.length; i++) { + var value = modalitiesInStudy.Value[i]; + if (modalities.Value.indexOf(value) === -1) { + modalities.Value.push(value); + } + } + } else { + modalities = modalitiesInStudy; + } + } + return modalities; +}; diff --git a/Packages/viewerbase/server/services/dimse/studies.js b/Packages/viewerbase/server/services/dimse/studies.js index eea74e9a9..4ebb3d204 100755 --- a/Packages/viewerbase/server/services/dimse/studies.js +++ b/Packages/viewerbase/server/services/dimse/studies.js @@ -40,7 +40,7 @@ Services.DIMSE.Studies = function(filter) { 0x00081030: filter.studyDescription, 0x00100040: "", 0x00201208: "", - 0x00080061: filter.modality + 0x00080061: "" }; var results = DIMSE.retrieveStudies(parameters); diff --git a/Packages/viewerbase/server/services/qido/studies.js b/Packages/viewerbase/server/services/qido/studies.js index f67f38858..b00bc7dac 100644 --- a/Packages/viewerbase/server/services/qido/studies.js +++ b/Packages/viewerbase/server/services/qido/studies.js @@ -8,7 +8,8 @@ */ function filterToQIDOURL(server, filter) { var commaSeparatedFields = [ - '00081030' // Study Description + '00081030', // Study Description + '00080060' //Modality // Add more fields here if you want them in the Study List ].join(','); @@ -17,7 +18,6 @@ function filterToQIDOURL(server, filter) { PatientID: filter.patientId, AccessionNumber: filter.accessionNumber, StudyDescription: filter.studyDescription, - ModalitiesInStudy: filter.modality, limit: filter.limit || 20, includefield: server.qidoSupportsIncludeField ? 'all' : commaSeparatedFields }; @@ -50,7 +50,9 @@ function resultDataToStudies(resultData) { numberOfStudyRelatedSeries: DICOMWeb.getString(study['00201206']), numberOfStudyRelatedInstances: DICOMWeb.getString(study['00201208']), studyDescription: DICOMWeb.getString(study['00081030']), - modalities: DICOMWeb.getString(study['00080061']) + // modality: DICOMWeb.getString(study['00080060']), + // modalitiesInStudy: DICOMWeb.getString(study['00080061']), + modalities: DICOMWeb.getString(DICOMWeb.getModalities(study['00080060'], study['00080061'])) }); }); return studies; diff --git a/Packages/worklist/client/components/worklistResult/worklistResult.js b/Packages/worklist/client/components/worklistResult/worklistResult.js index ad68ce1a2..873b83ac7 100644 --- a/Packages/worklist/client/components/worklistResult/worklistResult.js +++ b/Packages/worklist/client/components/worklistResult/worklistResult.js @@ -71,6 +71,20 @@ function isIndexOf(mainVal, searchVal) { return false; } +/** + * Replace object if undefined + */ +function replaceUndefinedColumnValue(text) { + if (text === undefined || text === 'undefined') { + return ''; + } else { + return text.toUpperCase(); + } +} + +/** + + /** * Convert string to study date */ @@ -98,10 +112,13 @@ function search() { patientName: getFilter($('input#patientName').val()), patientId: getFilter($('input#patientId').val()), accessionNumber: getFilter($('input#accessionNumber').val()), - studyDescription: getFilter($('input#studyDescription').val()), - modality: getFilter($('input#modality').val()) + studyDescription: getFilter($('input#studyDescription').val()) }; + // Make sure that modality has a reasonable value, since it is occasionally + // returned as 'undefined' + var modality = replaceUndefinedColumnValue($('input#modality').val()); + // Clear all current studies WorklistStudies.remove({}); @@ -121,9 +138,9 @@ function search() { // Loop through all identified studies studies.forEach(function(study) { - // Search the rest of the parameters that aren't done via the server call - if ((new Date(studyDateFrom).setHours(0, 0, 0, 0) <= convertStringToStudyDate(study.studyDate) || !studyDateFrom || studyDateFrom === "") && + if (isIndexOf(study.modalities, modality) && + (new Date(studyDateFrom).setHours(0, 0, 0, 0) <= convertStringToStudyDate(study.studyDate) || !studyDateFrom || studyDateFrom === "") && (convertStringToStudyDate(study.studyDate) <= new Date(studyDateTo).setHours(0, 0, 0, 0) || !studyDateTo || studyDateTo === "")) { // Convert numberOfStudyRelatedInstance string into integer