# coding=utf-8 import datetime from django.contrib.auth.models import User from django.db import models 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' ) ROLE_CHOICES_SECRETARY = "SECRETARY" ROLE_CHOICES = ( ('DOCTOR', 'Doctor'), ('NURSE', 'Nurse'), ('PSYCHOLOGIST', 'Psychologist'), ('TECHNICIAN', 'Technician'), (ROLE_CHOICES_SECRETARY, 'Secretary') ) role = models.CharField(max_length=20, choices=ROLE_CHOICES, verbose_name='Role' ) 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 @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 the_user is not None: raise TypeError("Unknown class type: " + the_user.__class__.__name__) else: return None @staticmethod def get_details(the_user): if not the_user.is_authenticated: return 'Guest', 'Test account' person = Worker.objects.filter(user=the_user) if len(person) == 0: return the_user.get_full_name(), '<No worker information>' else: # For get_*_display, see: # https://docs.djangoproject.com/en/1.10/topics/db/models/#field-options return unicode(person[0]), person[0].get_role_display() def __str__(self): return "%s %s" % (self.first_name, self.last_name) def __unicode__(self): return "%s %s" % (self.first_name, self.last_name)