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, f"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", )