diff options
Diffstat (limited to 'ishtar')
-rw-r--r-- | ishtar/furnitures/models.py | 16 | ||||
-rw-r--r-- | ishtar/furnitures/views.py | 5 | ||||
-rw-r--r-- | ishtar/scripts/__init__.py | 0 | ||||
-rwxr-xr-x | ishtar/scripts/import_from_csv.py | 68 | ||||
-rw-r--r-- | ishtar/settings.py.example | 1 |
5 files changed, 83 insertions, 7 deletions
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py index f7cc8288c..1a595f629 100644 --- a/ishtar/furnitures/models.py +++ b/ishtar/furnitures/models.py @@ -144,7 +144,7 @@ class LightHistorizedItem(BaseHistorizedItem): class Departement(models.Model): label = models.CharField(_(u"Label"), max_length=30) - number = models.IntegerField(_(u"Number")) + number = models.CharField(_(u"Number"), unique=True, max_length=3) class Meta: verbose_name = _(u"Departement") @@ -669,10 +669,14 @@ if settings.COUNTRY == 'fr': class Town(models.Model): name = models.CharField(_(u"Name"), max_length=100) - surface = models.IntegerField(_(u"Surface")) - center = models.PointField(_(u"Localisation"), srid=settings.SRID) + surface = models.IntegerField(_(u"Surface"), blank=True, null=True) + center = models.PointField(_(u"Localisation"), srid=settings.SRID, + blank=True, null=True) if settings.COUNTRY == 'fr': - numero_insee = models.CharField(u"Numéro INSEE", max_length=5) + numero_insee = models.CharField(u"Numéro INSEE", max_length=6, + unique=True) + departement = models.ForeignKey(Departement, verbose_name=u"Département", + null=True, blank=True) canton = models.ForeignKey(Canton, verbose_name=u"Canton", null=True, blank=True) objects = models.GeoManager() @@ -680,8 +684,12 @@ class Town(models.Model): class Meta: verbose_name = _(u"Town") verbose_name_plural = _(u"Towns") + if settings.COUNTRY == 'fr': + ordering = ['numero_insee'] def __unicode__(self): + if settings.COUNTRY == "fr": + return " - ".join((self.name, self.numero_insee)) return self.name class TreatmentType(GeneralType): diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py index 03029cfe4..c9ea7a0fd 100644 --- a/ishtar/furnitures/views.py +++ b/ishtar/furnitures/views.py @@ -91,9 +91,8 @@ def autocomplete_town(request): for q in q.split(' '): extra = Q(name__icontains=q) if settings.COUNTRY == 'fr': - extra = extra | (Q(canton__name__istartswith=q) | \ - Q(canton__arrondissement__name__istartswith=q) | \ - Q(canton__arrondissement__department__label__istartswith=q)) + extra = (extra | Q(numero_insee__istartswith=q) | \ + Q(departement__label__istartswith=q)) query = query & extra limit = 15 towns = models.Town.objects.filter(query)[:limit] diff --git a/ishtar/scripts/__init__.py b/ishtar/scripts/__init__.py new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/ishtar/scripts/__init__.py diff --git a/ishtar/scripts/import_from_csv.py b/ishtar/scripts/import_from_csv.py new file mode 100755 index 000000000..7eb655641 --- /dev/null +++ b/ishtar/scripts/import_from_csv.py @@ -0,0 +1,68 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +""" +Import departements and towns from csv file +""" + +DELIMITER = "," +QUOTECHAR = '"' + +import sys +import csv +sys.path.append('.') + +from django.core.management import setup_environ +import settings + +setup_environ(settings) + +from optparse import OptionParser + +from furnitures import models + +def insert_department(value): + idx, label = value + if models.Departement.objects.filter(number=idx).count(): + return + models.Departement(number=idx, label=label).save() + print idx, label, u" inserted" + +def insert_town(value): + idx, label = value + if models.Town.objects.filter(numero_insee=idx).count(): + return + try: + dpt = models.Departement.objects.get(number=idx[:2]) + except: + return + models.Town(numero_insee=idx, name=label, departement=dpt).save() + print idx, label, u" inserted" + +tables = {u"department":insert_department, + u"town":insert_town} + +usage = u"usage: %%prog csv_file.csv table_name\n\n"\ + u"Table name must be in: %s." % u", ".join(tables.keys()) +parser = OptionParser(usage=usage) + +(options, args) = parser.parse_args() + +try: + assert len(args) == 2 +except AssertionError: + parser.error(u"You must provide one csv file and the table name.") + +try: + assert args[1] in tables.keys() +except AssertionError: + parser.error(u"Incorrect table name.") + +try: + values = csv.reader(open(args[0], 'rb'), delimiter=DELIMITER, + quotechar=QUOTECHAR) +except (IOError): + parser.error(u"Incorrect CSV file.") + +for value in values: + tables[args[1]](value) diff --git a/ishtar/settings.py.example b/ishtar/settings.py.example index d38f68cf8..92ce2baa1 100644 --- a/ishtar/settings.py.example +++ b/ishtar/settings.py.example @@ -118,5 +118,6 @@ INSTALLED_APPS = ( 'django.contrib.messages', 'django.contrib.admin', 'registration', + #'ishtar.scripts', 'ishtar.furnitures' ) |