diff OrthancServer/ServerIndex.cpp @ 1676:f079f3efe33b db-changes

patient tags reported in studies
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 02 Oct 2015 17:09:18 +0200
parents de1413733c97
children a903d57d9f0c
line wrap: on
line diff
--- a/OrthancServer/ServerIndex.cpp	Fri Oct 02 13:57:54 2015 +0200
+++ b/OrthancServer/ServerIndex.cpp	Fri Oct 02 17:09:18 2015 +0200
@@ -881,8 +881,38 @@
   {
     DicomMap tags;
     db_.GetMainDicomTags(tags, resourceId);
-    target["MainDicomTags"] = Json::objectValue;
-    FromDcmtkBridge::ToJson(target["MainDicomTags"], tags, true);
+
+    if (resourceType == ResourceType_Study)
+    {
+      DicomMap t1, t2;
+      tags.ExtractStudyInformation(t1);
+      tags.ExtractPatientInformation(t2);
+
+      target["MainDicomTags"] = Json::objectValue;
+      FromDcmtkBridge::ToJson(target["MainDicomTags"], t1, true);
+
+      target["PatientMainDicomTags"] = Json::objectValue;
+      FromDcmtkBridge::ToJson(target["PatientMainDicomTags"], t2, true);
+
+      int64_t patient;
+      if (!db_.LookupParent(patient, resourceId))
+      {
+        throw OrthancException(ErrorCode_InternalError);
+      }
+
+      tags.Clear();
+      db_.GetMainDicomTags(tags, patient);
+
+      if (tags.HasTag(DICOM_TAG_PATIENT_ID))
+      {
+        target["PatientMainDicomTags"]["PatientID"] = tags.GetValue(DICOM_TAG_PATIENT_ID).AsString();
+      }
+    }
+    else
+    {
+      target["MainDicomTags"] = Json::objectValue;
+      FromDcmtkBridge::ToJson(target["MainDicomTags"], tags, true);
+    }
   }
 
   bool ServerIndex::LookupResource(Json::Value& result,