Project

General

Profile

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

calebasse / calebasse / ressources / models.py @ 60264e91

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
class HealthCenter(NamedAbstractModel):
40
    class Meta:
41
        verbose_name = u'Centre d\'assurance maladie'
42
        verbose_name_plural = u'Centres d\'assurances maladie'
43

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

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

    
77

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

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

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

    
89

    
90
class TransportCompany(NamedAbstractModel):
91
    class Meta:
92
        verbose_name = u'Compagnie de transport'
93
        verbose_name_plural = u'Compagnies de transport'
94

    
95

    
96
class CFTMEACode(NamedAbstractModel):
97
    class Meta:
98
        verbose_name = u'Code CFTMEA'
99
        verbose_name_plural = u'Codes CFTMEA'
100

    
101

    
102
class UninvoicableCode(models.Model):
103
    class Meta:
104
        verbose_name = u'Code de non-facturation'
105
        verbose_name_plural = u'Codes de non-facturation'
106

    
107

    
108
class Office(ServiceLinkedAbstractModel):
109
    class Meta:
110
        verbose_name = u'Établissement'
111
        verbose_name_plural = u'Établissements'
112

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

    
116
    slug = models.SlugField(verbose_name='Label')
117
    description = models.TextField(blank=True, null=True)
118

    
119
    # Contact
120
    phone = PhoneNumberField(verbose_name=u"Téléphone", blank=True, null=True)
121
    fax = PhoneNumberField(verbose_name=u"Fax", blank=True, null=True)
122
    email = models.EmailField(blank=True, null=True)
123

    
124
    # Address
125
    address = models.CharField(max_length=120,
126
            verbose_name=u"Addresse")
127
    address_complement = models.CharField(max_length=120,
128
            blank=True,
129
            null=True,
130
            default=None,
131
            verbose_name=u"Complément d'addresse")
132
    zip_code = ZipCodeField(verbose_name=u"Code postal")
133
            #verbose_name=u"Code postal")
134
    city = models.CharField(max_length=80,
135
            verbose_name=u"Ville")
136

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

    
139
class School(models.Model):
140
    class Meta:
141
        verbose_name = u'Lieu de scolarisation'
142
        verbose_name_plural = u'Lieux de scolarisation'
143

    
144
    def __unicode__(self):
145
        return self.name
146

    
147
    name = models.CharField(max_length=70, blank=False)
148
    description = models.TextField(blank=True, null=True, default=None)
149
    address = models.CharField(max_length=120)
150
    address_complement = models.CharField(max_length=120,
151
            blank=True,
152
            null=True,
153
            default=None)
154
    zip_code = ZipCodeField(verbose_name=u"Code postal")
155
    city = models.CharField(max_length=80)
156
    phone = PhoneNumberField(verbose_name=u"Téléphone")
157
    fax = models.CharField(max_length=30,
158
            blank=True, null=True, default=None)
159
    email = models.EmailField(blank=True, null=True)
160
    director_name = models.CharField(max_length=70,
161
            blank=True, null=True, default=None)
162

    
163
class SchoolTeacherRole(NamedAbstractModel):
164
    class Meta:
165
        verbose_name = u'Type de rôle des professeurs'
166
        verbose_name_plural = u'Types de rôle des professeurs'
167

    
168
class InscriptionMotive(NamedAbstractModel):
169
    class Meta:
170
        verbose_name = u'Motif d\'inscription'
171
        verbose_name_plural = u'Motifs d\'inscription'
172

    
173

    
174
class Nationality(NamedAbstractModel):
175
    class Meta:
176
        verbose_name = u'Nationalité'
177
        verbose_name_plural = u'Nationalités'
178

    
179

    
180
class Job(NamedAbstractModel):
181
    class Meta:
182
        verbose_name = u'Profession'
183
        verbose_name_plural = u'Professions'
184

    
185

    
186
class RoomQuerySet(query.QuerySet):
187
    def for_etablissement(self, etablissement):
188
        return self.filter(etablissement=etablissement)
189

    
190
    def for_service(self, service):
191
        return self.filter(etablissement__service=service)
192

    
193

    
194
class Room(NamedAbstractModel):
195
    objects = PassThroughManager.for_queryset_class(RoomQuerySet)()
196
    etablissement = models.ForeignKey('Office')
197

    
198
    class Meta:
199
        verbose_name = u'Salle'
200
        verbose_name_plural = u'Salles'
201

    
202
class AnalyseMotive(NamedAbstractModel, ServiceLinkedAbstractModel):
203
    class Meta:
204
        verbose_name = u"Motif analysé"
205
        verbose_name_plural = u"Motifs analysés"
206

    
207
class FamilyMotive(NamedAbstractModel, ServiceLinkedAbstractModel):
208
    class Meta:
209
        verbose_name = u"Motif familiale"
210
        verbose_name_plural = u"Motifs familiaux"
211

    
212
class AdviceGiver(NamedAbstractModel, ServiceLinkedAbstractModel):
213
    class Meta:
214
        verbose_name = u"Conseilleur"
215
        verbose_name_plural = u"Conseilleurs"
216

    
217
class Service(NamedAbstractModel):
218
    admin_only = True
219

    
220
    slug = models.SlugField()
221
    description = models.TextField()
222

    
223
    # Contact
224
    phone = PhoneNumberField(verbose_name=u"Téléphone")
225
    fax = PhoneNumberField(verbose_name=u"Fax")
226
    email = models.EmailField()
227

    
228
    class Meta:
229
        verbose_name = u'Service'
230
        verbose_name_plural = u'Services'
231

    
232
class ActTypeQuerySet(query.QuerySet):
233
    def for_service(self, service):
234
        return self.filter(service=service)
235

    
236
class ActType(NamedAbstractModel, ServiceLinkedAbstractModel):
237
    objects = PassThroughManager.for_queryset_class(ActTypeQuerySet)()
238
    billable = models.BooleanField(default=True, verbose_name=u"Facturable")
239

    
240
    class Meta(NamedAbstractModel.Meta):
241
        verbose_name = u'Type d\'actes'
242
        verbose_name_plural = u'Types d\'actes'
243

    
244
class ParentalAuthorityType(NamedAbstractModel):
245
    class Meta:
246
        verbose_name = u'Type d\'autorité parentale'
247
        verbose_name_plural = u'Types d\'autorités parentales'
248

    
249

    
250
class ParentalCustodyType(NamedAbstractModel):
251
    class Meta:
252
        verbose_name = u'Type de gardes parentales'
253
        verbose_name_plural = u'Types de gardes parentales'
254

    
255

    
256
class SessionType(NamedAbstractModel):
257
    class Meta:
258
        verbose_name = u'Type de séance'
259
        verbose_name_plural = u'Types de séances'
260

    
261

    
262
class FamilySituationType(NamedAbstractModel):
263
    class Meta:
264
        verbose_name = u'Type de situation familiale'
265
        verbose_name_plural = u'Types de situations familiales'
266

    
267

    
268
class TransportType(NamedAbstractModel):
269
    class Meta:
270
        verbose_name = u'Type de transport'
271
        verbose_name_plural = u'Types de transports'
272

    
273

    
274
class WorkerType(NamedAbstractModel):
275
    intervene = models.BooleanField(
276
            verbose_name=u'Intervenant',
277
            blank=True)
278

    
279
    class Meta:
280
        verbose_name = u'Type de personnel'
281
        verbose_name_plural = u'Types de personnel'
(3-3/6)