Newer
Older
from django.contrib.auth.models import User, AnonymousUser
logger = logging.getLogger(__name__)
class Worker(models.Model):
class Meta:
app_label = 'web'
languages = models.ManyToManyField("web.Language",
verbose_name='Known languages'
)
locations = models.ManyToManyField("web.Location",
verbose_name='Locations'
)
appointments = models.ManyToManyField('web.Appointment', blank=True,
verbose_name='Appointments'
)
user = models.OneToOneField(User, blank=True, null=True,
verbose_name='Username'
)
first_name = models.CharField(max_length=50,
verbose_name='First name'
)
last_name = models.CharField(max_length=50,
verbose_name='Last name'
)
phone_number = models.CharField(max_length=20,
verbose_name='Phone number'
)
unit = models.CharField(max_length=50,
verbose_name='Unit'
)
email = models.EmailField(
verbose_name='E-mail'
)
specialization = models.CharField(max_length=20,
verbose_name='Specialization'
)
def is_on_leave(self):
if len(self.holiday_set.filter(datetime_end__gt=datetime.datetime.now(),
datetime_start__lt=datetime.datetime.now())):
return True
return False
def disable(self):
if self.user is not None:
self.user.is_active = False
self.user.save()
logger.info("'" + self.user.username + "' account has been disabled")
return True
else:
logger.warn("Cannot disable account for user '" + self.first_name + " " + self.last_name + "'")
return False
def is_active(self):
if self.user is not None:
return self.user.is_active
else:
return False
@staticmethod
def get_by_user(the_user):
if isinstance(the_user, User):
workers = Worker.objects.filter(user=the_user)
if len(workers) > 0:
return workers[0]
else:
return None
elif isinstance(the_user, Worker):
return the_user
elif isinstance(the_user, AnonymousUser):
return None
elif the_user is not None:
raise TypeError("Unknown class type: " + the_user.__class__.__name__)
else:
return None
@staticmethod
def get_details(the_user):
return the_user.get_full_name(), '<No worker information>'
else:
person = persons[0]
role = "N/A"
if person.roles.filter(study=GLOBAL_STUDY_ID).count() > 0:
role = person.roles.filter(study=GLOBAL_STUDY_ID)[0].get_role_display()
return unicode(person), role
def __str__(self):
return "%s %s" % (self.first_name, self.last_name)
def __unicode__(self):
return "%s %s" % (self.first_name, self.last_name)
def initials(self):
result = ""
if len(self.first_name) > 0:
result += self.first_name[0]
if len(self.last_name) > 0:
result += self.last_name[0]
return result