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.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):
......
......@@ -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)
......
......@@ -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
......
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