diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-08-23 11:07:45 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-08-23 11:07:45 +0200 | 
| commit | 7924c43af9044cfd40f36bd8a84378417223d95b (patch) | |
| tree | 78197ea5c36baaff4fcc1a53580eb3d586630b39 /archaeological_operations/models.py | |
| parent | 54b87741a26a2bd805ed32200b082ca07ee0e27d (diff) | |
| parent | 0bdaa7c90017b436b3baf026c9710a8d49c9420a (diff) | |
| download | Ishtar-7924c43af9044cfd40f36bd8a84378417223d95b.tar.bz2 Ishtar-7924c43af9044cfd40f36bd8a84378417223d95b.zip  | |
Merge branch 'master' into v0.9
Conflicts:
	ishtar_common/migrations/0053_auto__add_field_ishtarsiteprofile_currency.py
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)  | 
