44from django .contrib .auth .decorators import login_required
55from django .db .models import Q , Sum , Count
66from .models import Ticket , Comment , HistoricalTicket
7+ from accounts .models import Profile
8+ from django .contrib .auth .models import User
79from .forms import AddTicketForm , AddCommentForm , EditTicketForm
810from rest_framework import viewsets
911from .serializers import TicketSerializer
12+ from django .utils .safestring import mark_safe
1013import datetime
1114
1215
@@ -41,6 +44,7 @@ def view_ticket(request, pk):
4144 delta = new_record .diff_against (old_record )
4245 for change in delta .changes :
4346 if (change .field != 'upvotes' ):
47+ # if (change.field != 'upvotes' and change.field != 'image'):
4448 test_change = {
4549 'field' : change .field ,
4650 'new_value' : change .new ,
@@ -70,9 +74,26 @@ def view_ticket(request, pk):
7074
7175@login_required ()
7276def 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." ))
7495 ticket = get_object_or_404 (Ticket , pk = pk ) if pk else None
75- # On Submit
96+
7697 if (request .method == "POST" ):
7798 form = AddTicketForm (request .POST , request .FILES , instance = ticket )
7899 if form .is_valid ():
@@ -102,7 +123,7 @@ def upvote(request, pk=None):
102123
103124@login_required ()
104125def edit_ticket (request , pk = None ):
105- """Get and Edit a Ticket"""
126+ """Edit a Ticket"""
106127 # Get ticket
107128 ticket = get_object_or_404 (Ticket , pk = pk ) if pk else None
108129 if (request .method == "POST" ):
@@ -120,43 +141,31 @@ def edit_ticket(request, pk=None):
120141 return render (request , 'edit_ticket.html' , {'form' : form , 'ticket' : ticket })
121142
122143
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-
132144@login_required ()
133145def 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+ })
160169
161170
162171@login_required ()
0 commit comments