From 487f1e8f7fb31bac587138b2804a5c86c960e083 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Wed, 6 Dec 2017 11:52:32 +0100
Subject: [PATCH] common serialize date methods extracted

---
 smash/web/api_views/serialization_utils.py | 16 ++++++++++++++++
 smash/web/api_views/subject.py             | 15 +++++++--------
 smash/web/api_views/visit.py               | 18 ++++--------------
 3 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/smash/web/api_views/serialization_utils.py b/smash/web/api_views/serialization_utils.py
index 165eeac4..e1e96dbc 100644
--- a/smash/web/api_views/serialization_utils.py
+++ b/smash/web/api_views/serialization_utils.py
@@ -24,6 +24,22 @@ def location_to_str(location):
     return result
 
 
+def serialize_date(date):
+    if date is not None:
+        result = date.strftime('%Y-%m-%d')
+    else:
+        result = ""
+    return result
+
+
+def serialize_datetime(date):
+    if date is not None:
+        result = date.strftime('%Y-%m-%d %H:%M')
+    else:
+        result = ""
+    return result
+
+
 def add_column(result, name, field_name, column_list, param, columns_used_in_study=None, visible_param=None,
                sortable=True):
     add = True
diff --git a/smash/web/api_views/subject.py b/smash/web/api_views/subject.py
index 2d7cb49a..9d2d67b3 100644
--- a/smash/web/api_views/subject.py
+++ b/smash/web/api_views/subject.py
@@ -5,7 +5,8 @@ from django.db.models import Count, Case, When, Min, Max
 from django.db.models import Q
 from django.http import JsonResponse
 
-from web.api_views.serialization_utils import bool_to_yes_no, flying_team_to_str, location_to_str, add_column
+from web.api_views.serialization_utils import bool_to_yes_no, flying_team_to_str, location_to_str, add_column, \
+    serialize_date, serialize_datetime
 from web.models import StudySubject, Visit, Appointment, Subject, SubjectColumns, StudyColumns, Study, ContactAttempt
 from web.models.constants import SUBJECT_TYPE_CHOICES, GLOBAL_STUDY_ID
 from web.models.study_subject_list import SUBJECT_LIST_GENERIC, SUBJECT_LIST_NO_VISIT, SUBJECT_LIST_REQUIRE_CONTACT, \
@@ -330,17 +331,15 @@ def serialize_subject(study_subject):
             status = "UPCOMING"
         serialized_visits.append({
             "status": status,
-            "datetime_start": visit.datetime_begin.strftime('%Y-%m-%d'),
-            "datetime_end": visit.datetime_end.strftime('%Y-%m-%d'),
+            "datetime_start": serialize_date(visit.datetime_begin),
+            "datetime_end": serialize_date(visit.datetime_end),
         })
-    contact_reminder = study_subject.datetime_contact_reminder
-    if contact_reminder is not None:
-        contact_reminder = contact_reminder.strftime('%Y-%m-%d %H:%M')
+    contact_reminder = serialize_datetime(study_subject.datetime_contact_reminder)
     contact_attempts = ContactAttempt.objects.filter(subject=study_subject).order_by("-datetime_when")
     if len(contact_attempts) > 0:
         last_contact_attempt = contact_attempts[0]
-        last_contact_attempt_string = last_contact_attempt.datetime_when.strftime(
-            '%Y-%m-%d %H:%M') + "<br/>" + str(last_contact_attempt.worker) + "<br/> Success: " + bool_to_yes_no(
+        last_contact_attempt_string = serialize_datetime(last_contact_attempt.datetime_when) + "<br/>" + str(
+            last_contact_attempt.worker) + "<br/> Success: " + bool_to_yes_no(
             last_contact_attempt.success) + "<br/>" + last_contact_attempt.comment
 
     else:
diff --git a/smash/web/api_views/visit.py b/smash/web/api_views/visit.py
index 80eef602..ba2258b9 100644
--- a/smash/web/api_views/visit.py
+++ b/smash/web/api_views/visit.py
@@ -4,7 +4,8 @@ from django.contrib.auth.decorators import login_required
 from django.db.models import Q
 from django.http import JsonResponse
 
-from web.api_views.serialization_utils import bool_to_yes_no, flying_team_to_str, location_to_str, add_column
+from web.api_views.serialization_utils import bool_to_yes_no, flying_team_to_str, location_to_str, add_column, \
+    serialize_date
 from web.models import AppointmentType, Appointment
 from web.models import SubjectColumns
 from web.models import Visit, Study, VisitColumns, StudyVisitList, StudyColumns
@@ -221,9 +222,6 @@ def appointment_types_to_str(appointment_types):
 
 
 def serialize_visit(visit):
-    datetime_begin = serialize_date(visit.datetime_begin)
-    datetime_end = serialize_date(visit.datetime_end)
-
     appointment_types = visit.appointment_types.all()
     appointment_types_in_progress = AppointmentType.objects.filter(Q(appointmenttypelink__appointment__visit=visit) & Q(
         appointmenttypelink__appointment__status=Appointment.APPOINTMENT_STATUS_SCHEDULED)).distinct().all()
@@ -239,8 +237,8 @@ def serialize_visit(visit):
     result = {
         "first_name": visit.subject.subject.first_name,
         "last_name": visit.subject.subject.last_name,
-        "datetime_begin": datetime_begin,
-        "datetime_end": datetime_end,
+        "datetime_begin": serialize_date(visit.datetime_begin),
+        "datetime_end": serialize_date(visit.datetime_end),
         "flying_team": flying_team_to_str(visit.subject.flying_team),
         "default_location": location_to_str(visit.subject.default_location),
         "is_finished": bool_to_yes_no(visit.is_finished),
@@ -254,11 +252,3 @@ def serialize_visit(visit):
     }
 
     return result
-
-
-def serialize_date(date):
-    if date is not None:
-        result = date.strftime('%Y-%m-%d')
-    else:
-        result = ""
-    return result
-- 
GitLab