|
@@ -64,10 +64,31 @@ class InvoiceDetailInlineReadOnly(admin.StackedInline):
|
|
|
return result
|
|
|
|
|
|
|
|
|
-class PaymentInline(admin.StackedInline):
|
|
|
+class PaymentInlineAdd(admin.StackedInline):
|
|
|
model = Payment
|
|
|
extra = 0
|
|
|
fields = (('date', 'payment_mean', 'amount'),)
|
|
|
+ can_delete = False
|
|
|
+
|
|
|
+ verbose_name_plural = "Add a payment"
|
|
|
+
|
|
|
+ def has_change_permission(self, request):
|
|
|
+ return False
|
|
|
+
|
|
|
+
|
|
|
+class PaymentInlineReadOnly(admin.StackedInline):
|
|
|
+ model = Payment
|
|
|
+ extra = 0
|
|
|
+ fields = PaymentInlineAdd.fields
|
|
|
+ can_delete = False
|
|
|
+ verbose_name = None
|
|
|
+ verbose_name_plural = "Linked payments"
|
|
|
+
|
|
|
+ def has_add_permission(self, request):
|
|
|
+ return False
|
|
|
+
|
|
|
+ def get_readonly_fields(self, request, obj=None):
|
|
|
+ return flatten_fieldsets(self.declared_fieldsets)
|
|
|
|
|
|
|
|
|
class InvoiceAdmin(admin.ModelAdmin):
|
|
@@ -112,7 +133,10 @@ class InvoiceAdmin(admin.ModelAdmin):
|
|
|
else:
|
|
|
inlines = [InvoiceDetailInline]
|
|
|
|
|
|
- inlines += [PaymentInline]
|
|
|
+ inlines += [PaymentInlineReadOnly]
|
|
|
+
|
|
|
+ if obj.status == 'open' and obj.validated:
|
|
|
+ inlines += [PaymentInlineAdd]
|
|
|
|
|
|
for inline_class in inlines:
|
|
|
inline = inline_class(self.model, self.admin_site)
|
|
@@ -170,22 +194,20 @@ class PaymentAdmin(admin.ModelAdmin):
|
|
|
'invoice', 'amount_already_allocated', 'label')
|
|
|
list_display_links = ()
|
|
|
fields = (('member'),
|
|
|
- ('amount', 'payment_mean', 'date', 'label'),
|
|
|
- ('invoice'),
|
|
|
- ('amount_already_allocated'))
|
|
|
+ ('amount', 'payment_mean', 'date', 'label'))
|
|
|
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
|
|
|
+ if not obj:
|
|
|
+ return self.readonly_fields
|
|
|
+
|
|
|
+ # If payment already started to be allocated or already have a member
|
|
|
+ if obj.amount_already_allocated != 0 or obj.member != None:
|
|
|
+ # All fields are readonly
|
|
|
+ return flatten_fieldsets(self.declared_fieldsets)
|
|
|
+ else:
|
|
|
+ return self.readonly_fields
|
|
|
|
|
|
|
|
|
admin.site.register(Invoice, InvoiceAdmin)
|