Project

General

Profile

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

calebasse / calebasse / ressources / models.py @ 1f17fe24

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
    class Meta:
93
        verbose_name = u'Compagnie de transport'
94
        verbose_name_plural = u'Compagnies de transport'
95

    
96

    
97
class UninvoicableCode(models.Model):
98
    class Meta:
99
        verbose_name = u'Code de non-facturation'
100
        verbose_name_plural = u'Codes de non-facturation'
101

    
102

    
103
class Office(NamedAbstractModel):
104
    class Meta:
105
        verbose_name = u'Établissement'
106
        verbose_name_plural = u'Établissements'
107

    
108
    def __unicode__(self):
109
        return self.name
110

    
111
    description = models.TextField(blank=True, null=True)
112

    
113
    # Contact
114
    phone = PhoneNumberField(verbose_name=u"Téléphone", blank=True, null=True)
115
    fax = PhoneNumberField(verbose_name=u"Fax", blank=True, null=True)
116
    email = models.EmailField(blank=True, null=True)
117

    
118
    # Address
119
    address = models.CharField(max_length=120,
120
            verbose_name=u"Adresse", blank=True, null=True, default=None)
121
    address_complement = models.CharField(max_length=120,
122
            blank=True,
123
            null=True,
124
            default=None,
125
            verbose_name=u"Complément d'adresse")
126
    zip_code = ZipCodeField(verbose_name=u"Code postal",
127
            blank=True, null=True, default=None)
128
    city = models.CharField(max_length=80, verbose_name=u"Ville",
129
            blank=True, null=True, default=None)
130

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

    
133
class SchoolType(NamedAbstractModel):
134
    class Meta:
135
        verbose_name = u'Type du lieu de socialisation'
136
        verbose_name_plural = u'Types du lieu de socialisation'
137

    
138
    services = models.ManyToManyField('ressources.Service')
139

    
140

    
141
class School(NamedAbstractModel):
142
    class Meta:
143
        verbose_name = u'Lieu de socialisation'
144
        verbose_name_plural = u'Lieux de socialisation'
145

    
146
    def __unicode__(self):
147
        return self.school_type + ' ' + self.name
148

    
149
    school_type = models.ForeignKey('ressources.SchoolType',
150
        verbose_name=u"Type d'établissement")
151
    description = models.TextField(blank=True, null=True, default=None)
152
    address = models.CharField(max_length=120, blank=True, null=True, default=None)
153
    address_complement = models.CharField(max_length=120,
154
            blank=True,
155
            null=True,
156
            default=None)
157
    zip_code = ZipCodeField(verbose_name=u"Code postal",
158
        blank=True, null=True, default=None)
159
    city = models.CharField(max_length=80,
160
        blank=True, null=True, default=None)
161
    phone = PhoneNumberField(verbose_name=u"Téléphone",
162
        blank=True, null=True, default=None)
163
    fax = models.CharField(max_length=30,
164
            blank=True, null=True, default=None)
165
    email = models.EmailField(blank=True, null=True, default=None)
166
    director_name = models.CharField(max_length=70,
167
            blank=True, null=True, default=None)
168

    
169

    
170
class SchoolTeacherRole(NamedAbstractModel):
171
    class Meta:
172
        verbose_name = u'Type de rôle des professeurs'
173
        verbose_name_plural = u'Types de rôle des professeurs'
174

    
175

    
176
#NO_SCHOOL =  Choices(
177
#        (1, '----------'),
178
#        (2, 'Patient non sociabilisé'),
179
#        (3, 'Lieu non connu'),
180
#)
181

    
182
class SocialisationDuration(models.Model):
183
    class Meta:
184
        verbose_name = u'Période de socialisation'
185
        verbose_name_plural = u'Périodes de socialisation'
186

    
187
    school = models.ForeignKey('ressources.School',
188
        verbose_name=u'Lieu de socialisation',
189
        blank=True, null=True)
190
#    rough_school = models.IntegerField(verbose_name=u"Autre choix", choices=NO_SCHOOL,
191
#            max_length=1)
192
    start_date = models.DateField(verbose_name=u"Date d'arrivée")
193
    contact = models.CharField(verbose_name=u"Contact", max_length=200, blank=True, null=True, default=None)
194
    end_date = models.DateField(verbose_name=u"Date de départ",
195
        blank=True, null=True)
