Skip to content
Snippets Groups Projects
worker.py 3.94 KiB
Newer Older
# coding=utf-8
import datetime
import logging
from django.contrib.auth.models import User, AnonymousUser
from django.db import models

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'
    )
    ROLE_CHOICES_SECRETARY = "SECRETARY"
    ROLE_CHOICES_DOCTOR = "DOCTOR"
    ROLE_CHOICES = (
        (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

    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):
        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)