Project

General

Profile

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

calebasse / calebasse / ressources / models.py @ 88a1a343

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

    
3
from django.db import models
4
from django.db.models import query
5
from model_utils import Choices
6

    
7
from calebasse.models import PhoneNumberField, ZipCodeField
8

    
9
from model_utils.managers import PassThroughManager
10

    
11

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

    
18
ServiceLinkedManager = PassThroughManager.for_queryset_class(ServiceLinkedQuerySet)
19

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

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

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

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

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

    
37
    class Meta:
38
        abstract = True
39

    
40
class HealthCenter(NamedAbstractModel):
41
    class Meta:
42
        verbose_name = u'Centre d\'assurance maladie'
43
        verbose_name_plural = u'Centres d\'assurances maladie'
44

    
45
    def __unicode__(self):
46
        return self.large_regime.code + ' ' + self.health_fund + ' ' + self.code + ' ' + self.name
47

    
48
    code = models.CharField(verbose_name=u"Code du centre",
49
            max_length=4,
50
            null=True, blank=True)
51
    large_regime = models.ForeignKey('LargeRegime',
52
            verbose_name=u"Grand régime")
53
    dest_organism = models.CharField(max_length=8,
54
            verbose_name=u"Organisme destinataire")
55
    computer_center_code = models.CharField(max_length=8,
56
            verbose_name=u"Code centre informatique",
57
            null=True, default=True)
58
    abbreviation = models.CharField(verbose_name=u'Abbrévation',
59
            max_length=8,
60
            null=True, default=True)
61
    health_fund = models.CharField(verbose_name=u"Numéro de la caisse",
62
            max_length=3)
63
    active = models.BooleanField(default=True)
64
    address = models.CharField(max_length=120)
65
    address_complement = models.CharField(max_length=120, blank=True,
66
            null=True, default=None)
67
    zip_code = models.CharField(max_length=8)
68
    city = models.CharField(max_length=80)
69
    phone = models.CharField(max_length=30)
70
    fax = models.CharField(max_length=30,
71
            null=True, blank=True)
72
    email = models.EmailField(
73
            null=True, blank=True)
74
    accounting_number = models.CharField(max_length=30,
75
             null=True, blank=True)
76
    correspondant = models.CharField(max_length=80)
77

    
78

    
79
class LargeRegime(NamedAbstractModel):
80
    class Meta:
81
        verbose_name = u'Grand régime'
82
        verbose_name_plural = u'Grands régimes'
83

    
84
    def __unicode__(self):
85
        return self.code + ' ' + self.name
86

    
87
    code = models.CharField(verbose_name=u"Code grand régime",
88
            max_length=2)
89

    
90

    
91
class TransportCompany(NamedAbstractModel):
92
    description = models.TextField(blank=True, null=True, default=None)
93
    address = models.CharField(max_length=120,
94
            verbose_name=u"Adresse", blank=True, null=True, default=None)
95
    address_complement = models.CharField(max_length=120,
96
            blank=True,
97
            null=True,
98
            default=None,
99
            verbose_name=u"Complément d'adresse")
100
    zip_code = ZipCodeField(verbose_name=u"Code postal",
101
        blank=True, null=True, default=None)
102
    city = models.CharField(max_length=80, verbose_name=u"Ville",
103
        blank=True, null=True, default=None)
104
    phone = PhoneNumberField(verbose_name=u"Téléphone",
105
        blank=True, null=True, default=None)
106
    fax = models.CharField(max_length=30,
107
            blank=True, null=True, default=None)
108
    email = models.EmailField(blank=True, null=True)
109
    correspondant = models.CharField(max_length=80, blank=True, null=True)
110
    old_camsp_id = models.CharField(max_length=256,
111
            verbose_name=u'Ancien ID au CAMSP', blank=True, null=True)
112
    old_cmpp_id = models.CharField(max_length=256,
113
            verbose_name=u'Ancien ID au CMPP', blank=True, null=True)
114
    old_sessad_dys_id = models.CharField(max_length=256,
115
            verbose_name=u'Ancien ID au SESSAD TED', blank=True, null=True)
116
    old_sessad_ted_id = models.CharField(max_length=256,
117
            verbose_name=u'Ancien ID au SESSAD DYS', blank=True, null=True)
118

    
119
    class Meta:
120
        verbose_name = u'Compagnie de transport'
121
        verbose_name_plural = u'Compagnies de transport'
122

    
123

    
124
class UninvoicableCode(models.Model):
125
    class Meta:
126
        verbose_name = u'Code de non-facturation'
127
        verbose_name_plural = u'Codes de non-facturation'
128

    
129

    
130
class Office(NamedAbstractModel):
131
    class Meta:
