diff --git a/smash/web/forms/worker_form.py b/smash/web/forms/worker_form.py index 43f28958daee1ca1e839ce3ef8123c972aefe61d..dd898c17a444df91a8353e06fbc454c8ec98be04 100644 --- a/smash/web/forms/worker_form.py +++ b/smash/web/forms/worker_form.py @@ -1,9 +1,9 @@ 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 import role_choices_by_worker_type from web.models.worker_study_role import WORKER_STAFF @@ -17,6 +17,11 @@ class WorkerForm(ModelForm): choices = role_choices_by_worker_type(worker_type) super(WorkerForm, self).__init__(*args, **kwargs) self.fields['role'] = forms.ChoiceField(label='Role', choices=choices) + instance = getattr(self, 'instance', None) + if instance is not None: + roles = WorkerStudyRole.objects.filter(worker=instance, study_id=GLOBAL_STUDY_ID) + if roles.count() > 0: + self.fields['role'].initial = roles[0].role def save(self, commit=True): instance = super(WorkerForm, self).save(commit) diff --git a/smash/web/migrations/0099_auto_20171213_1115.py b/smash/web/migrations/0099_auto_20171213_1115.py new file mode 100644 index 0000000000000000000000000000000000000000..36f7df053335eaaf12b53d29195e6160dcc2d171 --- /dev/null +++ b/smash/web/migrations/0099_auto_20171213_1115.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2017-12-13 11:15 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('web', '0098_workerstudyrole'), + ] + + operations = [ + migrations.AlterField( + model_name='worker', + name='languages', + field=models.ManyToManyField(blank=True, to='web.Language', verbose_name=b'Known languages'), + ), + migrations.AlterField( + model_name='worker', + name='locations', + field=models.ManyToManyField(blank=True, to='web.Location', verbose_name=b'Locations'), + ), + migrations.AlterField( + model_name='worker', + name='phone_number', + field=models.CharField(blank=True, max_length=20, verbose_name=b'Phone number'), + ), + migrations.AlterField( + model_name='worker', + name='specialization', + field=models.CharField(blank=True, max_length=20, verbose_name=b'Specialization'), + ), + migrations.AlterField( + model_name='worker', + name='unit', + field=models.CharField(blank=True, max_length=50, verbose_name=b'Unit'), + ), + ] diff --git a/smash/web/models/worker.py b/smash/web/models/worker.py index 76f369a9eee1b266d7334e1300315da9736a5e62..efca00bdad3237b8a813c0ca18d6cb584c093bb3 100644 --- a/smash/web/models/worker.py +++ b/smash/web/models/worker.py @@ -37,13 +37,13 @@ def worker_type_by_worker(worker): if roles.count() == 0: return WORKER_STAFF role = roles[0] - for role_type, role_name in STUDY_ROLE_CHOICES.items(): + for role_type, role_name in STUDY_ROLE_CHOICES: if role_type == role: return WORKER_STAFF - for role_type, role_name in HEALTH_PARTNER_ROLE_CHOICES.items(): + for role_type, role_name in HEALTH_PARTNER_ROLE_CHOICES: if role_type == role: return WORKER_HEALTH_PARTNER - for role_type, role_name in VOUCHER_PARTNER_ROLE_CHOICES.items(): + for role_type, role_name in VOUCHER_PARTNER_ROLE_CHOICES: if role_type == role: return WORKER_VOUCHER_PARTNER return WORKER_STAFF @@ -54,10 +54,12 @@ class Worker(models.Model): app_label = 'web' languages = models.ManyToManyField("web.Language", - verbose_name='Known languages' + verbose_name='Known languages', + blank=True ) locations = models.ManyToManyField("web.Location", - verbose_name='Locations' + verbose_name='Locations', + blank=True ) appointments = models.ManyToManyField('web.Appointment', blank=True, verbose_name='Appointments' @@ -72,17 +74,20 @@ class Worker(models.Model): verbose_name='Last name' ) phone_number = models.CharField(max_length=20, - verbose_name='Phone number' + verbose_name='Phone number', + blank=True ) unit = models.CharField(max_length=50, - verbose_name='Unit' + verbose_name='Unit', + blank=True ) email = models.EmailField( verbose_name='E-mail' ) specialization = models.CharField(max_length=20, - verbose_name='Specialization' + verbose_name='Specialization', + blank=True ) def is_on_leave(self): diff --git a/smash/web/templates/doctors/edit.html b/smash/web/templates/doctors/edit.html index bd5378b9f54ce7aaa81eb15e894246673ec1750c..148cda2c28482fd8327a800c334d58728abf9cb6 100644 --- a/smash/web/templates/doctors/edit.html +++ b/smash/web/templates/doctors/edit.html @@ -132,7 +132,7 @@ <td>{{ holiday.datetime_end }}</td> <td>{{ holiday.info }}</td> <td> - <a href="{% url 'web.views.doctor_holiday_delete' holiday.id %}" type="button" + <a href="{% url 'web.views.worker_holiday_delete' holiday.id %}" type="button" class="btn btn-block btn-default">Delete</a> </td> </tr> diff --git a/smash/web/tests/functions.py b/smash/web/tests/functions.py index dab991b8da1f4480b04ea3c254f6926124169eef..b3855137660292a0c9726bff01709179fa6d35b8 100644 --- a/smash/web/tests/functions.py +++ b/smash/web/tests/functions.py @@ -188,8 +188,11 @@ def create_worker(user=None, with_test_location=False): worker = Worker.objects.create( first_name='piotr', last_name="gawron", - email='jacob@bla', + email='jacob@bla.com', user=user, + specialization="spec", + unit="LCSB", + phone_number="0123456789" ) if with_test_location: worker.locations = [get_test_location()] diff --git a/smash/web/tests/view/test_worker.py b/smash/web/tests/view/test_worker.py index 2cb98a2ad3dfbee5f4d35577ecec2cd8ad484a67..a992eff98970d9b2c45e8430252a6cbf42769117 100644 --- a/smash/web/tests/view/test_worker.py +++ b/smash/web/tests/view/test_worker.py @@ -6,7 +6,7 @@ from web.forms import WorkerForm from web.models import Worker from web.models.worker_study_role import WORKER_STAFF, ROLE_CHOICES_DOCTOR from web.tests import create_worker -from web.tests.functions import create_language, create_location, create_availability +from web.tests.functions import create_language, create_location, create_availability, format_form_field from .. import LoggedInTestCase logger = logging.getLogger(__name__) @@ -26,16 +26,11 @@ class WorkerViewTests(LoggedInTestCase): self.assertEqual(response.status_code, 200) def test_render_worker_added_request(self): - language = create_language() location = create_location() count = Worker.objects.all().count() - form = WorkerForm() - form_data = {} - for key, value in form.initial.items(): - if value is not None: - form_data[key] = value + form_data = self.get_form_data() form_data["first_name"] = "John" form_data["last_name"] = "Doe" form_data["phone_number"] = "0123456789" @@ -54,9 +49,30 @@ class WorkerViewTests(LoggedInTestCase): new_count = Worker.objects.all().count() self.assertEqual(count + 1, new_count) + @staticmethod + def get_form_data(worker=None): + form = WorkerForm(instance=worker) + form_data = {} + for key, value in form.initial.items(): + form_data[key] = format_form_field(value) + return form_data + def test_render_edit_worker_request(self): worker = create_worker() + form_data = self.get_form_data(worker) + form_data["last_name"] = "XYZ" + form_data["role"] = ROLE_CHOICES_DOCTOR + + response = self.client.post(reverse('web.views.worker_edit', args=[worker.id]), data=form_data) + self.assertEqual(response.status_code, 302) + + updated_worker = Worker.objects.get(id=worker.id) + self.assertEqual(updated_worker.last_name, form_data["last_name"]) + + def test_edit_worker(self): + worker = create_worker() + response = self.client.get(reverse('web.views.worker_edit', args=[worker.id])) self.assertEqual(response.status_code, 200) diff --git a/smash/web/urls.py b/smash/web/urls.py index e7e06a69e43db098658484323b8d1c1a54a0d015..69d0f66c5704c2e77c97c3d6ebdc915a5b4409b5 100644 --- a/smash/web/urls.py +++ b/smash/web/urls.py @@ -103,7 +103,7 @@ urlpatterns = [ url(r'^doctors/(?P<worker_type>[A-z]+)$', views.worker.worker_list, name='web.views.workers'), url(r'^doctors/add/(?P<worker_type>[A-z]+)$', views.worker.worker_add, name='web.views.worker_add'), url(r'^doctors/edit/(?P<worker_id>\d+)$', views.worker.worker_edit, name='web.views.worker_edit'), - url(r'^doctors/disable/(?P<doctor_id>\d+)$', views.worker.doctor_disable, name='web.views.worker_disable'), + url(r'^doctors/disable/(?P<doctor_id>\d+)$', views.worker.worker_disable, name='web.views.worker_disable'), url(r'^doctors/(?P<doctor_id>\d+)/availability/add$', views.worker.worker_availability_add, name='web.views.worker_availability_add'), diff --git a/smash/web/views/worker.py b/smash/web/views/worker.py index a67abe929db49674e902e0ab42d050a3eb70c397..12914af5ca91250b897ce1824437b780d213aa95 100644 --- a/smash/web/views/worker.py +++ b/smash/web/views/worker.py @@ -58,7 +58,7 @@ def worker_edit(request, worker_id): }) -def doctor_disable(request, doctor_id): +def worker_disable(request, doctor_id): the_doctor = get_object_or_404(Worker, id=doctor_id) the_doctor.disable() return worker_list(request)