From 7f227fea2149049b5af617568830093b1a41e420 Mon Sep 17 00:00:00 2001 From: agp8x Date: Thu, 2 Apr 2020 21:08:31 +0200 Subject: [PATCH] improve cart layout --- partdoc/parts/admin.py | 2 +- partdoc/parts/models.py | 8 +++++++- partdoc/parts/templates/parts/cart.html | 23 +++++++++++++++++++++-- partdoc/parts/views.py | 6 +++++- 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/partdoc/parts/admin.py b/partdoc/parts/admin.py index 362a605..acbba43 100644 --- a/partdoc/parts/admin.py +++ b/partdoc/parts/admin.py @@ -51,7 +51,7 @@ class BrandedPartAdmin(admin.ModelAdmin): autocomplete_fields = ["parts"] -class CartEntryInline(admin.StackedInline): +class CartEntryInline(admin.TabularInline): model = CartEntry extra = 1 raw_id_fields = ("origins",) diff --git a/partdoc/parts/models.py b/partdoc/parts/models.py index d5667bc..499964f 100644 --- a/partdoc/parts/models.py +++ b/partdoc/parts/models.py @@ -112,7 +112,7 @@ class BrandedPart(PartModel): self[0]._merge(other[0]) def get_part_name(self): - return self.parts.first().name if len(self.parts) else "" + return self.parts.first().name if self.parts.exists() else "" def get_name(self, full=False, first=False): if full: @@ -184,6 +184,9 @@ class Cart(PartModel): entry = CartEntry.objects.create(cart=self) entry.origins.add(product_usage) entry.save() + + def shop_entries(self, shop): + return sorted(self.entries.filter(shop=shop), key=lambda x: x.part.number) class CartEntry(PartModel): @@ -203,3 +206,6 @@ class CartEntry(PartModel): def get_quantity(self): return self.quantity + + def __str__(self): + return self.part.get_name() diff --git a/partdoc/parts/templates/parts/cart.html b/partdoc/parts/templates/parts/cart.html index bb1e06f..c9779a9 100644 --- a/partdoc/parts/templates/parts/cart.html +++ b/partdoc/parts/templates/parts/cart.html @@ -2,13 +2,32 @@

entries

+ + +

shops

+ diff --git a/partdoc/parts/views.py b/partdoc/parts/views.py index 7cd1f10..21bf5da 100644 --- a/partdoc/parts/views.py +++ b/partdoc/parts/views.py @@ -198,8 +198,12 @@ def update_cart(request): def cart(request, cart_id): cart = Cart.objects.get(id=cart_id) + #entries = cart.entries.order_by('origins__usage__part__number') entries = cart.entries.all() - context = {'cart': cart, "entries": entries} + entries = sorted(entries, key=lambda x: x.part.number) + shops = Shop.objects.filter(cartentry__cart=cart).distinct() + shop_entries = {shop: cart.shop_entries(shop) for shop in shops} + context = {'cart': cart, "entries": entries, "shops": shops, "shop_entries": shop_entries} return render(request, 'parts/cart.html', context)