admin.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.contrib import admin
  4. from django.utils.translation import ugettext_lazy as _
  5. from coin.isp_database.models import ISPInfo, RegisteredOffice, OtherWebsite, ChatRoom, CoveredArea, BankInfo
  6. extra_desc = _("These fields are not part of the db.ffdn.org specification, "
  7. "but are used in a few places on the website.")
  8. bankinfo_desc = _("Bank information are not part of the db.ffdn.org "
  9. "specification, but are used in a few places on the website "
  10. "(for billing, for instance).")
  11. class SingleInstanceAdminMixin(object):
  12. """Hides the "Add" button when there is already an instance"""
  13. def has_add_permission(self, request):
  14. num_objects = self.model.objects.count()
  15. if num_objects >= 1:
  16. return False
  17. return super(SingleInstanceAdminMixin, self).has_add_permission(request)
  18. class RegisteredOfficeInline(admin.StackedInline):
  19. model = RegisteredOffice
  20. extra = 0
  21. fieldsets = (
  22. ('', {'fields': (
  23. ('street_address', 'extended_address', 'post_office_box'),
  24. ('postal_code', 'locality'),
  25. ('region', 'country_name'))}),
  26. ('Extras', {
  27. 'fields': ('siret',),
  28. 'description': extra_desc})
  29. )
  30. class OtherWebsiteInline(admin.StackedInline):
  31. model = OtherWebsite
  32. extra = 0
  33. class ChatRoomInline(admin.StackedInline):
  34. model = ChatRoom
  35. extra = 0
  36. class CoveredAreaInline(admin.StackedInline):
  37. model = CoveredArea
  38. extra = 0
  39. class BankInfoInline(admin.StackedInline):
  40. model = BankInfo
  41. extra = 0
  42. fieldsets = (('', {
  43. 'fields': ('iban', 'bic', 'bank_name', 'check_order'),
  44. 'description': bankinfo_desc
  45. }),)
  46. class ISPInfoAdmin(SingleInstanceAdminMixin, admin.ModelAdmin):
  47. model = ISPInfo
  48. fieldsets = (
  49. ('General', {'fields': (
  50. ('name', 'shortname'),
  51. 'description',
  52. 'logoURL',
  53. ('creationDate', 'ffdnMemberSince'),
  54. 'progressStatus',
  55. ('latitude', 'longitude'))}),
  56. ('Contact', {'fields': (
  57. ('email', 'mainMailingList'),
  58. 'website')}),
  59. ('Extras', {
  60. 'fields': ('administrative_email', 'support_email', 'lists_url'),
  61. 'description': extra_desc
  62. }),
  63. )
  64. inlines = (RegisteredOfficeInline, BankInfoInline, OtherWebsiteInline, ChatRoomInline,
  65. CoveredAreaInline)
  66. save_on_top = True
  67. admin.site.register(ISPInfo, ISPInfoAdmin)