Coverage for tenancy/tables/contacts.py: 100%
49 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1import django_tables2 as tables
2from django.utils.translation import gettext_lazy as _
3from django_tables2.utils import Accessor
5from netbox.tables import NestedGroupModelTable, NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
6from tenancy.models import *
7from utilities.tables import linkify_phone
9__all__ = (
10 'ContactAssignmentTable',
11 'ContactGroupTable',
12 'ContactRoleTable',
13 'ContactTable',
14)
17class ContactGroupTable(NestedGroupModelTable):
18 contact_count = columns.LinkedCountColumn(
19 viewname='tenancy:contact_list',
20 url_params={'group_id': 'pk'},
21 verbose_name=_('Contacts')
22 )
23 tags = columns.TagColumn(
24 url_name='tenancy:contactgroup_list'
25 )
27 class Meta(NestedGroupModelTable.Meta):
28 model = ContactGroup
29 fields = (
30 'pk', 'name', 'parent', 'contact_count', 'description', 'comments', 'slug', 'tags', 'created',
31 'last_updated', 'actions',
32 )
33 default_columns = ('pk', 'name', 'contact_count', 'description')
36class ContactRoleTable(OrganizationalModelTable):
37 name = tables.Column(
38 verbose_name=_('Name'),
39 linkify=True
40 )
41 tags = columns.TagColumn(
42 url_name='tenancy:contactrole_list'
43 )
45 class Meta(OrganizationalModelTable.Meta):
46 model = ContactRole
47 fields = ('pk', 'name', 'description', 'comments', 'slug', 'tags', 'created', 'last_updated', 'actions')
48 default_columns = ('pk', 'name', 'description')
51class ContactTable(PrimaryModelTable):
52 name = tables.Column(
53 verbose_name=_('Name'),
54 linkify=True
55 )
56 groups = columns.ManyToManyColumn(
57 verbose_name=_('Groups'),
58 linkify_item=('tenancy:contactgroup', {'pk': tables.A('pk')})
59 )
60 phone = tables.Column(
61 verbose_name=_('Phone'),
62 linkify=linkify_phone,
63 )
64 assignment_count = columns.LinkedCountColumn(
65 viewname='tenancy:contactassignment_list',
66 url_params={'contact_id': 'pk'},
67 verbose_name=_('Assignments')
68 )
69 tags = columns.TagColumn(
70 url_name='tenancy:contact_list'
71 )
73 class Meta(PrimaryModelTable.Meta):
74 model = Contact
75 fields = (
76 'pk', 'name', 'groups', 'title', 'phone', 'email', 'address', 'link', 'description', 'comments',
77 'assignment_count', 'tags', 'created', 'last_updated',
78 )
79 default_columns = ('pk', 'name', 'groups', 'assignment_count', 'title', 'phone', 'email')
82class ContactAssignmentTable(NetBoxTable):
83 object_type = columns.ContentTypeColumn(
84 verbose_name=_('Object Type')
85 )
86 object = tables.Column(
87 verbose_name=_('Object'),
88 linkify=True,
89 orderable=False
90 )
91 contact = tables.Column(
92 verbose_name=_('Contact'),
93 linkify=True
94 )
95 role = tables.Column(
96 verbose_name=_('Role'),
97 linkify=True
98 )
99 contact_groups = columns.ManyToManyColumn(
100 accessor=Accessor('contact__groups'),
101 verbose_name=_('Groups'),
102 linkify_item=('tenancy:contactgroup', {'pk': tables.A('pk')})
103 )
104 contact_title = tables.Column(
105 accessor=Accessor('contact__title'),
106 verbose_name=_('Contact Title')
107 )
108 contact_phone = tables.Column(
109 accessor=Accessor('contact__phone'),
110 verbose_name=_('Contact Phone'),
111 linkify=linkify_phone,
112 )
113 contact_email = tables.EmailColumn(
114 accessor=Accessor('contact__email'),
115 verbose_name=_('Contact Email'),
116 )
117 contact_address = tables.Column(
118 accessor=Accessor('contact__address'),
119 verbose_name=_('Contact Address')
120 )
121 contact_link = tables.Column(
122 accessor=Accessor('contact__link'),
123 verbose_name=_('Contact Link'),
124 linkify=lambda value: value,
125 )
126 contact_description = tables.Column(
127 accessor=Accessor('contact__description'),
128 verbose_name=_('Contact Description')
129 )
130 tags = columns.TagColumn(
131 url_name='tenancy:contactassignment_list'
132 )
133 actions = columns.ActionsColumn(
134 actions=('edit', 'delete')
135 )
137 class Meta(NetBoxTable.Meta):
138 model = ContactAssignment
139 fields = (
140 'pk', 'object_type', 'object', 'contact', 'role', 'priority', 'contact_title', 'contact_phone',
141 'contact_email', 'contact_address', 'contact_link', 'contact_description', 'contact_groups', 'tags',
142 'actions'
143 )
144 default_columns = (
145 'pk', 'object_type', 'object', 'contact', 'role', 'priority', 'contact_email', 'contact_phone'
146 )