Source code for shuup.front.apps.personal_order_history.views

import django.views.generic
from django.http import HttpResponseRedirect
from django.views.generic import View

from shuup.core.models import Order, ProductMode
from shuup.front.views.dashboard import DashboardViewMixin
from shuup.utils.django_compat import reverse


[docs] class OrderViewMixin: model = Order
[docs] def get_queryset(self): qs = super().get_queryset() return qs.filter(customer=self.request.customer)
[docs] class OrderListView(DashboardViewMixin, OrderViewMixin, django.views.generic.ListView): template_name = "shuup/personal_order_history/order_list.jinja" context_object_name = "orders"
[docs] class OrderDetailView(DashboardViewMixin, OrderViewMixin, django.views.generic.DetailView): template_name = "shuup/personal_order_history/order_detail.jinja" context_object_name = "order"
[docs] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) reorderable_lines = _get_reorderable_lines(context["order"]) context["order_is_reorderable"] = reorderable_lines.exists() return context
[docs] class ReorderView(View):
[docs] def get(self, request, *args, **kwargs): try: order = Order.objects.get(customer=request.customer, pk=kwargs["pk"]) except Order.DoesNotExist: return HttpResponseRedirect(reverse("shuup:show-order", kwargs=kwargs)) for line in _get_reorderable_lines(order): request.basket.add_product( supplier=line.supplier, shop=request.shop, product=line.product, quantity=line.quantity, ) return HttpResponseRedirect(reverse("shuup:basket"))
def _get_reorderable_lines(order): """ Get re-orderable lines of an order. This is all product lines except: * child lines, because otherwise package contents are added twice. * subscriptions, because those don't use normal checkout flow. """ return order.lines.products().exclude(parent_line__isnull=False).exclude(product__mode=ProductMode.SUBSCRIPTION)