1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- # -*- coding: utf-8 -*-
- from django import forms
- from django.contrib import admin
- from coin.filtering_queryset import LimitedAdminInlineMixin
- from coin.billing.models import Invoice, InvoiceDetail, Payment
- from coin.offers.models import OfferSubscription
- import autocomplete_light
- class InvoiceDetailInline(LimitedAdminInlineMixin, admin.StackedInline):
- model = InvoiceDetail
- extra = 0
- fields = (('label', 'amount', 'quantity', 'tax'),
- ('offersubscription','period_from', 'period_to'))
- def get_filters(self, obj):
- """
- Le champ "Abonnement" est filtré afin de n'afficher que les abonnements
- du membre choisi dans la facture. Si pas de membre alors renvoi
- une liste vide
- """
- if obj and obj.member:
- return (('offersubscription', {'member':obj.member}),)
- else:
- return (('offersubscription', None),)
- def get_readonly_fields(self, request, obj=None):
- if not obj or not obj.member:
- return self.readonly_fields + ('offersubscription',)
- return self.readonly_fields
- class PaymentInline(admin.StackedInline):
- model = Payment
- extra = 0
- fields = (('date', 'payment_mean', 'amount'),)
- class InvoiceAdmin(admin.ModelAdmin):
- list_display = ('number', 'date', 'status', 'amount', 'member')
- list_display_links = ('number', 'date')
- inlines = [InvoiceDetailInline, PaymentInline]
- fields = (('number', 'date', 'status'),
- ('date_due'),
- ('member'),
- 'amount')
- readonly_fields = ('amount',)
- form = autocomplete_light.modelform_factory(Invoice)
- def get_formsets(self, request, obj=None):
- """
- Lorsque l'on est en création d'objet (obj=None) alors de renvoi pas les
- formsets des inlines.
- Cela permet de ne pas afficher les champs détails de facture et paiement
- tant que la facture n'a pas été enregistré.
- Cette subtilité permet de s'assurer que le select "Abonnement" de
- InvoiceDetail est bien filtré avec le member de la facture
- """
- if obj:
- for _ in super(InvoiceAdmin, self).get_formsets(request, obj):
- yield _
- else:
- pass
- admin.site.register(Invoice, InvoiceAdmin)
|