Source code for salesman.admin.wagtail.views

from __future__ import annotations

from typing import Any

from django.contrib.auth.models import AbstractBaseUser
from django.http import HttpRequest
from django.shortcuts import redirect
from django.urls import NoReverseMatch
from django.utils.functional import cached_property
from django.utils.translation import gettext_lazy as _
from wagtail.admin import messages
from wagtail.contrib.modeladmin.views import DeleteView, EditView, IndexView


[docs]class OrderIndexView(IndexView): """ Wagtail admin view that handles Order index. """ def dispatch(self, request: HttpRequest, *args: Any, **kwargs: Any) -> Any: self.model.request = request return super().dispatch(request, *args, **kwargs)
[docs]class OrderEditView(EditView): """ Wagtail admin view that handles Order edit. """ page_title = _("Order") def dispatch(self, request: HttpRequest, *args: Any, **kwargs: Any) -> Any: self.model.request = request return super().dispatch(request, *args, **kwargs)
[docs] def get_success_url(self) -> str: return str(self.edit_url)
def get_meta_title(self) -> str: return _("Viewing Order") @cached_property def refund_url(self) -> str | None: try: return str(self.url_helper.get_action_url("refund", self.pk_quoted)) except NoReverseMatch: return None
[docs]class OrderRefundView(DeleteView): """ Wagtail admin view that handles Order refunds. """ page_title = _("Refund") def check_action_permitted(self, user: AbstractBaseUser) -> bool: return True def get_meta_title(self) -> str: return _("Confirm Order refund") def post(self, request: HttpRequest, *args: Any, **kwargs: Any) -> Any: if "_refund-error" in request.POST: # Refund error, add error message and redirect to change view. msg = _("There was an error while trying to refund order.") messages.error(request, msg) if "_refund-success" in request.POST: # Refund success, add success message and redirect to change view. failed = int(request.POST["_refund-success"]) if failed: msg = _("The Order “{}” was only partially refunded.") messages.warning(request, msg.format(self.instance)) else: msg = _("The Order “{}” was successfully refunded.") messages.success(request, msg.format(self.instance)) return redirect(self.edit_url)
[docs] def get_template_names(self) -> list[str]: return ["salesman/admin/wagtail_refund.html"]