Newer
Older
# coding=utf-8
from django.db import models
from constants import BOOL_CHOICES, SEX_CHOICES, SUBJECT_TYPE_CHOICES
from . import Appointment, Language, Location, Visit
class Subject(models.Model):
class Meta:
app_label = 'web'
def finish_all_visits(self):
visits = Visit.objects.filter(subject=self, is_finished=False)
for visit in visits:
visit.is_finished = True
visit.save()
def finish_all_appointments(self):
appointments = Appointment.objects.filter(visit__subject=self, status=Appointment.APPOINTMENT_STATUS_SCHEDULED)
for appointment in appointments:
appointment.status = Appointment.APPOINTMENT_STATUS_CANCELLED
appointment.save()
def mark_as_dead(self):
self.dead = True
self.finish_all_visits()
self.finish_all_appointments()
def mark_as_resigned(self):
self.resigned = True
self.finish_all_visits()
self.finish_all_appointments()
sex = models.CharField(max_length=1,
choices=SEX_CHOICES,
verbose_name='Sex'
)
postponed = models.BooleanField(choices=BOOL_CHOICES,
verbose_name='Postponed',
default=False
)
datetime_contact_reminder = models.DateTimeField(
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
null=True,
blank=True,
verbose_name='Contact on',
)
type = models.CharField(max_length=1,
choices=SUBJECT_TYPE_CHOICES.items(),
verbose_name='Type'
)
default_location = models.ForeignKey(Location,
verbose_name='Default appointment location',
)
first_name = models.CharField(max_length=50,
verbose_name='First name'
)
last_name = models.CharField(max_length=50,
verbose_name='Last name'
)
languages = models.ManyToManyField(Language,
blank=True,
verbose_name='Known languages'
)
default_written_communication_language = models.ForeignKey(Language,
null=True,
blank=True,
related_name="%(class)s_written_comunication",
verbose_name='Default language for document generation'
)
phone_number = models.CharField(max_length=20,
null=True,
blank=True,
verbose_name='Phone number'
)
phone_number_2 = models.CharField(max_length=20,
null=True,
blank=True,
verbose_name='Phone number 2'
)
phone_number_3 = models.CharField(max_length=20,
null=True,
blank=True,
verbose_name='Phone number 3'
)
email = models.EmailField(
null=True,
blank=True,
verbose_name='E-mail'
)
date_born = models.DateField(
null=True,
blank=True,
verbose_name='Date of birth (YYYY-MM-DD)'
)
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.CharField(max_length=50,
verbose_name='Country'
)
screening_number = models.CharField(max_length=50,
unique=True,
verbose_name='Screening number', blank=False, null=False
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
)
nd_number = models.CharField(max_length=6,
blank=True,
verbose_name='ND number'
)
mpower_id = models.CharField(max_length=20,
blank=True,
verbose_name='MPower ID'
)
comments = models.TextField(max_length=2000,
blank=True,
verbose_name='Comments'
)
date_added = models.DateField(verbose_name='Added on',
auto_now=True
)
referral = models.CharField(max_length=128,
null=True,
blank=True,
verbose_name='Referred by'
)
diagnosis = models.CharField(max_length=128,
null=True,
blank=True,
verbose_name='Diagnosis'
)
year_of_diagnosis = models.IntegerField(
default=0,
null=True,
blank=True,
verbose_name='Year of diagnosis (YYYY)'
)
information_sent = models.BooleanField(
verbose_name='Information sent',
default=False
)
pd_in_family = models.BooleanField(
verbose_name='PD in family',
default=False,
)
dead = models.BooleanField(
verbose_name='Deceased',
default=False,
editable=True
)
resigned = models.BooleanField(
verbose_name='Resigned',
default=False,
editable=True
)
def latest_visit(self):
visits = self.visit_set.all()
if len(visits) == 0:
return None
result = visits[0]
for visit in visits:
if visit.datetime_begin > result.datetime_begin:
result = visit
return result
def __str__(self):
return "%s %s" % (self.first_name, self.last_name)
def __unicode__(self):
return "%s %s" % (self.first_name, self.last_name)