summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commite7039bdc30c43b488b8393338c53552de6cb0145 (patch)
tree67b2bd213c896327e2fac50e711f5f28a39ddb64
parent4c5ba5ce214e4c80fff3818abbf949a341be417a (diff)
downloadIshtar-e7039bdc30c43b488b8393338c53552de6cb0145.tar.bz2
Ishtar-e7039bdc30c43b488b8393338c53552de6cb0145.zip
Changing context record of a find (refs #3080)
-rw-r--r--archaeological_context_records/forms.py2
-rw-r--r--archaeological_context_records/models.py8
-rw-r--r--archaeological_context_records/urls.py2
-rw-r--r--archaeological_context_records/views.py35
-rw-r--r--archaeological_finds/forms.py35
-rw-r--r--archaeological_finds/views.py1
-rw-r--r--archaeological_finds/wizards.py2
-rw-r--r--ishtar_common/templates/base.html2
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%}