summaryrefslogtreecommitdiff
path: root/ishtar/furnitures/views.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2011-03-28 19:26:49 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2011-03-28 19:26:49 +0200
commit7d3a18a8ec5c5dd09ad31a49b13591ebe83dec3d (patch)
tree066bf7bc17be35b46060fc8428a6215674988b5c /ishtar/furnitures/views.py
parentc5245cfcfd596ceaf250aeed81b33e994638ddd7 (diff)
downloadIshtar-7d3a18a8ec5c5dd09ad31a49b13591ebe83dec3d.tar.bz2
Ishtar-7d3a18a8ec5c5dd09ad31a49b13591ebe83dec3d.zip
Adjust context record selection (closes #312)
Diffstat (limited to 'ishtar/furnitures/views.py')
-rw-r--r--ishtar/furnitures/views.py55
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)\