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 | e7039bdc30c43b488b8393338c53552de6cb0145 (patch) | |
| tree | 67b2bd213c896327e2fac50e711f5f28a39ddb64 | |
| parent | 4c5ba5ce214e4c80fff3818abbf949a341be417a (diff) | |
| download | Ishtar-e7039bdc30c43b488b8393338c53552de6cb0145.tar.bz2 Ishtar-e7039bdc30c43b488b8393338c53552de6cb0145.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%}  | 
