Project

General

Profile

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

calebasse / calebasse / ressources / models.py @ 8920fc06

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

    
3
from django.db import models
4
from django.db.models import query
5

    
6
from calebasse.models import PhoneNumberField, ZipCodeField
7

    
8
from model_utils.managers import PassThroughManager
9

    
10

    
11
class ServiceLinkedQuerySet(query.QuerySet):
12
    def for_service(self, service, allow_global=True):
13
        '''Allows service local and service global objects'''
14
        return self.filter(models.Q(service=service)
15
                |models.Q(service__isnull=allow_global))
16

    
17
ServiceLinkedManager = PassThroughManager.for_queryset_class(ServiceLinkedQuerySet)
18

    
19
class NamedAbstractModel(models.Model):
20
    name = models.CharField(max_length=100, verbose_name=u'Nom')
21

    
22
    def __unicode__(self):
23
        return self.name
24

    
25
    def __repr__(self):
26
        return '<%s %r>' % (self.__class__.__name__, unicode(self))
27

    
28
    class Meta:
29
        abstract = True
30
        ordering = ['name']
31

    
32
class ServiceLinkedAbstractModel(models.Model):
33
    objects = ServiceLinkedManager()
34
    service = models.ForeignKey('Service', null=True, blank=True)
35

    
36
    class Meta:
37
        abstract = True
38

    
39
# Caisse d'assurance maladie
40
class HealthFund(NamedAbstractModel):
41
    class Meta:
42
        verbose_name = u'Caisse d\'assurances maladie'
43
        verbose_name_plural = u'Caisses d\'assurances maladie'
44

    
45
    abbreviation = models.CharField(max_length=8)
46
    active = models.BooleanField(default=True)
47
    address = models.CharField(max_length=120)
48
    address_complement = models.CharField(max_length=120, blank=True,
49
            null=True, default=None)
50
    zip_code = models.IntegerField(max_length=8)
51
    city = models.CharField(max_length=80)
52
    phone = models.CharField(max_length=30)
53
    fax = models.CharField(max_length=30)
54
    email = models.EmailField()
55
    accounting_number = models.CharField(max_length=30)
56
    correspondant = models.CharField(max_length=80)
57

    
58

    
59
class TransportCompany(NamedAbstractModel):
60
    class Meta:
61
        verbose_name = u'Compagnie de transport'
62
        verbose_name_plural = u'Compagnies de transport'
63

    
64

    
65
class CFTMEACode(NamedAbstractModel):
66
    class Meta:
67
        verbose_name = u'Code CFTMEA'
68
        verbose_name_plural = u'Codes CFTMEA'
69

    
70

    
71
class UninvoicableCode(models.Model):
72
    class Meta:
73
        verbose_name = u'Code de non-facturation'
74
        verbose_name_plural = u'Codes de non-facturation'
75

    
76

    
77
class Office(ServiceLinkedAbstractModel):
78
    class Meta:
79
        verbose_name = u'Établissement'
80
        verbose_name_plural = u'Établissements'
81

    
82
    def __unicode__(self):
83
        return self.slug
84

    
85
    slug = models.SlugField(verbose_name='Label')
86
    description = models.TextField(blank=True, null=True)
87

    
88
    # Contact
89
    phone = PhoneNumberField(verbose_name=u"Téléphone", blank=True, null=True)
90
    fax = PhoneNumberField(verbose_name=u"Fax", blank=True, null=True)
91
    email = models.EmailField(blank=True, null=True)
92

    
93
    # Address
94
    address = models.CharField(max_length=120,
95
            verbose_name=u"Addresse")
96
    address_complement = models.CharField(max_length=120,
97
            blank=True,
98
            null=True,
99
            default=None,
100
            verbose_name=u"Complément d'addresse")
101
    zip_code = ZipCodeField(verbose_name=u"Code postal")
102
            #verbose_name=u"Code postal")
103
    city = models.CharField(max_length=80,
104
            verbose_name=u"Ville")
105

    
106
    # TODO: add this fields : finess, suite, dm, dpa, genre, categorie, statut_juridique, mft, mt, dmt
107

    
108
class School(models.Model):
109
    class Meta:
110
        verbose_name = u'Lieu de scolarisation'
111
        verbose_name_plural = u'Lieux de scolarisation'
112

    
113
    def __unicode__(self):
114
        return self.name
115

    
116
    name = models.CharField(max_length=70, blank=False)
