Newer
Older
# coding=utf-8

Carlos Vega
committed
import logging
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from constants import SEX_CHOICES, COUNTRY_OTHER_ID
from web.models import Country, Visit, Appointment, Provenance
from . import Language

Carlos Vega
committed
logger = logging.getLogger(__name__)
class Meta:
app_label = 'web'
permissions = [
("send_sample_mail_for_appointments", "Can send sample collection list"),
("export_subjects", "Can export subject data to excel/csv"),
]
return Provenance.objects.filter(modified_table=Subject._meta.db_table, modified_table_id=self.id).order_by('-modification_date')
sex = models.CharField(max_length=1,
choices=SEX_CHOICES,
verbose_name='Sex'
)
first_name = models.CharField(max_length=50,
verbose_name='First name'
)
social_security_number = models.CharField(max_length=50,
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="subjects_written_communication",
verbose_name='Default language for document generation'
)
phone_number = models.CharField(max_length=64,
null=True,
blank=True,
verbose_name='Phone number'
)
phone_number_2 = models.CharField(max_length=64,
null=True,
blank=True,
verbose_name='Phone number 2'
)
phone_number_3 = models.CharField(max_length=64,
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
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.ForeignKey(Country,
null=False,
blank=False,
default=COUNTRY_OTHER_ID,
verbose_name='Country'
)
next_of_keen_name = models.CharField(max_length=255,
blank=True,
verbose_name='Next of keen'
)
next_of_keen_phone = models.CharField(max_length=50,
blank=True,
verbose_name='Next of keen phone'
)
next_of_keen_address = models.TextField(max_length=2000,
blank=True,
verbose_name='Next of keen address'
)
dead = models.BooleanField(
verbose_name='Deceased',
default=False,
editable=True
)
def pretty_address(self):
return u'{} ({}), {}. {}'.format(self.address, self.postal_code, self.city, self.country)
def mark_as_dead(self):
self.dead = True
self.finish_all_visits()
self.finish_all_appointments()
def finish_all_visits(self):
visits = Visit.objects.filter(subject__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__subject=self,
status=Appointment.APPOINTMENT_STATUS_SCHEDULED)
for appointment in appointments:
appointment.status = Appointment.APPOINTMENT_STATUS_CANCELLED
appointment.save()
def __str__(self):
return "%s %s" % (self.first_name, self.last_name)
def __unicode__(self):
return "%s %s" % (self.first_name, self.last_name)

Carlos Vega
committed
@receiver(post_save, sender=Subject)

Carlos Vega
committed
def set_as_deceased(sender, instance, **kwargs):
if instance.dead:
p = Provenance(modified_table = Subject._meta.db_table,
modified_table_id = instance.id, modification_author = None,
previous_value = instance.dead, new_value = True,
modification_description = 'Subject "{}" marked as dead'.format(instance),
modified_field = 'dead',
)
instance.mark_as_dead()
p.save()