summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_warehouse/forms.py2
-rw-r--r--archaeological_warehouse/models.py10
-rw-r--r--ishtar_common/views_item.py86
3 files changed, 74 insertions, 24 deletions
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py
index e25161fef..1a1b2df1b 100644
--- a/archaeological_warehouse/forms.py
+++ b/archaeological_warehouse/forms.py
@@ -302,6 +302,8 @@ class ContainerSelect(HistorySelect):
reference = forms.CharField(label=_(u"Ref."))
old_reference = forms.CharField(label=_(u"Old reference"))
comment = forms.CharField(label=_(u"Comment"))
+ no_finds = forms.NullBooleanField(label=_(u"No associated finds"))
+ empty = forms.NullBooleanField(label=_(u"Currently empty"))
archaeological_sites = forms.IntegerField(
label=_("Archaeological site (attached to the operation)"),
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py
index 08d773a4f..0df76875f 100644
--- a/archaeological_warehouse/models.py
+++ b/archaeological_warehouse/models.py
@@ -472,8 +472,18 @@ class Container(DocumentItem, LightHistorizedItem, QRCodeItem, GeoItem,
SearchAltName(
pgettext_lazy("key for text search", u"find-description"),
'finds__description__iexact'),
+ 'empty': SearchAltName(
+ pgettext_lazy("key for text search", u"empty"),
+ 'finds'
+ ),
+ 'no_finds': SearchAltName(
+ pgettext_lazy("key for text search", u"no-associated-finds"),
+ 'finds_ref'
+ ),
}
+ REVERSED_MANY_COUNTED_FIELDS = ['finds', 'finds_ref']
+
ALT_NAMES.update(LightHistorizedItem.ALT_NAMES)
DYNAMIC_REQUESTS = {
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index d54c7d15b..1dcb01b34 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -624,31 +624,54 @@ def _search_manage_search_vector(model, dct, exc_dct, distinct_queries,
def _manage_bool_fields(model, bool_fields, reversed_bool_fields, dct, or_reqs):
bool_fields = list(bool_fields) + list(reversed_bool_fields)
for k in bool_fields:
- if k in dct:
- if dct[k] == u"1":
- dct.pop(k)
- else:
- dct[k] = dct[k].replace(u'"', u'')
- if dct[k] in [u"2", u"yes", unicode(_(u"Yes")).lower()]:
- dct[k] = True
+ if k not in dct:
+ continue
+ elif dct[k] == u"1":
+ dct.pop(k)
+ continue
+ dct[k] = dct[k].replace(u'"', u'')
+ if dct[k] in [u"2", u"yes", unicode(_(u"Yes")).lower()]:
+ dct[k] = True
+ else:
+ dct[k] = False
+ if k in reversed_bool_fields:
+ dct[k] = not dct[k]
+ # check also for empty value with image field
+ field_name = k.split('__')[0]
+ # TODO: can be improved in later version of Django
+ try:
+ c_field = model._meta.get_field(field_name)
+ if k.endswith('__isnull') and \
+ isinstance(c_field, ImageField):
+ if dct[k]:
+ or_reqs.append(
+ (k, {k.split('__')[0] + '__exact': ''}))
else:
- dct[k] = False
- if k in reversed_bool_fields:
- dct[k] = not dct[k]
- # check also for empty value with image field
- field_name = k.split('__')[0]
- # TODO: can be improved in later version of Django
- try:
- c_field = model._meta.get_field(field_name)
- if k.endswith('__isnull') and \
- isinstance(c_field, ImageField):
- if dct[k]:
- or_reqs.append(
- (k, {k.split('__')[0] + '__exact': ''}))
- else:
- dct[k.split('__')[0] + '__regex'] = '.{1}.*'
- except FieldDoesNotExist:
- pass
+ dct[k.split('__')[0] + '__regex'] = '.{1}.*'
+ except FieldDoesNotExist:
+ pass
+
+
+def _manage_many_counted_fields(fields, reversed_fields, dct, excluded_dct):
+ bool_fields = list(fields or []) + list(reversed_fields or [])
+ for k in bool_fields:
+ if k not in dct:
+ continue
+ elif dct[k] == u"1":
+ dct.pop(k)
+ continue
+ dct[k] = dct[k].replace(u'"', u'')
+ if dct[k] in [u"2", u"yes", unicode(_(u"Yes")).lower()]:
+ dct[k] = True
+ else:
+ dct[k] = None
+ if k in reversed_fields:
+ dct[k] = True if not dct[k] else None
+ if dct[k]:
+ dct.pop(k)
+ excluded_dct[k] = None
+ else:
+ dct[k] = None
today_lbl = pgettext_lazy("key for text search", u"today"),
@@ -1289,6 +1312,11 @@ def get_item(model, func_name, default_name, extra_request_keys=None,
else:
my_reversed_bool_fields = reversed_bool_fields[:] \
if reversed_bool_fields else []
+
+ many_counted_fields = getattr(model, "MANY_COUNTED_FIELDS", None)
+ reversed_many_counted_fields = getattr(
+ model, "REVERSED_MANY_COUNTED_FIELDS", None)
+
if not dated_fields and hasattr(model, 'DATED_FIELDS'):
my_dated_fields = model.DATED_FIELDS[:]
else:
@@ -1476,6 +1504,16 @@ def get_item(model, func_name, default_name, extra_request_keys=None,
_manage_bool_fields(model, my_bool_fields, my_reversed_bool_fields,
excluded_dct, exc_or_reqs)
+ tmp_excluded = {}
+ _manage_many_counted_fields(
+ many_counted_fields, reversed_many_counted_fields,
+ dct, tmp_excluded)
+ _manage_many_counted_fields(
+ many_counted_fields, reversed_many_counted_fields,
+ excluded_dct, dct)
+ if tmp_excluded:
+ excluded_dct.update(tmp_excluded)
+
_manage_dated_fields(my_dated_fields, dct)
_manage_dated_fields(my_dated_fields, excluded_dct)