196
    created = models.DateTimeField(u'Création', auto_now_add=True)
197
    comment = models.TextField(max_length=3000,
198
        blank=True, null=True, verbose_name=u"Commentaire")
199

    
200

    
201
class InscriptionMotive(NamedAbstractModel):
202
    class Meta:
203
        verbose_name = u'Motif d\'inscription'
204
        verbose_name_plural = u'Motifs d\'inscription'
205

    
206

    
207
class Nationality(NamedAbstractModel):
208
    class Meta:
209
        verbose_name = u'Nationalité'
210
        verbose_name_plural = u'Nationalités'
211

    
212

    
213
class Job(NamedAbstractModel):
214
    class Meta:
215
        verbose_name = u'Profession'
216
        verbose_name_plural = u'Professions'
217

    
218

    
219
class RoomQuerySet(query.QuerySet):
220
    def for_etablissement(self, etablissement):
221
        return self.filter(etablissement=etablissement)
222

    
223
    def for_service(self, service):
224
        return self.filter(etablissement__service=service)
225

    
226

    
227
class Room(NamedAbstractModel):
228
    objects = PassThroughManager.for_queryset_class(RoomQuerySet)()
229
    etablissement = models.ForeignKey('Office')
230

    
231
    class Meta:
232
        verbose_name = u'Salle'
233
        verbose_name_plural = u'Salles'
234

    
235
class AnalyseMotive(NamedAbstractModel, ServiceLinkedAbstractModel):
236
    class Meta:
237
        verbose_name = u"Motif analysé"
238
        verbose_name_plural = u"Motifs analysés"
239

    
240
class FamilyMotive(NamedAbstractModel, ServiceLinkedAbstractModel):
241
    class Meta:
242
        verbose_name = u"Motif familiale"
243
        verbose_name_plural = u"Motifs familiaux"
244

    
245
class AdviceGiver(NamedAbstractModel, ServiceLinkedAbstractModel):
246
    class Meta:
247
        verbose_name = u"Conseilleur"
248
        verbose_name_plural = u"Conseilleurs"
249

    
250
class Service(NamedAbstractModel):
251
    admin_only = True
252

    
253
    slug = models.SlugField()
254
    description = models.TextField()
255

    
256
    # Contact
257
    phone = PhoneNumberField(verbose_name=u"Téléphone")
258
    fax = PhoneNumberField(verbose_name=u"Fax")
259
    email = models.EmailField()
260

    
261
    class Meta:
262
        verbose_name = u'Service'
263
        verbose_name_plural = u'Services'
264

    
265
class ActTypeQuerySet(query.QuerySet):
266
    def for_service(self, service):
267
        return self.filter(service=service)
268

    
269
class ActType(NamedAbstractModel, ServiceLinkedAbstractModel):
270
    objects = PassThroughManager.for_queryset_class(ActTypeQuerySet)()
271
    billable = models.BooleanField(default=True, verbose_name=u"Facturable")
272

    
273
    class Meta(NamedAbstractModel.Meta):
274
        verbose_name = u'Type d\'actes'
275
        verbose_name_plural = u'Types d\'actes'
276

    
277
class ParentalAuthorityType(NamedAbstractModel):
278
    class Meta:
279
        verbose_name = u'Type d\'autorité parentale'
280
        verbose_name_plural = u'Types d\'autorités parentales'
281

    
282

    
283
class ParentalCustodyType(NamedAbstractModel):
284
    class Meta:
285
        verbose_name = u'Type de gardes parentales'
286
        verbose_name_plural = u'Types de gardes parentales'
287

    
288

    
289
class SessionType(NamedAbstractModel):
290
    class Meta:
291
        verbose_name = u'Type de séance'
292
        verbose_name_plural = u'Types de séances'
293

    
294

    
295
class FamilySituationType(NamedAbstractModel):
296
    class Meta:
297
        verbose_name = u'Type de situation familiale'
298
        verbose_name_plural = u'Types de situations familiales'
299

    
300

    
301
class TransportType(NamedAbstractModel):
302
    class Meta:
303
        verbose_name = u'Type de transport'
304
        verbose_name_plural = u'Types de transports'
305

    
306

    
307
class WorkerType(NamedAbstractModel):
308
    intervene = models.BooleanField(
309
            verbose_name=u'Intervenant',
310
            blank=True)
311

    
312
    class Meta:
313
        verbose_name = u'Type de personnel'