117
    description = models.TextField(blank=True, null=True, default=None)
118
    address = models.CharField(max_length=120)
119
    address_complement = models.CharField(max_length=120,
120
            blank=True,
121
            null=True,
122
            default=None)
123
    zip_code = ZipCodeField(verbose_name=u"Code postal")
124
    city = models.CharField(max_length=80)
125
    phone = PhoneNumberField(verbose_name=u"Téléphone")
126
    fax = models.CharField(max_length=30,
127
            blank=True, null=True, default=None)
128
    email = models.EmailField(blank=True, null=True)
129
    director_name = models.CharField(max_length=70,
130
            blank=True, null=True, default=None)
131

    
132
class SchoolTeacherRole(NamedAbstractModel):
133
    class Meta:
134
        verbose_name = u'Type de rôle des professeurs'
135
        verbose_name_plural = u'Types de rôle des professeurs'
136

    
137
class InscriptionMotive(NamedAbstractModel):
138
    class Meta:
139
        verbose_name = u'Motif d\'inscription'
140
        verbose_name_plural = u'Motifs d\'inscription'
141

    
142

    
143
class Nationality(NamedAbstractModel):
144
    class Meta:
145
        verbose_name = u'Nationalité'
146
        verbose_name_plural = u'Nationalités'
147

    
148

    
149
class Job(NamedAbstractModel):
150
    class Meta:
151
        verbose_name = u'Profession'
152
        verbose_name_plural = u'Professions'
153

    
154

    
155
class RoomQuerySet(query.QuerySet):
156
    def for_etablissement(self, etablissement):
157
        return self.filter(etablissement=etablissement)
158

    
159
    def for_service(self, service):
160
        return self.filter(etablissement__service=service)
161

    
162

    
163
class Room(NamedAbstractModel):
164
    objects = PassThroughManager.for_queryset_class(RoomQuerySet)()
165
    etablissement = models.ForeignKey('Office')
166

    
167
    class Meta:
168
        verbose_name = u'Salle'
169
        verbose_name_plural = u'Salles'
170

    
171

    
172
class Service(NamedAbstractModel):
173
    admin_only = True
174

    
175
    slug = models.SlugField()
176
    description = models.TextField()
177

    
178
    # Contact
179
    phone = PhoneNumberField(verbose_name=u"Téléphone")
180
    fax = PhoneNumberField(verbose_name=u"Fax")
181
    email = models.EmailField()
182

    
183
    class Meta:
184
        verbose_name = u'Service'
185
        verbose_name_plural = u'Services'
186

    
187
class ActTypeQuerySet(query.QuerySet):
188
    def for_service(self, service):
189
        return self.filter(service=service)
190

    
191
class ActType(NamedAbstractModel, ServiceLinkedAbstractModel):
192
    objects = PassThroughManager.for_queryset_class(ActTypeQuerySet)()
193
    billable = models.BooleanField(default=True, verbose_name=u"Facturable")
194

    
195
    class Meta(NamedAbstractModel.Meta):
196
        verbose_name = u'Type d\'actes'
197
        verbose_name_plural = u'Types d\'actes'
198

    
199
class ParentalAuthorityType(NamedAbstractModel):
200
    class Meta:
201
        verbose_name = u'Type d\'autorité parentale'
202
        verbose_name_plural = u'Types d\'autorités parentales'
203

    
204

    
205
class ParentalCustodyType(NamedAbstractModel):
206
    class Meta:
207
        verbose_name = u'Type de gardes parentales'
208
        verbose_name_plural = u'Types de gardes parentales'
209

    
210

    
211
class SessionType(NamedAbstractModel):
212
    class Meta:
213
        verbose_name = u'Type de séance'
214
        verbose_name_plural = u'Types de séances'
215

    
216

    
217
class FamilySituationType(NamedAbstractModel):
218
    class Meta:
219
        verbose_name = u'Type de situation familiale'
220
        verbose_name_plural = u'Types de situations familiales'
221

    
222

    
223
class TransportType(NamedAbstractModel):
224
    class Meta:
225
        verbose_name = u'Type de transport'
226
        verbose_name_plural = u'Types de transports'
227

    
228

    
229
class WorkerType(NamedAbstractModel):
230
    intervene = models.BooleanField(
231
            verbose_name=u'Intervenant',
232
            blank=True)
233

    
234
    class Meta:
235
        verbose_name = u'Type de personnel'
236
        verbose_name_plural = u'Types de personnel'
(3-3/6)