diff options
Diffstat (limited to 'archaeological_operations/models.py')
-rw-r--r-- | archaeological_operations/models.py | 98 |
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) |