diff options
| 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 | 
| commit | 93e329748e19443456701b06cf2f57fd33f4399c (patch) | |
| tree | c8b1d812a65fa9ab857c492e65928f5e2dee223f /ishtar_common/models.py | |
| parent | 15c58b1d1b3ee6972ed70de7ce77d39999344673 (diff) | |
| download | Ishtar-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.py | 37 | 
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' | 