132
        verbose_name = u'Établissement'
133
        verbose_name_plural = u'Établissements'
134

    
135
    def __unicode__(self):
136
        return self.name
137

    
138
    description = models.TextField(blank=True, null=True)
139

    
140
    # Contact
141
    phone = PhoneNumberField(verbose_name=u"Téléphone", blank=True, null=True)
142
    fax = PhoneNumberField(verbose_name=u"Fax", blank=True, null=True)
143
    email = models.EmailField(blank=True, null=True)
144

    
145
    # Address
146
    address = models.CharField(max_length=120,
147
            verbose_name=u"Adresse", blank=True, null=True, default=None)
148
    address_complement = models.CharField(max_length=120,
149
            blank=True,
150
            null=True,
151
            default=None,
152
            verbose_name=u"Complément d'adresse")
153
    zip_code = ZipCodeField(verbose_name=u"Code postal",
154
            blank=True, null=True, default=None)
155
    city = models.CharField(max_length=80, verbose_name=u"Ville",
156
            blank=True, null=True, default=None)
157

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

    
160
class SchoolType(NamedAbstractModel):
161
    class Meta:
162
        verbose_name = u'Type du lieu de socialisation'
163
        verbose_name_plural = u'Types du lieu de socialisation'
164

    
165
    services = models.ManyToManyField('ressources.Service')
166

    
167
class School(NamedAbstractModel):
168
    class Meta:
169
        verbose_name = u'Lieu de socialisation'
170
        verbose_name_plural = u'Lieux de socialisation'
171

    
172
    def __unicode__(self):
173
        if self.school_type.name != 'Inconnu':
174
            return unicode(self.school_type) + ' ' + self.name
175
        return self.name
176

    
177
    school_type = models.ForeignKey('ressources.SchoolType',
178
        verbose_name=u"Type d'établissement")
179
    description = models.TextField(blank=True, null=True, default=None)
180
    address = models.CharField(max_length=120,
181
            verbose_name=u"Adresse", blank=True, null=True, default=None)
182
    address_complement = models.CharField(max_length=120,
183
            blank=True,
184
            null=True,
185
            default=None,
186
            verbose_name=u"Complément d'adresse")
187
    zip_code = ZipCodeField(verbose_name=u"Code postal",
188
        blank=True, null=True, default=None)
189
    city = models.CharField(max_length=80, verbose_name=u"Ville",
190
        blank=True, null=True, default=None)
191
    phone = PhoneNumberField(verbose_name=u"Téléphone",
192
        blank=True, null=True, default=None)
193
    fax = models.CharField(max_length=30,
194
            blank=True, null=True, default=None)
195
    email = models.EmailField(blank=True, null=True, default=None)
196
    director_name = models.CharField(max_length=70,
197
            blank=True, null=True, default=None,
198
            verbose_name=u"Nom du directeur")
199
    old_id = models.CharField(max_length=256,
200
            verbose_name=u'Ancien ID', blank=True, null=True)
201
    old_service = models.CharField(max_length=256,
202
            verbose_name=u'Ancien Service', blank=True, null=True)
203

    
204

    
205
class SchoolTeacherRole(NamedAbstractModel):
206
    class Meta:
207
        verbose_name = u'Type de rôle des professeurs'
208
        verbose_name_plural = u'Types de rôle des professeurs'
209

    
210

    
211
class SchoolLevel(NamedAbstractModel):
212
    old_id = models.CharField(max_length=256,
213
            verbose_name=u'Ancien ID', blank=True, null=True)
214
    old_service = models.CharField(max_length=256,
215
            verbose_name=u'Ancien Service', blank=True, null=True)
216

    
217
    class Meta:
218
        verbose_name = u'Classe'
219
        verbose_name_plural = u'Classes'
220

    
221

    
222
class SocialisationDuration(models.Model):
223
    class Meta:
224
        verbose_name = u'Période de socialisation'
225
        verbose_name_plural = u'Périodes de socialisation'
226

    
227
    school = models.ForeignKey('ressources.School',
228
        verbose_name=u'Lieu de socialisation',
229
        blank=True, null=True)
230
    level = models.ForeignKey('ressources.SchoolLevel',
231
        verbose_name=u'Classe',
232
        blank=True, null=True)
233
    redoublement = models.BooleanField(verbose_name=u"Redoublement",
234
            default=False)
235
    start_date = models.DateField(verbose_name=u"Date d'arrivée")
236
    contact = models.CharField(verbose_name=u"Contact", max_length=200, blank=True, null=True, default=None)
237
    end_date = models.DateField(verbose_name=u"Date de départ",
238
        blank=True, null=True)
239
    created = models.DateTimeField(u'Création', auto_now_add=True)
