summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_files/models.py14
-rw-r--r--archaeological_files/templates/ishtar/sheet_file.html4
-rw-r--r--ishtar_common/models.py40
3 files changed, 52 insertions, 6 deletions
diff --git a/archaeological_files/models.py b/archaeological_files/models.py
index 4d0422f3c..16f3e4de9 100644
--- a/archaeological_files/models.py
+++ b/archaeological_files/models.py
@@ -28,12 +28,12 @@ from django.utils.translation import ugettext_lazy as _, pgettext_lazy, \
activate, deactivate
from ishtar_common.utils import cached_label_changed, get_cache, \
- get_current_year
+ get_current_year, m2m_historization_changed
from ishtar_common.models import GeneralType, BaseHistorizedItem, \
HistoricalRecords, OwnPerms, Person, Organization, Department, Town, \
Dashboard, DashboardFormItem, ValueGetter, ShortMenuItem, \
- OperationType, get_external_id, post_save_cache, Document
+ OperationType, get_external_id, post_save_cache, Document, HistoryModel
from archaeological_operations.models import get_values_town_related, \
ClosedItem
@@ -217,6 +217,8 @@ class File(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter,
'towns__numero_insee__startswith': '_get_department_code',
}
+ HISTORICAL_M2M = ['towns', 'departments']
+
# fields
year = models.IntegerField(_(u"Year"), default=get_current_year)
numeric_reference = models.IntegerField(
@@ -325,7 +327,7 @@ class File(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter,
db_index=True)
imported_line = models.TextField(_(u"Imported line"), null=True,
blank=True)
- history = HistoricalRecords()
+ history = HistoricalRecords(bases=[HistoryModel])
GET_VALUES_EXTRA = [
'general_contractor_address_1',
@@ -692,9 +694,15 @@ class File(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter,
def is_preventive(self):
return FileType.is_preventive(self.file_type.pk)
+
m2m_changed.connect(cached_label_changed, sender=File.towns.through)
+
post_save.connect(cached_label_changed, sender=File)
+for attr in File.HISTORICAL_M2M:
+ m2m_changed.connect(m2m_historization_changed,
+ sender=getattr(File, attr).through)
+
class FileByDepartment(models.Model):
"""
diff --git a/archaeological_files/templates/ishtar/sheet_file.html b/archaeological_files/templates/ishtar/sheet_file.html
index 062dbc5a8..989c2cdfd 100644
--- a/archaeological_files/templates/ishtar/sheet_file.html
+++ b/archaeological_files/templates/ishtar/sheet_file.html
@@ -67,8 +67,8 @@
<h3>{% trans "Localisation"%}</h3>
<div class="row">
- {% field_flex_multiple "Towns" item.towns %}
- {% field_flex_multiple "Departments" item.departments %}
+ {% field_flex_multiple_obj "Towns" item 'towns' %}
+ {% field_flex_multiple_obj "Departments" item 'departments' %}
{% field_flex "Main address" item.address %}
{% field_flex "Complement" item.address_complement %}
{% field_flex "Postal code" item.postal_code %}
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 528ba6512..c241b4fad 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -159,7 +159,10 @@ class HistoryModel(models.Model):
def m2m_listing(self, key, create=False):
if not self.history_m2m or key not in self.history_m2m:
return
- models = import_module(self.__class__.__module__ + ".models")
+ models = self.__class__.__module__
+ if not models.endswith('.models'):
+ models += ".models"
+ models = import_module(models)
model = getattr(
models, self.__class__.__name__[len('Historical'):])
related_model = getattr(model, key).rel.model
@@ -2656,6 +2659,22 @@ class Department(models.Model):
def natural_key(self):
return (self.number,)
+ def history_compress(self):
+ return self.number
+
+ @classmethod
+ def history_decompress(cls, full_value, create=False):
+ if not full_value:
+ return []
+ res = []
+ for value in full_value:
+ try:
+ res.append(cls.objects.get(number=value))
+ except cls.DoesNotExist:
+ continue
+ return res
+
+
class Address(BaseHistorizedItem):
address = models.TextField(_(u"Address"), null=True, blank=True)
@@ -4217,6 +4236,25 @@ class Town(Imported, models.Model):
def natural_key(self):
return (self.numero_insee, self.year)
+ def history_compress(self):
+ values = {'numero_insee': self.numero_insee,
+ 'year': self.year or ""}
+ return values
+
+ @classmethod
+ def history_decompress(cls, full_value, create=False):
+ if not full_value:
+ return []
+ res = []
+ for value in full_value:
+ try:
+ res.append(
+ cls.objects.get(numero_insee=value['numero_insee'],
+ year=value['year'] or None))
+ except cls.DoesNotExist:
+ continue
+ return res
+
def __unicode__(self):
if self.cached_label:
return self.cached_label