# HG changeset patch
# User Sebastien Jodogne <s.jodogne@gmail.com>
# Date 1445331726 -7200
# Node ID 7e0b5e413c7cb69b3783631fc7d0b69c69d63a70
# Parent  40a8445fc81d01345aa2a17fdb3db20e66f9bed9
C-Move SCP for studies using AccessionNumber tag

diff -r 40a8445fc81d -r 7e0b5e413c7c NEWS
--- a/NEWS	Tue Oct 20 10:45:21 2015 +0200
+++ b/NEWS	Tue Oct 20 11:02:06 2015 +0200
@@ -22,6 +22,7 @@
 Maintenance
 -----------
 
+* C-Move SCP for studies using AccessionNumber tag
 * Fix issue 4 (C-Store Association not renegotiated on Specific-to-specific transfer syntax change)
 * "/system" URI gives information about the plugins used for storage area and DB back-end
 * Plugin callbacks should now return explicit "OrthancPluginErrorCode" instead of integers
diff -r 40a8445fc81d -r 7e0b5e413c7c OrthancServer/OrthancMoveRequestHandler.cpp
--- a/OrthancServer/OrthancMoveRequestHandler.cpp	Tue Oct 20 10:45:21 2015 +0200
+++ b/OrthancServer/OrthancMoveRequestHandler.cpp	Tue Oct 20 11:02:06 2015 +0200
@@ -108,7 +108,30 @@
                                                    ResourceType level,
                                                    const DicomMap& input)
   {
-    DicomTag tag = GetIdentifierTag(level);
+    DicomTag tag(0, 0);   // Dummy initialization
+
+    switch (level)
+    {
+      case ResourceType_Patient:
+        tag = DICOM_TAG_PATIENT_ID;
+        break;
+
+      case ResourceType_Study:
+        tag = (input.HasTag(DICOM_TAG_ACCESSION_NUMBER) ? 
+               DICOM_TAG_ACCESSION_NUMBER : DICOM_TAG_STUDY_INSTANCE_UID);
+        break;
+        
+      case ResourceType_Series:
+        tag = DICOM_TAG_SERIES_INSTANCE_UID;
+        break;
+        
+      case ResourceType_Instance:
+        tag = DICOM_TAG_SOP_INSTANCE_UID;
+        break;
+
+      default:
+        throw OrthancException(ErrorCode_ParameterOutOfRange);
+    }
 
     if (!input.HasTag(tag))
     {
diff -r 40a8445fc81d -r 7e0b5e413c7c OrthancServer/ServerEnumerations.cpp
--- a/OrthancServer/ServerEnumerations.cpp	Tue Oct 20 10:45:21 2015 +0200
+++ b/OrthancServer/ServerEnumerations.cpp	Tue Oct 20 11:02:06 2015 +0200
@@ -364,26 +364,4 @@
         throw OrthancException(ErrorCode_ParameterOutOfRange);
     }
   }
-
-
-  DicomTag GetIdentifierTag(ResourceType level)
-  {
-    switch (level)
-    {
-      case ResourceType_Patient:
-        return DICOM_TAG_PATIENT_ID;
-
-      case ResourceType_Study:
-        return DICOM_TAG_STUDY_INSTANCE_UID;
-        
-      case ResourceType_Series:
-        return DICOM_TAG_SERIES_INSTANCE_UID;
-        
-      case ResourceType_Instance:
-        return DICOM_TAG_SOP_INSTANCE_UID;
-
-      default:
-        throw OrthancException(ErrorCode_ParameterOutOfRange);
-    }
-  }
 }
diff -r 40a8445fc81d -r 7e0b5e413c7c OrthancServer/ServerEnumerations.h
--- a/OrthancServer/ServerEnumerations.h	Tue Oct 20 10:45:21 2015 +0200
+++ b/OrthancServer/ServerEnumerations.h	Tue Oct 20 11:02:06 2015 +0200
@@ -195,6 +195,4 @@
   const char* EnumerationToString(TransferSyntax syntax);
 
   ModalityManufacturer StringToModalityManufacturer(const std::string& manufacturer);
-
-  DicomTag GetIdentifierTag(ResourceType level);
 }