2626from apps .ifc_validation_models .models import set_user_context
2727
2828from .tasks import ifc_file_validation_task
29- from .filters import ProducedByAdvancedFilter , ModelProducedByAdvancedFilter , CreatedByAdvancedFilter
29+ from .filters import ProducedByAdvancedFilter
30+ from .filters import ModelProducedByAdvancedFilter
31+ from .filters import CreatedByAdvancedFilter
3032
3133from core import utils
3234from core .filters import AdvancedDateFilter
@@ -62,14 +64,15 @@ class ValidationRequestAdmin(BaseAdmin, NonAdminAddable):
6264 ('Auditing Information' , {"classes" : ("wide" ), "fields" : [("created" , "created_by" ), ("updated" , "updated_by" )]})
6365 ]
6466
65- list_display = ["id" , "public_id" , "file_name" , "file_size_text" , "authoring_tool_link" , "model_link" , "status" , "progress" , "queue_time_text" , "duration_text" , "is_vendor" , "is_vendor_self_declared" , "is_deleted" , "channel " , "created" , "created_by " , "updated" , "updated_by" ]
67+ list_display = ["id" , "public_id" , "file_name" , "file_size_text" , "authoring_tool_link" , "model_link" , "status" , "progress" , "queue_time_text" , "duration_text" , "is_vendor" , "is_vendor_self_declared" , "is_deleted" , "channel_text " , "created" , "created_by_link " , "updated" , "updated_by" ]
6668 readonly_fields = ["id" , "public_id" , "deleted" , "file_name" , "file" , "file_size_text" , "duration_text" , "started" , "completed" , "channel" , "created" , "created_by" , "updated" , "updated_by" ]
6769 date_hierarchy = "created"
6870
6971 list_filter = [
7072 "status" ,
7173 "deleted" ,
72- ModelProducedByAdvancedFilter ,
74+ "model__produced_by" ,
75+ ModelProducedByAdvancedFilter ,
7376 "channel" ,
7477 CreatedByAdvancedFilter ,
7578 "created_by__useradditionalinfo__is_vendor" ,
@@ -137,6 +140,17 @@ def model_link(self, obj):
137140 )
138141 model_link .admin_order_field = 'model'
139142
143+ @admin .display (description = "Created By" )
144+ def created_by_link (self , obj ):
145+
146+ link = reverse ("admin:auth_user_change" , args = [obj .created_by .id ])
147+ return format_html (
148+ '<a href="{}">{}</a>' ,
149+ link ,
150+ obj .created_by .username ,
151+ )
152+ created_by_link .admin_order_field = 'created_by'
153+
140154 @admin .display (description = "Duration (sec)" )
141155 def duration_text (self , obj ):
142156
@@ -179,6 +193,11 @@ def file_size_text(self, obj):
179193
180194 return utils .format_human_readable_file_size (obj .size )
181195
196+ @admin .display (description = "Channel" )
197+ def channel_text (self , obj ):
198+ return obj .get_channel_display ().upper ()
199+ channel_text .admin_order_field = 'channel'
200+
182201 @admin .action (
183202 description = "Permanently delete selected Validation Requests" ,
184203 permissions = ["hard_delete" ]
@@ -321,7 +340,7 @@ class ValidationTaskAdmin(BaseAdmin, NonAdminAddable):
321340 ('Auditing Information' , {"classes" : ("wide" ), "fields" : ["created" , "updated" ]})
322341 ]
323342
324- list_display = ["id" , "public_id" , "request" , "type" , "status" , "progress" , "started" , "ended" , "queue_time_text" , " duration_text" , "created" , "updated" ]
343+ list_display = ["id" , "public_id" , "request" , "type" , "status" , "progress" , "started" , "ended" , "duration_text" , "created" , "updated" ]
325344 readonly_fields = ["id" , "public_id" , "request" , "type" , "process_id" , "process_cmd" , "started" , "ended" , "created" , "updated" ]
326345 date_hierarchy = "created"
327346
@@ -567,11 +586,15 @@ class AuthoringToolAdmin(BaseAdmin):
567586 ('General Information' , {"classes" : ("wide" ), "fields" : ["id" , "company" , "name" , "version" , "nbr_of_requests" ]}),
568587 ('Auditing Information' , {"classes" : ("wide" ), "fields" : [("created" , "updated" )]})
569588 ]
570- list_display = ["id" , "company_link" , "name" , "version" , "nbr_of_requests " , "created" , "updated" ]
571- readonly_fields = ["id" , "nbr_of_requests" , " created" , "updated" ]
589+ list_display = ["id" , "company_link" , "name" , "version" , "nbr_of_requests_link " , "created" , "updated" ]
590+ readonly_fields = ["id" , "created" , "updated" ]
572591 list_filter = ["company" , ('created' , AdvancedDateFilter ), ('updated' , AdvancedDateFilter )]
573592 search_fields = ("name" , "version" , "company__name" )
574593
594+ def get_queryset (self , request ):
595+ qs = super ().get_queryset (request )
596+ return qs .annotate (nbr_of_requests = Count ('models' )) # good proxy, no direct link to Validation Request
597+
575598 @admin .display (description = "Company" )
576599 def company_link (self , obj ):
577600
@@ -586,14 +609,18 @@ def company_link(self, obj):
586609 )
587610 company_link .admin_order_field = 'company'
588611
589- def get_queryset (self , request ):
590- qs = super ().get_queryset (request )
591- return qs .annotate (nbr_of_requests = Count ('models' )) # good proxy, no direct link to Validation Request
592-
593612 @admin .display (description = "# Requests" )
594- def nbr_of_requests (self , obj ):
595- return obj .nbr_of_requests
596- nbr_of_requests .admin_order_field = 'nbr_of_requests'
613+ def nbr_of_requests_link (self , obj ):
614+
615+ link = reverse ("admin:ifc_validation_models_validationrequest_changelist" )
616+ query_string = '?model__produced_by__exact=' + str (obj .id )
617+ return format_html (
618+ '<a href="{}{}" title="Click to show a filtered list of Validation Requests for this Authoring Tool">{}</a>' ,
619+ link ,
620+ query_string ,
621+ obj .nbr_of_requests
622+ )
623+ nbr_of_requests_link .admin_order_field = 'nbr_of_requests'
597624
598625
599626class UserAdditionalInfoInlineAdmin (admin .StackedInline ):
@@ -613,7 +640,7 @@ class CustomUserAdmin(UserAdmin, BaseAdmin):
613640
614641 inlines = [ UserAdditionalInfoInlineAdmin ]
615642
616- list_display = ["id" , "username" , "email" , "first_name" , "last_name" , "is_active" , "is_staff" , "company_link" , "is_vendor" , "is_vendor_self_declared" , "nbr_of_requests " , "date_joined" , "last_login" ]
643+ list_display = ["id" , "username" , "email" , "first_name" , "last_name" , "is_active" , "is_staff" , "company_link" , "is_vendor" , "is_vendor_self_declared" , "nbr_of_requests_link " , "date_joined" , "last_login" ]
617644 list_filter = [
618645 'is_staff' ,
619646 'is_superuser' ,
@@ -668,9 +695,17 @@ def is_vendor_self_declared(self, obj):
668695 is_vendor_self_declared .admin_order_field = 'useradditionalinfo__is_vendor_self_declared'
669696
670697 @admin .display (description = "# Requests" )
671- def nbr_of_requests (self , obj ):
672- return obj .nbr_of_requests
673- nbr_of_requests .admin_order_field = 'nbr_of_requests'
698+ def nbr_of_requests_link (self , obj ):
699+
700+ link = reverse ("admin:ifc_validation_models_validationrequest_changelist" )
701+ query_string = '?created_by__exact=' + str (obj .id )
702+ return format_html (
703+ '<a href="{}{}" title="Click to show a filtered list of Validation Requests for this User">{}</a>' ,
704+ link ,
705+ query_string ,
706+ obj .nbr_of_requests
707+ )
708+ nbr_of_requests_link .admin_order_field = 'nbr_of_requests'
674709
675710 @admin .action (
676711 description = "Remove Company & is_vendor status from selected users" ,
0 commit comments