summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar/furnitures/forms.py18
-rw-r--r--ishtar/furnitures/models.py9
-rw-r--r--ishtar/furnitures/views.py55
3 files changed, 62 insertions, 20 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py
index c6d10787e..769e5d509 100644
--- a/ishtar/furnitures/forms.py
+++ b/ishtar/furnitures/forms.py
@@ -1967,12 +1967,13 @@ class DateForm(forms.Form):
'dating__period':models.Period}
dating__period = forms.ChoiceField(label=_("Period"),
choices=models.Period.get_types())
- dating__start_date = forms.IntegerField(label=_(u"Start date"))
- dating__end_date = forms.IntegerField(label=_(u"End date"))
- dating__dating_type = forms.ChoiceField(label=_("Dating type"),
- choices=models.DatingType.get_types())
- dating__quality = forms.ChoiceField(label=_("Quality"),
+ dating__start_date = forms.IntegerField(label=_(u"Start date"),
+ required=False)
+ dating__end_date = forms.IntegerField(label=_(u"End date"), required=False)
+ dating__quality = forms.ChoiceField(label=_("Quality"), required=False,
choices=models.DatingQuality.get_types())
+ dating__dating_type = forms.ChoiceField(label=_("Dating type"),
+ required=False, choices=models.DatingType.get_types())
item_creation_wizard = ItemWizard([
('selecrecord-item_creation', RecordFormSelection),
@@ -1987,12 +1988,13 @@ class ItemSelect(forms.Form):
widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \
'autocomplete-town', associated_model=models.Town),
validators=[models.valid_id(models.Town)], label=_(u"Town"))
- base_items__context_record__parcel__year = forms.IntegerField(
+ base_items__context_record__parcel__operation__year = forms.IntegerField(
label=_("Year"))
- material_type = forms.ChoiceField(
- label=_("Material type"), choices=models.MaterialType.get_types())
dating__period = forms.ChoiceField(
label=_("Period"), choices=models.Period.get_types())
+ material_type = forms.ChoiceField(
+ label=_("Material type"), choices=models.MaterialType.get_types())
+ base_items__is_isolated = forms.NullBooleanField(label=_("Is isolated?"))
class ItemFormSelection(forms.Form):
form_label = _("Item")
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py
index d3269a69d..fdb8003c1 100644
--- a/ishtar/furnitures/models.py
+++ b/ishtar/furnitures/models.py
@@ -670,7 +670,14 @@ class BaseItem(BaseHistorizedItem, OwnPerms):
return self.label
class Item(BaseHistorizedItem, OwnPerms):
- TABLE_COLS = ['label', 'dating.period', 'material_type',]
+ TABLE_COLS = ['base_items.context_record.parcel.town',
+ 'base_items.context_record.parcel.operation.year',
+ 'base_items.context_record.parcel.operation.operation_code',
+ 'label', 'material_type', 'dating.period',
+ 'base_items.is_isolated']
+ if settings.COUNTRY == 'fr':
+ TABLE_COLS.insert(1,
+ 'base_items.context_record.parcel.operation.code_patriarche')
base_items = models.ManyToManyField(BaseItem, verbose_name=_(u"Base item"),
related_name='item')
order = models.IntegerField(_(u"Order"))
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)\