diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-07-11 03:03:01 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-07-11 03:03:01 +0200 |
commit | 048ebf3266594c7360840272a7189dd4d34a1e6d (patch) | |
tree | dfe2afaaf33446b2e6493cbd5aa097e2a1e13153 | |
parent | 07e343d4d40667b52977c30a17c17968cb5472ac (diff) | |
download | Ishtar-048ebf3266594c7360840272a7189dd4d34a1e6d.tar.bz2 Ishtar-048ebf3266594c7360840272a7189dd4d34a1e6d.zip |
First version of the full export (closes #249)
-rw-r--r-- | ishtar/ishtar_base/forms_context_records.py | 3 | ||||
-rw-r--r-- | ishtar/ishtar_base/forms_files.py | 2 | ||||
-rw-r--r-- | ishtar/ishtar_base/forms_items.py | 2 | ||||
-rw-r--r-- | ishtar/ishtar_base/forms_operations.py | 3 | ||||
-rw-r--r-- | ishtar/ishtar_base/models.py | 8 | ||||
-rw-r--r-- | ishtar/ishtar_base/urls.py | 9 | ||||
-rw-r--r-- | ishtar/ishtar_base/views.py | 18 | ||||
-rw-r--r-- | ishtar/ishtar_base/widgets.py | 16 | ||||
-rw-r--r-- | ishtar/locale/fr/LC_MESSAGES/django.po | 2 |
9 files changed, 48 insertions, 15 deletions
diff --git a/ishtar/ishtar_base/forms_context_records.py b/ishtar/ishtar_base/forms_context_records.py index 7024b523a..c62dcb7f7 100644 --- a/ishtar/ishtar_base/forms_context_records.py +++ b/ishtar/ishtar_base/forms_context_records.py @@ -130,7 +130,8 @@ class RecordFormSelection(forms.Form): currents = {'pk':models.ContextRecord} pk = forms.IntegerField(label="", required=False, widget=widgets.JQueryJqGrid(reverse_lazy('get-contextrecord'), - RecordSelect(), models.ContextRecord), + RecordSelect(), models.ContextRecord, + source_full=reverse_lazy('get-contextrecord-full')), validators=[models.valid_id(models.ContextRecord)]) def clean(self): diff --git a/ishtar/ishtar_base/forms_files.py b/ishtar/ishtar_base/forms_files.py index 04949a43d..4f5ac18f4 100644 --- a/ishtar/ishtar_base/forms_files.py +++ b/ishtar/ishtar_base/forms_files.py @@ -145,7 +145,7 @@ class FileFormSelection(forms.Form): currents = {'pk':models.File} pk = forms.IntegerField(label="", required=False, widget=widgets.JQueryJqGrid(reverse_lazy('get-file'), - FileSelect(), models.File), + FileSelect(), models.File, source_full=reverse_lazy('get-file-full')), validators=[models.valid_id(models.File)]) def clean(self): diff --git a/ishtar/ishtar_base/forms_items.py b/ishtar/ishtar_base/forms_items.py index 54c733751..c6f4b05f4 100644 --- a/ishtar/ishtar_base/forms_items.py +++ b/ishtar/ishtar_base/forms_items.py @@ -165,7 +165,7 @@ class ItemFormSelection(forms.Form): currents = {'pk':models.Item} pk = forms.IntegerField(label="", required=False, widget=widgets.JQueryJqGrid(reverse_lazy('get-item'), - ItemSelect(), models.Item), + ItemSelect(), models.Item, source_full=reverse_lazy('get-item-full')), validators=[models.valid_id(models.Item)]) item_search_wizard = SearchWizard([ diff --git a/ishtar/ishtar_base/forms_operations.py b/ishtar/ishtar_base/forms_operations.py index e2b0aadb1..30fc11bec 100644 --- a/ishtar/ishtar_base/forms_operations.py +++ b/ishtar/ishtar_base/forms_operations.py @@ -202,7 +202,8 @@ class OperationFormSelection(forms.Form): currents = {'pk':models.Operation} pk = forms.IntegerField(label="", required=False, widget=widgets.JQueryJqGrid(reverse_lazy('get-operation'), - OperationSelect(), models.Operation), + OperationSelect(), models.Operation, + source_full=reverse_lazy('get-operation-full')), validators=[models.valid_id(models.Operation)]) def clean(self): diff --git a/ishtar/ishtar_base/models.py b/ishtar/ishtar_base/models.py index d124addf2..2a8248804 100644 --- a/ishtar/ishtar_base/models.py +++ b/ishtar/ishtar_base/models.py @@ -247,7 +247,7 @@ class HistoryError(Exception): class BaseHistorizedItem(models.Model): history_modifier = models.ForeignKey(User, related_name='+', - verbose_name=_(u"Last modifier")) + verbose_name=_(u"Last editor")) class Meta: abstract = True @@ -1272,6 +1272,12 @@ class Treatment(BaseHistorizedItem, OwnPerms): ("delete_own_treatment", ugettext(u"Can delete own Treatment")), ) + def __unicode__(self): + lbl = unicode(self.treatment_type) + if self.person: + lbl += u" %s %s" % (_(u"by"), unicode(self.person)) + return lbl + class TreatmentSource(Source): class Meta: verbose_name = _(u"Treatment documentation") diff --git a/ishtar/ishtar_base/urls.py b/ishtar/ishtar_base/urls.py index 3c5351c57..d41027369 100644 --- a/ishtar/ishtar_base/urls.py +++ b/ishtar/ishtar_base/urls.py @@ -160,6 +160,8 @@ urlpatterns += patterns('ishtar.ishtar_base.views', name='autocomplete-file'), url(BASE_URL + r'get-file/(?P<type>.+)?$', 'get_file', name='get-file'), + url(BASE_URL + r'get-file-full/(?P<type>.+)?$', 'get_file', + name='get-file-full', kwargs={'full':True}), url(BASE_URL + r'get-administrativeactfile/(?P<type>.+)?$', 'get_administrativeactfile', name='get-administrativeactfile'), url(BASE_URL + r'show-file/(?P<pk>.+)?/(?P<type>.+)?$', 'show_file', @@ -173,6 +175,8 @@ urlpatterns += patterns('ishtar.ishtar_base.views', name='autocomplete-operation'), url(BASE_URL + r'get-operation/(?P<type>.+)?$', 'get_operation', name='get-operation'), + url(BASE_URL + r'get-operation-full/(?P<type>.+)?$', 'get_operation', + name='get-operation-full', kwargs={'full':True}), url(BASE_URL + r'revert-operation/(?P<pk>.+)/(?P<date>.+)$', 'revert_operation', name='revert-operation'), url(BASE_URL + r'show-operation/(?P<pk>.+)?/(?P<type>.+)?$', @@ -186,6 +190,9 @@ urlpatterns += patterns('ishtar.ishtar_base.views', 'show_contextrecord', name='show-contextrecord'), url(BASE_URL + r'get-contextrecord/(?P<type>.+)?$', 'get_contextrecord', name='get-contextrecord'), + url(BASE_URL + r'get-contextrecord-full/(?P<type>.+)?$', + 'get_contextrecord', name='get-contextrecord-full', + kwargs={'full':True}), url(BASE_URL + r'get-contexrecordsource/(?P<type>.+)?$', 'get_contextrecordsource', name='get-contextrecordsource'), # Finds @@ -193,6 +200,8 @@ urlpatterns += patterns('ishtar.ishtar_base.views', name='update-current-item'), url(BASE_URL + r'get-item/(?P<type>.+)?$', 'get_archaeologicalitem', name='get-item'), + url(BASE_URL + r'get-item-full/(?P<type>.+)?$', 'get_archaeologicalitem', + name='get-item-full', kwargs={'full':True}), url(BASE_URL + r'get-itemsource/(?P<type>.+)?$', 'get_itemsource', name='get-itemsource'), url(BASE_URL + r'get-container/$', 'get_container', diff --git a/ishtar/ishtar_base/views.py b/ishtar/ishtar_base/views.py index d036c9876..631e71ed7 100644 --- a/ishtar/ishtar_base/views.py +++ b/ishtar/ishtar_base/views.py @@ -160,12 +160,13 @@ def format_val(val): HIERARCHIC_LEVELS = 5 HIERARCHIC_FIELDS = ['period', 'unit', 'material'] +PRIVATE_FIELDS = ('id', 'history_modifier', 'order') def get_item(model, func_name, default_name, extra_request_keys=[], - bool_fields=[]): + base_request={}, bool_fields=[]): """ Generic treatment of tables """ - def func(request, data_type='json', **dct): + def func(request, data_type='json', full=False, **dct): if 'type' in dct: data_type = dct.pop('type') if not data_type: @@ -177,7 +178,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], for field in fields]) request_keys.update(extra_request_keys) request_items = request.method == 'POST' and request.POST or request.GET - dct = {} + dct = base_request try: old = 'old' in request_items and int(request_items['old']) except ValueError: @@ -239,9 +240,13 @@ def get_item(model, func_name, default_name, extra_request_keys=[], datas = [] if old: items = [item.get_previous(old) for item in items] + table_cols = full and [field.name for field in model._meta.fields + if field.name not in PRIVATE_FIELDS] \ + or model.TABLE_COLS + print table_cols for item in items: data = [item.pk] - for k in model.TABLE_COLS: + for k in table_cols: vals = [item] for ky in k.split('.'): new_vals = [] @@ -273,7 +278,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], res = {'id':data[0], 'link':lnk} for idx, value in enumerate(data[1:]): if value: - res[model.TABLE_COLS[idx].split('.')[-1]] = value + res[table_cols[idx].split('.')[-1]] = value rows.append(res) data = json.dumps({ "records":len(items), @@ -288,7 +293,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], response['Content-Disposition'] = 'attachment; filename=%s'%filename writer = csv.writer(response, **CSV_OPTIONS) col_names = [] - for field_name in model.TABLE_COLS: + for field_name in table_cols: try: field = model._meta.get_field(field_name) except: @@ -503,6 +508,7 @@ get_contextrecordsource = get_item(models.ContextRecordSource, get_archaeologicalitem = get_item(models.Item, 'get_archaeologicalitem', 'item', bool_fields = ['base_items__is_isolated'], + base_request={'downstream_treatment__isnull':True}, extra_request_keys={ 'base_items__context_record__parcel__town': 'base_items__context_record__parcel__town', diff --git a/ishtar/ishtar_base/widgets.py b/ishtar/ishtar_base/widgets.py index 3d5316dca..374fde2c5 100644 --- a/ishtar/ishtar_base/widgets.py +++ b/ishtar/ishtar_base/widgets.py @@ -193,7 +193,7 @@ class JQueryJqGrid(forms.RadioSelect): def __init__(self, source, form, associated_model, attrs={},
table_cols='TABLE_COLS', multiple=False, multiple_cols=[2], new=False,
- new_message=""):
+ new_message="", source_full=None):
self.source = source
self.form = form
self.attrs = attrs
@@ -202,6 +202,7 @@ class JQueryJqGrid(forms.RadioSelect): self.multiple = multiple
self.multiple_cols = multiple_cols
self.new, self.new_message = new, new_message
+ self.source_full = source_full
def render(self, name, value=None, attrs=None):
t = loader.get_template('form_snippet.html')
@@ -248,8 +249,17 @@ class JQueryJqGrid(forms.RadioSelect): """ % (name, name)
encoding = settings.ENCODING or 'utf-8'
rendered += """
-<div id="foot_%s" class="gridfooter"><a href="%scsv" target="_blank">%s (%s)</a></div>
-""" % (name, unicode(self.source), unicode(_("Export as CSV")), encoding)
+<div id="foot_%s" class="gridfooter">
+""" % name
+ if unicode(self.source_full):
+ rendered += """%s (%s) <a href="%scsv" target="_blank">%s</a> - \
+<a href="%scsv" target="_blank">%s</a>
+""" % (unicode(_("Export as CSV")), encoding, unicode(self.source),
+ unicode(_(u"simple")), unicode(self.source_full), unicode(_(u"full")),)
+ else:
+ rendered += """<a href="%scsv" target="_blank">%s (%s)</a>
+""" % (unicode(self.source), unicode(_("Export as CSV")), encoding)
+ rendered += "</div>\n"
if self.multiple:
rendered += '''
<input type="button" id="add_button_%s" value="%s"/>
diff --git a/ishtar/locale/fr/LC_MESSAGES/django.po b/ishtar/locale/fr/LC_MESSAGES/django.po index 0fbdc55dd..e3038d28e 100644 --- a/ishtar/locale/fr/LC_MESSAGES/django.po +++ b/ishtar/locale/fr/LC_MESSAGES/django.po @@ -1018,7 +1018,7 @@ msgstr "Disponible" #: ishtar_base/models.py:250 msgid "Last modifier" -msgstr "Dernier modifieur" +msgstr "Dernier éditeur" #: ishtar_base/models.py:353 msgid "Number" |