-
Notifications
You must be signed in to change notification settings - Fork 50
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
8105e84
commit e87baec
Showing
5 changed files
with
152 additions
and
112 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,99 +1,140 @@ | ||
from __future__ import annotations | ||
from typing import Any | ||
|
||
from typing import Type | ||
from wagtail.admin.panels import FieldPanel | ||
from wagtail.admin.ui.tables import Column, UpdatedAtColumn | ||
from wagtail.snippets.models import register_snippet | ||
from wagtail.snippets.views.snippets import SnippetViewSet | ||
|
||
from wagtail.admin.panels import ObjectList, Panel | ||
from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register | ||
|
||
from salesman.conf import app_settings | ||
from salesman.core.utils import get_salesman_model | ||
|
||
from .filters import OrderIsPaidFilter, OrderStatusFilter | ||
from .wagtail.forms import WagtailOrderModelForm | ||
from .wagtail.helpers import ( | ||
OrderAdminURLHelper, | ||
OrderButtonHelper, | ||
OrderPermissionHelper, | ||
) | ||
from .wagtail.mixins import WagtailOrderAdminMixin, WagtailOrderAdminRefundMixin | ||
from .wagtail.views import OrderEditView, OrderIndexView | ||
|
||
Order = get_salesman_model("Order") | ||
|
||
|
||
class BaseOrderAdmin(WagtailOrderAdminMixin, ModelAdmin): | ||
class AdminColumn(Column): | ||
""" | ||
A Wagtail column that gets the value from `WagtaiOrderAdminMixin` instead | ||
from a model instance so that custom admin display methods can be reused. | ||
""" | ||
|
||
def get_cell_context_data( | ||
self, instance: Any, parent_context: Any | ||
) -> dict[str, Any]: | ||
context = super().get_cell_context_data(instance, parent_context) | ||
admin = WagtailOrderAdminMixin(request=context["request"]) | ||
context["value"] = getattr(admin, self.accessor)(instance) | ||
return context | ||
|
||
|
||
class OrderAdmin(WagtailOrderAdminMixin, SnippetViewSet): | ||
model = Order | ||
menu_icon = "form" | ||
index_view_class = OrderIndexView | ||
edit_view_class = OrderEditView | ||
icon = "form" | ||
add_to_admin_menu = True | ||
|
||
list_display = [ | ||
"__str__", | ||
"email", | ||
"status_display", | ||
"total_display", | ||
"is_paid_display", | ||
AdminColumn("status_display"), | ||
AdminColumn("total_display"), | ||
AdminColumn("is_paid_display"), | ||
"date_created", | ||
] | ||
list_filter = [OrderStatusFilter, OrderIsPaidFilter, "date_created", "date_updated"] | ||
search_fields = ["ref", "email", "token"] | ||
edit_template_name = "salesman/admin/wagtail_edit.html" | ||
permission_helper_class = OrderPermissionHelper | ||
button_helper_class = OrderButtonHelper | ||
url_helper_class = OrderAdminURLHelper | ||
form_view_extra_css = ["salesman/admin/wagtail_form.css"] | ||
|
||
def get_base_form_class( | ||
self, | ||
form_class: Type[WagtailOrderModelForm] | None = None, | ||
) -> Type[WagtailOrderModelForm]: | ||
""" | ||
Returns Model form class with model_admin instance attached. | ||
Args: | ||
form_class (Type[WagtailOrderModelForm], optional): Class. Defaults to None. | ||
Returns: | ||
type[WagtailOrderModelForm]: A model form class | ||
""" | ||
return type( | ||
"WagtailOrderModelForm", | ||
(form_class or WagtailOrderModelForm,), | ||
{"model_admin": self}, | ||
) | ||
|
||
def get_edit_handler(self) -> Panel: | ||
""" | ||
Returns edit handler with custom base form class attached. | ||
Returns: | ||
EditHandler: Edit handler | ||
""" | ||
if hasattr(self, "edit_handler"): | ||
edit_handler = self.edit_handler | ||
elif hasattr(self, "panels"): | ||
panels = self.panels | ||
edit_handler = ObjectList(panels) | ||
elif hasattr(self.model, "edit_handler"): | ||
edit_handler = self.model.edit_handler | ||
elif hasattr(self.model, "panels"): | ||
panels = self.model.panels | ||
edit_handler = ObjectList(panels) | ||
elif hasattr(self, "default_edit_handler") and self.default_edit_handler: | ||
edit_handler = self.default_edit_handler | ||
else: | ||
edit_handler = super().get_edit_handler() | ||
|
||
edit_handler.base_form_class = self.get_base_form_class( | ||
form_class=getattr(edit_handler, "base_form_class", None) | ||
) | ||
return edit_handler | ||
|
||
|
||
class OrderAdmin(WagtailOrderAdminRefundMixin, BaseOrderAdmin): | ||
""" | ||
Default Order admin with refund functionality. | ||
""" | ||
|
||
|
||
if app_settings.SALESMAN_ADMIN_REGISTER: | ||
modeladmin_register(OrderAdmin) | ||
register_snippet(OrderAdmin) | ||
|
||
# from typing import Type | ||
# | ||
# from wagtail.admin.panels import ObjectList, Panel | ||
# | ||
# from salesman.conf import app_settings | ||
# from salesman.core.utils import get_salesman_model | ||
# | ||
# from .filters import OrderIsPaidFilter, OrderStatusFilter | ||
# from .wagtail.forms import WagtailOrderModelForm | ||
# from .wagtail.helpers import ( | ||
# OrderAdminURLHelper, | ||
# OrderButtonHelper, | ||
# OrderPermissionHelper, | ||
# ) | ||
# from .wagtail.mixins import WagtailOrderAdminMixin, WagtailOrderAdminRefundMixin | ||
# from .wagtail.views import OrderEditView, OrderIndexView | ||
|
||
|
||
# class BaseOrderAdmin(WagtailOrderAdminMixin, ModelAdmin): | ||
# model = Order | ||
# menu_icon = "form" | ||
# index_view_class = OrderIndexView | ||
# edit_view_class = OrderEditView | ||
# list_display = [ | ||
# "__str__", | ||
# "email", | ||
# "status_display", | ||
# "total_display", | ||
# "is_paid_display", | ||
# "date_created", | ||
# ] | ||
# list_filter = [OrderStatusFilter, OrderIsPaidFilter, "date_created", "date_updated"] | ||
# search_fields = ["ref", "email", "token"] | ||
# edit_template_name = "salesman/admin/wagtail_edit.html" | ||
# permission_helper_class = OrderPermissionHelper | ||
# button_helper_class = OrderButtonHelper | ||
# url_helper_class = OrderAdminURLHelper | ||
# form_view_extra_css = ["salesman/admin/wagtail_form.css"] | ||
# | ||
# def get_base_form_class( | ||
# self, | ||
# form_class: Type[WagtailOrderModelForm] | None = None, | ||
# ) -> Type[WagtailOrderModelForm]: | ||
# """ | ||
# Returns Model form class with model_admin instance attached. | ||
# | ||
# Args: | ||
# form_class (Type[WagtailOrderModelForm], optional): Class. Defaults to None. | ||
# | ||
# Returns: | ||
# type[WagtailOrderModelForm]: A model form class | ||
# """ | ||
# return type( | ||
# "WagtailOrderModelForm", | ||
# (form_class or WagtailOrderModelForm,), | ||
# {"model_admin": self}, | ||
# ) | ||
# | ||
# def get_edit_handler(self) -> Panel: | ||
# """ | ||
# Returns edit handler with custom base form class attached. | ||
# | ||
# Returns: | ||
# EditHandler: Edit handler | ||
# """ | ||
# if hasattr(self, "edit_handler"): | ||
# edit_handler = self.edit_handler | ||
# elif hasattr(self, "panels"): | ||
# panels = self.panels | ||
# edit_handler = ObjectList(panels) | ||
# elif hasattr(self.model, "edit_handler"): | ||
# edit_handler = self.model.edit_handler | ||
# elif hasattr(self.model, "panels"): | ||
# panels = self.model.panels | ||
# edit_handler = ObjectList(panels) | ||
# elif hasattr(self, "default_edit_handler") and self.default_edit_handler: | ||
# edit_handler = self.default_edit_handler | ||
# else: | ||
# edit_handler = super().get_edit_handler() | ||
# | ||
# edit_handler.base_form_class = self.get_base_form_class( | ||
# form_class=getattr(edit_handler, "base_form_class", None) | ||
# ) | ||
# return edit_handler | ||
# | ||
# | ||
# class OrderAdmin(WagtailOrderAdminRefundMixin, BaseOrderAdmin): | ||
# """ | ||
# Default Order admin with refund functionality. | ||
# """ | ||
|
||
|
||
# if app_settings.SALESMAN_ADMIN_REGISTER: | ||
# modeladmin_register(OrderAdmin) |