summaryrefslogtreecommitdiff
path: root/archaeological_operations
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_operations')
-rw-r--r--archaeological_operations/models.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index 637bbb7be..c4d7e489c 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -84,6 +84,9 @@ class ReportState(GeneralType):
post_save.connect(post_save_cache, sender=ReportState)
post_delete.connect(post_save_cache, sender=ReportState)
+class SiteManager(models.Manager):
+ def get_by_natural_key(self, txt_idx):
+ return self.get(reference=txt_idx)
class RecordQualityType(GeneralType):
order = models.IntegerField(_(u"Order"))
@@ -185,6 +188,7 @@ class ArchaeologicalSite(BaseHistorizedItem, OwnPerms, ValueGetter,
activate(language_code)
EXTRA_REQUEST_KEYS[unicode(v[0])] = v[1]
deactivate()
+ objects = SiteManager()
reference = models.CharField(_(u"Reference"), max_length=200, unique=True)
name = models.CharField(_(u"Name"), max_length=200,
@@ -265,6 +269,9 @@ class ArchaeologicalSite(BaseHistorizedItem, OwnPerms, ValueGetter,
]))
return name
+ def natural_key(self):
+ return (self.reference, )
+
@property
def external_id(self):
return self.reference
@@ -379,6 +386,10 @@ class ClosedItem(object):
user = q.all()[0]
return {'date': date, 'user': user}
+class OperationManager(models.Manager):
+ def get_by_natural_key(self, txt_idx):
+ return self.get(code_patriarche=txt_idx)
+
class Operation(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter,
ShortMenuItem, DashboardFormItem, RelationItem):
@@ -481,6 +492,7 @@ class Operation(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter,
)
},
}
+ objects = OperationManager()
# alternative names of fields for searches
ALT_NAMES = {
@@ -783,6 +795,9 @@ class Operation(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter,
)
ordering = ('cached_label',)
+ def natural_key(self):
+ return (self.code_patriarche, )
+
@classmethod
def get_owns(cls, user, menu_filtr=None, limit=None, values=None,
get_short_menu_class=None):
@@ -1811,10 +1826,24 @@ def strip_zero(value):
return value
+class ParcelManager(models.Manager):
+ def get_by_natural_key(self, associated_file, operation, year, town_insee,
+ town_year, section, parcel_number):
+ q = {"year": year, "town__numero_insee": town_insee,
+ "town__year": town_year,
+ "section": section, "parcel_number": parcel_number}
+ if associated_file:
+ q['associated_file__external_id'] = associated_file
+ if operation:
+ q['operation__code_patriarche'] = operation
+ return self.get(**q)
+
+
class Parcel(LightHistorizedItem):
EXTERNAL_ID_KEY = 'parcel_external_id'
BASE_SEARCH_VECTORS = ['section', 'parcel_number']
PARENT_SEARCH_VECTORS = ['operation']
+ objects = ParcelManager()
associated_file = models.ForeignKey(
'archaeological_files.File',
@@ -1855,6 +1884,13 @@ class Parcel(LightHistorizedItem):
def __unicode__(self):
return self.short_label
+ def natural_key(self):
+ return (
+ self.associated_file.external_id if self.associated_file else '',
+ self.operation.code_patriarche if self.operation else '',
+ self.year, self.town.numero_insee, self.town.year, self.section,
+ self.parcel_number)
+
"""
def merge(self, parcel):
# cannot automatically merge