diff --git a/shop/models.py b/shop/models.py index 603c07e..4d056a8 100644 --- a/shop/models.py +++ b/shop/models.py @@ -450,6 +450,7 @@ class Order(TimestampedModel): class Meta: verbose_name = _("pedido") verbose_name_plural = _("pedidos") + ordering = ("creation_date", ) class Cart(models.Model): diff --git a/web/templates/components/generic/navbar.html b/web/templates/components/generic/navbar.html index 9eee69a..0e3eec0 100644 --- a/web/templates/components/generic/navbar.html +++ b/web/templates/components/generic/navbar.html @@ -62,8 +62,9 @@ {% else %} Inicia - sesión + class="inline-flex items-center rounded-lg justify-center p-2 hover:bg-gray-100 dark:hover:bg-gray-700 text-sm font-medium leading-none text-gray-900 dark:text-white"> + Inicia sesión + {% endif %} diff --git a/web/templates/components/users/user_dropdown.html b/web/templates/components/users/user_dropdown.html index abf9c3b..2fc478e 100644 --- a/web/templates/components/users/user_dropdown.html +++ b/web/templates/components/users/user_dropdown.html @@ -7,7 +7,7 @@
  • - {% translate 'Mis pedidos' %} diff --git a/web/templates/web/orders.html b/web/templates/web/orders.html new file mode 100644 index 0000000..0a3383e --- /dev/null +++ b/web/templates/web/orders.html @@ -0,0 +1,101 @@ +{% extends 'theme/base.html' %} +{% load static i18n %} + +{% block main %} +{% include 'components/generic/navbar.html' %} +
    +
    +
    +

    + {% translate 'Mis pedidos' %} +

    + +
    +
    + {% for order in page %} + +
    +
    +
    + {% translate 'Número de pedido' %} +
    +
    + + #{{ order.code }} + +
    +
    + +
    +
    + {% translate 'Fecha' %} +
    +
    + {{ order.creation_date }} +
    +
    + +
    +
    + {% translate 'Total' %} +
    +
    + {{ order.total }}€ +
    +
    + +
    + + {% if order.status == 'PAI' %} +
    + {% translate 'Pagado' %} +
    + + {% if order.shipping_status == 'NOT' %} +
    + {% translate 'Tramitado' %} +
    + {% elif order.shipping_status == 'RDY' %} +
    + {% translate 'Preparado' %} +
    + {% elif order.shipping_status == 'TBS' %} +
    + {% translate 'Listo' %} +
    + {% elif order.shipping_status == 'SNT' %} +
    + {% translate 'Enviado' %} +
    + {% elif order.shipping_status == 'DLV' %} +
    + {% translate 'Entregado' %} +
    + {% endif %} + + {% elif order.status == 'ERR' %} +
    + {% translate 'Error' %} +
    + {% elif order.status == 'RTN' %} +
    + {% translate 'Devuelto' %} +
    + {% endif %} +
    + + + {% translate 'Ver pedido' %} + +
    + + {% endfor %} + +
    +
    + +
    +
    +
    +{% endblock %} diff --git a/web/urls.py b/web/urls.py index 25a414d..872df3a 100644 --- a/web/urls.py +++ b/web/urls.py @@ -21,6 +21,7 @@ from web.views.web import ( index, manifest, order_detail, + orders, product_detail, wishlist, ) @@ -33,6 +34,7 @@ i18n_resolvers = i18n_patterns( path(_("categories//"), category_view, name="category_view"), path(_("products///"), product_detail, name="product_detail"), path(_("cart/"), cart_detail, name="cart_detail"), + path(_("orders/"), login_required(orders, login_url="/login/"), name="orders"), path(_("order//"), order_detail, name="order"), # users path(_("login/"), login, name="login"), diff --git a/web/views/web.py b/web/views/web.py index a82c73c..44f85aa 100644 --- a/web/views/web.py +++ b/web/views/web.py @@ -19,6 +19,7 @@ from shop.models import ( from shop.redsys import RedsysClient from shop.utils import create_order_from_cart from web.forms import CreateOrderForm +from web.mixins import PaginatedQuerysetMixin, FilteredQuerysetMixin from web.models import WebSettings from web.settings import ANONYMOUS_CART_ID_COOKIE_NAME from web.utils import get_or_create_cart @@ -192,6 +193,24 @@ class WishlistView(TemplateView): } +class OrdersView(TemplateView, FilteredQuerysetMixin, PaginatedQuerysetMixin): + template_name = "web/orders.html" + + def get_queryset(self): + return Order.objects.filter(user=self.request.user).exclude(status=Order.Statuses.STATUS_PENDING) + + def get_context_data(self, **kwargs): + settings = WebSettings.load() + qs = self.get_queryset() + page = self.get_paginated_queryset(qs) + + return { + "page": page, + "has_next_page": page.has_next(), + "has_previous_page": page.has_previous(), + } + + @require_http_methods( [ "POST", @@ -311,3 +330,4 @@ product_detail = ProductDetail.as_view() cart_detail = CartDetail.as_view() order_detail = OrderDetail.as_view() wishlist = WishlistView.as_view() +orders = OrdersView.as_view()