| 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) |