diff --git a/smash/web/forms/worker_form.py b/smash/web/forms/worker_form.py index 90bb384110bdbd8d07a1dbb6596e4b6e3ad83b3e..43f28958daee1ca1e839ce3ef8123c972aefe61d 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 b39603ad20052fafc20550c59387e7a980cb741c..76f369a9eee1b266d7334e1300315da9736a5e62 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 61eeb94da90141bdaa8484e82cb05d14a502d215..a67abe929db49674e902e0ab42d050a3eb70c397 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