diff options
-rw-r--r-- | ishtar/furnitures/forms.py | 18 | ||||
-rw-r--r-- | ishtar/furnitures/models.py | 9 | ||||
-rw-r--r-- | ishtar/furnitures/views.py | 55 |
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)\ |