314
        verbose_name_plural = u'Types de personnel'
315

    
316

    
317
AXIS =  Choices(
318
        (1, 'Axe I : catégories cliniques'),
319
        (2, 'Axe II : facteurs organiques'),
320
        (3, 'Axe II : facteurs environnementaux'),
321
)
322

    
323
class CodeCFTMEA(NamedAbstractModel):
324
    code = models.IntegerField(verbose_name=u"Code")
325
    axe = models.IntegerField(verbose_name=u"Axe", choices=AXIS,
326
            max_length=1)
327

    
328
    def __unicode__(self):
329
        return "%d %s" % (self.code, self.name)
330

    
331
    class Meta:
332
        ordering = ['code']
333
        verbose_name = u'Code CFTMEA'
334
        verbose_name_plural = u'Codes CFTMEA'
335

    
336
class MDPH(models.Model):
337
    class Meta:
338
        verbose_name = u'Etablissement MDPH'
339
        verbose_name_plural = u'Etablissements MDPH'
340

    
341
    def __unicode__(self):
342
        return self.department
343

    
344
    department = models.CharField(max_length=200,
345
            verbose_name=u"Département")
346

    
347
    description = models.TextField(blank=True, null=True)
348

    
349
    # Contact
350
    phone = PhoneNumberField(verbose_name=u"Téléphone", blank=True, null=True)
351
    fax = PhoneNumberField(verbose_name=u"Fax", blank=True, null=True)
352
    email = models.EmailField(blank=True, null=True)
353
    website = models.CharField(max_length=200,
354
            verbose_name=u"Site Web", blank=True, null=True)
355

    
356
    # Address
357
    address = models.CharField(max_length=120,
358
            verbose_name=u"Adresse", blank=True, null=True)
359
    address_complement = models.CharField(max_length=120,
360
            blank=True,
361
            null=True,
362
            default=None,
363
            verbose_name=u"Complément d'addresse")
364
    zip_code = ZipCodeField(verbose_name=u"Code postal",
365
        blank=True, null=True)
366
    city = models.CharField(max_length=80,
367
            verbose_name=u"Ville", blank=True, null=True)
368

    
369
class MDPHRequest(models.Model):
370
    class Meta:
371
        verbose_name = u'Demande MDPH'
372
        verbose_name_plural = u'Demandes MDPH'
373

    
374
    start_date = models.DateField(verbose_name=u"Date de la demande")
375
    mdph = models.ForeignKey('ressources.MDPH',
376
            verbose_name=u"MDPH")
377
    comment = models.TextField(max_length=3000,
378
        blank=True, null=True, verbose_name=u"Commentaire")
379
    created = models.DateTimeField(u'Création', auto_now_add=True)
380

    
381
MDPH_HELP =  Choices(
382
        (0, "Non défini"),
383
        (1, "AEEH (Allocation d'éducation de l'enfant handicapé)"),
384
        (2, 'AVS (Assistant de vie scolaire)'),
385
        (3, 'EVS (Emplois de vie scolaire)'),
386
)
387

    
388
class MDPHResponse(models.Model):
389
    class Meta:
390
        verbose_name = u'Réponse MDPH'
391
        verbose_name_plural = u'Réponses MDPH'
392

    
393
    start_date = models.DateField(verbose_name=u"Date de début")
394
    end_date = models.DateField(verbose_name=u"Date de fin")
395
    mdph = models.ForeignKey('ressources.MDPH',
396
            verbose_name=u"MDPH")
397
    comment = models.TextField(max_length=3000,
398
        blank=True, null=True, verbose_name=u"Commentaire")
399
    created = models.DateTimeField(u'Création', auto_now_add=True)
400
    type_aide = models.IntegerField(verbose_name=u"Type d'aide", choices=MDPH_HELP,
401
            max_length=1, default=0)
402
    name =  models.CharField(max_length=200,
403
            verbose_name=u"Nom", blank=True, null=True)
404
    rate =  models.CharField(max_length=10,
405
            verbose_name=u"Taux", blank=True, null=True)
406

    
407

    
408
class HolidayType(NamedAbstractModel):
409
    for_group = models.BooleanField(
410
            verbose_name=u'Congé de groupe',
411
            blank=True)
412

    
413
    class Meta:
414
        verbose_name = u'Type de congé'
415
        verbose_name_plural = u'Types de congé'
(4-4/7)