diff options
Diffstat (limited to 'archaeological_context_records')
-rw-r--r-- | archaeological_context_records/forms.py | 2 | ||||
-rw-r--r-- | archaeological_context_records/models.py | 8 | ||||
-rw-r--r-- | archaeological_context_records/urls.py | 2 | ||||
-rw-r--r-- | archaeological_context_records/views.py | 35 |
4 files changed, 41 insertions, 6 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py index 5160c1c51..1a9fc12a6 100644 --- a/archaeological_context_records/forms.py +++ b/archaeological_context_records/forms.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2010-2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2010-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py index bd18ab5d4..ddd9c8609 100644 --- a/archaeological_context_records/models.py +++ b/archaeological_context_records/models.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2012-2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2012-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -112,9 +112,8 @@ class ContextRecord(BaseHistorizedItem, OwnPerms, ShortMenuItem): 'label', 'unit'] if settings.COUNTRY == 'fr': TABLE_COLS.insert(1, 'operation.code_patriarche') - TABLE_COLS_FOR_OPE = [ - 'label', ['parcel.section', 'parcel.parcel_number'], 'unit', - 'datings.period', 'description'] + TABLE_COLS_FOR_OPE = ['label', 'parcel', 'unit', + 'datings.period', 'description'] TABLE_COLS_FOR_OPE_LBL = {'section__parcel_number': _("Parcel")} external_id = models.CharField(_(u"External ID"), blank=True, null=True, max_length=120) @@ -210,6 +209,7 @@ class ContextRecord(BaseHistorizedItem, OwnPerms, ShortMenuItem): Q(history_creator=user) def full_label(self): + return unicode(self) if not self.operation: return unicode(self) return self._real_label() or self._temp_label() diff --git a/archaeological_context_records/urls.py b/archaeological_context_records/urls.py index da6d80a98..509c33064 100644 --- a/archaeological_context_records/urls.py +++ b/archaeological_context_records/urls.py @@ -59,6 +59,8 @@ urlpatterns = patterns( urlpatterns += patterns( 'archaeological_context_records.views', + url(r'autocomplete-contextrecord/$', 'autocomplete_contextrecord', + name='autocomplete-contextrecord'), url(r'show-contextrecord(?:/(?P<pk>.+))?/(?P<type>.+)?$', 'show_contextrecord', name=models.ContextRecord.SHOW_URL), url(r'show-historized-contextrecord/(?P<pk>.+)?/(?P<date>.+)?$', diff --git a/archaeological_context_records/views.py b/archaeological_context_records/views.py index 883b2c85e..839dbed9e 100644 --- a/archaeological_context_records/views.py +++ b/archaeological_context_records/views.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2010-2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2010-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -17,7 +17,11 @@ # See the file COPYING for details. +import json + from django.core.urlresolvers import reverse +from django.db.models import Q +from django.http import HttpResponse from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _ @@ -43,6 +47,35 @@ contextrecord_extra_keys = { 'archaeological_sites': 'operation__archaeological_sites__pk', } + +def autocomplete_contextrecord(request): + if (not request.user.has_perm( + 'archaeological_context_records.view_contextrecord', + models.ContextRecord) + and not request.user.has_perm( + 'archaeological_context_records.view_own_contextrecord', + models.ArchaeologicalSite)): + return HttpResponse(mimetype='text/plain') + if not request.GET.get('term'): + return HttpResponse(mimetype='text/plain') + q = request.GET.get('term') + query = Q() + if request.GET.get('operation__pk'): + query = Q(operation__pk=request.GET.get('operation__pk')) + for q in q.split(' '): + qt = Q(parcel__section__icontains=q) | \ + Q(parcel__parcel_number__icontains=q) | \ + Q(label__icontains=q) + query = query & qt + limit = 15 + items = models.ContextRecord.objects\ + .filter(query).order_by('parcel__section', 'parcel__parcel_number', + 'label')[:limit] + data = json.dumps([{'id': item.pk, + 'value': unicode(item)[:60]} + for item in items]) + return HttpResponse(data, mimetype='text/plain') + get_contextrecord = get_item( models.ContextRecord, 'get_contextrecord', 'contextrecord', |