Project

General

Profile

Download (7.04 KB) Statistics
| Branch: | Tag: | Revision:
# -*- coding: utf-8 -*-

from django.db import models
from django.db.models import query

from calebasse.models import PhoneNumberField, ZipCodeField

from model_utils.managers import PassThroughManager


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

ServiceLinkedManager = PassThroughManager.for_queryset_class(ServiceLinkedQuerySet)

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

def __unicode__(self):
return self.name

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

class Meta:
abstract = True
ordering = ['name']

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

class Meta:
abstract = True

# Caisse d'assurance maladie
class HealthFund(NamedAbstractModel):
class Meta:
verbose_name = u'Caisse d\'assurances maladie'
verbose_name_plural = u'Caisses d\'assurances maladie'

abbreviation = models.CharField(max_length=8)
active = models.BooleanField(default=True)
address = models.CharField(max_length=120)
address_complement = models.CharField(max_length=120, blank=True,
null=True, default=None)
zip_code = models.IntegerField(max_length=8)
city = models.CharField(max_length=80)
phone = models.CharField(max_length=30)
fax = models.CharField(max_length=30)
email = models.EmailField()
accounting_number = models.CharField(max_length=30)
correspondant = models.CharField(max_length=80)


class TransportCompany(NamedAbstractModel):
class Meta:
verbose_name = u'Compagnie de transport'
verbose_name_plural = u'Compagnies de transport'


class CFTMEACode(NamedAbstractModel):
class Meta:
verbose_name = u'Code CFTMEA'
verbose_name_plural = u'Codes CFTMEA'


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


class Office(ServiceLinkedAbstractModel):
class Meta:
verbose_name = u'Établissement'
verbose_name_plural = u'Établissements'

def __unicode__(self):
return self.slug

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

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

# Address
address = models.CharField(max_length=120,
verbose_name=u"Addresse")
address_complement = models.CharField(max_length=120,
blank=True,
null=True,
default=None,
verbose_name=u"Complément d'addresse")
zip_code = ZipCodeField(verbose_name=u"Code postal")
#verbose_name=u"Code postal")
city = models.CharField(max_length=80,
verbose_name=u"Ville")

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

class School(models.Model):
class Meta:
verbose_name = u'Lieu de scolarisation'
verbose_name_plural = u'Lieux de scolarisation'

def __unicode__(self):
return self.name

name = models.CharField(max_length=70, blank=False)
description = models.TextField()
address = models.CharField(max_length=120)
address_complement = models.CharField(max_length=120,
blank=True,
null=True,
default=None)
zip_code = ZipCodeField(verbose_name=u"Code postal")
city = models.CharField(max_length=80)
phone = PhoneNumberField(verbose_name=u"Téléphone")
fax = models.CharField(max_length=30)
email = models.EmailField()
director_name = models.CharField(max_length=70)

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

class InscriptionMotive(NamedAbstractModel):
class Meta:
verbose_name = u'Motif d\'inscription'
verbose_name_plural = u'Motifs d\'inscription'


class Nationality(NamedAbstractModel):
class Meta:
verbose_name = u'Nationalité'
verbose_name_plural = u'Nationalités'


class Job(NamedAbstractModel):
class Meta:
verbose_name = u'Profession'
verbose_name_plural = u'Professions'


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

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


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

class Meta:
verbose_name = u'Salle'
verbose_name_plural = u'Salles'


class Service(NamedAbstractModel):
admin_only = True

slug = models.SlugField()
description = models.TextField()

# Contact
phone = PhoneNumberField(verbose_name=u"Téléphone")
fax = PhoneNumberField(verbose_name=u"Fax")
email = models.EmailField()

class Meta:
verbose_name = u'Service'
verbose_name_plural = u'Services'

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

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

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

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


class ParentalCustodyType(NamedAbstractModel):
class Meta:
verbose_name = u'Type de gardes parentales'
verbose_name_plural = u'Types de gardes parentales'


class SessionType(NamedAbstractModel):
class Meta:
verbose_name = u'Type de séance'
verbose_name_plural = u'Types de séances'


class FamilySituationType(NamedAbstractModel):
class Meta:
verbose_name = u'Type de situation familiale'
verbose_name_plural = u'Types de situations familiales'


class TransportType(NamedAbstractModel):
class Meta:
verbose_name = u'Type de transport'
verbose_name_plural = u'Types de transports'


class WorkerType(NamedAbstractModel):
intervene = models.BooleanField(
verbose_name=u'Intervenant',
blank=True)

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