summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_finds/models_finds.py8
-rw-r--r--archaeological_operations/admin.py11
-rw-r--r--ishtar_common/admin.py1
-rw-r--r--ishtar_common/migrations/0020_auto_20171030_1708.py26
-rw-r--r--ishtar_common/models.py30
-rw-r--r--ishtar_common/tests.py6
-rw-r--r--ishtar_common/views.py2
-rw-r--r--ishtar_common/widgets.py6
8 files changed, 79 insertions, 11 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 8052601bf..65850d4dc 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -543,7 +543,7 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
CHECK_DICT = dict(CHECK_CHOICES)
SHOW_URL = 'show-find'
SLUG = 'find'
- TABLE_COLS = ['label', 'base_finds__context_record__parcel__town',
+ TABLE_COLS = ['label', 'base_finds__context_record__parcel__town__name',
'base_finds__context_record__operation__common_name',
'base_finds__context_record__parcel',
'base_finds__context_record__label',
@@ -562,7 +562,7 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
'container__cached_label',
'container__cahed_location',
'description',
- 'base_finds__context_record__parcel__town',
+ 'base_finds__context_record__parcel__town__name',
'base_finds__context_record__parcel', ]
COL_LABELS = {
'base_finds__context_record__label': _(u"Context record"),
@@ -571,7 +571,7 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
'base_finds__context_record__operation__code_patriarche': _(
u"Operation (code)"
),
- 'base_finds__context_record__parcel__town': _(u"Town"),
+ 'base_finds__context_record__parcel__town__name': _(u"Town"),
'base_finds__context_record__operation__common_name': _(
u"Operation (name)"
),
@@ -622,7 +622,7 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
'base_finds__context_record':
'base_finds__context_record__pk',
'base_finds__context_record__parcel__town':
- 'base_finds__context_record__parcel__town',
+ 'base_finds__context_record__parcel__town__pk',
'base_finds__context_record__operation__year':
'base_finds__context_record__operation__year__contains',
'base_finds__context_record__operation':
diff --git a/archaeological_operations/admin.py b/archaeological_operations/admin.py
index bf1415989..53c931971 100644
--- a/archaeological_operations/admin.py
+++ b/archaeological_operations/admin.py
@@ -46,6 +46,7 @@ class AdministrativeActAdmin(HistorizedObjectAdmin):
models.AdministrativeAct, {'operation': 'operation'}
)
+
admin_site.register(models.AdministrativeAct, AdministrativeActAdmin)
@@ -55,6 +56,7 @@ class PeriodAdmin(admin.ModelAdmin):
list_filter = ('parent',)
model = models.Period
+
admin_site.register(models.Period, PeriodAdmin)
@@ -71,6 +73,7 @@ class ArchaeologicalSiteAdmin(HistorizedObjectAdmin):
model = models.ArchaeologicalSite
inlines = [OperationInline]
+
admin_site.register(models.ArchaeologicalSite, ArchaeologicalSiteAdmin)
@@ -115,6 +118,7 @@ class OperationAdmin(HistorizedObjectAdmin):
form = AdminOperationForm
inlines = [ArchaeologicalSiteInline]
+
admin_site.register(models.Operation, OperationAdmin)
@@ -128,6 +132,7 @@ class OperationSourceAdmin(admin.ModelAdmin):
'authors': 'author'}
)
+
admin_site.register(models.OperationSource, OperationSourceAdmin)
@@ -146,6 +151,7 @@ class ParcelAdmin(HistorizedObjectAdmin):
'history_date'
]
+
admin_site.register(models.Parcel, ParcelAdmin)
@@ -159,6 +165,7 @@ class RecordRelationsAdmin(admin.ModelAdmin):
model, {'left_record': 'operation',
'right_record': 'operation'})
+
admin_site.register(models.RecordRelations, RecordRelationsAdmin)
@@ -166,6 +173,7 @@ class RelationTypeAdmin(admin.ModelAdmin):
list_display = ('label', 'txt_idx', 'tiny_label', 'available',
'symmetrical', 'inverse_relation', 'comment')
+
admin_site.register(models.RelationType, RelationTypeAdmin)
@@ -173,12 +181,14 @@ class ActTypeAdmin(GeneralTypeAdmin):
list_filter = ('intented_to',)
list_display = ['label', 'txt_idx', 'available', 'intented_to']
+
admin_site.register(models.ActType, ActTypeAdmin)
class ReportStateAdmin(GeneralTypeAdmin):
list_display = ['label', 'txt_idx', 'available', 'order', 'comment']
+
admin_site.register(models.ReportState, ReportStateAdmin)
@@ -198,6 +208,7 @@ class ParcelOwnerAdmin(HistorizedObjectAdmin):
'history_date'
]
+
admin_site.register(models.ParcelOwner, ParcelOwnerAdmin)
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index 45e4f7038..227f7ba25 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -222,6 +222,7 @@ class TownAdmin(admin.ModelAdmin):
list_filter = ("departement",)
form = AdminTownForm
inlines = [TownParentInline]
+ actions = [export_as_csv_action(exclude=['center', 'limit'])]
admin_site.register(models.Town, TownAdmin)
diff --git a/ishtar_common/migrations/0020_auto_20171030_1708.py b/ishtar_common/migrations/0020_auto_20171030_1708.py
new file mode 100644
index 000000000..d83a90295
--- /dev/null
+++ b/ishtar_common/migrations/0020_auto_20171030_1708.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2017-10-30 17:08
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0019_auto_20171026_1827'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='town',
+ name='departement',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.Department', verbose_name='Department'),
+ ),
+ migrations.AlterField(
+ model_name='town',
+ name='numero_insee',
+ field=models.CharField(max_length=120, verbose_name='Code commune (num\xe9ro INSEE)'),
+ ),
+ ]
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 14869e2a5..678564dda 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -44,7 +44,7 @@ from django.core.validators import validate_slug
from django.core.urlresolvers import reverse, NoReverseMatch
from django.db.utils import DatabaseError
from django.db.models import Q, Max, Count
-from django.db.models.signals import post_save, post_delete
+from django.db.models.signals import post_save, post_delete, m2m_changed
from django.utils.functional import lazy
from django.utils.translation import ugettext_lazy as _
@@ -2668,10 +2668,10 @@ class Town(Imported, models.Model):
center = models.PointField(_(u"Localisation"), srid=settings.SRID,
blank=True, null=True)
limit = models.MultiPolygonField(_(u"Limit"), blank=True, null=True)
- if settings.COUNTRY == 'fr':
- numero_insee = models.CharField(u"Numéro INSEE", max_length=6)
- departement = models.ForeignKey(
- Department, verbose_name=u"Département", null=True, blank=True)
+ numero_insee = models.CharField(u"Code commune (numéro INSEE)",
+ max_length=120)
+ departement = models.ForeignKey(
+ Department, verbose_name=_(u"Department"), null=True, blank=True)
year = models.IntegerField(
_("Year of creation"), null=True, blank=True,
help_text=_(u"Filling this field is relevant to distinguish old towns "
@@ -2745,6 +2745,15 @@ class Town(Imported, models.Model):
self.save()
return True
+ def update_town_code(self):
+ if not self.numero_insee or not self.children.count() or not self.year:
+ return
+ old_num = self.numero_insee[:]
+ numero = old_num.split('-')[0]
+ self.numero_insee = u"{}-{}".format(numero, self.year)
+ if self.numero_insee != old_num:
+ return True
+
def _generate_cached_label(self):
cached_label = self.name
if settings.COUNTRY == "fr":
@@ -2758,11 +2767,22 @@ def post_save_town(sender, **kwargs):
cached_label_changed(sender, **kwargs)
town = kwargs['instance']
town.generate_geo()
+ if town.update_town_code():
+ town.save()
post_save.connect(post_save_town, sender=Town)
+def town_child_changed(sender, **kwargs):
+ town = kwargs['instance']
+ if town.update_town_code():
+ town.save()
+
+
+m2m_changed.connect(town_child_changed, sender=Town.children.through)
+
+
class OperationType(GeneralType):
order = models.IntegerField(_(u"Order"), default=1)
preventive = models.BooleanField(_(u"Is preventive"), default=True)
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py
index e107bd6fb..63d80d5ab 100644
--- a/ishtar_common/tests.py
+++ b/ishtar_common/tests.py
@@ -126,6 +126,7 @@ class CommandsTestCase(TestCase):
q = models.Town.objects
town_nb = q.count()
first, union_start, union_end = '', '', []
+ new_nums = []
for idx, town in enumerate(q.all()):
x1 = float(idx) / 10
if not x1:
@@ -140,6 +141,8 @@ class CommandsTestCase(TestCase):
union_start += '{x2} 0.1'.format(x1=x1, x2=x2)
union_end.append('{x2} 0'.format(x1=x1, x2=x2))
town.limit = l
+ town.year = 1792
+ new_nums.append("{}-{}".format(town.numero_insee, town.year))
town.save()
union = 'MULTIPOLYGON (((' + first + ", " + union_start + \
", " + ", ".join(reversed(union_end)) + ", 0 0, " + first + ")))"
@@ -157,6 +160,9 @@ class CommandsTestCase(TestCase):
# no new town
self.assertEqual(town_nb + 1, models.Town.objects.count())
+ for parent_town in new.parents.all():
+ self.assertIn(parent_town.numero_insee, new_nums)
+
class WizardTestFormData(object):
"""
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 8d475aff5..d8c5b1997 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -581,6 +581,8 @@ def format_val(val):
return unicode(_(u"True"))
else:
return unicode(_(u"False"))
+ if type(val) == str:
+ val = val.decode('utf-8')
return unicode(val)
HIERARCHIC_LEVELS = 5
diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py
index 4efb4c3fb..1ddabe7c7 100644
--- a/ishtar_common/widgets.py
+++ b/ishtar_common/widgets.py
@@ -776,8 +776,10 @@ class JQueryJqGrid(forms.RadioSelect):
except NoReverseMatch:
logger.warning('Cannot resolve source for {} widget'.format(
self.form))
- if unicode(self.source_full) and unicode(self.source_full) != 'None':
- dct['source_full'] = unicode(self.source_full)
+
+ # full CSV export currently disabled
+ #if unicode(self.source_full) and unicode(self.source_full) != 'None':
+ # dct['source_full'] = unicode(self.source_full)
dct['extra_sources'] = []
if self.associated_model: