203 lines
7.0 KiB
JavaScript
203 lines
7.0 KiB
JavaScript
var measurementManagerDAL = (function () {
|
|
var trialPatientLocations = [];
|
|
var timepoints = [];
|
|
|
|
// Returns trialPatientLocations array
|
|
function getPatientLocations () {
|
|
return trialPatientLocations;
|
|
}
|
|
|
|
function getLocationName (locationUID) {
|
|
for(var i = 0; i< trialPatientLocations.length; i++) {
|
|
var locationObject = trialPatientLocations[i];
|
|
if(locationObject.uid === locationUID) {
|
|
return locationObject.location.location;
|
|
}
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
function getTimepoints() {
|
|
return timepoints;
|
|
}
|
|
|
|
// Adds new location to trialPatientLocations array
|
|
function addPatientLocation (location) {
|
|
var contentId = getContentId();
|
|
var locationUID = uuid.v4();
|
|
var locationObject = {contentId: contentId, uid: locationUID, location: location};
|
|
trialPatientLocations.push(locationObject);
|
|
|
|
return locationUID;
|
|
}
|
|
|
|
function getContentId () {
|
|
return Session.get("activeContentId");
|
|
}
|
|
|
|
function getTimepointsOfTab (){
|
|
var contentId = getContentId();
|
|
var tabData = TabsTimepoints.find({contentId: contentId}).fetch();
|
|
return tabData[0].timepoints;
|
|
}
|
|
|
|
// Add timepoint data to Measurements collection
|
|
function addTimepointData(lesionData) {
|
|
|
|
var contentId = getContentId();
|
|
var timepointsOfTab = getTimepointsOfTab();
|
|
var timepointsArr = [];
|
|
for(var i=0; i< timepointsOfTab.length; i++) {
|
|
var timepointId = timepointsOfTab[i].timepointID;
|
|
var lesionTimepointId = lesionData.timepointID;
|
|
|
|
if (timepointId === lesionTimepointId) {
|
|
// Add real mesurement
|
|
var timepointObject = {};
|
|
timepointObject[timepointId] = {longestDiameter: lesionData.measurementText, imageId: lesionData.imageId};
|
|
timepointsArr.push(timepointObject);
|
|
} else {
|
|
// Add null measurement
|
|
var timepointObject = {};
|
|
timepointObject[timepointId] = {longestDiameter: "", imageId: ""};
|
|
timepointsArr.push(timepointObject);
|
|
|
|
}
|
|
}
|
|
|
|
var lesionDataCollectionObject = {
|
|
lesionNumber: lesionData.lesionNumber,
|
|
isTarget: true,
|
|
locationUID: lesionData.locationUID,
|
|
location: getLocationName(lesionData.locationUID),
|
|
timepoints: timepointsArr
|
|
};
|
|
|
|
Measurements.insert({contentId: contentId, lesionData: lesionDataCollectionObject});
|
|
}
|
|
|
|
// Update timepoint data in Measurements collection
|
|
function updateTimepointData (lesionData) {
|
|
var contentId = getContentId();
|
|
var timepointID = lesionData.timepointID;
|
|
var tabMeasurements = Measurements.find({contentId: contentId, "lesionData.lesionNumber": lesionData.lesionNumber}).fetch();
|
|
var tabMeasurementsData = tabMeasurements[0];
|
|
if (tabMeasurements != undefined && tabMeasurements.length > 0) {
|
|
|
|
// Update timepoint
|
|
var timepointArr = tabMeasurementsData.lesionData.timepoints;
|
|
for(var i=0; i< timepointArr.length; i++) {
|
|
var timepoint = timepointArr[i];
|
|
if(timepoint[timepointID] != undefined) {
|
|
timepoint[timepointID].longestDiameter = lesionData.measurementText;
|
|
timepoint[timepointID].imageId = lesionData.imageId;
|
|
|
|
}
|
|
}
|
|
Measurements.update(
|
|
{ contentId: contentId, "lesionData.lesionNumber": lesionData.lesionNumber},
|
|
{
|
|
$set: {
|
|
"lesionData.timepoints": timepointArr
|
|
}
|
|
}, {multi: true}
|
|
);
|
|
|
|
}
|
|
}
|
|
|
|
// Check timepointData is found in Measurements collection
|
|
function timepointDataIsFound (lesionNumber) {
|
|
var contentId = getContentId();
|
|
var timepointData = Measurements.findOne({contentId: contentId, "lesionData.lesionNumber": lesionNumber});
|
|
if (timepointData != undefined) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Adds new timepoint item to tiemepoints array
|
|
function addLesionData (lesionData) {
|
|
if(timepointDataIsFound(lesionData)) {
|
|
// Update data
|
|
updateTimepointData(lesionData);
|
|
} else{
|
|
// Insert data
|
|
addTimepointData(lesionData);
|
|
}
|
|
|
|
// TODO: This code block will be removed
|
|
// Populate timepoints array
|
|
var roi = {
|
|
uid: lesionData.uid,
|
|
number: lesionData.lesionNumber,
|
|
measurement: lesionData.measurementText,
|
|
locationUID: lesionData.locationUID
|
|
};
|
|
if (timepoints.length) {
|
|
timepoints.forEach(function(timepoint) {
|
|
if(timepoint.timepointID === timepointID) {
|
|
timepoint.rois.push(roi);
|
|
}
|
|
});
|
|
} else {
|
|
timepoints.push({timepointID: timepointID, rois: [roi]});
|
|
}
|
|
|
|
}
|
|
|
|
// Returns new lesion number according to timepointID
|
|
function getNewLesionNumber (timepointID) {
|
|
var contentId = getContentId();
|
|
var lesionNumberCounter = 0;
|
|
var timepointsData = Measurements.find({contentId: contentId}).fetch();
|
|
if(timepointsData.length > 0) {
|
|
for(var i=0; i< timepointsData.length; i++) {
|
|
var timepointData = timepointsData[i];
|
|
var timepoints = timepointData.lesionData.timepoints;
|
|
for(var j=0; j< timepoints.length; j++) {
|
|
var timepoint = timepoints[j];
|
|
var key = Object.keys(timepoint);
|
|
if(key == timepointID) {
|
|
if (timepoint[key].longestDiameter === "") {
|
|
return timepointData.lesionData.lesionNumber;
|
|
|
|
} else {
|
|
lesionNumberCounter = lesionNumberCounter + 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
console.log(lesionNumberCounter + 1);
|
|
|
|
return lesionNumberCounter + 1;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
// If lesion number is added for any timepoint, returns lesion locationUID
|
|
function isLesionNumberAdded (lesionNumber) {
|
|
if (timepointDataIsFound(lesionNumber)){
|
|
var contentId = getContentId();
|
|
var timepointData = Measurements.find({contentId: contentId, "lesionData.lesionNumber": lesionNumber}).fetch();
|
|
return timepointData[0].lesionData.locationUID;
|
|
|
|
}
|
|
return null
|
|
|
|
}
|
|
|
|
return {
|
|
addNewLocation: addPatientLocation,
|
|
getLocations: getPatientLocations,
|
|
addLesionData: addLesionData,
|
|
getLesionNumber: getNewLesionNumber,
|
|
isLesionNumberAdded: isLesionNumberAdded,
|
|
getTimepoints: getTimepoints,
|
|
updateTimepointData: updateTimepointData
|
|
|
|
};
|
|
})(); |