From e354c6c577f515a6f8479f227f0aaa9ddce025bf Mon Sep 17 00:00:00 2001 From: Erik Ziegler Date: Sun, 14 Feb 2016 15:13:08 +0100 Subject: [PATCH] Steps toward converting targets to non-targets --- .../lesionLocationDialog.html | 1 + .../lesionLocationDialog.js | 8 ++ .../lesiontracker/lib/convertToNonTarget.js | 86 +++++++++++++++++++ Packages/lesiontracker/package.js | 2 + 4 files changed, 97 insertions(+) create mode 100644 Packages/lesiontracker/lib/convertToNonTarget.js diff --git a/Packages/lesiontracker/client/components/lesionLocationDialog/lesionLocationDialog.html b/Packages/lesiontracker/client/components/lesionLocationDialog/lesionLocationDialog.html index c4288714a..32de9ec10 100644 --- a/Packages/lesiontracker/client/components/lesionLocationDialog/lesionLocationDialog.html +++ b/Packages/lesiontracker/client/components/lesionLocationDialog/lesionLocationDialog.html @@ -32,6 +32,7 @@ + \ No newline at end of file diff --git a/Packages/lesiontracker/client/components/lesionLocationDialog/lesionLocationDialog.js b/Packages/lesiontracker/client/components/lesionLocationDialog/lesionLocationDialog.js index 5a1058972..1e0789eab 100644 --- a/Packages/lesiontracker/client/components/lesionLocationDialog/lesionLocationDialog.js +++ b/Packages/lesiontracker/client/components/lesionLocationDialog/lesionLocationDialog.js @@ -258,6 +258,14 @@ Template.lesionLocationDialog.events({ closeHandler(dialog); }, + 'click #convertToNonTarget': function() { + var measurementData = Template.lesionLocationDialog.measurementData; + var dialog = Template.lesionLocationDialog.dialog; + + convertToNonTarget(measurementData); + + closeHandler(dialog); + }, 'click #btnCloseLesionPopup': function() { var dialog = Template.lesionLocationDialog.dialog; closeHandler(dialog); diff --git a/Packages/lesiontracker/lib/convertToNonTarget.js b/Packages/lesiontracker/lib/convertToNonTarget.js new file mode 100644 index 000000000..4d574e8be --- /dev/null +++ b/Packages/lesiontracker/lib/convertToNonTarget.js @@ -0,0 +1,86 @@ +convertToNonTarget = function(measurementData) { + if (measurementData.isTarget === false) { + return; + } + + var measurement = Measurements.findOne(measurementData.id); + + var timepoint = Timepoints.findOne({ + timepointId: measurementData.timepointId + }); + + // Next, update the measurementData and add it to the new tool type + var toolType = 'nonTarget'; + var newMeasurement = { + id: 'notready', + lesionNumber: LesionManager.getNewLesionNumber(measurementData.timepointId, false), + visible: true, + active: true, + imageId: measurementData.imageId, + seriesInstanceUid: measurementData.seriesInstanceUid, + studyInstanceUid: measurementData.studyInstanceUid, + patientId: measurementData.patientId, + isTarget: false, + measurementType: toolType + }; + + if (timepoint && timepoint.timepointType === 'baseline') { + newMeasurement.response = 'NM'; + } else if (timepoint && timepoint.timepointType === 'followup') { + newMeasurement.response = 'Present'; + } else { + newMeasurement.response = ''; + } + + newMeasurement.handles = { + start: { + x: (measurementData.handles.start.x + measurementData.handles.end.x) / 2, + y: (measurementData.handles.start.y + measurementData.handles.end.y) / 2, + highlight: true, + active: false + }, + end: { + x: Math.min(measurementData.handles.start.x, measurementData.handles.end.x), + y: Math.min(measurementData.handles.start.y, measurementData.handles.end.y), + highlight: true, + active: false + }, + textBox: { + x: measurementData.handles.textBox.x, + y: measurementData.handles.textBox.y, + active: false, + movesIndependently: false, + drawnIndependently: true, + allowedOutsideImage: true, + hasBoundingBox: true + } + }; + + // Adds lesion data to timepoints array + LesionManager.updateLesionData(newMeasurement); + + // Set the new Measurement to have the same location as the old one + if (measurement.location && measurement.locationId) { + var existingMeasurement = Measurements.findOne({ + lesionNumber: newMeasurement.lesionNumber, + isTarget: newMeasurement.isTarget + }); + + if (!existingMeasurement) { + return; + } + + Measurements.update(existingMeasurement._id, { + $set: { + location: measurement.location, + locationId: measurement.locationId + } + }); + } + + if (measurement) { + // Remove the timepointData from this Measurement and update it + // in the database, if it is already in the database + clearMeasurementTimepointData(measurement._id, measurementData.timepointId); + } +}; diff --git a/Packages/lesiontracker/package.js b/Packages/lesiontracker/package.js index c67a6aaf1..420c50ce8 100644 --- a/Packages/lesiontracker/package.js +++ b/Packages/lesiontracker/package.js @@ -144,6 +144,7 @@ Package.onUse(function(api) { api.addFiles('lib/deactivateAllToolData.js', 'client'); api.addFiles('lib/clearTools.js', 'client'); api.addFiles('lib/calculateTotalLesionBurden.js', 'client'); + api.addFiles('lib/convertToNonTarget.js', 'client'); api.addFiles('lib/syncMeasurementAndToolData.js', 'client'); api.addFiles('lib/syncImageMeasurementAndToolData.js', 'client'); @@ -174,6 +175,7 @@ Package.onUse(function(api) { api.export('getTimepointName', 'client'); api.export('getTrialCriteriaConstraints', 'client'); api.export('calculateTotalLesionBurden', 'client'); + api.export('convertToNonTarget', 'client'); // Export global objects api.export('TrialResponseCriteria', 'client');