diff options
-rw-r--r-- | ishtar/furnitures/forms.py | 4 | ||||
-rw-r--r-- | ishtar/furnitures/urls.py | 8 | ||||
-rw-r--r-- | ishtar/furnitures/views.py | 59 | ||||
-rw-r--r-- | ishtar/furnitures/widgets.py | 6 |
4 files changed, 56 insertions, 21 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py index db440081c..e436d0664 100644 --- a/ishtar/furnitures/forms.py +++ b/ishtar/furnitures/forms.py @@ -681,7 +681,7 @@ class FileFormSelection(forms.Form): associated_models = {'pk':models.File} currents = {'pk':models.File} pk = forms.IntegerField(label="", required=False, - widget=widgets.JQueryJqGrid(reverse_lazy('json-file'), + widget=widgets.JQueryJqGrid(reverse_lazy('get-file'), FileSelect(), ['file_type', 'year']), validators=[models.valid_id(models.File)]) @@ -1168,7 +1168,7 @@ class OperationFormSelection(forms.Form): associated_models = {'pk':models.Operation} currents = {'pk':models.Operation} pk = forms.IntegerField(label="", required=False, - widget=widgets.JQueryJqGrid(reverse_lazy('json-operation'), + widget=widgets.JQueryJqGrid(reverse_lazy('get-operation'), OperationSelect(), ['operation_type', 'year']), validators=[models.valid_id(models.Operation)]) diff --git a/ishtar/furnitures/urls.py b/ishtar/furnitures/urls.py index d20ae6035..7d9a6873a 100644 --- a/ishtar/furnitures/urls.py +++ b/ishtar/furnitures/urls.py @@ -69,12 +69,12 @@ 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'get-file/(?P<type>.+)?$', 'get_file', + name='get-file'), url(BASE_URL + r'autocomplete-operation/$', 'autocomplete_operation', name='autocomplete-operation'), - url(BASE_URL + r'json-operation/$', 'json_operation', - name='json-operation'), + url(BASE_URL + r'get-operation/(?P<type>.+)?$', 'get_operation', + name='get-operation'), url(BASE_URL + r'update-current-item/$', 'update_current_item', name='update-current-item'), ) diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py index 041ebfb76..3b6263517 100644 --- a/ishtar/furnitures/views.py +++ b/ishtar/furnitures/views.py @@ -21,7 +21,10 @@ Furnitures views """ +import csv import json +import datetime + from django.http import HttpResponse from django.template import RequestContext from django.shortcuts import render_to_response, redirect @@ -120,9 +123,9 @@ 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') +def get_file(request, type='json'): + if not type: + type = 'json' request_keys = {'town':'towns__pk', 'file_type':'file_type__pk', 'year':'year', @@ -135,14 +138,14 @@ def json_file(request): continue dct[request_keys[k]] = q if not dct: - if 'json_file' in request.session: - dct = request.session['json_file'] + if 'get_file' in request.session: + dct = request.session['get_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 + request.session['get_file'] = dct query = Q(**dct) files = models.File.objects.filter(query) q = request.GET.get('sidx') @@ -157,13 +160,27 @@ def json_file(request): sign + 'numeric_reference') else: files = files.order_by(sign + k) - data = json.dumps({ + data = None + if type == "json": + 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') + elif type == "csv": + response = HttpResponse(mimetype='text/csv') + n = datetime.datetime.now() + filename = u'files_%s.csv' % n.strftime('%Y%m%d-%H%M%S') + response['Content-Disposition'] = 'attachment; filename=%s' % filename + writer = csv.writer(response) + for fle in files: + writer.writerow([unicode(fle).encode('utf-8'), + unicode(fle.file_type).encode('utf-8'), + unicode(fle.year).encode('utf-8')]) + return response return HttpResponse(data, mimetype='text/plain') def autocomplete_operation(request, non_closed=True): @@ -187,9 +204,9 @@ def autocomplete_operation(request, non_closed=True): for operation in operations]) return HttpResponse(data, mimetype='text/plain') -def json_operation(request, non_closed=True): - if not request.GET: - return HttpResponse(mimetype='text/plain') +def get_operation(request, type='json', non_closed=True): + if not type: + type = 'json' request_keys = {'town':'towns__pk', 'operation_type':'operation_type__pk', 'operation_code':'operation_code', @@ -203,14 +220,14 @@ def json_operation(request, non_closed=True): continue dct[request_keys[k]] = q if not dct: - if 'json_operation' in request.session: - dct = request.session['json_operation'] + if 'get_operation' in request.session: + dct = request.session['get_operation'] elif 'operation' in request.session: dct = {"pk":request.session['operation']} if not dct: return HttpResponse(mimetype='text/plain') else: - request.session['json_operation'] = dct + request.session['get_operation'] = dct query = Q(**dct) operations = models.Operation.objects.filter(query) q = request.GET.get('sidx') @@ -226,13 +243,27 @@ def json_operation(request, non_closed=True): sign + 'operation_code') else: operations = operations.order_by(sign + k) - data = json.dumps({ + data = None + if type == 'json': + data = json.dumps({ "records":len(operations), "rows":[{"id":unicode(operation.pk), "cell":(unicode(operation.pk), unicode(operation), unicode(operation.operation_type), unicode(operation.year))} for operation in operations] }) + return HttpResponse(data, mimetype='text/plain') + elif type == "csv": + response = HttpResponse(mimetype='text/csv') + n = datetime.datetime.now() + filename = 'operations_%s.csv' % n.strftime('%Y%m%d-%H%M%S') + response['Content-Disposition'] = 'attachment; filename=%s' % filename + writer = csv.writer(response) + for ope in operations: + writer.writerow([unicode(ope).encode('utf-8'), + unicode(ope.operation_type).encode('utf-8'), + unicode(ope.year).encode('utf-8')]) + return response return HttpResponse(data, mimetype='text/plain') def autocomplete_organization(request, orga_type=None): diff --git a/ishtar/furnitures/widgets.py b/ishtar/furnitures/widgets.py index 6276e2771..932770f29 100644 --- a/ishtar/furnitures/widgets.py +++ b/ishtar/furnitures/widgets.py @@ -163,7 +163,11 @@ class JQueryJqGrid(forms.RadioSelect): extra_cols = extra_cols and ",".join([""]+extra_cols) or ""
rendered += """<table id="grid_%s" class='jqgrid'></table>
<div id="pager_%s"></div>
-<input type="hidden" id="hidden_%s" name="%s">""" % (name, name, name, name)
+""" % (name, name)
+ rendered += """
+<div id="foot_%s" class="gridfooter"><a href="%scsv" target="_blank">%s</a></div>
+<input type="hidden" id="hidden_%s" name="%s">""" % (name,
+ unicode(self.source), unicode(_("Export as CSV")), name, name)
rendered += """
<script type="text/javascript">
var query_vars = new Array(%(col_idx)s);
|