diff options
Diffstat (limited to 'archaeological_operations')
| -rw-r--r-- | archaeological_operations/admin.py | 43 | ||||
| -rw-r--r-- | archaeological_operations/lookups.py | 41 | ||||
| -rw-r--r-- | archaeological_operations/models.py | 10 | 
3 files changed, 86 insertions, 8 deletions
diff --git a/archaeological_operations/admin.py b/archaeological_operations/admin.py index 3cfd91d5e..f1deac188 100644 --- a/archaeological_operations/admin.py +++ b/archaeological_operations/admin.py @@ -75,6 +75,13 @@ class ArchaeologicalSiteAdmin(HistorizedObjectAdmin):  admin_site.register(models.ArchaeologicalSite, ArchaeologicalSiteAdmin) +class ArchaeologicalSiteInline(admin.TabularInline): +    model = models.Operation.archaeological_sites.through +    form = make_ajax_form( +        model, {'archaeologicalsite': 'archaeological_site'}) +    extra = 1 + +  class AdminOperationForm(forms.ModelForm):      class Meta:          model = models.Operation @@ -107,6 +114,7 @@ class OperationAdmin(HistorizedObjectAdmin):      readonly_fields = HistorizedObjectAdmin.readonly_fields + [          'imports', 'cached_label']      form = AdminOperationForm +    inlines = [ArchaeologicalSiteInline]  admin_site.register(models.Operation, OperationAdmin) @@ -126,8 +134,18 @@ admin_site.register(models.OperationSource, OperationSourceAdmin)  class ParcelAdmin(HistorizedObjectAdmin):      list_display = ['section', 'parcel_number', 'operation', 'associated_file'] -    search_fields = ('operation__name',) +    search_fields = ('operation__cached_label', +                     'associated_file__cached_label', +                     'year', 'section', 'parcel_number')      model = models.Parcel +    form = make_ajax_form( +        model, {'associated_file': 'file', +                'operation': 'operation', +                'town': 'town'} +    ) +    readonly_fields = HistorizedObjectAdmin.readonly_fields + [ +        'imports', 'history_date' +    ]  admin_site.register(models.Parcel, ParcelAdmin) @@ -165,10 +183,25 @@ class ReportStateAdmin(GeneralTypeAdmin):  admin_site.register(models.ReportState, ReportStateAdmin) +class ParcelOwnerAdmin(HistorizedObjectAdmin): +    list_display = ['parcel', 'operation', 'associated_file', +                    'owner'] +    search_fields = ('parcel__operation__cached_label', +                     'parcel__associated_file__cached_label', +                     'owner__name', 'owner__surname', 'parcel__section', +                     'parcel__parcel_number') +    model = models.ParcelOwner +    form = make_ajax_form( +        model, {'owner': 'person', +                'parcel': 'parcel'} +    ) +    readonly_fields = HistorizedObjectAdmin.readonly_fields + [ +        'imports', 'history_date' +    ] + +admin_site.register(models.ParcelOwner, ParcelOwnerAdmin) + +  general_models = [models.RemainType]  for model in general_models:      admin_site.register(model, GeneralTypeAdmin) - -basic_models = [models.ParcelOwner] -for model in basic_models: -    admin_site.register(model) diff --git a/archaeological_operations/lookups.py b/archaeological_operations/lookups.py index 690b3c566..83cf6fa3a 100644 --- a/archaeological_operations/lookups.py +++ b/archaeological_operations/lookups.py @@ -1,7 +1,11 @@  from ajax_select import register, LookupChannel  from django.db.models import Q -from archaeological_operations.models import Operation, ArchaeologicalSite +from django.utils.encoding import force_text +from django.utils.html import escape + +from archaeological_operations.models import Operation, ArchaeologicalSite, \ +    Parcel  @register('operation') @@ -33,7 +37,40 @@ class ArchaeologicalSiteLookup(LookupChannel):                  Q(name__icontains=term)              )              query &= subquery -        return self.model.objects.filter(query).order_by('cached_label')[:20] +        return self.model.objects.filter(query).order_by('reference', +                                                         'name')[:20]      def format_item_display(self, item):          return u"<span class='ajax-label'>%s</span>" % unicode(item) + + +@register('parcel') +class ParcelLookup(LookupChannel): +    model = Parcel + +    def get_query(self, q, request): +        query = Q() +        for term in q.strip().split(' '): +            subquery = ( +                Q(associated_file__cached_label__icontains=term) | +                Q(operation__cached_label__icontains=term) | +                Q(section__icontains=term) | +                Q(parcel_number__icontains=term) | +                Q(town__name__icontains=term) +            ) +            try: +                subquery |= Q(year=int(term)) +            except ValueError: +                pass +            query &= subquery +        return self.model.objects.filter( +            query).order_by('-associated_file__cached_label', +                            '-operation__cached_label', +                            'section', +                            'parcel_number')[:20] + +    def format_match(self, obj): +        return escape(force_text(obj.long_label())) + +    def format_item_display(self, item): +        return u"<span class='ajax-label'>%s</span>" % item.long_label() diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 1249fcc05..ba947e8bb 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -1473,7 +1473,15 @@ class ParcelOwner(LightHistorizedItem):          verbose_name_plural = _(u"Parcel owners")      def __unicode__(self): -        return self.owner + settings.JOINT + self.parcel +        return "{}{}{}".format(self.owner, settings.JOINT, self.parcel) + +    @property +    def operation(self): +        return self.parcel.operation + +    @property +    def associated_file(self): +        return self.parcel.associated_file  class OperationDashboard:  | 
