from django.shortcuts import resolve_url from django.contrib import admin from django.utils.translation import ugettext_lazy as _ from .models import Payment, Subscription def subscr_mark_as_cancelled(modeladmin, request, queryset): queryset.update(status='cancelled') subscr_mark_as_cancelled.short_description = _("Mark as cancelled (do not actually cancel)") class PaymentAdmin(admin.ModelAdmin): model = Payment list_display = ('user', 'backend', 'status', 'amount', 'paid_amount', 'created') list_filter = ('backend_id', 'status') fieldsets = ( (None, { 'fields': ('backend', 'user_link', 'subscription_link', 'time', 'status', 'status_message'), }), (_("Payment Data"), { 'fields': ('amount_fmt', 'paid_amount_fmt', 'backend_extid_link', 'backend_data'), }), ) readonly_fields = ('backend', 'user_link', 'time', 'status', 'status_message', 'amount_fmt', 'paid_amount_fmt', 'subscription_link', 'backend_extid_link', 'backend_data') search_fields = ('user__username', 'user__email', 'backend_extid', 'backend_data') def backend(self, object): return object.backend.backend_verbose_name def backend_extid_link(self, object): ext_url = object.backend.get_ext_url(object) if ext_url: return '%s' % (ext_url, object.backend_extid) return object.backend_extid backend_extid_link.allow_tags = True def amount_fmt(self, object): return '%.2f %s' % (object.amount / 100, object.currency_name) amount_fmt.short_description = _("Amount") def paid_amount_fmt(self, object): return '%.2f %s' % (object.paid_amount / 100, object.currency_name) paid_amount_fmt.short_description = _("Paid amount") def user_link(self, object): change_url = resolve_url('admin:auth_user_change', object.user.id) return '%s' % (change_url, object.user.username) user_link.allow_tags = True user_link.short_description = 'User' def subscription_link(self, object): change_url = resolve_url('admin:payments_subscription_change', object.subscription.id) return '%s' % (change_url, object.subscription.id) subscription_link.allow_tags = True subscription_link.short_description = 'Subscription' class SubscriptionAdmin(admin.ModelAdmin): model = Subscription list_display = ('user', 'created', 'status', 'backend', 'backend_extid') readonly_fields = ('user_link', 'backend', 'period', 'created', 'status', 'last_confirmed_payment', 'payments_links', 'backend_extid_link', 'backend_data') actions = (subscr_mark_as_cancelled,) fieldsets = ( (None, { 'fields': ('backend', 'user_link', 'period', 'payments_links', 'status', 'last_confirmed_payment'), }), (_("Payment Data"), { 'fields': ('backend_extid_link', 'backend_data'), }), ) def backend(self, object): return object.backend.backend_verbose_name def user_link(self, object): change_url = resolve_url('admin:auth_user_change', object.user.id) return '%s' % (change_url, object.user.username) user_link.allow_tags = True user_link.short_description = 'User' def payments_links(self, object): fmt = '%d payments' payments_url = resolve_url('admin:payments_payment_changelist') count = Payment.objects.filter(subscription=object).count() return fmt % (payments_url, object.id, count) payments_links.allow_tags = True payments_links.short_description = 'Payments' def backend_extid_link(self, object): ext_url = object.backend.get_subscr_ext_url(object) if ext_url: return '%s' % (ext_url, object.backend_extid) return object.backend_extid backend_extid_link.allow_tags = True admin.site.register(Payment, PaymentAdmin) admin.site.register(Subscription, SubscriptionAdmin)