summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-18 12:36:00 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-18 12:36:00 +0200
commita9295c8037f1c41e5c36c0fdf7be56b625f873a0 (patch)
tree7709cfcbbf57c3157b1287ac97e82478b3f7787a
parent59da4acdc59a654a7f92c45c11a6597023a9e607 (diff)
downloadIshtar-a9295c8037f1c41e5c36c0fdf7be56b625f873a0.tar.bz2
Ishtar-a9295c8037f1c41e5c36c0fdf7be56b625f873a0.zip
QA find basket: use autocomplete for existing baskets
-rw-r--r--archaeological_finds/forms.py35
-rw-r--r--archaeological_finds/templates/ishtar/forms/qa_find_basket.html44
-rw-r--r--ishtar_common/templates/blocks/JQueryAutocomplete.js14
3 files changed, 46 insertions, 47 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 284b9a76c..aa29b57bf 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -681,11 +681,16 @@ class QAFindFormSingle(QAFindFormMulti):
class QAFindBasketForm(IshtarForm):
- create_or_update = forms.ChoiceField(
- choices=(('create', _(u"Create")),
- ('update', _(u"Update"))), initial='create')
- label = forms.CharField(label="", max_length=None, required=False)
- basket = forms.ChoiceField(label=_(u"Basket"), required=False, choices=[])
+ qa_bf_create_or_update = forms.ChoiceField(
+ choices=(('create', _("Create")),
+ ('update', _("Update"))), initial='create')
+ qa_bf_label = forms.CharField(label="", max_length=None, required=False)
+ qa_bf_basket = forms.IntegerField(
+ label=_("Basket"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-findbasket-write'),
+ associated_model=models.FindBasket),
+ validators=[valid_id(models.FindBasket)], required=False)
def __init__(self, *args, **kwargs):
self.user = None
@@ -696,20 +701,14 @@ class QAFindBasketForm(IshtarForm):
self.items = kwargs.pop('items')
super(QAFindBasketForm, self).__init__(*args, **kwargs)
- if not self.user:
- return
- self.fields['basket'].choices = [
- (b.pk, "{} ({})".format(b.label, b.items.count()))
- for b in models.FindBasket.objects.filter(user=self.user).distinct()
- ]
def clean(self):
- if self.cleaned_data['create_or_update'] == 'update':
- if not self.cleaned_data['basket']:
+ if self.cleaned_data['qa_bf_create_or_update'] == 'update':
+ if not self.cleaned_data['qa_bf_basket']:
raise forms.ValidationError(
_(u"On update, you have to select a basket."))
return self.cleaned_data
- label = self.cleaned_data['label'].strip()
+ label = self.cleaned_data['qa_bf_label'].strip()
if not label:
raise forms.ValidationError(_(u"A label is required."))
if models.FindBasket.objects.filter(user=self.user,
@@ -719,11 +718,11 @@ class QAFindBasketForm(IshtarForm):
return self.cleaned_data
def save(self, items):
- if self.cleaned_data['create_or_update'] == 'update':
+ if self.cleaned_data['qa_bf_create_or_update'] == 'update':
basket = models.FindBasket.objects.get(
- user=self.user, pk=self.cleaned_data['basket'])
+ user=self.user, pk=self.cleaned_data['qa_bf_basket'])
else:
- label = self.cleaned_data['label'].strip()
+ label = self.cleaned_data['qa_bf_label'].strip()
basket = models.FindBasket.objects.create(
user=self.user, label=label)
for item in items:
@@ -1646,7 +1645,7 @@ class SelectFindBasketForm(IshtarForm):
self.user = kwargs.pop('user')
if hasattr(self.user, 'ishtaruser'):
self.user = self.user.ishtaruser
- super(SelectFindBasketWriteForm, self).__init__(*args, **kwargs)
+ super(SelectFindBasketForm, self).__init__(*args, **kwargs)
class SelectFindBasketWriteForm(IshtarForm):
diff --git a/archaeological_finds/templates/ishtar/forms/qa_find_basket.html b/archaeological_finds/templates/ishtar/forms/qa_find_basket.html
index 77fc2abcd..c9224078a 100644
--- a/archaeological_finds/templates/ishtar/forms/qa_find_basket.html
+++ b/archaeological_finds/templates/ishtar/forms/qa_find_basket.html
@@ -15,31 +15,31 @@
</div>{% endif %}
{% endfor %}
- {% if form.basket %}
+ {% if form.qa_bf_basket %}
<div class="form-row">
- <input type="radio" name="create_or_update" value="create"
- id="create-choice" checked >
- &nbsp;<label for="create-choice">{% trans "New" %}</label>
+ <input type="radio" name="qa_bf_create_or_update" value="create"
+ id="qa_bf_create-choice" checked >
+ &nbsp;<label for="qa_bf_create-choice">{% trans "New" %}</label>
</div>
{% else %}
- <input type="hidden" name="create_or_update" value="create">
+ <input type="hidden" name="qa_bf_create_or_update" value="create">
{% endif %}
- <div id="new-basket">
+ <div id="qa_bf_new-basket">
<div class="form-row">
- {% with form.label as field %}
+ {% with form.qa_bf_label as field %}
{% include "blocks/bs_field_snippet.html" %}
{% endwith %}
</div>
</div>
- {% if form.basket %}
+ {% if form.qa_bf_basket %}
<div class="form-row">
- <input type="radio" name="create_or_update" value="update"
- id="update-choice">
- &nbsp;<label for="update-choice">{% trans "Add" %}</label>
+ <input type="radio" name="qa_bf_create_or_update" value="update"
+ id="qa_bf_update-choice">
+ &nbsp;<label for="qa_bf_update-choice">{% trans "Add" %}</label>
</div>
- <div id="update-basket">
+ <div id="qa_bf_update-basket">
<div class="form-row">
- {% with form.basket as field %}
+ {% with form.qa_bf_basket as field %}
{% include "blocks/bs_field_snippet.html" %}
{% endwith %}
</div>
@@ -48,20 +48,20 @@
{% endblock %}
{% block js %}
-var update_form_display = function(){
- if ($("#update-choice:checked").length){
- $("#new-basket").hide();
- $("#update-basket").show();
+var qa_bf_update_form_display = function(){
+ if ($("#qa_bf_update-choice:checked").length){
+ $("#qa_bf_new-basket").hide();
+ $("#qa_bf_update-basket").show();
} else {
- $("#update-basket").hide();
- $("#new-basket").show();
+ $("#qa_bf_update-basket").hide();
+ $("#qa_bf_new-basket").show();
}
}
$(document).ready(function(){
- $("#create-choice").click(update_form_display);
- $("#update-choice").click(update_form_display);
- update_form_display();
+ $("#qa_bf_create-choice").click(qa_bf_update_form_display);
+ $("#qa_bf_update-choice").click(qa_bf_update_form_display);
+ qa_bf_update_form_display();
});
{% endblock %}
diff --git a/ishtar_common/templates/blocks/JQueryAutocomplete.js b/ishtar_common/templates/blocks/JQueryAutocomplete.js
index 2d2bbad9d..c9af9a58e 100644
--- a/ishtar_common/templates/blocks/JQueryAutocomplete.js
+++ b/ishtar_common/templates/blocks/JQueryAutocomplete.js
@@ -6,13 +6,13 @@ $(function() {
$("#id_select_{{field_id}}").autocomplete({
source: source_{{field_id|replace_underscore}},
select: function( event, ui ) {
- if(ui.item){
- $('#id_{{field_id}}').val(ui.item.id);
- $('#id_{{field_id}}').change();
- } else {
- $('#id_{{field_id}}').val(null);
- }
- },
+ if(ui.item){
+ $('#id_{{field_id}}').val(ui.item.id);
+ $('#id_{{field_id}}').change();
+ } else {
+ $('#id_{{field_id}}').val(null);
+ }
+ },
minLength: 2{% if options %},
{{options}}
{% endif %}