summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-01-30 12:09:23 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-01-30 12:09:23 +0100
commit93e329748e19443456701b06cf2f57fd33f4399c (patch)
treec8b1d812a65fa9ab857c492e65928f5e2dee223f /ishtar_common/models.py
parent15c58b1d1b3ee6972ed70de7ce77d39999344673 (diff)
downloadIshtar-93e329748e19443456701b06cf2f57fd33f4399c.tar.bz2
Ishtar-93e329748e19443456701b06cf2f57fd33f4399c.zip
Fix shortcut menu for baskets - add tests for shortcut menu
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py37
1 files changed, 32 insertions, 5 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index f87c1b8de..572bd85e7 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -242,13 +242,27 @@ class OwnPerms:
@classmethod
def _return_get_owns(cls, owns, values, get_short_menu_class,
label_key='cached_label'):
+ sorted_values = []
+ if hasattr(cls, 'BASKET_MODEL'):
+ owns_len = len(owns)
+ for idx, item in enumerate(reversed(owns)):
+ if get_short_menu_class:
+ item = item[0]
+ if type(item) == cls.BASKET_MODEL:
+ basket = owns.pop(owns_len - idx - 1)
+ sorted_values.append(basket)
+ sorted_values = list(reversed(sorted_values))
if not values:
if not get_short_menu_class:
- return sorted(owns, key=lambda x: getattr(x, label_key))
- return sorted(owns, key=lambda x: getattr(x[0], label_key))
+ return sorted_values + list(
+ sorted(owns, key=lambda x: getattr(x, label_key)))
+ return sorted_values + list(
+ sorted(owns, key=lambda x: getattr(x[0], label_key)))
if not get_short_menu_class:
- return sorted(owns, key=lambda x: x[label_key])
- return sorted(owns, key=lambda x: x[0][label_key])
+ return sorted_values + list(
+ sorted(owns, key=lambda x: x[label_key]))
+ return sorted_values + list(
+ sorted(owns, key=lambda x: x[0][label_key]))
@classmethod
def get_owns(cls, user, replace_query={}, limit=None, values=None,
@@ -288,7 +302,16 @@ class OwnPerms:
raise NotImplementedError(
"Call of get_owns with get_short_menu_class option and"
" no 'id' in values is not implemented")
- items = [(i, cls.get_short_menu_class(i['id'])) for i in items]
+ my_items = []
+ for i in items:
+ if hasattr(cls, 'BASKET_MODEL') and \
+ type(i) == cls.BASKET_MODEL:
+ dct = dict([(k, getattr(i, k)) for k in values])
+ my_items.append(
+ (dct, cls.BASKET_MODEL.get_short_menu_class(i.pk)))
+ else:
+ my_items.append((i, cls.get_short_menu_class(i['id'])))
+ items = my_items
else:
items = [(i, cls.get_short_menu_class(i.pk)) for i in items]
return items
@@ -672,6 +695,10 @@ class Basket(models.Model):
def __unicode__(self):
return self.label
+ @property
+ def cached_label(self):
+ return unicode(self)
+
@classmethod
def get_short_menu_class(cls, pk):
return 'basket'