Add xnet.profiles.
authorRaphaël Barrois <raphael.barrois@polyconseil.fr>
Sat, 30 Mar 2013 00:06:19 +0000 (01:06 +0100)
committerRaphaël Barrois <raphael.barrois@polyconseil.fr>
Sat, 30 Mar 2013 00:07:16 +0000 (01:07 +0100)
xnet/profiles/__init__.py [new file with mode: 0644]
xnet/profiles/admin.py [new file with mode: 0644]
xnet/profiles/models.py [new file with mode: 0644]
xnet/settings/base.py

diff --git a/xnet/profiles/__init__.py b/xnet/profiles/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/xnet/profiles/admin.py b/xnet/profiles/admin.py
new file mode 100644 (file)
index 0000000..b2fce72
--- /dev/null
@@ -0,0 +1,41 @@
+from django.contrib import admin
+
+from . import models
+
+
+class LanguageAdmin(admin.ModelAdmin):
+    list_display = ['iso_code', 'name']
+    search_fields = ['iso_code', 'name']
+
+admin.site.register(models.Language, LanguageAdmin)
+
+
+class CountryAdmin(admin.ModelAdmin):
+    list_display = ['iso_code', 'name', 'main_language']
+    search_fields = ['iso_code', 'name']
+
+admin.site.register(models.Country, CountryAdmin)
+
+
+class ProfileAdmin(admin.ModelAdmin):
+    list_display = ['account', 'native']
+    search_fields = ['account__first_name', 'account__last_name', 'account__username']
+
+admin.site.register(models.Profile, ProfileAdmin)
+
+
+class AddressAdmin(admin.ModelAdmin):
+    list_display = ['street', 'building', 'city', 'locality', 'zipcode', 'city', 'country']
+    search_fields = ['street', 'city', 'zipcode', 'city', 'country__name']
+    list_filter = ['country']
+
+admin.site.register(models.Address, AddressAdmin)
+
+
+class ProfileAddressAdmin(admin.ModelAdmin):
+    list_display = ['profile', 'address', 'rank']
+    search_fields = ['profile__account__first_name', 'profile__account__last_name', 'profile__account__username',
+            'address__street', 'address__city', 'address__zipcode', 'address__country__name']
+    list_filter = ['address__country']
+
+admin.site.register(models.ProfileAddress, ProfileAddressAdmin)
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)
index 6d53eb3..1025a8f 100644 (file)
@@ -155,7 +155,7 @@ INSTALLED_APPS = (
     'xnet.groups',
     'xnet.news',
     'xnet.events',
-    'xnet.example',
+    'xnet.profiles',
 )
 
 # A sample logging configuration. The only tangible logging