143 lines
5.1 KiB
Python
143 lines
5.1 KiB
Python
"""
|
|
Billing Business Logic Admin
|
|
|
|
NOTE: Most billing models are registered in modules/billing/admin.py
|
|
with full workflow functionality. This file contains legacy/minimal registrations.
|
|
"""
|
|
from django.contrib import admin
|
|
from django.contrib import messages
|
|
from django.utils.html import format_html
|
|
from unfold.admin import ModelAdmin
|
|
from igny8_core.admin.base import AccountAdminMixin, Igny8ModelAdmin
|
|
from .models import (
|
|
CreditCostConfig,
|
|
AccountPaymentMethod,
|
|
Invoice,
|
|
Payment,
|
|
CreditPackage,
|
|
PaymentMethodConfig,
|
|
)
|
|
|
|
|
|
# CreditCostConfig - DUPLICATE - Registered in modules/billing/admin.py with better features
|
|
# Commenting out to avoid conflicts
|
|
# @admin.register(CreditCostConfig)
|
|
# class CreditCostConfigAdmin(admin.ModelAdmin):
|
|
# ...existing implementation...
|
|
|
|
|
|
# Invoice - DUPLICATE - Registered in modules/billing/admin.py
|
|
# Commenting out to avoid conflicts
|
|
# @admin.register(Invoice)
|
|
# class InvoiceAdmin(AccountAdminMixin, admin.ModelAdmin):
|
|
# ...existing implementation...
|
|
|
|
|
|
# Payment - DUPLICATE - Registered in modules/billing/admin.py with full approval workflow
|
|
# Commenting out to avoid conflicts
|
|
# @admin.register(Payment)
|
|
# class PaymentAdmin(AccountAdminMixin, admin.ModelAdmin):
|
|
# ...existing implementation...
|
|
|
|
|
|
# CreditPackage - DUPLICATE - Registered in modules/billing/admin.py
|
|
# Commenting out to avoid conflicts
|
|
# @admin.register(CreditPackage)
|
|
# class CreditPackageAdmin(admin.ModelAdmin):
|
|
# ...existing implementation...
|
|
|
|
|
|
# PaymentMethodConfig and AccountPaymentMethod are kept here as they're not duplicated
|
|
# or have minimal implementations that don't conflict
|
|
|
|
from import_export.admin import ExportMixin
|
|
from import_export import resources
|
|
|
|
|
|
class AccountPaymentMethodResource(resources.ModelResource):
|
|
"""Resource class for exporting Account Payment Methods"""
|
|
class Meta:
|
|
model = AccountPaymentMethod
|
|
fields = ('id', 'display_name', 'type', 'account__name', 'is_default',
|
|
'is_enabled', 'is_verified', 'country_code', 'created_at')
|
|
export_order = fields
|
|
|
|
|
|
@admin.register(AccountPaymentMethod)
|
|
class AccountPaymentMethodAdmin(ExportMixin, Igny8ModelAdmin):
|
|
resource_class = AccountPaymentMethodResource
|
|
list_display = [
|
|
'display_name',
|
|
'type',
|
|
'account',
|
|
'is_default',
|
|
'is_enabled',
|
|
'country_code',
|
|
'is_verified',
|
|
'updated_at',
|
|
]
|
|
list_filter = ['type', 'is_default', 'is_enabled', 'is_verified', 'country_code']
|
|
search_fields = ['display_name', 'account__name', 'account__id']
|
|
readonly_fields = ['created_at', 'updated_at']
|
|
actions = [
|
|
'bulk_enable',
|
|
'bulk_disable',
|
|
'bulk_set_default',
|
|
'bulk_delete_methods',
|
|
]
|
|
fieldsets = (
|
|
('Payment Method', {
|
|
'fields': ('account', 'type', 'display_name', 'is_default', 'is_enabled', 'is_verified', 'country_code')
|
|
}),
|
|
('Instructions / Metadata', {
|
|
'fields': ('instructions', 'metadata')
|
|
}),
|
|
('Timestamps', {
|
|
'fields': ('created_at', 'updated_at'),
|
|
'classes': ('collapse',)
|
|
}),
|
|
)
|
|
def bulk_enable(self, request, queryset):
|
|
updated = queryset.update(is_enabled=True)
|
|
self.message_user(request, f'{updated} payment method(s) enabled.', messages.SUCCESS)
|
|
bulk_enable.short_description = 'Enable selected payment methods'
|
|
|
|
def bulk_disable(self, request, queryset):
|
|
updated = queryset.update(is_enabled=False)
|
|
self.message_user(request, f'{updated} payment method(s) disabled.', messages.SUCCESS)
|
|
bulk_disable.short_description = 'Disable selected payment methods'
|
|
|
|
def bulk_set_default(self, request, queryset):
|
|
from django import forms
|
|
|
|
if 'apply' in request.POST:
|
|
method_id = request.POST.get('payment_method')
|
|
if method_id:
|
|
method = AccountPaymentMethod.objects.get(pk=method_id)
|
|
# Unset all others for this account
|
|
AccountPaymentMethod.objects.filter(account=method.account).update(is_default=False)
|
|
method.is_default = True
|
|
method.save()
|
|
self.message_user(request, f'{method.display_name} set as default for {method.account.name}.', messages.SUCCESS)
|
|
return
|
|
|
|
class PaymentMethodForm(forms.Form):
|
|
payment_method = forms.ModelChoiceField(
|
|
queryset=queryset,
|
|
label="Select Payment Method to Set as Default"
|
|
)
|
|
|
|
from django.shortcuts import render
|
|
return render(request, 'admin/bulk_action_form.html', {
|
|
'title': 'Set Default Payment Method',
|
|
'queryset': queryset,
|
|
'form': PaymentMethodForm(),
|
|
'action': 'bulk_set_default',
|
|
})
|
|
bulk_set_default.short_description = 'Set as default'
|
|
|
|
def bulk_delete_methods(self, request, queryset):
|
|
count = queryset.count()
|
|
queryset.delete()
|
|
self.message_user(request, f'{count} payment method(s) deleted.', messages.SUCCESS)
|
|
bulk_delete_methods.short_description = 'Delete selected payment methods' |