4
4
from django .contrib .auth .decorators import login_required
5
5
from django .db .models import Q , Sum , Count
6
6
from .models import Ticket , Comment , HistoricalTicket
7
+ from accounts .models import Profile
8
+ from django .contrib .auth .models import User
7
9
from .forms import AddTicketForm , AddCommentForm , EditTicketForm
8
10
from rest_framework import viewsets
9
11
from .serializers import TicketSerializer
12
+ from django .utils .safestring import mark_safe
10
13
import datetime
11
14
12
15
@@ -41,6 +44,7 @@ def view_ticket(request, pk):
41
44
delta = new_record .diff_against (old_record )
42
45
for change in delta .changes :
43
46
if (change .field != 'upvotes' ):
47
+ # if (change.field != 'upvotes' and change.field != 'image'):
44
48
test_change = {
45
49
'field' : change .field ,
46
50
'new_value' : change .new ,
@@ -70,9 +74,26 @@ def view_ticket(request, pk):
70
74
71
75
@login_required ()
72
76
def add_ticket (request , pk = None ):
73
- """Add Ticket"""
77
+ """User Adds Ticket (Bug or Feature)"""
78
+ # If user has BASIC account, check if user has reached 10 ticket submission limit in current month
79
+ user = get_object_or_404 (User , id = request .user .id )
80
+ user_profile = get_object_or_404 (Profile , user_id = request .user .id )
81
+ if not user_profile .is_pro_user :
82
+ today = datetime .datetime .today ()
83
+ start_date = datetime .datetime (today .year , today .month , 1 )
84
+ end_date = datetime .datetime (
85
+ today .year + int (today .month / 12 ), ((today .month % 12 ) + 1 ), 1 )
86
+ tickets_submitted_this_month = Ticket .objects .filter (
87
+ submitted_by_id = user , created_date__range = (start_date , end_date )).count ()
88
+ if tickets_submitted_this_month > 9 :
89
+ messages .warning (
90
+ request , "You have reached the 10 ticket monthly limit - Go PRO for unlimited tickets." )
91
+ return redirect ('checkout' )
92
+ else :
93
+ 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." ))
74
95
ticket = get_object_or_404 (Ticket , pk = pk ) if pk else None
75
- # On Submit
96
+
76
97
if (request .method == "POST" ):
77
98
form = AddTicketForm (request .POST , request .FILES , instance = ticket )
78
99
if form .is_valid ():
@@ -102,7 +123,7 @@ def upvote(request, pk=None):
102
123
103
124
@login_required ()
104
125
def edit_ticket (request , pk = None ):
105
- """Get and Edit a Ticket"""
126
+ """Edit a Ticket"""
106
127
# Get ticket
107
128
ticket = get_object_or_404 (Ticket , pk = pk ) if pk else None
108
129
if (request .method == "POST" ):
@@ -120,43 +141,31 @@ def edit_ticket(request, pk=None):
120
141
return render (request , 'edit_ticket.html' , {'form' : form , 'ticket' : ticket })
121
142
122
143
123
- # Not currently used
124
- @login_required ()
125
- def delete_ticket (request , pk = None ):
126
- """Deletes a ticket"""
127
- ticket = get_object_or_404 (Ticket , pk = pk ) if pk else None
128
- ticket .delete ()
129
- return redirect (view_tickets )
130
-
131
-
132
144
@login_required ()
133
145
def kanban (request ):
134
- """Show KANBAN View"""
135
- # my_tickets_only = request.GET.get('my_tickets_only')
136
- # if my_tickets_only == 'true':
137
- # tickets = Ticket.objects.filter(
138
- # Q(assigned_to=request.user.id) | Q(submitted_by=request.user.id))
139
- # else:
140
- tickets = Ticket .objects .filter ()
141
-
142
- new_tickets = tickets .filter (
143
- status = 'New' )
144
-
145
- in_progress_tickets = tickets .filter (
146
- status = 'In Progress' )
147
-
148
- resolved_tickets = tickets .filter (
149
- status = 'Resolved' )
150
-
151
- cancelled_tickets = tickets .filter (
152
- status = 'Cancelled' )
153
-
154
- return render (request , 'kanban.html' , {'tickets' : tickets ,
155
- 'new_tickets' : new_tickets ,
156
- 'in_progress_tickets' : in_progress_tickets ,
157
- 'resolved_tickets' : resolved_tickets ,
158
- 'cancelled_tickets' : cancelled_tickets ,
159
- })
146
+ """Show KANBAN View (PRO Feature)"""
147
+ # Ensure user is PRO user
148
+ user = get_object_or_404 (Profile , user_id = request .user .id )
149
+ if not user .is_pro_user :
150
+ messages .warning (
151
+ request , "Upgrade your account to unlock KANBAN View." )
152
+ return redirect ('checkout' )
153
+ else :
154
+ tickets = Ticket .objects .filter ()
155
+ new_tickets = tickets .filter (
156
+ status = 'New' )
157
+ in_progress_tickets = tickets .filter (
158
+ status = 'In Progress' )
159
+ resolved_tickets = tickets .filter (
160
+ status = 'Resolved' )
161
+ cancelled_tickets = tickets .filter (
162
+ 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
+ })
160
169
161
170
162
171
@login_required ()
0 commit comments