From 2bf802f3109ed282897403c31d64854d5da2b552 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Wed, 13 Dec 2017 11:08:50 +0100
Subject: [PATCH] worker filtering methods moved to model

---
 smash/web/forms/worker_form.py | 41 ++-----------------------------
 smash/web/models/worker.py     | 44 ++++++++++++++++++++++++++++++++++
 smash/web/views/worker.py      |  6 ++---
 3 files changed, 48 insertions(+), 43 deletions(-)

diff --git a/smash/web/forms/worker_form.py b/smash/web/forms/worker_form.py
index 90bb3841..43f28958 100644
--- a/smash/web/forms/worker_form.py
+++ b/smash/web/forms/worker_form.py
@@ -1,47 +1,10 @@
 from django import forms
 from django.forms import ModelForm
 
+from web.models.worker import role_choices_by_worker_type
 from web.models import Worker, WorkerStudyRole
 from web.models.constants import GLOBAL_STUDY_ID
-from web.models.worker_study_role import STUDY_ROLE_CHOICES, HEALTH_PARTNER_ROLE_CHOICES, VOUCHER_PARTNER_ROLE_CHOICES, \
-    WORKER_STAFF, WORKER_HEALTH_PARTNER, WORKER_VOUCHER_PARTNER
-
-
-def role_choices_by_worker_type(worker_type):
-    if worker_type == WORKER_STAFF:
-        return STUDY_ROLE_CHOICES
-    elif worker_type == WORKER_HEALTH_PARTNER:
-        return HEALTH_PARTNER_ROLE_CHOICES
-    elif worker_type == WORKER_VOUCHER_PARTNER:
-        return VOUCHER_PARTNER_ROLE_CHOICES
-    else:
-        return ()
-
-
-def worker_type_by_worker(worker):
-    roles = worker.roles.filter(study=GLOBAL_STUDY_ID)
-    if roles.count() == 0:
-        return WORKER_STAFF
-    role = roles[0]
-    for role_type, role_name in STUDY_ROLE_CHOICES.items():
-        if role_type == role:
-            return WORKER_STAFF
-    for role_type, role_name in HEALTH_PARTNER_ROLE_CHOICES.items():
-        if role_type == role:
-            return WORKER_HEALTH_PARTNER
-    for role_type, role_name in VOUCHER_PARTNER_ROLE_CHOICES.items():
-        if role_type == role:
-            return WORKER_VOUCHER_PARTNER
-    return WORKER_STAFF
-
-
-def roles_by_worker_type(worker_type):
-    role_choices = role_choices_by_worker_type(worker_type)
-    roles = []
-
-    for role_type, role_name in role_choices:
-        roles.append(role_type)
-    return roles
+from web.models.worker_study_role import WORKER_STAFF
 
 
 class WorkerForm(ModelForm):
diff --git a/smash/web/models/worker.py b/smash/web/models/worker.py
index b39603ad..76f369a9 100644
--- a/smash/web/models/worker.py
+++ b/smash/web/models/worker.py
@@ -6,10 +6,49 @@ from django.contrib.auth.models import User, AnonymousUser
 from django.db import models
 
 from web.models.constants import GLOBAL_STUDY_ID
+from web.models.worker_study_role import STUDY_ROLE_CHOICES, HEALTH_PARTNER_ROLE_CHOICES, VOUCHER_PARTNER_ROLE_CHOICES, \
+    WORKER_STAFF, WORKER_HEALTH_PARTNER, WORKER_VOUCHER_PARTNER
 
 logger = logging.getLogger(__name__)
 
 
+def roles_by_worker_type(worker_type):
+    role_choices = role_choices_by_worker_type(worker_type)
+    roles = []
+
+    for role_type, role_name in role_choices:
+        roles.append(role_type)
+    return roles
+
+
+def role_choices_by_worker_type(worker_type):
+    if worker_type == WORKER_STAFF:
+        return STUDY_ROLE_CHOICES
+    elif worker_type == WORKER_HEALTH_PARTNER:
+        return HEALTH_PARTNER_ROLE_CHOICES
+    elif worker_type == WORKER_VOUCHER_PARTNER:
+        return VOUCHER_PARTNER_ROLE_CHOICES
+    else:
+        return ()
+
+
+def worker_type_by_worker(worker):
+    roles = worker.roles.filter(study=GLOBAL_STUDY_ID)
+    if roles.count() == 0:
+        return WORKER_STAFF
+    role = roles[0]
+    for role_type, role_name in STUDY_ROLE_CHOICES.items():
+        if role_type == role:
+            return WORKER_STAFF
+    for role_type, role_name in HEALTH_PARTNER_ROLE_CHOICES.items():
+        if role_type == role:
+            return WORKER_HEALTH_PARTNER
+    for role_type, role_name in VOUCHER_PARTNER_ROLE_CHOICES.items():
+        if role_type == role:
+            return WORKER_VOUCHER_PARTNER
+    return WORKER_STAFF
+
+
 class Worker(models.Model):
     class Meta:
         app_label = 'web'
@@ -85,6 +124,11 @@ class Worker(models.Model):
         else:
             return None
 
+    @staticmethod
+    def get_workers_by_worker_type(worker_type, study_id=GLOBAL_STUDY_ID):
+        return Worker.objects.filter(roles__study_id=study_id,
+                                     roles__role__in=roles_by_worker_type(worker_type))
+
     @staticmethod
     def get_details(the_user):
         persons = Worker.objects.filter(user=the_user)
diff --git a/smash/web/views/worker.py b/smash/web/views/worker.py
index 61eeb94d..a67abe92 100644
--- a/smash/web/views/worker.py
+++ b/smash/web/views/worker.py
@@ -6,9 +6,9 @@ from django.shortcuts import redirect, get_object_or_404
 
 from web.forms import AvailabilityAddForm, AvailabilityEditForm, HolidayAddForm
 from web.forms import WorkerForm
-from web.forms.worker_form import roles_by_worker_type, worker_type_by_worker
 from web.models import Worker, Availability, Holiday
 from web.models.constants import WEEKDAY_CHOICES, GLOBAL_STUDY_ID
+from web.models.worker import worker_type_by_worker
 from web.models.worker_study_role import WORKER_STAFF
 from . import wrap_response
 
@@ -16,9 +16,7 @@ logger = logging.getLogger(__name__)
 
 
 def worker_list(request, worker_type=WORKER_STAFF):
-    doctors_list = Worker.objects.filter(roles__study_id=GLOBAL_STUDY_ID,
-                                         roles__role__in=roles_by_worker_type(worker_type)).order_by(
-        '-last_name')
+    doctors_list = Worker.get_workers_by_worker_type(worker_type, study_id=GLOBAL_STUDY_ID, ).order_by('-last_name')
     context = {
         'doctors_list': doctors_list,
         'worker_type': worker_type
-- 
GitLab