summaryrefslogtreecommitdiff
path: root/ishtar_common/views_item.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views_item.py')
-rw-r--r--ishtar_common/views_item.py154
1 files changed, 89 insertions, 65 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index 98dcd3d4c..d068fb554 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -35,10 +35,11 @@ from menus import Menu
import models
from archaeological_files.models import File
-from archaeological_operations.models import Operation
+from archaeological_operations.models import Operation, ArchaeologicalSite
from archaeological_context_records.models import ContextRecord
from archaeological_finds.models import Find, FindBasket, Treatment, \
TreatmentFile
+from archaeological_warehouse.models import Warehouse
logger = logging.getLogger(__name__)
@@ -46,7 +47,9 @@ ENCODING = settings.ENCODING or 'utf-8'
CURRENT_ITEM_KEYS = (('file', File),
('operation', Operation),
+ ('site', ArchaeologicalSite),
('contextrecord', ContextRecord),
+ ('warehouse', Warehouse),
('find', Find),
('treatmentfile', TreatmentFile),
('treatment', Treatment))
@@ -440,15 +443,16 @@ def _search_manage_search_vector(model, dct, exc_dct, request_keys):
if 'search_vector' not in dct:
return dct, exc_dct
- # remove inside parenthesis
- search_vector = \
- dct['search_vector'].replace(u'(', u'').replace(u')', u'').strip()
+ search_vector = dct['search_vector']
parentheses_groups = _parse_parentheses(search_vector)
search_query, extra_dct, extra_exc_dct = _parse_parentheses_groups(
parentheses_groups, request_keys)
dct.update(extra_dct)
exc_dct.update(extra_exc_dct)
if search_query:
+ # remove inside parenthesis
+ search_query = \
+ search_query.replace(u'(', u'').replace(u')', u'').strip()
dct['extras'].append(
{'where': [model._meta.db_table +
".search_vector @@ (to_tsquery(%s, %s)) = true"],
@@ -760,6 +764,64 @@ def _construct_query(relation_types, dct, or_reqs, and_reqs):
return query
+def _manage_default_search(dct, request, model, default_name, my_base_request,
+ my_relative_session_names):
+ # an item is selected in the default menu
+ pinned_search = ""
+ if default_name in request.session and \
+ request.session[default_name]:
+ value = request.session[default_name]
+ if 'basket-' in value:
+ try:
+ dct = {"basket__pk":
+ request.session[default_name].split('-')[-1]}
+ pinned_search = unicode(FindBasket.objects.get(
+ pk=dct["basket__pk"]))
+ except FindBasket.DoesNotExist:
+ pass
+ else:
+ try:
+ dct = {"pk": request.session[default_name]}
+ pinned_search = u'"{}"'.format(
+ model.objects.get(pk=dct["pk"])
+ )
+ except model.DoesNotExist:
+ pass
+ elif dct == (my_base_request or {}):
+ if not hasattr(model, 'UP_MODEL_QUERY'):
+ logger.warning(
+ "**WARN get_item**: - UP_MODEL_QUERY not defined for "
+ "'{}'".format(model))
+ else:
+ # a parent item may be selected in the default menu
+ for name, key in my_relative_session_names:
+ if name in request.session and request.session[name] \
+ and 'basket-' not in request.session[name] \
+ and name in CURRENT_ITEM_KEYS_DICT:
+ up_model = CURRENT_ITEM_KEYS_DICT[name]
+ try:
+ dct.update({key: request.session[name]})
+ up_item = up_model.objects.get(pk=dct[key])
+ if up_item.SLUG not in model.UP_MODEL_QUERY:
+ logger.warning(
+ "**WARN get_item**: - {} not in "
+ "UP_MODEL_QUERY for {}'".format(
+ up_item.SLUG,
+ model))
+ else:
+ req_key, up_attr = model.UP_MODEL_QUERY[
+ up_item.SLUG]
+ pinned_search = u'{}="{}"'.format(
+ req_key,
+ getattr(up_item, up_attr)
+ )
+ break
+ except up_model.DoesNotExist:
+ pass
+
+ return dct, pinned_search
+
+
def _format_val(val):
if val is None:
return u""
@@ -931,7 +993,11 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
exc_and_reqs, exc_or_reqs = [], []
if full == 'shortcut':
- dct['cached_label__icontains'] = request.GET.get('term', None)
+ if model.SLUG == "warehouse":
+ key = 'name__icontains'
+ else:
+ key = 'cached_label__icontains'
+ dct[key] = request.GET.get('term', None)
try:
old = 'old' in request_items and int(request_items['old'])
@@ -955,62 +1021,13 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
pinned_search = ""
if 'submited' not in request_items and full != 'shortcut':
- # default search
- # an item is selected in the default menu
- if default_name in request.session and \
- request.session[default_name]:
- value = request.session[default_name]
- if 'basket-' in value:
- try:
- dct = {"basket__pk":
- request.session[default_name].split('-')[-1]}
- pinned_search = unicode(FindBasket.objects.get(
- pk=dct["basket__pk"]))
- except FindBasket.DoesNotExist:
- pass
- else:
- try:
- dct = {"pk": request.session[default_name]}
- pinned_search = u'"{}"'.format(
- model.objects.get(pk=dct["pk"])
- )
- except model.DoesNotExist:
- pass
- elif dct == (my_base_request or {}):
- if not hasattr(model, 'UP_MODEL_QUERY'):
- logger.warning(
- "**WARN get_item**: - UP_MODEL_QUERY not defined for "
- "'{}'".format(model.__class__))
- else:
- # a parent item may be selected in the default menu
- for name, key in my_relative_session_names:
- if name in request.session and request.session[name] \
- and 'basket-' not in request.session[name] \
- and name in CURRENT_ITEM_KEYS_DICT:
- up_model = CURRENT_ITEM_KEYS_DICT[name]
- try:
- dct.update({key: request.session[name]})
- up_item = up_model.objects.get(pk=dct[key])
- if up_item.short_class_name not in \
- model.UP_MODEL_QUERY:
- logger.warning(
- "**WARN get_item**: - {} not in "
- "UP_MODEL_QUERY for {}'".format(
- up_item.short_class_name,
- model))
- else:
- req_key, up_attr = model.UP_MODEL_QUERY[
- up_item.short_class_name]
- pinned_search = u'{}="{}"'.format(
- req_key,
- getattr(up_item, up_attr)
- )
- break
- except up_model.DoesNotExist:
- pass
- if (not dct or data_type == 'csv') \
- and func_name in request.session:
+ if data_type == 'csv' and func_name in request.session:
dct = request.session[func_name]
+ else:
+ # default search
+ dct, pinned_search = _manage_default_search(
+ dct, request, model, default_name, my_base_request,
+ my_relative_session_names)
else:
request.session[func_name] = dct
@@ -1092,7 +1109,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
if count:
return items.count()
- # print(items.query)
+ # print(unicode(items.query).encode('utf-8'))
if search_vector: # for serialization
dct['search_vector'] = search_vector
@@ -1130,8 +1147,12 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
query_table_cols[idx] = \
model.CONTEXTUAL_TABLE_COLS[contxt][col]
if full == 'shortcut':
- query_table_cols = ['cached_label']
- table_cols = ['cached_label']
+ if model.SLUG == "warehouse":
+ query_table_cols = ['name']
+ table_cols = ['name']
+ else:
+ query_table_cols = ['cached_label']
+ table_cols = ['cached_label']
# manage sort tables
manual_sort_key = None
@@ -1328,8 +1349,11 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
if hasattr(model, 'COL_LINK') and k in model.COL_LINK:
value = link_ext_template.format(value, value)
res[k] = value
- if full == 'shortcut' and 'cached_label' in res:
- res['value'] = res.pop('cached_label')
+ if full == 'shortcut':
+ if 'cached_label' in res:
+ res['value'] = res.pop('cached_label')
+ elif 'name' in res:
+ res['value'] = res.pop('name')
rows.append(res)
if full == 'shortcut':
data = json.dumps(rows)