18
18
import datetime
19
19
from django .db import transaction
20
20
from django .contrib .postgres .aggregates import ArrayAgg
21
- from django .urls import reverse_lazy
21
+ from django .http import HttpResponseRedirect
22
+ from django .urls import reverse , reverse_lazy
22
23
23
24
from nav .models .manage import Netbox
24
25
from nav .bulkparse import NetboxBulkParser
25
26
from nav .bulkimport import NetboxImporter
26
27
28
+ from nav .web .message import new_message , Messages
27
29
from nav .web .seeddb import SeeddbInfo
28
30
from nav .web .seeddb .constants import SEEDDB_EDITABLE_MODELS
29
31
from nav .web .seeddb .page import view_switcher
32
34
from nav .web .seeddb .utils .move import move
33
35
from nav .web .seeddb .utils .bulk import render_bulkimport
34
36
from nav .web .seeddb .page .netbox .forms import NetboxFilterForm , NetboxMoveForm
37
+ from nav .web .utils import (
38
+ generate_qr_codes_as_zip_file ,
39
+ )
35
40
36
41
37
42
class NetboxInfo (SeeddbInfo ):
@@ -55,7 +60,11 @@ class NetboxInfo(SeeddbInfo):
55
60
def netbox (request ):
56
61
"""Controller for landing page for netboxes"""
57
62
return view_switcher (
58
- request , list_view = netbox_list , move_view = netbox_move , delete_view = netbox_delete
63
+ request ,
64
+ list_view = netbox_list ,
65
+ move_view = netbox_move ,
66
+ delete_view = netbox_delete ,
67
+ generate_qr_codes_view = netbox_generate_qr_codes ,
59
68
)
60
69
61
70
@@ -113,6 +122,58 @@ def netbox_pre_deletion_mark(queryset):
113
122
queryset .update (deleted_at = datetime .datetime .now (), up_to_date = False )
114
123
115
124
125
+ def netbox_generate_qr_codes (request ):
126
+ """Controller for generating qr codes for netboxes"""
127
+ if not request .POST .getlist ('object' ):
128
+ new_message (
129
+ request ,
130
+ "You need to select at least one object to generate qr codes for" ,
131
+ Messages .ERROR ,
132
+ )
133
+ return HttpResponseRedirect (reverse ('seeddb-room' ))
134
+
135
+ url_dict = dict ()
136
+ netboxes = Netbox .objects .filter (id__in = request .POST .getlist ('object' ))
137
+
138
+ for netbox in netboxes :
139
+ url = request .build_absolute_uri (
140
+ reverse ('ipdevinfo-details-by-id' , kwargs = {'netbox_id' : netbox .id })
141
+ )
142
+ url_dict [str (netbox )] = url
143
+
144
+ qr_codes_zip_file = generate_qr_codes_as_zip_file (url_dict = url_dict )
145
+
146
+ info = NetboxInfo ()
147
+ query = (
148
+ Netbox .objects .select_related ("room" , "category" , "type" , "organization" )
149
+ .prefetch_related ("profiles" )
150
+ .annotate (profile = ArrayAgg ("profiles__name" ))
151
+ )
152
+ filter_form = NetboxFilterForm (request .GET )
153
+ value_list = (
154
+ 'sysname' ,
155
+ 'room' ,
156
+ 'ip' ,
157
+ 'category' ,
158
+ 'organization' ,
159
+ 'profile' ,
160
+ 'type__name' ,
161
+ )
162
+ return render_list (
163
+ request ,
164
+ query ,
165
+ value_list ,
166
+ 'seeddb-netbox-edit' ,
167
+ edit_url_attr = 'pk' ,
168
+ filter_form = filter_form ,
169
+ template = 'seeddb/list_netbox.html' ,
170
+ extra_context = {
171
+ ** info .template_context ,
172
+ ** {"qr_codes_zip_file" : qr_codes_zip_file },
173
+ },
174
+ )
175
+
176
+
116
177
def netbox_move (request ):
117
178
"""Controller for handling a move request"""
118
179
info = NetboxInfo ()
0 commit comments