1
+ from accounts .models import Profile
2
+ import datetime
1
3
from django .shortcuts import render , get_object_or_404 , redirect
2
4
from django .http import HttpResponse , JsonResponse
3
5
from django .contrib import messages
4
6
from django .contrib .auth .decorators import login_required
5
- from django .db .models import Q , Sum , Count
6
- from .models import Ticket , Comment , HistoricalTicket
7
- from accounts .models import Profile
8
7
from django .contrib .auth .models import User
9
- from .forms import AddTicketForm , AddCommentForm , EditTicketForm
8
+ from django .db .models import Q , Sum , Count
9
+ from django .utils .safestring import mark_safe
10
10
from rest_framework import viewsets
11
+ from .forms import AddTicketForm , AddCommentForm , EditTicketForm
12
+ from .models import Ticket , Comment , HistoricalTicket
11
13
from .serializers import TicketSerializer
12
- from django .utils .safestring import mark_safe
13
- import datetime
14
14
15
15
16
- # Django REST API
17
16
class RestView (viewsets .ModelViewSet ):
17
+ """Django REST API as data source for Dashboard page"""
18
18
queryset = Ticket .objects .all ()
19
19
serializer_class = TicketSerializer
20
20
21
- # Dashboard
21
+
22
22
@login_required ()
23
23
def dashboard (request ):
24
+ """Renders Dashboard page with 6 charts"""
24
25
return render (request , 'dashboard.html' )
25
26
26
- # View Tickets
27
+
27
28
@login_required ()
28
29
def view_tickets (request ):
29
- """Display All Tickets"""
30
+ """Renders Tickets page with data table of all tickets """
30
31
tickets = Ticket .objects .filter ()
31
32
return render (request , 'tickets.html' , {'tickets' : tickets })
32
33
33
- # View Single Ticket
34
+
34
35
@login_required ()
35
36
def view_ticket (request , pk ):
36
- """Display single ticket details, change history and comments"""
37
+ """View single ticket details, change history and comments"""
37
38
ticket = get_object_or_404 (Ticket , pk = pk ) if pk else None
38
39
# Change History
39
40
historical_changes = HistoricalTicket .objects .filter (id = pk )
@@ -44,7 +45,6 @@ def view_ticket(request, pk):
44
45
delta = new_record .diff_against (old_record )
45
46
for change in delta .changes :
46
47
if (change .field != 'upvotes' ):
47
- # if (change.field != 'upvotes' and change.field != 'image'):
48
48
test_change = {
49
49
'field' : change .field ,
50
50
'new_value' : change .new ,
@@ -62,7 +62,9 @@ def view_ticket(request, pk):
62
62
if form .is_valid ():
63
63
comment_body = form .cleaned_data .get ("comment_body" )
64
64
comment = Comment (
65
- ticket_id = pk , comment_body = comment_body , user_id = request .user .id )
65
+ ticket_id = pk ,
66
+ comment_body = comment_body ,
67
+ user_id = request .user .id )
66
68
comment .save ()
67
69
messages .info (request , "Comment submitted." )
68
70
return redirect (view_ticket , pk )
@@ -75,23 +77,32 @@ def view_ticket(request, pk):
75
77
@login_required ()
76
78
def add_ticket (request , pk = None ):
77
79
"""User Adds Ticket (Bug or Feature)"""
78
- # If user has BASIC account, check if user has reached 10 ticket submission limit in current month
80
+ """If user has BASIC account, check if user has reached 10 ticket
81
+ submission limit in current month"""
79
82
user = get_object_or_404 (User , id = request .user .id )
80
83
user_profile = get_object_or_404 (Profile , user_id = request .user .id )
81
84
if not user_profile .is_pro_user :
82
85
today = datetime .datetime .today ()
83
86
start_date = datetime .datetime (today .year , today .month , 1 )
84
87
end_date = datetime .datetime (
85
- today .year + int (today .month / 12 ), ((today .month % 12 ) + 1 ), 1 )
88
+ today .year + int (today .month / 12 ),
89
+ ((today .month % 12 ) + 1 ), 1 )
86
90
tickets_submitted_this_month = Ticket .objects .filter (
87
- submitted_by_id = user , created_date__range = (start_date , end_date )).count ()
91
+ submitted_by_id = user ,
92
+ created_date__range = (start_date , end_date )).count ()
88
93
if tickets_submitted_this_month > 9 :
89
94
messages .warning (
90
- request , "You have reached the 10 ticket monthly limit - Go PRO for unlimited tickets." )
95
+ request , ("You have reached the 10 ticket monthly limit"
96
+ " - Go PRO for unlimited tickets." ))
91
97
return redirect ('checkout' )
92
98
else :
93
99
messages .info (
94
- request , mark_safe ("Note: You have submitted <b>" + str (tickets_submitted_this_month ) + "</b> of <b>10</b> free tickets this month. <a href='/checkout/'>Go PRO</a> for unlimited." ))
100
+ request , mark_safe (
101
+ ("Note: You have submitted <b>" +
102
+ str (tickets_submitted_this_month ) +
103
+ "</b> of <b>10</b> free tickets this month."
104
+ " <a href='/checkout/'>Go PRO</a> for unlimited."
105
+ )))
95
106
ticket = get_object_or_404 (Ticket , pk = pk ) if pk else None
96
107
97
108
if (request .method == "POST" ):
@@ -111,7 +122,7 @@ def add_ticket(request, pk=None):
111
122
112
123
@login_required ()
113
124
def upvote (request , pk = None ):
114
- """Upvote a Ticket"""
125
+ """Upvote a Ticket. Increments upvotes by 1. """
115
126
ticket = get_object_or_404 (Ticket , pk = pk ) if pk else None
116
127
if (request .method == "POST" ):
117
128
# Increment upvotes by 1
@@ -129,21 +140,25 @@ def edit_ticket(request, pk=None):
129
140
if (request .method == "POST" ):
130
141
form = EditTicketForm (request .POST , request .FILES , instance = ticket )
131
142
if form .is_valid ():
132
- if ticket .status == 'Resolved' and ticket .resolved_date != None :
133
- # If ticket is set to resolved for the first time, set resolved date to now
143
+ if (ticket .status == 'Resolved' and
144
+ ticket .resolved_date is not None ):
145
+ # If ticket is set to resolved for the first time,
146
+ # set resolved date to now
134
147
ticket .resolved_date = datetime .datetime .now ()
135
148
ticket = form .save ()
136
149
messages .info (
137
150
request , "Ticket Updated | " + str (ticket .id ))
138
151
return redirect (view_tickets )
139
152
else :
140
153
form = EditTicketForm (instance = ticket )
141
- return render (request , 'edit_ticket.html' , {'form' : form , 'ticket' : ticket })
154
+ return render (request , 'edit_ticket.html' ,
155
+ {'form' : form , 'ticket' : ticket })
142
156
143
157
144
158
@login_required ()
145
159
def kanban (request ):
146
- """Show KANBAN View (PRO Feature)"""
160
+ """Show tickets in KANBAN View with columns
161
+ representing ticket status (PRO Feature)"""
147
162
# Ensure user is PRO user
148
163
user = get_object_or_404 (Profile , user_id = request .user .id )
149
164
if not user .is_pro_user :
@@ -160,12 +175,13 @@ def kanban(request):
160
175
status = 'Resolved' )
161
176
cancelled_tickets = tickets .filter (
162
177
status = 'Cancelled' )
163
- return render (request , 'kanban.html' , {'tickets' : tickets ,
164
- 'new_tickets' : new_tickets ,
165
- 'in_progress_tickets' : in_progress_tickets ,
166
- 'resolved_tickets' : resolved_tickets ,
167
- 'cancelled_tickets' : cancelled_tickets ,
168
- })
178
+ return render (request , 'kanban.html' ,
179
+ {'tickets' : tickets ,
180
+ 'new_tickets' : new_tickets ,
181
+ 'in_progress_tickets' : in_progress_tickets ,
182
+ 'resolved_tickets' : resolved_tickets ,
183
+ 'cancelled_tickets' : cancelled_tickets ,
184
+ })
169
185
170
186
171
187
@login_required ()
0 commit comments