summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2011-01-29 00:12:55 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2011-01-29 00:12:55 +0100
commit0883d7029ebdb4a934407c95c19745b13fe558ca (patch)
treefd5d9f2c5c80eb97b4eb41c9a3aaad7d64d77121
parent2c501b96bca9a13e6f08e54ba6aba6ac1bf8be16 (diff)
downloadIshtar-0883d7029ebdb4a934407c95c19745b13fe558ca.tar.bz2
Ishtar-0883d7029ebdb4a934407c95c19745b13fe558ca.zip
Archaelogical file search mecanism (closes #142)
-rw-r--r--ishtar/furnitures/forms.py25
-rw-r--r--ishtar/furnitures/urls.py2
-rw-r--r--ishtar/furnitures/views.py46
3 files changed, 73 insertions, 0 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py
index a7f31999e..c49367ab4 100644
--- a/ishtar/furnitures/forms.py
+++ b/ishtar/furnitures/forms.py
@@ -652,7 +652,31 @@ class FileWizard(Wizard):
parcel.save()
return res
+class FileSelect(forms.Form):
+ town = forms.IntegerField(label=_(u"Town"),
+ widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \
+ 'autocomplete-town', associated_model=models.Town),
+ validators=[models.valid_id(models.Town)])
+ file_type = forms.ChoiceField(label=_("File type"),
+ choices=models.FileType.get_types())
+ year = forms.IntegerField(label=_("Year"))
+
+class FileFormSelection(forms.Form):
+ form_label = _("Archaelogical file")
+ associated_models = {'pk':models.File}
+ currents = {'pk':models.File}
+ pk = forms.IntegerField(label="", required=False,
+ widget=widgets.JQueryJqGrid(reverse_lazy('json-file'),
+ FileSelect(), ['file_type', 'year']),
+ validators=[models.valid_id(models.File)])
+
+ def clean(self):
+ cleaned_data = self.cleaned_data
+ if 'pk' not in cleaned_data or not cleaned_data['pk']:
+ raise forms.ValidationError(_(u"You should select a file."))
+ return cleaned_data
+"""
class FileFormSelection(forms.Form):
form_label = _("Archaelogical file")
associated_models = {'pk':models.File}
@@ -661,6 +685,7 @@ class FileFormSelection(forms.Form):
widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-file'),
associated_model=models.File),
validators=[models.valid_id(models.File)])
+"""
class FileFormGeneral(forms.Form):
form_label = _("General")
diff --git a/ishtar/furnitures/urls.py b/ishtar/furnitures/urls.py
index aafe0b3dd..d20ae6035 100644
--- a/ishtar/furnitures/urls.py
+++ b/ishtar/furnitures/urls.py
@@ -69,6 +69,8 @@ urlpatterns += patterns('ishtar.furnitures.views',
name='autocomplete-organization'),
url(BASE_URL + r'autocomplete-file/$', 'autocomplete_file',
name='autocomplete-file'),
+ url(BASE_URL + r'json-file/$', 'json_file',
+ name='json-file'),
url(BASE_URL + r'autocomplete-operation/$', 'autocomplete_operation',
name='autocomplete-operation'),
url(BASE_URL + r'json-operation/$', 'json_operation',
diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py
index b266bed63..041ebfb76 100644
--- a/ishtar/furnitures/views.py
+++ b/ishtar/furnitures/views.py
@@ -120,6 +120,52 @@ def autocomplete_file(request):
for file in files])
return HttpResponse(data, mimetype='text/plain')
+def json_file(request):
+ if not request.GET:
+ return HttpResponse(mimetype='text/plain')
+ request_keys = {'town':'towns__pk',
+ 'file_type':'file_type__pk',
+ 'year':'year',
+ 'value':'name',
+ }
+ dct = {}
+ for k in request_keys:
+ q = request.GET.get(k)
+ if not q:
+ continue
+ dct[request_keys[k]] = q
+ if not dct:
+ if 'json_file' in request.session:
+ dct = request.session['json_file']
+ elif 'file' in request.session:
+ dct = {"pk":request.session['file']}
+ if not dct:
+ return HttpResponse(mimetype='text/plain')
+ else:
+ request.session['json_file'] = dct
+ query = Q(**dct)
+ files = models.File.objects.filter(query)
+ q = request.GET.get('sidx')
+ if q and q in request_keys:
+ k = request_keys[q]
+ if k.endswith("__pk"):
+ k = k[:-len("__pk")] + "__label"
+ q = request.GET.get('sord')
+ sign = q and q == u'desc' and "-" or ''
+ if k == "name":
+ files = files.order_by(sign + 'year').order_by(
+ sign + 'numeric_reference')
+ else:
+ files = files.order_by(sign + k)
+ data = json.dumps({
+ "records":len(files),
+ "rows":[{"id":unicode(fle.pk),
+ "cell":(unicode(fle.pk), unicode(fle),
+ unicode(fle.file_type), unicode(fle.year))}
+ for fle in files]
+ })
+ return HttpResponse(data, mimetype='text/plain')
+
def autocomplete_operation(request, non_closed=True):
if not request.GET.get('term'):
return HttpResponse(mimetype='text/plain')