diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-03-16 19:48:43 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-05-09 20:58:16 +0200 |
commit | a850add6d883d0a0daed8d1c74da5ace6572431e (patch) | |
tree | 67b2bd213c896327e2fac50e711f5f28a39ddb64 | |
parent | 2728c5a51c474429bea741dc469fd87ed48cee32 (diff) | |
download | Ishtar-a850add6d883d0a0daed8d1c74da5ace6572431e.tar.bz2 Ishtar-a850add6d883d0a0daed8d1c74da5ace6572431e.zip |
Changing context record of a find (refs #3080)
-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 | ||||
-rw-r--r-- | archaeological_finds/forms.py | 35 | ||||
-rw-r--r-- | archaeological_finds/views.py | 1 | ||||
-rw-r--r-- | archaeological_finds/wizards.py | 2 | ||||
-rw-r--r-- | ishtar_common/templates/base.html | 2 |
8 files changed, 78 insertions, 9 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', diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 3cfe13ea9..e3207a2f5 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -30,7 +30,8 @@ from django.utils.translation import ugettext_lazy as _ from ishtar_common.models import Person, valid_id, valid_ids from archaeological_operations.models import Period, ArchaeologicalSite -from archaeological_context_records.models import DatingType, DatingQuality +from archaeological_context_records.models import DatingType, DatingQuality, \ + ContextRecord from archaeological_warehouse.models import Warehouse import models @@ -40,6 +41,38 @@ from ishtar_common.forms import FormSet, FloatField, \ from ishtar_common.forms_common import get_town_field, SourceSelect +class RecordFormSelection(forms.Form): + form_label = _("Context record") + base_models = ['get_first_base_find'] + associated_models = {'get_first_base_find__context_record': ContextRecord} + get_first_base_find__context_record = forms.IntegerField( + label=_(u"Context record"), required=False, + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-contextrecord'), + associated_model=ContextRecord), + validators=[valid_id(ContextRecord)]) + + def __init__(self, *args, **kwargs): + super(RecordFormSelection, self).__init__(*args, **kwargs) + # get the current operation and restrict search to it + cr_pk = None + if 'data' in kwargs and kwargs['data']: + cr_pk = kwargs['data'].get( + 'get_first_base_find__context_record') + if not cr_pk and 'initial' in kwargs and kwargs['initial']: + cr_pk = kwargs['initial'].get( + 'get_first_base_find__context_record') + if not cr_pk: + return + try: + cr = ContextRecord.objects.get(pk=cr_pk) + except ContextRecord.DoesNotExist: + return + widget = self.fields['get_first_base_find__context_record'].widget + widget.source = unicode(widget.source) + "?operation__pk={}".format( + cr.operation.pk) + + class FindForm(forms.Form): file_upload = True form_label = _("Find") diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index afe6715a8..46594a2b0 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -105,6 +105,7 @@ find_search_wizard = SearchWizard.as_view([ find_modification_wizard = FindModificationWizard.as_view([ ('selec-find_modification', FindFormSelection), + ('selecrecord-find_modification', RecordFormSelection), ('find-find_modification', FindForm), ('dating-find_modification', DatingFormSet), ('final-find_modification', FinalForm)], diff --git a/archaeological_finds/wizards.py b/archaeological_finds/wizards.py index 61636aa25..fabe1039a 100644 --- a/archaeological_finds/wizards.py +++ b/archaeological_finds/wizards.py @@ -58,7 +58,7 @@ class FindWizard(Wizard): if not current_cr or self.steps.current.startswith('select-'): return context context['reminders'] = ( - (_("Operation"), unicode(current_cr.operation)), + (_(u"Operation"), unicode(current_cr.operation)), (_(u"Context record"), unicode(current_cr))) return context diff --git a/ishtar_common/templates/base.html b/ishtar_common/templates/base.html index 578b3edcc..4f84e3e62 100644 --- a/ishtar_common/templates/base.html +++ b/ishtar_common/templates/base.html @@ -87,7 +87,7 @@ {% endif %}{% endblock %} </div>{% endif %} {% if reminders %}<fieldset id='reminder'><legend>{% trans "Current items" %}</legend> -{% for lbl, value in reminders%} +{% for lbl, value in reminders %} <p><strong class='lbl'>{{lbl}}{% trans ":"%}</strong> <span class='value'>{{value}}</span></p> {% endfor %} </fieldset>{%endif%} |