diff --git a/smash/web/forms/worker_form.py b/smash/web/forms/worker_form.py index dd898c17a444df91a8353e06fbc454c8ec98be04..309871ad3d20b0c5a20ce6f87dec21f6c4e4ece6 100644 --- a/smash/web/forms/worker_form.py +++ b/smash/web/forms/worker_form.py @@ -1,11 +1,15 @@ +import logging + from django import forms from django.forms import ModelForm 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 import role_choices_by_worker_type, worker_type_by_worker from web.models.worker_study_role import WORKER_STAFF +logger = logging.getLogger(__name__) + class WorkerForm(ModelForm): class Meta: @@ -14,14 +18,23 @@ class WorkerForm(ModelForm): def __init__(self, *args, **kwargs): worker_type = kwargs.pop('worker_type', WORKER_STAFF) - 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) + + initial_role=None if instance is not None: + worker_type = worker_type_by_worker(instance) roles = WorkerStudyRole.objects.filter(worker=instance, study_id=GLOBAL_STUDY_ID) + if roles.count() > 0: - self.fields['role'].initial = roles[0].role + initial_role = roles[0].role + + choices = role_choices_by_worker_type(worker_type) + self.fields['role'] = forms.ChoiceField(label='Role', choices=choices) + self.fields['role'].initial = initial_role + + if worker_type == WORKER_STAFF: + del self.fields['voucher_types'] def save(self, commit=True): instance = super(WorkerForm, self).save(commit) diff --git a/smash/web/migrations/0100_auto_20171213_1140.py b/smash/web/migrations/0100_auto_20171213_1140.py new file mode 100644 index 0000000000000000000000000000000000000000..6bacef3d9db5c8a66ca87363c89cf0c37ffc13a1 --- /dev/null +++ b/smash/web/migrations/0100_auto_20171213_1140.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2017-12-13 11:40 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('web', '0099_auto_20171213_1115'), + ] + + operations = [ + migrations.AddField( + model_name='worker', + name='address', + field=models.CharField(blank=True, max_length=255, verbose_name=b'Address'), + ), + migrations.AddField( + model_name='worker', + name='city', + field=models.CharField(blank=True, max_length=50, verbose_name=b'City'), + ), + migrations.AddField( + model_name='worker', + name='country', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='web.Country', verbose_name=b'Country'), + ), + migrations.AddField( + model_name='worker', + name='fax_number', + field=models.CharField(blank=True, max_length=20, verbose_name=b'Fax number'), + ), + migrations.AddField( + model_name='worker', + name='phone_number_2', + field=models.CharField(blank=True, max_length=20, verbose_name=b'Phone number 2'), + ), + migrations.AddField( + model_name='worker', + name='postal_code', + field=models.CharField(blank=True, max_length=7, verbose_name=b'Postal code'), + ), + migrations.AddField( + model_name='worker', + name='voucher_types', + field=models.ManyToManyField(blank=True, to='web.VoucherType', verbose_name=b'Voucher types'), + ), + ] diff --git a/smash/web/models/worker.py b/smash/web/models/worker.py index 46f63ef092866a65ee0cbe075a10eb8fa24b47c9..df02e89f21972de2dedb04832cff24c3b113773e 100644 --- a/smash/web/models/worker.py +++ b/smash/web/models/worker.py @@ -5,9 +5,9 @@ import logging 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 +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 logger = logging.getLogger(__name__) @@ -77,6 +77,41 @@ class Worker(models.Model): verbose_name='Phone number', blank=True ) + phone_number_2 = models.CharField(max_length=20, + verbose_name='Phone number 2', + blank=True + ) + fax_number = models.CharField(max_length=20, + verbose_name='Fax number', + blank=True + ) + address = models.CharField(max_length=255, + blank=True, + verbose_name='Address' + ) + + postal_code = models.CharField(max_length=7, + blank=True, + verbose_name='Postal code' + ) + + city = models.CharField(max_length=50, + blank=True, + verbose_name='City' + ) + + country = models.ForeignKey('web.Country', + null=False, + blank=False, + default=COUNTRY_OTHER_ID, + verbose_name='Country' + ) + + voucher_types = models.ManyToManyField("web.VoucherType", + verbose_name='Voucher types', + blank=True + ) + unit = models.CharField(max_length=50, verbose_name='Unit', blank=True diff --git a/smash/web/tests/view/test_worker.py b/smash/web/tests/view/test_worker.py index a992eff98970d9b2c45e8430252a6cbf42769117..ecf3d30329507a5a3f8acb668ed9488a35b65834 100644 --- a/smash/web/tests/view/test_worker.py +++ b/smash/web/tests/view/test_worker.py @@ -28,9 +28,8 @@ class WorkerViewTests(LoggedInTestCase): def test_render_worker_added_request(self): language = create_language() location = create_location() - count = Worker.objects.all().count() - form_data = self.get_form_data() + form_data = self.get_form_data(Worker()) form_data["first_name"] = "John" form_data["last_name"] = "Doe" form_data["phone_number"] = "0123456789" @@ -43,11 +42,11 @@ class WorkerViewTests(LoggedInTestCase): response = self.client.post(reverse('web.views.worker_add', kwargs={'worker_type': WORKER_STAFF}), data=form_data) + logger.debug(response.content) self.assertEqual(response.status_code, 302) - new_count = Worker.objects.all().count() - self.assertEqual(count + 1, new_count) + self.assertEqual(1, Worker.objects.all().count()) @staticmethod def get_form_data(worker=None):