Browse Source

Tweaking admin interface for payments

Alexandre Aubin 7 years ago
parent
commit
158b7b86b9
1 changed files with 34 additions and 5 deletions
  1. 34 5
      coin/billing/admin.py

+ 34 - 5
coin/billing/admin.py

@@ -71,7 +71,8 @@ class PaymentInline(admin.StackedInline):
 
 
 class InvoiceAdmin(admin.ModelAdmin):
-    list_display = ('number', 'date', 'status', 'amount', 'member', 'validated')
+    list_display = ('number', 'date', 'status', 'amount', 'member',
+                    'validated')
     list_display_links = ('number', 'date')
     fields = (('number', 'date', 'status'),
               ('date_due'),
@@ -144,11 +145,16 @@ class InvoiceAdmin(admin.ModelAdmin):
         Vue appelée lorsque l'admin souhaite valider une facture et
         générer son pdf
         """
+
         # TODO : Add better perm here
         if request.user.is_superuser:
             invoice = get_invoice_from_id_or_number(id)
-            invoice.validate()
-            messages.success(request, 'La facture a été validée.')
+            if invoice.amount() == 0:
+                messages.error(request, 'Une facture validée ne peut pas avoir'
+                                        ' un total de 0€.')
+            else:
+                invoice.validate()
+                messages.success(request, 'La facture a été validée.')
         else:
             messages.error(
                 request, 'Vous n\'avez pas l\'autorisation de valider '
@@ -158,6 +164,29 @@ class InvoiceAdmin(admin.ModelAdmin):
                                             args=(id,)))
 
 
-admin.site.register(Invoice, InvoiceAdmin)
+class PaymentAdmin(admin.ModelAdmin):
+
+    list_display = ('name', 'member', 'payment_mean', 'amount', 'date',
+                    'invoice', 'amount_already_allocated', 'label')
+    list_display_links = ()
+    fields = (('member'),
+              ('amount', 'payment_mean', 'date', 'label'),
+              ('invoice'),
+              ('amount_already_allocated'))
+    readonly_fields = ('amount_already_allocated', 'label')
+    form = autocomplete_light.modelform_factory(Payment, fields='__all__')
+
+    def get_readonly_fields(self, request, obj=None):
+        if obj:
+            if self.declared_fieldsets:
+                return flatten_fieldsets(self.declared_fieldsets)
+            else:
+                return list(set(
+                    [field.name for field in self.opts.local_fields] +
+                    [field.name for field in self.opts.local_many_to_many]
+                ))
+        return self.readonly_fields
 
-admin.site.register(Payment)
+
+admin.site.register(Invoice, InvoiceAdmin)
+admin.site.register(Payment, PaymentAdmin)