From 4b4bdb6f1547f2843ecb109a6badd44ad82aa8db Mon Sep 17 00:00:00 2001
From: "piotr.atyjaszyk" <piotrmk1@gmail.com>
Date: Thu, 26 Jan 2017 12:56:51 +0100
Subject: [PATCH] Fixes and changes in preparation for appointment planning
 functionality and modifying names

---
 smash/web/admin.py  |  2 +-
 smash/web/models.py | 70 ++++++++++++++++++++++++++++-----------------
 2 files changed, 45 insertions(+), 27 deletions(-)

diff --git a/smash/web/admin.py b/smash/web/admin.py
index 39e6b331..a375578b 100644
--- a/smash/web/admin.py
+++ b/smash/web/admin.py
@@ -12,7 +12,7 @@ admin.site.register(Subject)
 admin.site.register(Visit)
 admin.site.register(Item)
 admin.site.register(Room)
-admin.site.register(AppType)
+admin.site.register(AppointmentType)
 admin.site.register(Language, LanguageAdmin)
 admin.site.register(Worker)
 admin.site.register(FlyingTeam)
diff --git a/smash/web/models.py b/smash/web/models.py
index bd76a27e..e544a95a 100644
--- a/smash/web/models.py
+++ b/smash/web/models.py
@@ -74,14 +74,16 @@ class Subject(models.Model):
         verbose_name='MPower ID'
     )
     STATUS_CHOICES = (
-        ('INV', 'Invited'),
-        ('OPT', 'Opted out'),
-        ('PAR', 'Participating'),
+        ('NCO', 'Not contacted'),
         ('TST', 'Test group'),
+        ('LEA', 'Level A'),
+        ('LEB', 'Level B'),
+        ('OPT', 'Opted out'),
         ('DEA', 'Dead')
     )
     subjectStatus = models.CharField(max_length=3, choices=STATUS_CHOICES,
-        verbose_name='Status'
+        verbose_name='Status',
+        default='NCO'
     )
     mainPseudonym = models.CharField(max_length=45,
         verbose_name='Pseudonym'
@@ -90,6 +92,15 @@ class Subject(models.Model):
         verbose_name='Comments'
     )
 
+    dateAdded = models.DateField(verbose_name='Added on',
+        auto_now=True
+    )
+
+    referral = models.CharField(max_length=128,
+        null=True,
+        verbose_name='Referred by'
+    )
+
     def __str__(self):
         return "%s %s" % (self.firstName, self.lastName)
 
@@ -106,15 +117,19 @@ class Visit(models.Model):
     )
     visitEnd = models.DateTimeField(
         verbose_name='Visit ends at'
+    ) # Deadline before which all appointments need to be scheduled
+    TYPE_CHOICES = (
+        ('A', 'Level A visit'),
+        ('B', 'Level B visit'),
+        ('O', 'Other')
     )
-    assesmentNo = models.IntegerField(
-        verbose_name='Which assesment'
-    )
-    visitType = models.IntegerField(
-        verbose_name='Type of visit'
+    visitType = models.CharField(max_length=1, choices=TYPE_CHOICES,
+        verbose_name='Visit type',
+        default='O'
     )
     visitFinished = models.BooleanField(
-        verbose_name='Has ended'
+        verbose_name='Has ended',
+        default=False
     )
 
     def __str__(self):
@@ -138,7 +153,7 @@ class Item (models.Model):
 class Room (models.Model):
     possEquipment = models.ManyToManyField(Item,
         verbose_name='On-site equipment',
-        null=True, blank=True
+        blank=True
     )
     owner = models.CharField(max_length=50,
         verbose_name='Owner'
@@ -162,24 +177,20 @@ class Room (models.Model):
     def __str__(self):
         return "%d %s %s" % (self.roomNo, self.address, self.city)
 
-class AppType (models.Model):
-    reqEquipment = models.ManyToManyField(Item,
+class AppointmentType (models.Model):
+    requiredEquipment = models.ManyToManyField(Item,
         verbose_name='Required equipment'
     )
-    followUp = models.ForeignKey('self',
-        verbose_name='Follow-up visit',
-        null=True, blank=True
-    )
-    apCode = models.CharField(max_length=20,
+    code = models.CharField(max_length=20,
         verbose_name='Appointment code'
     )
-    apDescription = models.CharField(max_length=2000,
+    description = models.CharField(max_length=2000,
         verbose_name='Appointment description'
     )
-    apDefaultTime = models.IntegerField(
+    defaultTime = models.IntegerField(
         verbose_name='Default time'
     )
-    apRestTime = models.IntegerField(
+    restTime = models.IntegerField(
         verbose_name='Suggested rest time'
     )
 
@@ -279,7 +290,8 @@ class Avaibility(models.Model):
         verbose_name='Avaible until'
     )
     current = models.BooleanField(
-        verbose_name='Is current?'
+        verbose_name='Is current?',
+        default=True
     )
 
     def __str__(self):
@@ -304,8 +316,13 @@ class Appointment(models.Model):
         verbose_name='Flying team (if applicable)',
         null=True, blank=True
     )
-    appType = models.ForeignKey(AppType,
-        verbose_name='Appointment type'
+    workerAssigned = models.ForeignKey(Worker,
+        verbose_name='Worker conducting the assessment (if applicable)',
+        null=True, blank=True
+    )
+    appointmentType = models.ForeignKey(AppointmentType,
+        verbose_name='Appointment type',
+        null=True, blank=True
     )
     room = models.ForeignKey(Room,
         verbose_name='Room ID'
@@ -318,7 +335,8 @@ class Appointment(models.Model):
     )
     appLength = models.IntegerField(
         verbose_name='Appointment length'
-    )
+    )#Potentially redundant; but can be used to manually adjust appointment's length
     appFinished = models.BooleanField(
-        verbose_name='Has the appointment ended?'
+        verbose_name='Has the appointment ended?',
+        default=False
     )
-- 
GitLab