From 01ef900933474d1f20cb44fd5bfa71c1e8cd7659 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Wed, 13 Dec 2017 13:05:25 +0100
Subject: [PATCH] worker contain additional information about helat partner and
 voucher partners

---
 smash/web/forms/worker_form.py                | 21 ++++++--
 .../web/migrations/0100_auto_20171213_1140.py | 51 +++++++++++++++++++
 smash/web/models/worker.py                    | 41 +++++++++++++--
 smash/web/tests/view/test_worker.py           |  7 ++-
 4 files changed, 109 insertions(+), 11 deletions(-)
 create mode 100644 smash/web/migrations/0100_auto_20171213_1140.py

diff --git a/smash/web/forms/worker_form.py b/smash/web/forms/worker_form.py
index dd898c17..309871ad 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 00000000..6bacef3d
--- /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 46f63ef0..df02e89f 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 a992eff9..ecf3d303 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):
-- 
GitLab