105 lines
3.1 KiB
Python
105 lines
3.1 KiB
Python
from django.contrib import admin
|
|
|
|
from vbv_lernwelt.shop.invoice.abacus import abacus_ssh_upload
|
|
from vbv_lernwelt.shop.models import CheckoutInformation, CheckoutState, Product
|
|
from vbv_lernwelt.shop.services import get_transaction_state
|
|
from vbv_lernwelt.shop.views import send_vv_welcome_email
|
|
|
|
|
|
@admin.action(description="DATATRANS: Sync transaction states")
|
|
def sync_transaction_state(modeladmin, request, queryset):
|
|
for checkout in queryset:
|
|
state = get_transaction_state(transaction_id=checkout.transaction_id)
|
|
checkout.state = state.value
|
|
checkout.save(
|
|
update_fields=[
|
|
"state",
|
|
]
|
|
)
|
|
|
|
|
|
@admin.register(CheckoutInformation)
|
|
class CheckoutInformationAdmin(admin.ModelAdmin):
|
|
@admin.action(description="ABACUS: Upload invoice to SFTP server")
|
|
def abacus_upload_order(self, request, queryset):
|
|
success = True
|
|
for ci in queryset:
|
|
if not abacus_ssh_upload(ci):
|
|
success = False
|
|
if not success:
|
|
self.message_user(
|
|
request, "Beim SFTP upload ist ein Fehler aufgetreten", level="error"
|
|
)
|
|
|
|
@admin.action(description="Buchungsbestätigung: Bestätigung erneut senden")
|
|
def resend_payment_confirmation(self, request, queryset):
|
|
for ci in queryset:
|
|
if ci.state != CheckoutState.PAID.value:
|
|
self.message_user(
|
|
request,
|
|
f"Die Buchung mit der ID {ci.transaction_id} ist nicht bezahlt",
|
|
level="error",
|
|
)
|
|
continue
|
|
else:
|
|
send_vv_welcome_email(ci)
|
|
self.message_user(
|
|
request,
|
|
f"Die Buchungsbestätigung für {ci.transaction_id} wurde erneut versendet",
|
|
level="success",
|
|
)
|
|
|
|
@staticmethod
|
|
def customer(obj):
|
|
return f"{obj.user.first_name} {obj.user.last_name} ({obj.user.email})"
|
|
|
|
@staticmethod
|
|
def debitor_number(obj):
|
|
return obj.user.abacus_debitor_number
|
|
|
|
def has_delete_permission(self, request, obj=None):
|
|
# Disable delete
|
|
return False
|
|
|
|
list_display = (
|
|
"product_sku",
|
|
customer,
|
|
"product_name",
|
|
"product_price",
|
|
"created_at",
|
|
"state",
|
|
"invoice_transmitted_at",
|
|
"abacus_order_id",
|
|
debitor_number,
|
|
"abacus_ssh_upload_done",
|
|
)
|
|
search_fields = [
|
|
"user__email",
|
|
"user__first_name",
|
|
"user__last_name",
|
|
"user__username",
|
|
"transaction_id",
|
|
"abacus_order_id",
|
|
"user__abacus_debitor_number",
|
|
]
|
|
list_filter = ("state", "product_name", "product_sku", "abacus_ssh_upload_done")
|
|
date_hierarchy = "created_at"
|
|
actions = [abacus_upload_order, sync_transaction_state, resend_payment_confirmation]
|
|
readonly_fields = [
|
|
"user",
|
|
"transaction_id",
|
|
"state",
|
|
"product_price",
|
|
"webhook_history",
|
|
]
|
|
|
|
|
|
@admin.register(Product)
|
|
class ProductAdmin(admin.ModelAdmin):
|
|
list_display = (
|
|
"sku",
|
|
"name",
|
|
"price",
|
|
"description",
|
|
)
|