diff --git a/smash/web/models/worker.py b/smash/web/models/worker.py index c631fd4e12d048cabf23b3c48529a1e477dffa57..deafccc087d108c25c133c0bafe0048f6cbbef83 100644 --- a/smash/web/models/worker.py +++ b/smash/web/models/worker.py @@ -7,7 +7,7 @@ from django.db import models from web.models.constants import GLOBAL_STUDY_ID, COUNTRY_OTHER_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 + VOUCHER_PARTNER_ROLE_CHOICES, WORKER_STAFF, WORKER_HEALTH_PARTNER, WORKER_VOUCHER_PARTNER, ROLE_CHOICES logger = logging.getLogger(__name__) @@ -161,6 +161,16 @@ class Worker(models.Model): else: return False + @property + def role(self): + roles = self.roles.filter(study=GLOBAL_STUDY_ID) + if roles.count() == 0: + return WORKER_STAFF + role = roles[0].role + if role not in [role_type for role_type, _ in ROLE_CHOICES]: + raise TypeError("Unknown worker role") + return role + @staticmethod def get_by_user(the_user): if isinstance(the_user, User): diff --git a/smash/web/templates/doctors/index.html b/smash/web/templates/doctors/index.html index 6960412e877ef7582b29e6dd3bb01060f1ffff44..93d2bf58d6a0e86f891afa629cab2fadd74b8459 100644 --- a/smash/web/templates/doctors/index.html +++ b/smash/web/templates/doctors/index.html @@ -38,6 +38,7 @@ <th>First name</th> <th>Last name</th> <th>Unit</th> + <th>Role</th> {% else %} <th>Name</th> {% endif %} @@ -57,6 +58,7 @@ <td>{{ worker.first_name }}</td> <td>{{ worker.last_name }}</td> <td>{{ worker.unit }}</td> + <td>{{ worker.role }}</td> {% else %} <td>{{ worker.name }}</td> {% endif %} diff --git a/smash/web/tests/models/test_worker.py b/smash/web/tests/models/test_worker.py index 1b479467a673a15eb108e2ba61aaf519fde703f2..338ef668e0ca0b9befe465f28e17884ba7613f98 100644 --- a/smash/web/tests/models/test_worker.py +++ b/smash/web/tests/models/test_worker.py @@ -91,3 +91,29 @@ class WorkerModelTests(TestCase): worker.roles.update(role="unk") with self.assertRaises(Exception): worker_type_by_worker(worker) + + #worker role tests + + def test_worker_role_by_worker_without_role(self): + self.assertEqual(WORKER_STAFF, Worker().role) + + def test_worker_role_by_worker_with_secretary_role(self): + worker = create_worker() + worker.roles.update(role=ROLE_CHOICES_SECRETARY) + self.assertEqual(ROLE_CHOICES_SECRETARY, worker.role) + + def test_worker_role_by_worker_with_health_partner_role(self): + worker = create_worker() + worker.roles.update(role=ROLE_CHOICES_HEALTH_PARTNER) + self.assertEqual(ROLE_CHOICES_HEALTH_PARTNER, worker.role) + + def test_worker_role_by_worker_with_voucher_partner_role(self): + worker = create_worker() + worker.roles.update(role=ROLE_CHOICES_VOUCHER_PARTNER) + self.assertEqual(ROLE_CHOICES_VOUCHER_PARTNER, worker.role) + + def test_worker_role_by_worker_with_invalid_role(self): + worker = create_worker() + worker.roles.update(role="unk") + with self.assertRaises(Exception): + worker.role