123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- from django.contrib import admin
- from django.core.urlresolvers import reverse
- from django.utils.safestring import mark_safe
- from .models import (
- Document, Cost, Good, CostUse, GoodUse, Service, ServiceUse)
- @admin.register(Document)
- class DocumentAdmin(admin.ModelAdmin):
- list_display = ('name', 'date', 'type')
- actions = ['copy']
- def copy(self, request, queryset):
- for i in queryset.all():
- new = i.copy()
- edit_url = reverse('admin:costs_document_change', args=(new.pk,))
- self.message_user(
- request, mark_safe(
- "{} copié, pensez à <a href=\"{}\">L'éditer</a>".format(
- new, edit_url)))
- copy.short_description = 'Copier'
- class AbstractUseInline(admin.TabularInline):
- """ An inline with some knowledge of the currently edited Document
- """
- def formfield_for_foreignkey(self, db_field, request, **kwargs):
- if db_field.name == "resource" and getattr(request, 'document', None):
- kwargs["queryset"] = db_field.related_model.objects.filter(
- document=request.document)
- return super().formfield_for_foreignkey(
- db_field, request, **kwargs)
- class GoodUseInline(AbstractUseInline):
- model = GoodUse
- extra = 1
- class CostUseInline(AbstractUseInline):
- model = CostUse
- extra = 1
- class ServiceUseInline(AbstractUseInline):
- model = ServiceUse
- extra = 1
- fk_name = 'service'
- class DirectDocumentFilter(admin.SimpleListFilter):
- title = 'Document'
- parameter_name = 'document'
- def queryset(self, request, queryset):
- document = self.value()
- if not document:
- return queryset
- else:
- return queryset.filter(document=document)
- def lookups(self, request, model_admin):
- for i in Document.objects.all():
- yield i.pk, str(i)
- @admin.register(Cost)
- class CostAdmin(admin.ModelAdmin):
- list_display = ('__str__', 'price', 'document')
- list_filter = [DirectDocumentFilter]
- @admin.register(Good)
- class GoodAdmin(admin.ModelAdmin):
- list_display = (
- '__str__', 'price', 'document',
- 'provisioning_duration', 'monthly_provision')
- list_filter = [DirectDocumentFilter]
- @admin.register(Service)
- class ServiceAdmin(admin.ModelAdmin):
- list_display = (
- 'name', 'subscriptions_count', 'document',
- 'monthly_unit_cost', 'new_subscriber_cost')
- inlines = (CostUseInline, GoodUseInline, ServiceUseInline)
- list_filter = [DirectDocumentFilter]
- def get_form(self, request, obj=None, **kwargs):
- if obj:
- # anotate the request with some context
- request.document = obj.document
- return super().get_form(request, obj, **kwargs)
- def monthly_unit_cost(self, obj):
- return '{:.2f}€'.format(obj.get_prices()['unit_recurring_price'])
- def new_subscriber_cost(self, obj):
- return '{:.2f}€'.format(obj.get_prices()['total_goods_value_share'])
- fieldsets = (
- (None, {
- 'fields': (
- ('name', 'document'), 'description', 'subscriptions_count'),
- }),
- ('Ré-utilisabilité', {
- 'fields': ('reusable',)
- })
- )
|