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