Skip to content
Snippets Groups Projects
Commit 2bf802f3 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

worker filtering methods moved to model

parent bf75dbbd
No related branches found
No related tags found
1 merge request!117Resolve "extend worker class"
from django import forms from django import forms
from django.forms import ModelForm from django.forms import ModelForm
from web.models.worker import role_choices_by_worker_type
from web.models import Worker, WorkerStudyRole from web.models import Worker, WorkerStudyRole
from web.models.constants import GLOBAL_STUDY_ID 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, \ from web.models.worker_study_role import WORKER_STAFF
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
class WorkerForm(ModelForm): class WorkerForm(ModelForm):
......
...@@ -6,10 +6,49 @@ from django.contrib.auth.models import User, AnonymousUser ...@@ -6,10 +6,49 @@ from django.contrib.auth.models import User, AnonymousUser
from django.db import models from django.db import models
from web.models.constants import GLOBAL_STUDY_ID 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__) 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 Worker(models.Model):
class Meta: class Meta:
app_label = 'web' app_label = 'web'
...@@ -85,6 +124,11 @@ class Worker(models.Model): ...@@ -85,6 +124,11 @@ class Worker(models.Model):
else: else:
return None 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 @staticmethod
def get_details(the_user): def get_details(the_user):
persons = Worker.objects.filter(user=the_user) persons = Worker.objects.filter(user=the_user)
......
...@@ -6,9 +6,9 @@ from django.shortcuts import redirect, get_object_or_404 ...@@ -6,9 +6,9 @@ from django.shortcuts import redirect, get_object_or_404
from web.forms import AvailabilityAddForm, AvailabilityEditForm, HolidayAddForm from web.forms import AvailabilityAddForm, AvailabilityEditForm, HolidayAddForm
from web.forms import WorkerForm 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 import Worker, Availability, Holiday
from web.models.constants import WEEKDAY_CHOICES, GLOBAL_STUDY_ID 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 web.models.worker_study_role import WORKER_STAFF
from . import wrap_response from . import wrap_response
...@@ -16,9 +16,7 @@ logger = logging.getLogger(__name__) ...@@ -16,9 +16,7 @@ logger = logging.getLogger(__name__)
def worker_list(request, worker_type=WORKER_STAFF): def worker_list(request, worker_type=WORKER_STAFF):
doctors_list = Worker.objects.filter(roles__study_id=GLOBAL_STUDY_ID, doctors_list = Worker.get_workers_by_worker_type(worker_type, study_id=GLOBAL_STUDY_ID, ).order_by('-last_name')
roles__role__in=roles_by_worker_type(worker_type)).order_by(
'-last_name')
context = { context = {
'doctors_list': doctors_list, 'doctors_list': doctors_list,
'worker_type': worker_type 'worker_type': worker_type
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment