123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- # -*- 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')
- 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)
|