improve cart layout

master
agp8x 2020-04-02 21:08:31 +02:00
parent 998a530500
commit 7f227fea21
4 changed files with 34 additions and 5 deletions

View File

@ -51,7 +51,7 @@ class BrandedPartAdmin(admin.ModelAdmin):
autocomplete_fields = ["parts"] autocomplete_fields = ["parts"]
class CartEntryInline(admin.StackedInline): class CartEntryInline(admin.TabularInline):
model = CartEntry model = CartEntry
extra = 1 extra = 1
raw_id_fields = ("origins",) raw_id_fields = ("origins",)

View File

@ -112,7 +112,7 @@ class BrandedPart(PartModel):
self[0]._merge(other[0]) self[0]._merge(other[0])
def get_part_name(self): 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): def get_name(self, full=False, first=False):
if full: if full:
@ -184,6 +184,9 @@ class Cart(PartModel):
entry = CartEntry.objects.create(cart=self) entry = CartEntry.objects.create(cart=self)
entry.origins.add(product_usage) entry.origins.add(product_usage)
entry.save() entry.save()
def shop_entries(self, shop):
return sorted(self.entries.filter(shop=shop), key=lambda x: x.part.number)
class CartEntry(PartModel): class CartEntry(PartModel):
@ -203,3 +206,6 @@ class CartEntry(PartModel):
def get_quantity(self): def get_quantity(self):
return self.quantity return self.quantity
def __str__(self):
return self.part.get_name()

View File

@ -2,13 +2,32 @@
<h3>entries</h3> <h3>entries</h3>
<ul> <ul>
{% for entry in entries %} {% for entry in entries %}
<li>{{entry.quantity}} -- <a href="{% url 'parts:cart_entry' cart.id entry.id %}">{{entry.part}}</a> <li>{{entry.quantity}} -- <a href="{% url 'parts:cart_entry' cart.id entry.id %}">{{entry.part.get_part_name}} ({{entry.part.number}})</a>
<ul> <ul>
{% for pu in entry.origins.all %} {% for pu in entry.origins.all %}
<li><a href="{% url 'parts:sketch' pu.usage.sketch.id %}">{{pu.usage.sketch.name}}</a></li> <li style="margin-left:25em;">{{pu.quantity}} - <a href="{% url 'parts:sketch' pu.usage.sketch.id %}">{{pu.usage.sketch.name}}</a></li>
{% endfor %} {% endfor %}
</ul> </ul>
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
<h3>shops</h3>
<ul>
{% for shop, entries in shop_entries.items %}
<li>{{shop}}
<ul>
{% for entry in entries %}
<li style="{% if entry.in_cart %}list-style-type=square;{% endif %}{% if entry.ordered%}color=green;{%endif%}" >{{entry.quantity}} -- <a href="{% url 'parts:cart_entry' cart.id entry.id %}">{{entry.part.get_part_name}} ({{entry.part.number}})</a>
<ul>
{% for pu in entry.origins.all %}
<li style="margin-left:25em;">{{pu.quantity}} - <a href="{% url 'parts:sketch' pu.usage.sketch.id %}">{{pu.usage.sketch.name}}</a></li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul> </ul>

View File

@ -198,8 +198,12 @@ def update_cart(request):
def cart(request, cart_id): def cart(request, cart_id):
cart = Cart.objects.get(id=cart_id) cart = Cart.objects.get(id=cart_id)
#entries = cart.entries.order_by('origins__usage__part__number')
entries = cart.entries.all() 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) return render(request, 'parts/cart.html', context)