admin.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from django.contrib import admin
  2. from .models import (
  3. Document, Cost, Good, CostUse, GoodUse, Service, ServiceUse)
  4. @admin.register(Document)
  5. class DocumentAdmin(admin.ModelAdmin):
  6. list_display = ('name', 'date', 'type')
  7. class GoodUseInline(admin.TabularInline):
  8. model = GoodUse
  9. extra = 1
  10. class CostUseInline(admin.TabularInline):
  11. model = CostUse
  12. extra = 1
  13. class ServiceUseInline(admin.TabularInline):
  14. model = ServiceUse
  15. extra = 1
  16. fk_name = 'service'
  17. class DirectDocumentFilter(admin.SimpleListFilter):
  18. title = 'Document'
  19. parameter_name = 'document'
  20. def queryset(self, request, queryset):
  21. document = self.value()
  22. if not document:
  23. return queryset
  24. else:
  25. return queryset.filter(document=document)
  26. def lookups(self, request, model_admin):
  27. for i in Document.objects.all():
  28. yield i.pk, str(i)
  29. @admin.register(Cost)
  30. class CostAdmin(admin.ModelAdmin):
  31. list_display = ('__str__', 'price', 'document')
  32. list_filter = [DirectDocumentFilter]
  33. @admin.register(Good)
  34. class GoodAdmin(admin.ModelAdmin):
  35. list_display = (
  36. '__str__', 'price', 'document',
  37. 'provisioning_duration', 'monthly_provision')
  38. list_filter = [DirectDocumentFilter]
  39. @admin.register(Service)
  40. class ServiceAdmin(admin.ModelAdmin):
  41. list_display = (
  42. 'name', 'subscriptions_count', 'document',
  43. 'monthly_unit_cost', 'new_subscriber_cost')
  44. inlines = (CostUseInline, GoodUseInline, ServiceUseInline)
  45. list_filter = [DirectDocumentFilter]
  46. def monthly_unit_cost(self, obj):
  47. return '{:.2f}€'.format(obj.get_prices()['unit_recurring_price'])
  48. def new_subscriber_cost(self, obj):
  49. return '{:.2f}€'.format(obj.get_prices()['total_goods_value_share'])
  50. fieldsets = (
  51. (None, {
  52. 'fields': (
  53. ('name', 'document'), 'description', 'subscriptions_count'),
  54. }),
  55. ('Ré-utilisabilité', {
  56. 'fields': ('reusable',)
  57. })
  58. )