240
    comment = models.TextField(max_length=3000,
241
        blank=True, null=True, verbose_name=u"Commentaire")
242

    
243

    
244
class InscriptionMotive(NamedAbstractModel):
245
    class Meta:
246
        verbose_name = u'Motif d\'inscription'
247
        verbose_name_plural = u'Motifs d\'inscription'
248

    
249
class Provenance(NamedAbstractModel):
250
    old_id = models.CharField(max_length=256,
251
            verbose_name=u'Ancien ID', blank=True, null=True)
252
    old_service = models.CharField(max_length=256,
253
            verbose_name=u'Ancien Service', blank=True, null=True)
254
    class Meta:
255
        verbose_name = u'Provenance'
256
        verbose_name_plural = u'Provenances'
257

    
258

    
259
class Nationality(NamedAbstractModel):
260
    class Meta:
261
        verbose_name = u'Nationalité'
262
        verbose_name_plural = u'Nationalités'
263

    
264

    
265
class Job(NamedAbstractModel):
266
    class Meta:
267
        verbose_name = u'Profession'
268
        verbose_name_plural = u'Professions'
269

    
270

    
271
class RoomQuerySet(query.QuerySet):
272
    def for_etablissement(self, etablissement):
273
        return self.filter(etablissement=etablissement)
274

    
275
    def for_service(self, service):
276
        return self.filter(etablissement__service=service)
277

    
278

    
279
class Room(NamedAbstractModel):
280
    objects = PassThroughManager.for_queryset_class(RoomQuerySet)()
281
    etablissement = models.ForeignKey('Office')
282

    
283
    class Meta:
284
        verbose_name = u'Salle'
285
        verbose_name_plural = u'Salles'
286

    
287
class AnalyseMotive(NamedAbstractModel):
288
    class Meta:
289
        verbose_name = u"Motif analysé"
290
        verbose_name_plural = u"Motifs analysés"
291

    
292
class FamilyMotive(NamedAbstractModel):
293
    class Meta:
294
        verbose_name = u"Motif familiale"
295
        verbose_name_plural = u"Motifs familiaux"
296

    
297
class OutMotive(NamedAbstractModel):
298
    class Meta:
299
        verbose_name = u"Motif de sortie"
300
        verbose_name_plural = u"Motifs de sortie"
301

    
302
class OutTo(NamedAbstractModel):
303
    class Meta:
304
        verbose_name = u"Orientation de sortie"
305
        verbose_name_plural = u"Orientations de sortie"
306

    
307
class AdviceGiver(NamedAbstractModel):
308
    class Meta:
309
        verbose_name = u"Conseilleur"
310
        verbose_name_plural = u"Conseilleurs"
311

    
312
class Service(NamedAbstractModel):
313
    admin_only = True
314

    
315
    slug = models.SlugField()
316
    description = models.TextField()
317

    
318
    # Contact
319
    phone = PhoneNumberField(verbose_name=u"Téléphone")
320
    fax = PhoneNumberField(verbose_name=u"Fax")
321
    email = models.EmailField()
322

    
323
    class Meta:
324
        verbose_name = u'Service'
325
        verbose_name_plural = u'Services'
326

    
327
class ActTypeQuerySet(query.QuerySet):
328
    def for_service(self, service):
329
        return self.filter(service=service)
330

    
331
class ActType(NamedAbstractModel, ServiceLinkedAbstractModel):
332
    objects = PassThroughManager.for_queryset_class(ActTypeQuerySet)()
333
    billable = models.BooleanField(default=True, verbose_name=u"Facturable")
334

    
335
    class Meta(NamedAbstractModel.Meta):
336
        verbose_name = u'Type d\'actes'
337
        verbose_name_plural = u'Types d\'actes'
338

    
339
class ParentalAuthorityType(NamedAbstractModel):
340
    class Meta:
341
        verbose_name = u'Type d\'autorité parentale'
342
        verbose_name_plural = u'Types d\'autorités parentales'
343

    
344

    
345
class ParentalCustodyType(NamedAbstractModel):
346
    class Meta:
347
        verbose_name = u'Type de gardes parentales'
348
        verbose_name_plural = u'Types de gardes parentales'
349

    
350

    
351
class SessionType(NamedAbstractModel):
352
    class Meta:
353
        verbose_name = u'Type de séance'
354
        verbose_name_plural = u'Types de séances'
355

    
356

    
357
class FamilySituationType(NamedAbstractModel):
358
    class Meta:
359
        verbose_name = u'Type de situation familiale'
360
        verbose_name_plural = u'Types de situations familiales'
361

    
362

    
363
class TransportType(NamedAbstractModel):
364
    class Meta:
365
        verbose_name = u'Type de transport'
