1+ from accounts .models import Profile
2+ import datetime
13from django .shortcuts import render , get_object_or_404 , redirect
24from django .http import HttpResponse , JsonResponse
35from django .contrib import messages
46from 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
87from 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
1010from rest_framework import viewsets
11+ from .forms import AddTicketForm , AddCommentForm , EditTicketForm
12+ from .models import Ticket , Comment , HistoricalTicket
1113from .serializers import TicketSerializer
12- from django .utils .safestring import mark_safe
13- import datetime
1414
1515
16- # Django REST API
1716class RestView (viewsets .ModelViewSet ):
17+ """Django REST API as data source for Dashboard page"""
1818 queryset = Ticket .objects .all ()
1919 serializer_class = TicketSerializer
2020
21- # Dashboard
21+
2222@login_required ()
2323def dashboard (request ):
24+ """Renders Dashboard page with 6 charts"""
2425 return render (request , 'dashboard.html' )
2526
26- # View Tickets
27+
2728@login_required ()
2829def view_tickets (request ):
29- """Display All Tickets"""
30+ """Renders Tickets page with data table of all tickets """
3031 tickets = Ticket .objects .filter ()
3132 return render (request , 'tickets.html' , {'tickets' : tickets })
3233
33- # View Single Ticket
34+
3435@login_required ()
3536def view_ticket (request , pk ):
36- """Display single ticket details, change history and comments"""
37+ """View single ticket details, change history and comments"""
3738 ticket = get_object_or_404 (Ticket , pk = pk ) if pk else None
3839 # Change History
3940 historical_changes = HistoricalTicket .objects .filter (id = pk )
@@ -44,7 +45,6 @@ def view_ticket(request, pk):
4445 delta = new_record .diff_against (old_record )
4546 for change in delta .changes :
4647 if (change .field != 'upvotes' ):
47- # if (change.field != 'upvotes' and change.field != 'image'):
4848 test_change = {
4949 'field' : change .field ,
5050 'new_value' : change .new ,
@@ -62,7 +62,9 @@ def view_ticket(request, pk):
6262 if form .is_valid ():
6363 comment_body = form .cleaned_data .get ("comment_body" )
6464 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 )
6668 comment .save ()
6769 messages .info (request , "Comment submitted." )
6870 return redirect (view_ticket , pk )
@@ -75,23 +77,32 @@ def view_ticket(request, pk):
7577@login_required ()
7678def add_ticket (request , pk = None ):
7779 """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"""
7982 user = get_object_or_404 (User , id = request .user .id )
8083 user_profile = get_object_or_404 (Profile , user_id = request .user .id )
8184 if not user_profile .is_pro_user :
8285 today = datetime .datetime .today ()
8386 start_date = datetime .datetime (today .year , today .month , 1 )
8487 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 )
8690 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 ()
8893 if tickets_submitted_this_month > 9 :
8994 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." ))
9197 return redirect ('checkout' )
9298 else :
9399 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+ )))
95106 ticket = get_object_or_404 (Ticket , pk = pk ) if pk else None
96107
97108 if (request .method == "POST" ):
@@ -111,7 +122,7 @@ def add_ticket(request, pk=None):
111122
112123@login_required ()
113124def upvote (request , pk = None ):
114- """Upvote a Ticket"""
125+ """Upvote a Ticket. Increments upvotes by 1. """
115126 ticket = get_object_or_404 (Ticket , pk = pk ) if pk else None
116127 if (request .method == "POST" ):
117128 # Increment upvotes by 1
@@ -129,21 +140,25 @@ def edit_ticket(request, pk=None):
129140 if (request .method == "POST" ):
130141 form = EditTicketForm (request .POST , request .FILES , instance = ticket )
131142 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
134147 ticket .resolved_date = datetime .datetime .now ()
135148 ticket = form .save ()
136149 messages .info (
137150 request , "Ticket Updated | " + str (ticket .id ))
138151 return redirect (view_tickets )
139152 else :
140153 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 })
142156
143157
144158@login_required ()
145159def kanban (request ):
146- """Show KANBAN View (PRO Feature)"""
160+ """Show tickets in KANBAN View with columns
161+ representing ticket status (PRO Feature)"""
147162 # Ensure user is PRO user
148163 user = get_object_or_404 (Profile , user_id = request .user .id )
149164 if not user .is_pro_user :
@@ -160,12 +175,13 @@ def kanban(request):
160175 status = 'Resolved' )
161176 cancelled_tickets = tickets .filter (
162177 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+ })
169185
170186
171187@login_required ()
0 commit comments