summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py88
1 files changed, 62 insertions, 26 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index cd34a2019..d827ae065 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -58,7 +58,7 @@ from menus import menu
from archaeological_files.models import File
from archaeological_operations.models import Operation
from archaeological_context_records.models import ContextRecord
-from archaeological_finds.models import Find
+from archaeological_finds.models import Find, Treatment, TreatmentFile
from archaeological_operations.forms import DashboardForm as DashboardFormOpe
from archaeological_files.forms import DashboardForm as DashboardFormFile
@@ -239,6 +239,9 @@ def shortcut_menu(request):
CURRENT_ITEMS.append((_(u"Context record"), ContextRecord))
if profile.find:
CURRENT_ITEMS.append((_(u"Find"), Find))
+ if profile.warehouse:
+ CURRENT_ITEMS.append((_(u"Treatment request"), TreatmentFile))
+ CURRENT_ITEMS.append((_(u"Treatment"), Treatment))
if hasattr(request.user, 'ishtaruser') and \
request.user.ishtaruser.advanced_shortcut_menu:
dct = {'current_menu': [], 'menu': [],
@@ -261,7 +264,7 @@ def shortcut_menu(request):
'ishtar/blocks/advanced_shortcut_menu.html',
dct, context_instance=RequestContext(request))
dct = {'current_menu': []}
- current_selected_item = None
+ current_selected_item = {}
for lbl, model in CURRENT_ITEMS:
new_selected_item = None
model_name = model.SLUG
@@ -291,7 +294,8 @@ def shortcut_menu(request):
pass
if items:
dct['current_menu'].append((lbl, model_name, cls, items))
- current_selected_item = new_selected_item
+ if new_selected_item:
+ current_selected_item[model_name] = new_selected_item
return render_to_response('ishtar/blocks/shortcut_menu.html', dct,
context_instance=RequestContext(request))
@@ -301,7 +305,9 @@ def get_current_items(request):
for key, model in (('file', File),
('operation', Operation),
('contextrecord', ContextRecord),
- ('find', Find)):
+ ('find', Find),
+ ('treatmentfile', TreatmentFile),
+ ('treatment', Treatment)):
currents[key] = None
if key in request.session and request.session[key]:
try:
@@ -312,6 +318,16 @@ def get_current_items(request):
def unpin(request, item_type):
+ if item_type not in ('find', 'contextrecord', 'operation', 'file',
+ 'treatment', 'treatmentfile'):
+ logger.warning("unpin unknow type: {}".format(item_type))
+ return HttpResponse('nok')
+ request.session['treatment'] = ''
+ if item_type == 'treatment':
+ return HttpResponse('ok')
+ request.session['treatmentfile'] = ''
+ if item_type == 'treatmentfile':
+ return HttpResponse('ok')
request.session['find'] = ''
if item_type == 'find':
return HttpResponse('ok')
@@ -322,7 +338,8 @@ def unpin(request, item_type):
if item_type == 'operation':
return HttpResponse('ok')
request.session['file'] = ''
- return HttpResponse('ok')
+ if item_type == 'file':
+ return HttpResponse('ok')
def update_current_item(request, item_type=None, pk=None):
@@ -462,9 +479,8 @@ def autocomplete_town(request):
for q in q.split(' '):
extra = Q(name__icontains=q)
if settings.COUNTRY == 'fr':
- extra = (extra | Q(numero_insee__istartswith=q) |
- Q(departement__label__istartswith=q))
- query = query & extra
+ extra |= Q(numero_insee__istartswith=q)
+ query &= extra
limit = 20
towns = models.Town.objects.filter(query)[:limit]
data = json.dumps([{'id': town.pk, 'value': unicode(town)}
@@ -528,7 +544,7 @@ HIERARCHIC_FIELDS = ['periods', 'period', 'unit', 'material_types',
def get_item(model, func_name, default_name, extra_request_keys=[],
- base_request={}, bool_fields=[], reversed_bool_fields=[],
+ base_request=None, bool_fields=[], reversed_bool_fields=[],
dated_fields=[], associated_models=[], relative_session_names=[],
specific_perms=[], own_table_cols=None, relation_types_prefix={}):
"""
@@ -577,10 +593,12 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
my_extra_request_keys = copy(model.EXTRA_REQUEST_KEYS)
else:
my_extra_request_keys = copy(extra_request_keys)
- if not base_request and hasattr(model, 'BASE_REQUEST'):
+ if base_request is None and hasattr(model, 'BASE_REQUEST'):
my_base_request = copy(model.BASE_REQUEST)
- else:
+ elif base_request is not None:
my_base_request = copy(base_request)
+ else:
+ my_base_request = {}
if not bool_fields and hasattr(model, 'BOOL_FIELDS'):
my_bool_fields = model.BOOL_FIELDS[:]
else:
@@ -677,7 +695,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
request.session[default_name].split('-')[-1]}
else:
dct = {"pk": request.session[default_name]}
- elif dct == base_request:
+ elif dct == (base_request or {}):
# 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]:
@@ -750,7 +768,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
alt_dct = dct.copy()
alt_dct.pop(k)
alt_dct.update(or_req)
- query = query | Q(**alt_dct)
+ query |= Q(**alt_dct)
for rtype_prefix in relation_types:
vals = list(relation_types[rtype_prefix])
@@ -775,8 +793,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
if not dct:
# fake condition to trick Django (1.4): without it only the
# alt_dct is managed
- query = query & Q(pk__isnull=False)
- query = query | Q(**alt_dct)
+ query &= Q(pk__isnull=False)
+ query |= Q(**alt_dct)
for k, or_req in or_reqs:
altor_dct = alt_dct.copy()
altor_dct.pop(k)
@@ -787,7 +805,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
altor_dct[
rtype_prefix + 'right_relations__right_record__' + j] =\
val
- query = query | Q(**altor_dct)
+ query |= Q(**altor_dct)
if own:
query = query & model.get_query_owns(request.user)
@@ -809,7 +827,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
and request.session[model_name]
if current:
dct = {upper_key: current}
- query = query & Q(**dct)
+ query &= Q(**dct)
items = model.objects.filter(query).distinct()
# print(items.query)
@@ -910,6 +928,14 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
keys = [keys]
my_vals = []
for k in keys:
+ if hasattr(model, 'EXTRA_REQUEST_KEYS') \
+ and k in model.EXTRA_REQUEST_KEYS:
+ k = model.EXTRA_REQUEST_KEYS[k]
+ if type(k) in (list, tuple):
+ k = k[0]
+ for filtr in ('__icontains', '__contains'):
+ if k.endswith(filtr):
+ k = k[:len(k) - len(filtr)]
vals = [item]
# foreign key may be divided by "." or "__"
splitted_k = []
@@ -929,10 +955,14 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
v = v()
new_vals.append(v)
elif val:
- val = getattr(val, ky)
- if callable(val):
- val = val()
- new_vals.append(val)
+ try:
+ val = getattr(val, ky)
+ if callable(val):
+ val = val()
+ new_vals.append(val)
+ except AttributeError:
+ # must be a query key such as "contains"
+ pass
vals = new_vals
# manage last related objects
if vals and hasattr(vals[0], 'all'):
@@ -981,8 +1011,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
lnk = link_template % reverse('show-' + default_name,
args=[data[0], ''])
except NoReverseMatch:
- print(
- '"show-' + default_name + "\" args ("
+ logger.warning(
+ '**WARN "show-' + default_name + '" args ('
+ unicode(data[0]) + ") url not available")
lnk = ''
res = {'id': data[0], 'link': lnk}
@@ -995,9 +1025,9 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
# foreign key may be divided by "." or "__"
for tc in table_col:
if '.' in tc:
- tab_cols.append(tc.split('.')[-1])
+ tab_cols += tc.split('.')
elif '__' in tc:
- tab_cols.append(tc.split('__')[-1])
+ tab_cols += tc.split('__')
else:
tab_cols.append(tc)
k = "__".join(tab_cols)
@@ -1027,6 +1057,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
writer = csv.writer(response, **CSV_OPTIONS)
col_names = []
for field_name in table_cols:
+ if type(field_name) in (list, tuple):
+ field_name = " ; ".join(field_name)
if hasattr(model, 'EXTRA_FULL_FIELDS_LABELS') and\
field_name in model.EXTRA_FULL_FIELDS_LABELS:
field = model.EXTRA_FULL_FIELDS_LABELS[field_name]
@@ -1037,6 +1069,11 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
field = model._meta.get_field(field_name)
except:
col_names.append(u"".encode(ENCODING))
+ logger.warning(
+ "**WARN get_item - csv export**: no col name for "
+ "{}\nadd explicit label to "
+ "EXTRA_FULL_FIELDS_LABELS attribute of "
+ "{}".format(field_name, model))
continue
col_names.append(
unicode(field.verbose_name).encode(ENCODING))
@@ -1111,7 +1148,6 @@ def show_item(model, name, extra_dct=None):
context_instance = RequestContext(request)
context_instance.update(dct)
context_instance['output'] = 'html'
- filename = ""
if hasattr(item, 'history_object'):
filename = item.history_object.associated_filename
else: