summaryrefslogtreecommitdiff
path: root/archaeological_operations/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_operations/models.py')
-rw-r--r--archaeological_operations/models.py98
1 files changed, 72 insertions, 26 deletions
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index d919bd305..2db101104 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -34,7 +34,8 @@ from ishtar_common.models import GeneralType, BaseHistorizedItem, \
HistoricalRecords, LightHistorizedItem, OwnPerms, Department, Source,\
Person, Organization, Town, Dashboard, IshtarUser, ValueGetter, \
DocumentTemplate, ShortMenuItem, DashboardFormItem, GeneralRelationType,\
- GeneralRecordRelations, post_delete_record_relation, OperationType
+ GeneralRecordRelations, post_delete_record_relation, OperationType, \
+ get_external_id
class RemainType(GeneralType):
@@ -101,6 +102,13 @@ class ArchaeologicalSite(BaseHistorizedItem):
name = self.reference
if self.name:
name += u" %s %s" % (settings.JOINT, self.name)
+ if self.remains.count():
+ name += u" {} {}".format(
+ settings.JOINT,
+ u", ".join([unicode(remain) for remain in self.remains.all()]))
+ if self.periods.count():
+ name += u" [{}]".format(
+ u", ".join([unicode(period) for period in self.periods.all()]))
return name
@@ -129,8 +137,36 @@ QUALITY = (('ND', _(u"Not documented")),
('R', _(u"Reliable")),)
-class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
- DashboardFormItem):
+class ClosedItem(object):
+ def closing(self):
+ if self.is_active():
+ return
+ in_history = False
+ date = self.end_date
+ # last action is closing?
+ for idx, item in enumerate(
+ self.history.order_by('-history_date').all()):
+ if not idx:
+ # last action
+ continue
+ if not item.end_date or item.end_date != self.end_date:
+ break
+ in_history = True
+ user = None
+ if in_history:
+ if item.history_modifier_id:
+ q = IshtarUser.objects.filter(pk=item.history_modifier_id)
+ if q.count():
+ user = q.all()[0]
+ elif self.history_modifier_id:
+ q = IshtarUser.objects.filter(pk=self.history_modifier_id)
+ if q.count():
+ user = q.all()[0]
+ return {'date': date, 'user': user}
+
+
+class Operation(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter,
+ ShortMenuItem, DashboardFormItem):
QUALITY_DICT = dict(QUALITY)
SHOW_URL = 'show-operation'
TABLE_COLS = ['year_index', 'operation_type', 'remains', 'towns',
@@ -184,12 +220,12 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
report_processing = models.ForeignKey(
ReportState, verbose_name=_(u"Report processing"),
blank=True, null=True)
+ old_code = models.CharField(_(u"Old code"), max_length=200, null=True,
+ blank=True)
if settings.COUNTRY == 'fr':
code_patriarche = models.IntegerField(u"Code PATRIARCHE", null=True,
blank=True, unique=True)
TABLE_COLS = ['full_code_patriarche'] + TABLE_COLS
- code_dracar = models.CharField(u"Code DRACAR", max_length=200,
- null=True, blank=True)
# preventive
fnap_financing = models.FloatField(u"Financement FNAP (%)",
blank=True, null=True)
@@ -415,15 +451,6 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
def is_active(self):
return not bool(self.end_date)
- def closing(self):
- if self.is_active():
- return
- for item in self.history.all():
- if not item.end_date:
- break
- return {'date': item.history_date,
- 'user': IshtarUser.objects.get(pk=item.history_modifier_id)}
-
def save(self, *args, **kwargs):
# put a default year if start_date is defined
if self.start_date and not self.year:
@@ -772,11 +799,15 @@ class Parcel(LightHistorizedItem):
year = models.IntegerField(_(u"Year"), blank=True, null=True)
town = models.ForeignKey(Town, related_name='parcels',
verbose_name=_(u"Town"))
- section = models.CharField(_(u"Section"), max_length=4)
+ section = models.CharField(_(u"Section"), max_length=4,
+ null=True, blank=True)
parcel_number = models.CharField(_(u"Parcel number"), max_length=6,
null=True, blank=True)
+ public_domain = models.BooleanField(_(u"Public domain"), default=False)
external_id = models.CharField(_(u"External ID"), max_length=100,
null=True, blank=True)
+ auto_external_id = models.BooleanField(
+ _(u"External ID is set automatically"), default=False)
address = models.TextField(_(u"Address - Locality"), null=True, blank=True)
class Meta:
@@ -786,9 +817,11 @@ class Parcel(LightHistorizedItem):
@property
def short_label(self):
- return settings.JOINT.join(
- [unicode(item) for item in [self.section, self.parcel_number]
- if item])
+ items = [unicode(item) for item in [self.section, self.parcel_number]
+ if item]
+ if self.public_domain:
+ items.append(unicode(_(u"Public domain")))
+ return settings.JOINT.join(items)
def __unicode__(self):
return self.short_label
@@ -829,12 +862,18 @@ class Parcel(LightHistorizedItem):
if not idx:
grouped.append(parcel)
grouped[-1].parcel_numbers = []
- grouped[-1].parcel_numbers.append(
- u"0" * (12 - len(parcel.parcel_number)) +
- parcel.parcel_number)
+ nb = ""
+ if parcel.parcel_number:
+ nb = u"0" * (12 - len(parcel.parcel_number)) + \
+ parcel.parcel_number
+ if parcel.public_domain:
+ if nb:
+ nb += " "
+ nb += unicode(_(u"Public domain"))
+ grouped[-1].parcel_numbers.append(nb)
grouped[-1].parcel_numbers.sort()
- grouped[-1].parcel_numbers = [strip_zero(nb)
- for nb in grouped[-1].parcel_numbers]
+ grouped[-1].parcel_numbers = [strip_zero(n)
+ for n in grouped[-1].parcel_numbers]
return grouped
@classmethod
@@ -916,11 +955,18 @@ def parcel_post_save(sender, **kwargs):
if not kwargs['instance']:
return
parcel = kwargs['instance']
- if not parcel.external_id and (parcel.section or parcel.parcel_number):
- parcel.external_id = unicode(parcel.section or "") + \
- unicode(parcel.parcel_number or "")
+
+ updated = False
+ if not parcel.external_id or parcel.auto_external_id:
+ external_id = get_external_id('parcel_external_id', parcel)
+ if external_id != parcel.external_id:
+ updated = True
+ parcel.auto_external_id = True
+ parcel.external_id = external_id
+ if updated:
parcel.save()
return
+
if parcel.operation and parcel.operation.pk and \
parcel.town not in list(parcel.operation.towns.all()):
parcel.operation.towns.add(parcel.town)