admin.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. from django.contrib import admin
  2. from django.core.urlresolvers import reverse
  3. from django.utils.safestring import mark_safe
  4. from .models import (
  5. Document, Cost, Good, CostUse, GoodUse, Service, ServiceUse)
  6. @admin.register(Document)
  7. class DocumentAdmin(admin.ModelAdmin):
  8. list_display = ('name', 'date', 'type')
  9. actions = ['copy']
  10. def copy(self, request, queryset):
  11. for i in queryset.all():
  12. new = i.copy()
  13. edit_url = reverse('admin:costs_document_change', args=(new.pk,))
  14. self.message_user(
  15. request, mark_safe(
  16. "{} copié, pensez à <a href=\"{}\">L'éditer</a>".format(
  17. new, edit_url)))
  18. copy.short_description = 'Copier'
  19. class GoodUseInline(admin.TabularInline):
  20. model = GoodUse
  21. extra = 1
  22. class CostUseInline(admin.TabularInline):
  23. model = CostUse
  24. extra = 1
  25. class ServiceUseInline(admin.TabularInline):
  26. model = ServiceUse
  27. extra = 1
  28. fk_name = 'service'
  29. class DirectDocumentFilter(admin.SimpleListFilter):
  30. title = 'Document'
  31. parameter_name = 'document'
  32. def queryset(self, request, queryset):
  33. document = self.value()
  34. if not document:
  35. return queryset
  36. else:
  37. return queryset.filter(document=document)
  38. def lookups(self, request, model_admin):
  39. for i in Document.objects.all():
  40. yield i.pk, str(i)
  41. @admin.register(Cost)
  42. class CostAdmin(admin.ModelAdmin):
  43. list_display = ('__str__', 'price', 'document')
  44. list_filter = [DirectDocumentFilter]
  45. @admin.register(Good)
  46. class GoodAdmin(admin.ModelAdmin):
  47. list_display = (
  48. '__str__', 'price', 'document',
  49. 'provisioning_duration', 'monthly_provision')
  50. list_filter = [DirectDocumentFilter]
  51. @admin.register(Service)
  52. class ServiceAdmin(admin.ModelAdmin):
  53. list_display = (
  54. 'name', 'subscriptions_count', 'document',
  55. 'monthly_unit_cost', 'new_subscriber_cost')
  56. inlines = (CostUseInline, GoodUseInline, ServiceUseInline)
  57. list_filter = [DirectDocumentFilter]
  58. def monthly_unit_cost(self, obj):
  59. return '{:.2f}€'.format(obj.get_prices()['unit_recurring_price'])
  60. def new_subscriber_cost(self, obj):
  61. return '{:.2f}€'.format(obj.get_prices()['total_goods_value_share'])
  62. fieldsets = (
  63. (None, {
  64. 'fields': (
  65. ('name', 'document'), 'description', 'subscriptions_count'),
  66. }),
  67. ('Ré-utilisabilité', {
  68. 'fields': ('reusable',)
  69. })
  70. )