tables.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import django_tables2 as tables
  2. from utilities.tables import (
  3. BaseTable, ButtonsColumn, ContentTypeColumn, LinkedCountColumn, linkify_phone, MarkdownColumn, MPTTColumn,
  4. TagColumn, ToggleColumn,
  5. )
  6. from .models import *
  7. __all__ = (
  8. 'ContactAssignmentTable',
  9. 'ContactGroupTable',
  10. 'ContactRoleTable',
  11. 'ContactTable',
  12. 'TenantColumn',
  13. 'TenantGroupTable',
  14. 'TenantTable',
  15. )
  16. #
  17. # Table columns
  18. #
  19. class TenantColumn(tables.TemplateColumn):
  20. """
  21. Include the tenant description.
  22. """
  23. template_code = """
  24. {% if record.tenant %}
  25. <a href="{{ record.tenant.get_absolute_url }}" title="{{ record.tenant.description }}">{{ record.tenant }}</a>
  26. {% elif record.vrf.tenant %}
  27. <a href="{{ record.vrf.tenant.get_absolute_url }}" title="{{ record.vrf.tenant.description }}">{{ record.vrf.tenant }}</a>*
  28. {% else %}
  29. &mdash;
  30. {% endif %}
  31. """
  32. def __init__(self, *args, **kwargs):
  33. super().__init__(template_code=self.template_code, *args, **kwargs)
  34. def value(self, value):
  35. return str(value) if value else None
  36. #
  37. # Tenants
  38. #
  39. class TenantGroupTable(BaseTable):
  40. pk = ToggleColumn()
  41. name = MPTTColumn(
  42. linkify=True
  43. )
  44. tenant_count = LinkedCountColumn(
  45. viewname='tenancy:tenant_list',
  46. url_params={'group_id': 'pk'},
  47. verbose_name='Tenants'
  48. )
  49. tags = TagColumn(
  50. url_name='tenancy:tenantgroup_list'
  51. )
  52. actions = ButtonsColumn(TenantGroup)
  53. class Meta(BaseTable.Meta):
  54. model = TenantGroup
  55. fields = (
  56. 'pk', 'id', 'name', 'tenant_count', 'description', 'slug', 'tags', 'actions', 'created', 'last_updated',
  57. )
  58. default_columns = ('pk', 'name', 'tenant_count', 'description', 'actions')
  59. class TenantTable(BaseTable):
  60. pk = ToggleColumn()
  61. name = tables.Column(
  62. linkify=True
  63. )
  64. group = tables.Column(
  65. linkify=True
  66. )
  67. comments = MarkdownColumn()
  68. tags = TagColumn(
  69. url_name='tenancy:tenant_list'
  70. )
  71. class Meta(BaseTable.Meta):
  72. model = Tenant
  73. fields = ('pk', 'id', 'name', 'slug', 'group', 'description', 'comments', 'tags', 'created', 'last_updated',)
  74. default_columns = ('pk', 'name', 'group', 'description')
  75. #
  76. # Contacts
  77. #
  78. class ContactGroupTable(BaseTable):
  79. pk = ToggleColumn()
  80. name = MPTTColumn(
  81. linkify=True
  82. )
  83. contact_count = LinkedCountColumn(
  84. viewname='tenancy:contact_list',
  85. url_params={'role_id': 'pk'},
  86. verbose_name='Contacts'
  87. )
  88. tags = TagColumn(
  89. url_name='tenancy:contactgroup_list'
  90. )
  91. actions = ButtonsColumn(ContactGroup)
  92. class Meta(BaseTable.Meta):
  93. model = ContactGroup
  94. fields = ('pk', 'name', 'contact_count', 'description', 'slug', 'tags', 'actions', 'created', 'last_updated',)
  95. default_columns = ('pk', 'name', 'contact_count', 'description', 'actions')
  96. class ContactRoleTable(BaseTable):
  97. pk = ToggleColumn()
  98. name = tables.Column(
  99. linkify=True
  100. )
  101. actions = ButtonsColumn(ContactRole)
  102. class Meta(BaseTable.Meta):
  103. model = ContactRole
  104. fields = ('pk', 'name', 'description', 'slug', 'actions', 'created', 'last_updated',)
  105. default_columns = ('pk', 'name', 'description', 'actions')
  106. class ContactTable(BaseTable):
  107. pk = ToggleColumn()
  108. name = tables.Column(
  109. linkify=True
  110. )
  111. group = tables.Column(
  112. linkify=True
  113. )
  114. phone = tables.Column(
  115. linkify=linkify_phone,
  116. )
  117. comments = MarkdownColumn()
  118. assignment_count = tables.Column(
  119. verbose_name='Assignments'
  120. )
  121. tags = TagColumn(
  122. url_name='tenancy:tenant_list'
  123. )
  124. class Meta(BaseTable.Meta):
  125. model = Contact
  126. fields = (
  127. 'pk', 'name', 'group', 'title', 'phone', 'email', 'address', 'comments', 'assignment_count', 'tags',
  128. 'created', 'last_updated',
  129. )
  130. default_columns = ('pk', 'name', 'group', 'assignment_count', 'title', 'phone', 'email')
  131. class ContactAssignmentTable(BaseTable):
  132. pk = ToggleColumn()
  133. content_type = ContentTypeColumn(
  134. verbose_name='Object Type'
  135. )
  136. object = tables.Column(
  137. linkify=True,
  138. orderable=False
  139. )
  140. contact = tables.Column(
  141. linkify=True
  142. )
  143. role = tables.Column(
  144. linkify=True
  145. )
  146. actions = ButtonsColumn(
  147. model=ContactAssignment,
  148. buttons=('edit', 'delete')
  149. )
  150. class Meta(BaseTable.Meta):
  151. model = ContactAssignment
  152. fields = ('pk', 'content_type', 'object', 'contact', 'role', 'priority', 'actions')
  153. default_columns = ('pk', 'content_type', 'object', 'contact', 'role', 'priority', 'actions')