admin.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.contrib import admin
  4. from django.forms import ModelForm
  5. from localflavor.fr.forms import FRPhoneNumberField
  6. from coin.isp_database.models import ISPInfo, RegisteredOffice, OtherWebsite, ChatRoom, CoveredArea, BankInfo
  7. class ISPAdminForm(ModelForm):
  8. class Meta:
  9. model = ISPInfo
  10. exclude = []
  11. phone_number = FRPhoneNumberField(required=False,
  12. help_text='Main contact phone number')
  13. class SingleInstanceAdminMixin(object):
  14. """Hides the "Add" button when there is already an instance"""
  15. def has_add_permission(self, request):
  16. num_objects = self.model.objects.count()
  17. if num_objects >= 1:
  18. return False
  19. return super(SingleInstanceAdminMixin, self).has_add_permission(request)
  20. class RegisteredOfficeInline(admin.StackedInline):
  21. model = RegisteredOffice
  22. extra = 0
  23. fieldsets = (
  24. ('', {'fields': (
  25. ('street_address', 'extended_address', 'post_office_box'),
  26. ('postal_code', 'locality'),
  27. ('region', 'country_name'))}),
  28. ('Extras', {
  29. 'fields': ('siret',),
  30. 'description': 'Ces champs ne font pas partie de la spécification db.ffdn.org mais sont utilisés sur le site'})
  31. )
  32. class OtherWebsiteInline(admin.StackedInline):
  33. model = OtherWebsite
  34. extra = 0
  35. class ChatRoomInline(admin.StackedInline):
  36. model = ChatRoom
  37. extra = 0
  38. class CoveredAreaInline(admin.StackedInline):
  39. model = CoveredArea
  40. extra = 0
  41. class BankInfoInline(admin.StackedInline):
  42. model = BankInfo
  43. extra = 0
  44. fieldsets = (('', {
  45. 'fields': ('iban', 'bic', 'bank_name', 'check_order'),
  46. 'description': (
  47. 'Les coordonnées bancaires ne font pas partie de la'+
  48. ' spécification db.ffdn.org mais sont utilisées par le'+
  49. ' site (facturation notamment).')
  50. }),)
  51. class ISPInfoAdmin(SingleInstanceAdminMixin, admin.ModelAdmin):
  52. model = ISPInfo
  53. fieldsets = (
  54. ('General', {'fields': (
  55. ('name', 'shortname'),
  56. 'description',
  57. 'logoURL',
  58. ('creationDate', 'ffdnMemberSince'),
  59. 'progressStatus',
  60. ('latitude', 'longitude'))}),
  61. ('Contact', {'fields': (
  62. ('email', 'mainMailingList'),
  63. 'website', 'phone_number')}),
  64. ('Extras', {
  65. 'fields': ('administrative_email', 'support_email', 'lists_url'),
  66. 'description':
  67. 'Ces champs ne font pas partie de la spécification db.ffdn.org mais sont utilisés sur le site'
  68. }),
  69. )
  70. inlines = (RegisteredOfficeInline, BankInfoInline, OtherWebsiteInline, ChatRoomInline,
  71. CoveredAreaInline)
  72. save_on_top = True
  73. # Use custom form
  74. form = ISPAdminForm
  75. admin.site.register(ISPInfo, ISPInfoAdmin)