Add xnet.profiles.
[xnet] / xnet / profiles / models.py
diff --git a/xnet/profiles/models.py b/xnet/profiles/models.py
new file mode 100644 (file)
index 0000000..c6c067b
--- /dev/null
@@ -0,0 +1,90 @@
+# -*- coding: utf-8 -*-
+
+from django.db import models
+from django.utils.translation import ugettext_lazy as _
+
+from xnet.accounts import models as accounts_models
+
+
+class Language(models.Model):
+    iso_code = models.CharField(max_length=2, unique=True, verbose_name=_(u"code ISO"))
+    name = models.CharField(max_length=30, unique=True, verbose_name=_(u"nom"))
+
+    class Meta:
+        verbose_name = _(u"langue")
+        verbose_name_plural = _(u"langues")
+
+    def __unicode__(self):
+        return u"%s (%s)" % (self.name, self.iso_code)
+
+
+class Country(models.Model):
+    iso_code = models.CharField(max_length=2, unique=True, verbose_name=_(u"code ISO"))
+    name = models.CharField(max_length=30, unique=True, verbose_name=_(u"nom"))
+    main_language = models.ForeignKey(Language, blank=True, null=True,
+            verbose_name=_(u"langue principale"), related_name='countries')
+
+    class Meta:
+        verbose_name = _(u"pays")
+        verbose_name_plural = _(u"pays")
+
+    def __unicode__(self):
+        return u"%s (%s)" % (self.name, self.iso_code)
+
+
+class Address(models.Model):
+    text = models.TextField(verbose_name=_(u"texte"))
+    postal_text = models.TextField(verbose_name=_(u"texte postal"))
+
+    latitude = models.FloatField(verbose_name=_(u"latitude"))
+    longitude = models.FloatField(verbose_name=_(u"longitude"))
+
+    street = models.CharField(max_length=100, verbose_name=_(u"rue"))
+    building = models.CharField(max_length=100, blank=True, verbose_name=_(u"bâtiment"))
+    locality = models.CharField(max_length=100, blank=True, verbose_name=_(u"lieu-dit"))
+    zipcode = models.SlugField(max_length=10, verbose_name=_(u"code postal"))
+    city = models.CharField(max_length=100, verbose_name=_(u"ville"))
+    country = models.ForeignKey(Country, related_name='adresses', verbose_name=_(u"pays"))
+
+    class Meta:
+        verbose_name = _(u"adresse")
+        verbose_name_plural = _(u"adresses")
+
+    def __unicode__(self):
+        building_part = u"(%s) " if self.building else u""
+        locality_part = u"%s, " if self.locality else u""
+        return u"%(street)s %(building)s%(locality)s, %(zipcode)s %(city)s, %(country)s" % dict(
+            street=self.street,
+            building=building_part,
+            locality=locality_part,
+            zipcode=self.zipcode,
+            city=self.city,
+            country=self.country.name,
+        )
+
+
+class Profile(models.Model):
+    account = models.OneToOneField(accounts_models.Account,
+        related_name='profile', verbose_name=_(u"Profile"))
+    native = models.BooleanField(verbose_name=_(u"Native user"),
+        help_text=_(u"Marks a user as 'native', i.e belonging to the current organization."))
+
+    nationality = models.ForeignKey(Country, related_name='nationals', verbose_name=_(u"nationalité"))
+    alt_nationality = models.ForeignKey(Country, related_name='alt_nationals', verbose_name=_(u"autre nationalité"))
+
+    def __unicode__(self):
+        return unicode(self.account)
+
+
+class ProfileAddress(models.Model):
+    profile = models.ForeignKey(Profile, related_name='addresses', verbose_name=_(u"profil"))
+    address = models.ForeignKey(Address, related_name='profiles', verbose_name=_(u"adresse"))
+    rank = models.IntegerField(verbose_name=_(u"rank"))
+
+    class Meta:
+        verbose_name = _(u"adresse d'un profil")
+        verbose_name_plural = _(u"adresses de profils")
+        unique_together = ('profile', 'rank')
+
+    def __unicode__(self):
+        return u"%s of %s" % (self.rank, self.profile)