366
        verbose_name_plural = u'Types de transports'
367

    
368

    
369
class WorkerType(NamedAbstractModel):
370
    intervene = models.BooleanField(
371
            verbose_name=u'Intervenant',
372
            blank=True)
373

    
374
    class Meta:
375
        verbose_name = u'Type de personnel'
376
        verbose_name_plural = u'Types de personnel'
377

    
378

    
379
AXIS =  Choices(
380
        (1, 'Axe I : catégories cliniques'),
381
        (2, 'Axe II : facteurs organiques'),
382
        (3, 'Axe II : facteurs environnementaux'),
383
)
384

    
385
class CodeCFTMEA(NamedAbstractModel):
386
    code = models.IntegerField(verbose_name=u"Code")
387
    axe = models.IntegerField(verbose_name=u"Axe", choices=AXIS,
388
            max_length=1)
389

    
390
    def __unicode__(self):
391
        return "%d %s" % (self.code, self.name)
392

    
393
    class Meta:
394
        ordering = ['code']
395
        verbose_name = u'Code CFTMEA'
396
        verbose_name_plural = u'Codes CFTMEA'
397

    
398
class MDPH(models.Model):
399
    class Meta:
400
        verbose_name = u'Etablissement MDPH'
401
        verbose_name_plural = u'Etablissements MDPH'
402

    
403
    def __unicode__(self):
404
        return self.department
405

    
406
    department = models.CharField(max_length=200,
407
            verbose_name=u"Département")
408

    
409
    description = models.TextField(blank=True, null=True)
410

    
411
    # Contact
412
    phone = PhoneNumberField(verbose_name=u"Téléphone", blank=True, null=True)
413
    fax = PhoneNumberField(verbose_name=u"Fax", blank=True, null=True)
414
    email = models.EmailField(blank=True, null=True)
415
    website = models.CharField(max_length=200,
416
            verbose_name=u"Site Web", blank=True, null=True)
417

    
418
    # Address
419
    address = models.CharField(max_length=120,
420
            verbose_name=u"Adresse", blank=True, null=True)
421
    address_complement = models.CharField(max_length=120,
422
            blank=True,
423
            null=True,
424
            default=None,
425
            verbose_name=u"Complément d'addresse")
426
    zip_code = ZipCodeField(verbose_name=u"Code postal",
427
        blank=True, null=True)
428
    city = models.CharField(max_length=80,
429
            verbose_name=u"Ville", blank=True, null=True)
430

    
431
class MDPHRequest(models.Model):
432
    class Meta:
433
        verbose_name = u'Demande MDPH'
434
        verbose_name_plural = u'Demandes MDPH'
435

    
436
    start_date = models.DateField(verbose_name=u"Date de la demande")
437
    mdph = models.ForeignKey('ressources.MDPH',
438
            verbose_name=u"MDPH")
439
    comment = models.TextField(max_length=3000,
440
        blank=True, null=True, verbose_name=u"Commentaire")
441
    created = models.DateTimeField(u'Création', auto_now_add=True)
442

    
443
MDPH_HELP =  Choices(
444
        (0, "Non défini"),
445
        (1, "AEEH (Allocation d'éducation de l'enfant handicapé)"),
446
        (2, 'AVS (Assistant de vie scolaire)'),
447
        (3, 'EVS (Emplois de vie scolaire)'),
448
)
449

    
450
class MDPHResponse(models.Model):
451
    class Meta:
452
        verbose_name = u'Réponse MDPH'
453
        verbose_name_plural = u'Réponses MDPH'
454

    
455
    start_date = models.DateField(verbose_name=u"Date de début")
456
    end_date = models.DateField(verbose_name=u"Date de fin")
457
    mdph = models.ForeignKey('ressources.MDPH',
458
            verbose_name=u"MDPH")
459
    comment = models.TextField(max_length=3000,
460
        blank=True, null=True, verbose_name=u"Commentaire")
461
    created = models.DateTimeField(u'Création', auto_now_add=True)
462
    type_aide = models.IntegerField(verbose_name=u"Type d'aide", choices=MDPH_HELP,
463
            max_length=1, default=0)
464
    name =  models.CharField(max_length=200,
465
            verbose_name=u"Nom", blank=True, null=True)
466
    rate =  models.CharField(max_length=10,
467
            verbose_name=u"Taux", blank=True, null=True)
468

    
469

    
470
class HolidayType(NamedAbstractModel):
471
    for_group = models.BooleanField(
472
            verbose_name=u'Congé de groupe',
473
            blank=True)
474

    
475
    class Meta:
476
        verbose_name = u'Type de congé'
477
        verbose_name_plural = u'Types de congé'
(4-4/7)