Add a list over shop tickets.
This commit is contained in:
parent
4ad2a23158
commit
814cbb4af5
|
@ -57,6 +57,10 @@
|
||||||
<h4 class="list-group-item-heading">Village Gear To Order</h4>
|
<h4 class="list-group-item-heading">Village Gear To Order</h4>
|
||||||
<p class="list-group-item-text">Use this view to generate a list of village gear that needs to be ordered</p>
|
<p class="list-group-item-text">Use this view to generate a list of village gear that needs to be ordered</p>
|
||||||
</a>
|
</a>
|
||||||
|
<a href="{% url 'backoffice:shop_ticket_overview' camp_slug=camp.slug %}" class="list-group-item">
|
||||||
|
<h4 class="list-group-item-heading">Shop Ticket Overview</h4>
|
||||||
|
<p class="list-group-item-text">Use this to list shop tickets</p>
|
||||||
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if perms.camps.economyteam_permission %}
|
{% if perms.camps.economyteam_permission %}
|
||||||
|
|
39
src/backoffice/templates/shop_ticket_overview.html
Normal file
39
src/backoffice/templates/shop_ticket_overview.html
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
{% load commonmark %}
|
||||||
|
{% load static from staticfiles %}
|
||||||
|
{% load imageutils %}
|
||||||
|
{% block extra_head %}
|
||||||
|
<script src="{% static "js/jquery.dataTables.min.js" %}"></script>
|
||||||
|
<link rel="stylesheet" href="{% static 'css/jquery.dataTables.min.css' %}">
|
||||||
|
{% endblock extra_head %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<h2>Shop Tickets</h2>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<span class="clearfix"></span>
|
||||||
|
<hr class="clearfix"/>
|
||||||
|
|
||||||
|
<table class="table table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Ticket Type</th>
|
||||||
|
<th>Product</th>
|
||||||
|
<th>Order comment</th>
|
||||||
|
<th>Paid?</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for ticket in shop_tickets %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ ticket.ticket_type.name }}</td>
|
||||||
|
<td>{{ ticket.product.name }}</td>
|
||||||
|
<td>{{ ticket.order.comment|default:"None" }}</td>
|
||||||
|
<td>{{ ticket.order.paid }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
|
@ -12,6 +12,7 @@ urlpatterns = [
|
||||||
path("", ScanTicketsView.as_view(), name="scan_tickets"),
|
path("", ScanTicketsView.as_view(), name="scan_tickets"),
|
||||||
]
|
]
|
||||||
)),
|
)),
|
||||||
|
path("shop_tickets/", ShopTicketOverview.as_view(), name="shop_ticket_overview"),
|
||||||
path("product_handout/", ProductHandoutView.as_view(), name="product_handout"),
|
path("product_handout/", ProductHandoutView.as_view(), name="product_handout"),
|
||||||
path("badge_handout/", BadgeHandoutView.as_view(), name="badge_handout"),
|
path("badge_handout/", BadgeHandoutView.as_view(), name="badge_handout"),
|
||||||
path("ticket_checkin/", TicketCheckinView.as_view(), name="ticket_checkin"),
|
path("ticket_checkin/", TicketCheckinView.as_view(), name="ticket_checkin"),
|
||||||
|
|
|
@ -1,27 +1,26 @@
|
||||||
import logging, os
|
import logging
|
||||||
|
import os
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
|
|
||||||
import qrcode
|
from django.conf import settings
|
||||||
from django.contrib.auth.mixins import PermissionRequiredMixin, UserPassesTestMixin, LoginRequiredMixin
|
from django.contrib import messages
|
||||||
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.views.generic import TemplateView, ListView, DetailView
|
from django.core.files import File
|
||||||
from django.views.generic.edit import CreateView, UpdateView, DeleteView
|
from django.db.models import Sum
|
||||||
from django.shortcuts import redirect, get_object_or_404
|
from django.shortcuts import redirect, get_object_or_404
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.contrib import messages
|
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.db.models import Sum
|
from django.views.generic import TemplateView, ListView, DetailView
|
||||||
from django.conf import settings
|
from django.views.generic.edit import CreateView, UpdateView, DeleteView
|
||||||
from django.core.files import File
|
|
||||||
|
|
||||||
from camps.mixins import CampViewMixin
|
from camps.mixins import CampViewMixin
|
||||||
from shop.models import OrderProductRelation, Invoice, Order
|
from economy.models import Chain, Credebtor, Expense, Reimbursement, Revenue
|
||||||
from tickets.models import ShopTicket, SponsorTicket, DiscountTicket
|
|
||||||
from profiles.models import Profile
|
from profiles.models import Profile
|
||||||
from program.models import SpeakerProposal, EventProposal
|
from program.models import SpeakerProposal, EventProposal
|
||||||
from economy.models import Chain, Credebtor, Expense, Reimbursement, Revenue
|
from shop.models import OrderProductRelation, Order
|
||||||
from utils.mixins import RaisePermissionRequiredMixin
|
|
||||||
from teams.models import Team
|
from teams.models import Team
|
||||||
|
from tickets.models import ShopTicket, SponsorTicket, DiscountTicket, TicketType
|
||||||
from .mixins import *
|
from .mixins import *
|
||||||
|
|
||||||
logger = logging.getLogger("bornhack.%s" % __name__)
|
logger = logging.getLogger("bornhack.%s" % __name__)
|
||||||
|
@ -633,3 +632,17 @@ class ScanTicketsView(LoginRequiredMixin, InfoTeamPermissionMixin, CampViewMixin
|
||||||
order = Order.objects.get(id=request.POST.get('mark_as_paid'))
|
order = Order.objects.get(id=request.POST.get('mark_as_paid'))
|
||||||
order.mark_as_paid()
|
order.mark_as_paid()
|
||||||
messages.success(request, "Order #{} has been marked as paid!".format(order.id))
|
messages.success(request, "Order #{} has been marked as paid!".format(order.id))
|
||||||
|
|
||||||
|
|
||||||
|
class ShopTicketOverview(LoginRequiredMixin, CampViewMixin, ListView):
|
||||||
|
|
||||||
|
model = ShopTicket
|
||||||
|
|
||||||
|
template_name = "shop_ticket_overview.html"
|
||||||
|
|
||||||
|
context_object_name = "shop_tickets"
|
||||||
|
|
||||||
|
def get_context_data(self, *, object_list=None, **kwargs):
|
||||||
|
kwargs['ticket_types'] = TicketType.objects.filter(camp=self.camp)
|
||||||
|
return super().get_context_data(object_list=object_list, **kwargs)
|
||||||
|
|
||||||
|
|
|
@ -56,10 +56,13 @@ class BaseTicket(CampRelatedModel, UUIDModel):
|
||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
|
camp_filter = 'ticket_type__camp'
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def camp(self):
|
def camp(self):
|
||||||
return self.ticket_type.camp
|
return self.ticket_type.camp
|
||||||
|
|
||||||
|
|
||||||
def save(self, **kwargs):
|
def save(self, **kwargs):
|
||||||
self.token = self._get_token()
|
self.token = self._get_token()
|
||||||
self.badge_token = self._get_badge_token()
|
self.badge_token = self._get_badge_token()
|
||||||
|
|
Loading…
Reference in a new issue