Add xnet.profiles.
[xnet] / xnet / profiles / models.py
1 # -*- coding: utf-8 -*-
2
3 from django.db import models
4 from django.utils.translation import ugettext_lazy as _
5
6 from xnet.accounts import models as accounts_models
7
8
9 class Language(models.Model):
10 iso_code = models.CharField(max_length=2, unique=True, verbose_name=_(u"code ISO"))
11 name = models.CharField(max_length=30, unique=True, verbose_name=_(u"nom"))
12
13 class Meta:
14 verbose_name = _(u"langue")
15 verbose_name_plural = _(u"langues")
16
17 def __unicode__(self):
18 return u"%s (%s)" % (self.name, self.iso_code)
19
20
21 class Country(models.Model):
22 iso_code = models.CharField(max_length=2, unique=True, verbose_name=_(u"code ISO"))
23 name = models.CharField(max_length=30, unique=True, verbose_name=_(u"nom"))
24 main_language = models.ForeignKey(Language, blank=True, null=True,
25 verbose_name=_(u"langue principale"), related_name='countries')
26
27 class Meta:
28 verbose_name = _(u"pays")
29 verbose_name_plural = _(u"pays")
30
31 def __unicode__(self):
32 return u"%s (%s)" % (self.name, self.iso_code)
33
34
35 class Address(models.Model):
36 text = models.TextField(verbose_name=_(u"texte"))
37 postal_text = models.TextField(verbose_name=_(u"texte postal"))
38
39 latitude = models.FloatField(verbose_name=_(u"latitude"))
40 longitude = models.FloatField(verbose_name=_(u"longitude"))
41
42 street = models.CharField(max_length=100, verbose_name=_(u"rue"))
43 building = models.CharField(max_length=100, blank=True, verbose_name=_(u"bâtiment"))
44 locality = models.CharField(max_length=100, blank=True, verbose_name=_(u"lieu-dit"))
45 zipcode = models.SlugField(max_length=10, verbose_name=_(u"code postal"))
46 city = models.CharField(max_length=100, verbose_name=_(u"ville"))
47 country = models.ForeignKey(Country, related_name='adresses', verbose_name=_(u"pays"))
48
49 class Meta:
50 verbose_name = _(u"adresse")
51 verbose_name_plural = _(u"adresses")
52
53 def __unicode__(self):
54 building_part = u"(%s) " if self.building else u""
55 locality_part = u"%s, " if self.locality else u""
56 return u"%(street)s %(building)s%(locality)s, %(zipcode)s %(city)s, %(country)s" % dict(
57 street=self.street,
58 building=building_part,
59 locality=locality_part,
60 zipcode=self.zipcode,
61 city=self.city,
62 country=self.country.name,
63 )
64
65
66 class Profile(models.Model):
67 account = models.OneToOneField(accounts_models.Account,
68 related_name='profile', verbose_name=_(u"Profile"))
69 native = models.BooleanField(verbose_name=_(u"Native user"),
70 help_text=_(u"Marks a user as 'native', i.e belonging to the current organization."))
71
72 nationality = models.ForeignKey(Country, related_name='nationals', verbose_name=_(u"nationalité"))
73 alt_nationality = models.ForeignKey(Country, related_name='alt_nationals', verbose_name=_(u"autre nationalité"))
74
75 def __unicode__(self):
76 return unicode(self.account)
77
78
79 class ProfileAddress(models.Model):
80 profile = models.ForeignKey(Profile, related_name='addresses', verbose_name=_(u"profil"))
81 address = models.ForeignKey(Address, related_name='profiles', verbose_name=_(u"adresse"))
82 rank = models.IntegerField(verbose_name=_(u"rank"))
83
84 class Meta:
85 verbose_name = _(u"adresse d'un profil")
86 verbose_name_plural = _(u"adresses de profils")
87 unique_together = ('profile', 'rank')
88
89 def __unicode__(self):
90 return u"%s of %s" % (self.rank, self.profile)