From 7da7b31b43b1f4e69850ba5d907ce1c8b9b07294 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Tue, 14 Apr 2020 15:36:46 +0200
Subject: [PATCH] import of the new format from tns

---
 .../importer/csv_tns_visit_import_reader.py   | 20 +++++++++++++++----
 .../tests/data/tns_vouchers_lab_id_import.csv |  4 ++++
 .../test_tns_csv_visit_import_reader.py       | 19 ++++++++++++++++++
 3 files changed, 39 insertions(+), 4 deletions(-)
 create mode 100644 smash/web/tests/data/tns_vouchers_lab_id_import.csv

diff --git a/smash/web/importer/csv_tns_visit_import_reader.py b/smash/web/importer/csv_tns_visit_import_reader.py
index eb20cae0..8bc4942a 100644
--- a/smash/web/importer/csv_tns_visit_import_reader.py
+++ b/smash/web/importer/csv_tns_visit_import_reader.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 import csv
 import datetime
 import logging
@@ -56,7 +57,9 @@ class TnsCsvVisitImportReader:
                     else:
                         study_subject = study_subjects[0]
                     date = self.extract_date(data['dateofvisit'])
-                    location = self.extract_location(data['adressofvisit'])
+
+                    location = self.extract_location(data)
+
                     visit_number = data['visit_id']
                     visit_number = int(visit_number) + 1
 
@@ -125,9 +128,18 @@ class TnsCsvVisitImportReader:
             logger.warn("Invalid date: " + text)
         return result
 
-    def extract_location(self, text):
-        # type: (unicode) ->  Location
-
+    def extract_location(self, data):
+        # type: (dict) ->  Location
+
+        text = data.get('adressofvisit', None)
+        if text is None:
+            text = data['lab_id']
+            if text.startswith('lab-reunis'):
+                text = u"Laboratoires réunis"
+            if text.startswith('lab-ketterthill'):
+                text = u"Ketterthill"
+            if text.startswith('lab-bionex'):
+                text = u"BioneXt"
         locations = Location.objects.filter(name=text)
         if len(locations) > 0:
             return locations[0]
diff --git a/smash/web/tests/data/tns_vouchers_lab_id_import.csv b/smash/web/tests/data/tns_vouchers_lab_id_import.csv
new file mode 100644
index 00000000..5b748f97
--- /dev/null
+++ b/smash/web/tests/data/tns_vouchers_lab_id_import.csv
@@ -0,0 +1,4 @@
+donor_id;visit_id;dateofvisit;lab_id
+cov-000111;0;20200410;lab-reunis-15
+cov-222333;0;20200410;lab-ketterthill-18
+cov-444444;0;20200410;lab-bionextpd-17
diff --git a/smash/web/tests/importer/test_tns_csv_visit_import_reader.py b/smash/web/tests/importer/test_tns_csv_visit_import_reader.py
index 44b62187..351988cd 100644
--- a/smash/web/tests/importer/test_tns_csv_visit_import_reader.py
+++ b/smash/web/tests/importer/test_tns_csv_visit_import_reader.py
@@ -132,6 +132,25 @@ class TestTnsCsvSubjectReader(TestCase):
 
         self.assertEquals(1, self.get_warnings_count())
 
+    def test_load_data_with_lab_id(self):
+        filename = get_resource_path('tns_vouchers_lab_id_import.csv')
+        visits = TnsCsvVisitImportReader().load_data(filename)
+        self.assertEqual(3, len(visits))
+
+        visit = Visit.objects.filter(id=visits[0].id)[0]
+        appointment = Appointment.objects.filter(visit=visit)[0]
+        self.assertEqual(u"Laboratoires réunis", appointment.location.name)
+
+        visit = Visit.objects.filter(id=visits[1].id)[0]
+        appointment = Appointment.objects.filter(visit=visit)[0]
+        self.assertEqual(u"Ketterthill", appointment.location.name)
+
+        visit = Visit.objects.filter(id=visits[2].id)[0]
+        appointment = Appointment.objects.filter(visit=visit)[0]
+        self.assertEqual(u"BioneXt", appointment.location.name)
+
+        self.assertEquals(3, self.get_warnings_count())
+
     def get_warnings_count(self):
         if "WARNING" in self.warning_counter.level2count:
             return self.warning_counter.level2count["WARNING"]
-- 
GitLab