-
Ticket: {{ticket.ticket_number}}
+
Ticket #{{ticket.ticket_number}}
+
+ {% if last_ticket_status.status == 'Open' %}
+
+
+
Opened by {{last_ticket_status.added_by.first_name}} at {{last_ticket_status.date_added}}
+
+ {% elif last_ticket_status.status == 'Working On' %}
+
+
+
Updated to 'Working On' by {{last_ticket_status.added_by.first_name}} at {{last_ticket_status.date_added}}
+
+ {% elif last_ticket_status.status == 'Closed' %}
-
Closed by Linode at 20-4-24 16:30
+
Closed by {{last_ticket_status.added_by.first_name}} at {{last_ticket_status.date_added}}
+
+ {% endif %}
+
+
+
+
{{ticket.description}}
+
+
+
+ {% if ticket.ticketattachment_set.all %}
+
+ {% endif %}
+
+
+
+
{% endblock %}
\ No newline at end of file
diff --git a/osinaweb/osinacore/views.py b/osinaweb/osinacore/views.py
index 4e740c20..0835181d 100644
--- a/osinaweb/osinacore/views.py
+++ b/osinaweb/osinacore/views.py
@@ -245,14 +245,6 @@ def customers(request, *args, **kwargs):
return render(request, 'listing_pages/customers.html', context)
-@staff_login_required
-def tickets(request, *args, **kwargs):
-
- context = {
-
- }
-
- return render(request, 'listing_pages/tickets.html', context)
@staff_login_required
@@ -334,6 +326,53 @@ def my_tasks(request, *args, **kwargs):
return render(request, 'listing_pages/tasks.html', context)
+@staff_login_required
+def tickets(request, *args, **kwargs):
+ if request.user.is_superuser:
+ open_tickets = Ticket.objects.filter(status__in=['Open', 'Working On'])
+ closed_tickets = Ticket.objects.filter(status__in=['Closed'])
+ else:
+ open_tickets = Ticket.objects.filter(status__in=['Open', 'Working On'], department=request.user.staffprofile.staff_position.department)
+ closed_tickets = Ticket.objects.filter(status__in=['Closed'], department=request.user.staffprofile.staff_position.department)
+
+ for ticket in open_tickets:
+ unread_updates_count = 0
+ last_update = ticket.ticketupdate_set.exclude(added_by=request.user).order_by('-date_added').first()
+ if last_update:
+ last_update_added_by = last_update.added_by.first_name
+ last_update_date_added = last_update.date_added
+ else:
+ last_update_added_by = None
+ last_update_date_added = None
+
+ for ticket_update in ticket.ticketupdate_set.exclude(added_by=request.user):
+ if not TicketRead.objects.filter(ticket_update=ticket_update, user=request.user, read=True).exists():
+ unread_updates_count += 1
+
+ ticket.unread_updates_count = unread_updates_count
+ ticket.last_update_added_by = last_update_added_by
+ ticket.last_update_date_added = last_update_date_added
+
+ for ticket in closed_tickets:
+ last_update = ticket.ticketupdate_set.order_by('-date_added').first()
+ if last_update:
+ last_update_added_by = last_update.added_by
+ last_update_date_added = last_update.date_added
+ else:
+ last_update_added_by = None
+ last_update_date_added = None
+
+ ticket.last_update_added_by = last_update_added_by
+ ticket.last_update_date_added = last_update_date_added
+
+ context = {
+ 'open_tickets': open_tickets,
+ 'closed_tickets': closed_tickets
+
+ }
+
+ return render(request, 'listing_pages/tickets.html', context)
+
@staff_login_required
def my_notes(request):
@@ -444,13 +483,16 @@ def customerdetails(request, customer_id):
def ticket_details(request, ticket_number):
ticket = get_object_or_404(Ticket, ticket_number=ticket_number)
ticket_updates = TicketUpdate.objects.filter(ticket=ticket).order_by('id')
- for update in ticket_updates:
+ for update in TicketUpdate.objects.filter(ticket=ticket).exclude(added_by=request.user).order_by('id'):
if not TicketRead.objects.filter(ticket_update=update, user=request.user).exists():
TicketRead.objects.create(ticket_update=update, user=request.user, read=True)
+ last_ticket_status = TicketStatusUpdate.objects.all().last()
+
context = {
'ticket' : ticket,
'ticket_updates': ticket_updates,
+ 'last_ticket_status': last_ticket_status
}
diff --git a/osinaweb/static/images/f_invoice_invoice.invoice_number.pdf_ b/osinaweb/static/images/f_invoice_invoice.invoice_number.pdf_
new file mode 100644
index 00000000..18ff943e
Binary files /dev/null and b/osinaweb/static/images/f_invoice_invoice.invoice_number.pdf_ differ
diff --git a/osinaweb/static/js/tickets-filtering.js b/osinaweb/static/js/tickets-filtering.js
new file mode 100644
index 00000000..56537dd5
--- /dev/null
+++ b/osinaweb/static/js/tickets-filtering.js
@@ -0,0 +1,28 @@
+function showOpenTickets() {
+ openTicketsContainer.classList.remove('hidden');
+ closedTicketsContainer.classList.add('hidden');
+ openTicketsLink.classList.add('text-secondosiblue', 'font-semibold');
+ closedTicketsLink.classList.remove('text-secondosiblue', 'font-semibold');
+ closedTicketsLink.classList.add('text-gray-500');
+}
+
+
+function showClosedTickets() {
+ openTicketsContainer.classList.add('hidden');
+ closedTicketsContainer.classList.remove('hidden');
+ closedTicketsLink.classList.add('text-secondosiblue', 'font-semibold');
+ openTicketsLink.classList.remove('text-secondosiblue', 'font-semibold');
+ openTicketsLink.classList.add('text-gray-500');
+}
+
+const openTicketsLink = document.getElementById('openTicketsLink');
+const closedTicketsLink = document.getElementById('closedTicketsLink');
+const openTicketsContainer = document.getElementById('openTickets');
+const closedTicketsContainer = document.getElementById('closedTickets');
+
+
+openTicketsLink.addEventListener('click', showOpenTickets);
+closedTicketsLink.addEventListener('click', showClosedTickets);
+
+
+showOpenTickets();
\ No newline at end of file