bornhack-website/src/shop/admin.py

180 lines
3.9 KiB
Python
Raw Normal View History

2016-06-19 06:43:56 +00:00
from django.contrib import admin
from .models import (
CoinifyAPICallback,
CoinifyAPIInvoice,
CoinifyAPIRequest,
CreditNote,
CustomOrder,
EpayCallback,
EpayPayment,
Invoice,
Order,
OrderProductRelation,
Product,
ProductCategory,
)
admin.site.register(EpayCallback)
admin.site.register(CoinifyAPIInvoice)
admin.site.register(CoinifyAPICallback)
admin.site.register(CoinifyAPIRequest)
2021-08-03 06:45:41 +00:00
@admin.register(EpayPayment)
class EpayPaymentAdmin(admin.ModelAdmin):
list_display = ["id", "order", "callback", "txnid"]
list_display = ["order"]
@admin.register(Invoice)
class InvoiceAdmin(admin.ModelAdmin):
2019-06-16 12:32:24 +00:00
list_display = ["id", "order", "customorder", "created", "updated"]
@admin.register(CreditNote)
class CreditNoteAdmin(admin.ModelAdmin):
list_display = [
2019-06-16 12:32:24 +00:00
"id",
"user",
"customer",
"amount",
"vat",
"paid",
"created",
"updated",
]
2019-06-16 12:32:24 +00:00
list_filter = ["paid"]
2016-05-31 21:23:05 +00:00
@admin.register(CustomOrder)
class CustomOrderAdmin(admin.ModelAdmin):
list_display = [
2019-06-16 12:32:24 +00:00
"id",
"customer",
"text",
"amount",
"vat",
"paid",
"created",
"updated",
]
2019-06-16 12:32:24 +00:00
list_filter = ["paid"]
@admin.register(ProductCategory)
class ProductCategoryAdmin(admin.ModelAdmin):
2019-06-16 12:32:24 +00:00
list_display = ["name"]
def available_from(product):
2018-01-07 16:20:45 +00:00
if product.available_in.lower:
2018-01-07 16:15:03 +00:00
return product.available_in.lower.strftime("%c")
return "None"
2019-06-16 12:32:24 +00:00
available_from.short_description = "Available from"
2018-03-04 14:38:40 +00:00
def available_to(product):
2018-01-07 16:20:45 +00:00
if product.available_in.upper:
2018-01-07 16:15:03 +00:00
return product.available_in.upper.strftime("%c")
return "None"
2019-06-16 12:32:24 +00:00
available_to.short_description = "Available to"
def stock_info(product):
if product.stock_amount:
2019-06-16 12:32:24 +00:00
return "{} / {}".format(product.left_in_stock, product.stock_amount)
return "N/A"
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
list_display = [
2019-06-16 12:32:24 +00:00
"name",
"category",
"ticket_type",
"price",
stock_info,
available_from,
2019-06-16 12:32:24 +00:00
available_to,
]
list_editable = ["ticket_type"]
2019-06-16 12:32:24 +00:00
list_filter = ["category", "ticket_type"]
search_fields = ["name"]
2021-05-25 15:38:28 +00:00
save_as = True
class ProductInline(admin.TabularInline):
model = OrderProductRelation
@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
2019-06-16 12:32:24 +00:00
change_form_template = "admin/change_order_form.html"
readonly_fields = ("paid", "created", "updated")
2016-06-04 07:46:10 +00:00
def get_email(self, obj):
return obj.user.email
list_display = [
2019-06-16 12:32:24 +00:00
"id",
"created",
"updated",
"user",
"get_email",
"total",
"payment_method",
"open",
"paid",
"cancelled",
"refunded",
]
2019-06-16 12:32:24 +00:00
list_filter = ["payment_method", "open", "paid", "cancelled", "refunded", "user"]
2019-06-16 12:32:24 +00:00
exclude = ["products"]
inlines = [ProductInline]
2019-06-16 12:32:24 +00:00
actions = [
"mark_order_as_paid",
"mark_order_as_refunded",
"mark_order_as_cancelled",
2019-07-29 20:32:49 +00:00
"create_tickets",
2019-06-16 12:32:24 +00:00
]
def mark_order_as_paid(self, request, queryset):
for order in queryset.filter(paid=False):
order.mark_as_paid(request)
2019-06-16 12:32:24 +00:00
mark_order_as_paid.description = "Mark order(s) as paid"
def mark_order_as_refunded(self, request, queryset):
for order in queryset.filter(refunded=False):
2016-06-19 06:49:30 +00:00
order.mark_as_refunded(request)
2019-06-16 12:32:24 +00:00
mark_order_as_refunded.description = "Mark order(s) as refunded"
2019-03-17 14:04:28 +00:00
def mark_order_as_cancelled(self, request, queryset):
for order in queryset.filter(cancelled=False):
order.mark_as_cancelled(request)
2019-06-16 12:32:24 +00:00
mark_order_as_cancelled.description = "Mark order(s) as cancelled"
2019-03-17 14:04:28 +00:00
2019-07-29 20:32:49 +00:00
def create_tickets(self, request, queryset):
for order in queryset.filter(paid=True):
order.create_tickets(request)
create_tickets.description = "Create tickets for order(s) (paid only)"
2016-08-27 08:29:26 +00:00
def get_user_email(obj):
return obj.order.user.email