Project

General

Profile

Download (2.91 KB) Statistics
| Branch: | Tag: | Revision:

calebasse / calebasse / personnes / models.py @ 357bf56d

1
# -*- coding: utf-8 -*-
2

    
3
from datetime import datetime
4

    
5
from django.db import models
6
from django.contrib.auth.models import User
7

    
8
from calebasse.ressources.models import WorkerType
9
from calebasse.models import WeekdayField, BaseModelMixin
10

    
11
from interval import Interval
12

    
13
class People(BaseModelMixin, models.Model):
14
    last_name = models.CharField(max_length=128, verbose_name=u'Nom')
15
    first_name = models.CharField(max_length=128, verbose_name=u'Prénom(s)')
16
    display_name = models.CharField(max_length=256,
17
            verbose_name=u'Nom complet', editable=False)
18

    
19
    def save(self, **kwargs):
20
        self.display_name = self.first_name + ' ' + self.last_name
21
        super(People, self).save(**kwargs)
22

    
23
    def __unicode__(self):
24
        return self.display_name
25

    
26
class WorkerManager(models.Manager):
27

    
28
    def for_service(self, service, type=None):
29
        if type:
30
            return self.filter(services__in=[service]).filter(type=type)
31
        else:
32
            return self.filter(services__in=[service])
33

    
34
class Worker(People):
35
    objects = WorkerManager()
36
    # TODO : use manytomany here ?
37
    type = models.ForeignKey('ressources.WorkerType',
38
            verbose_name=u'Type de personnel')
39
    services = models.ManyToManyField('ressources.Service')
40

    
41
    class Meta:
42
        verbose_name = u'Personnel'
43
        verbose_name_plural = u'Personnels'
44

    
45
class UserWorker(BaseModelMixin, User):
46
    worker = models.ForeignKey('Worker',
47
            verbose_name=u'Personnel')
48

    
49
    def __unicode__(self):
50
        return u'Lien entre la personne %s et l\'utilisateur %s' % (
51
                self.people, super(UserPeople, self).__unicode__())
52

    
53
class SchoolTeacher(People):
54
    schools = models.ManyToManyField('ressources.School')
55
    role = models.ForeignKey('ressources.SchoolTeacherRole')
56

    
57
class TimeTable(BaseModelMixin, models.Model):
58
    worker = models.ForeignKey(Worker,
59
            verbose_name=u'Intervenant')
60
    service = models.ForeignKey('ressources.Service')
61
    weekday = WeekdayField(
62
            verbose_name=u'Jour')
63
    start_time = models.TimeField(
64
        verbose_name=u'Heure de début')
65
    end_time = models.TimeField(
66
        verbose_name=u'Heure de fin')
67
    start_date = models.DateField(
68
        verbose_name=u'Début')
69
    end_date = models.DateField(
70
        verbose_name=u'Fin', blank=True, null=True)
71

    
72
    def __unicode__(self):
73
        s = u'%s pour le %s le %s de %s à %s' % \
74
                (self.worker, self.service, self.weekday, self.start_time,
75
                        self.end_time)
76
        if self.end_time:
77
            s += u' à partir du %s' % self.start_date
78
        else:
79
            s += u' du %s au %s' % (self.start_data, self.end_date)
80
        return s
81

    
82
    class Meta:
83
        verbose_name = u'Emploi du temps'
84
        verbose_name_plural = u'Emplois du temps'
85

    
86
    def to_interval(self, date):
87
        return Interval(datetime.combine(date, self.start_time),
88
                datetime.combine(date, self.end_time))
(4-4/7)