diff options
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 |
commit | 0883d7029ebdb4a934407c95c19745b13fe558ca (patch) | |
tree | fd5d9f2c5c80eb97b4eb41c9a3aaad7d64d77121 | |
parent | 2c501b96bca9a13e6f08e54ba6aba6ac1bf8be16 (diff) | |
download | Ishtar-0883d7029ebdb4a934407c95c19745b13fe558ca.tar.bz2 Ishtar-0883d7029ebdb4a934407c95c19745b13fe558ca.zip |
Archaelogical file search mecanism (closes #142)
-rw-r--r-- | ishtar/furnitures/forms.py | 25 | ||||
-rw-r--r-- | ishtar/furnitures/urls.py | 2 | ||||
-rw-r--r-- | ishtar/furnitures/views.py | 46 |
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') |