diff options
Diffstat (limited to 'ishtar/furnitures/views.py')
| -rw-r--r-- | ishtar/furnitures/views.py | 55 |
1 files changed, 44 insertions, 11 deletions
diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py index d1c5dfe52..5cc3c7ef7 100644 --- a/ishtar/furnitures/views.py +++ b/ishtar/furnitures/views.py @@ -146,7 +146,20 @@ def autocomplete_file(request): for file in files]) return HttpResponse(data, mimetype='text/plain') -def get_item(model, func_name, default_name, extra_request_keys=[]): +from types import NoneType + +def format_val(val): + if type(val) == NoneType: + return u"" + if type(val) == bool: + if val: + return unicode(_(u"True")) + else: + return unicode(_(u"False")) + return unicode(val) + +def get_item(model, func_name, default_name, extra_request_keys=[], + bool_fields=[]): """ Generic treatment of tables """ @@ -174,6 +187,12 @@ def get_item(model, func_name, default_name, extra_request_keys=[]): dct = request.session[func_name] else: request.session[func_name] = dct + for k in bool_fields: + if k in dct: + if dct[k] == u"1": + dct.pop(k) + else: + dct[k] = dct[k] == u"2" and True or False query = Q(**dct) items = model.objects.filter(query) q = request.GET.get('sidx') @@ -188,15 +207,20 @@ def get_item(model, func_name, default_name, extra_request_keys=[]): for item in items: data = [item.pk] for k in model.TABLE_COLS: - val = item + vals = [item] for ky in k.split('.'): - if val: - val = getattr(val, ky) - if hasattr(val, 'all'): # manage related objects - data.append(", ".join([v and unicode(v) or u"" - for v in getattr(val, 'all')()])) - else: - data.append(val and unicode(val) or u"") + new_vals = [] + for val in vals: + if hasattr(val, 'all'): # manage related objects + val = list(val.all()) + for v in val: + new_vals.append(getattr(v, ky)) + elif val: + new_vals.append(getattr(val, ky)) + vals = new_vals + if vals and hasattr(vals[0], 'all'): # manage last related objects + vals = list(vals.all()) + data.append(", ".join([format_val(v) for v in vals]) or u"") datas.append(data) link_template = "<a href='#' onclick='load_window(\"%%s\")'>%s</a>" % \ (unicode(_("Details"))) @@ -383,9 +407,18 @@ show_contextrecord = show_item(models.ContextRecord, 'contextrecord') get_contextrecord = get_item(models.ContextRecord, 'get_contextrecord', 'contextrecord', extra_request_keys={'parcel__town':'parcel__town__pk', - }) + 'parcel__operation__year':'parcel__operation__year__contains', + 'datings__period':'datings__period__pk'}) get_archaeologicalitem = get_item(models.Item, - 'get_archaeologicalitem', 'item',) + 'get_archaeologicalitem', 'item', + bool_fields = ['base_items__is_isolated'], + extra_request_keys={ +'base_items__context_record__parcel__town': + 'base_items__context_record__parcel__town', +'base_items__context_record__parcel__operation__year': + 'base_items__context_record__parcel__operation__year__contains', +'dating__period':'dating__period__pk', +'base_items__is_isolated':'base_items__is_isolated'}) def autocomplete_warehouse(request): if not request.user.has_perm('furnitures.view_warehouse', models.Warehouse)\ |
