mirror of
https://github.com/pretix/pretix.git
synced 2026-05-07 15:34:02 +00:00
Removed CleanerVersion layer [backwards-incompatible!]
This commit is contained in:
@@ -168,7 +168,7 @@ class QuestionsStep(QuestionsViewMixin, CartMixin, TemplateFlowStep):
|
||||
aw.question_id: aw.answer for aw in cp.answers.all()
|
||||
}
|
||||
for q in cp.item.questions.all():
|
||||
if q.required and q.identity not in answ:
|
||||
if q.required and q.id not in answ:
|
||||
if warn:
|
||||
messages.warning(request, _('Please fill in answers to all required questions.'))
|
||||
return False
|
||||
@@ -193,7 +193,7 @@ class PaymentStep(QuestionsViewMixin, CartMixin, TemplateFlowStep):
|
||||
|
||||
@cached_property
|
||||
def _total_order_value(self):
|
||||
return CartPosition.objects.current.filter(
|
||||
return CartPosition.objects.filter(
|
||||
Q(cart_id=self.request.session.session_key) & Q(event=self.request.event)
|
||||
).aggregate(sum=Sum('price'))['sum']
|
||||
|
||||
@@ -300,15 +300,15 @@ class ConfirmStep(CartMixin, AsyncAction, TemplateFlowStep):
|
||||
|
||||
def post(self, request):
|
||||
self.request = request
|
||||
return self.do(self.request.event.identity, self.payment_provider.identifier,
|
||||
[p.identity for p in self.positions], request.session.get('email'),
|
||||
return self.do(self.request.event.id, self.payment_provider.identifier,
|
||||
[p.id for p in self.positions], request.session.get('email'),
|
||||
translation.get_language())
|
||||
|
||||
def get_success_message(self, value):
|
||||
return None
|
||||
|
||||
def get_success_url(self, value):
|
||||
order = Order.objects.current.get(identity=value)
|
||||
order = Order.objects.get(id=value)
|
||||
return self.get_order_url(order)
|
||||
|
||||
def get_error_message(self, exception):
|
||||
|
||||
@@ -42,7 +42,7 @@ class QuestionsForm(forms.Form):
|
||||
answers = [
|
||||
a for a
|
||||
in (cartpos.answers.all() if cartpos else orderpos.answers.all())
|
||||
if a.question_id == q.identity
|
||||
if a.question_id == q.id
|
||||
]
|
||||
if answers:
|
||||
initial = answers[0].answer
|
||||
@@ -73,4 +73,4 @@ class QuestionsForm(forms.Form):
|
||||
if answers:
|
||||
# Cache the answer object for later use
|
||||
field.answer = answers[0]
|
||||
self.fields['question_%s' % q.identity] = field
|
||||
self.fields['question_%s' % q.id] = field
|
||||
|
||||
@@ -26,7 +26,7 @@ class EventMiddleware:
|
||||
path = "/" + request.get_full_path().split("/", 2)[-1]
|
||||
return redirect(path)
|
||||
|
||||
request.event = Event.objects.current.filter(
|
||||
request.event = Event.objects.filter(
|
||||
slug=url.kwargs['event'],
|
||||
organizer=request.organizer,
|
||||
).select_related('organizer')[0]
|
||||
@@ -34,13 +34,13 @@ class EventMiddleware:
|
||||
else:
|
||||
# We are on our main domain
|
||||
if 'event' in url.kwargs and 'organizer' in url.kwargs:
|
||||
request.event = Event.objects.current.filter(
|
||||
request.event = Event.objects.filter(
|
||||
slug=url.kwargs['event'],
|
||||
organizer__slug=url.kwargs['organizer']
|
||||
).select_related('organizer')[0]
|
||||
request.organizer = request.event.organizer
|
||||
elif 'organizer' in url.kwargs:
|
||||
request.organizer = Organizer.objects.current.filter(
|
||||
request.organizer = Organizer.objects.filter(
|
||||
slug=url.kwargs['organizer']
|
||||
)[0]
|
||||
else:
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a data-toggle="collapse" href="#cp{{ form.pos.identity }}"
|
||||
<a data-toggle="collapse" href="#cp{{ form.pos.id }}"
|
||||
data-parent="#questions_accordion">
|
||||
<strong>{{ form.pos.item.name }}</strong>
|
||||
{% if form.pos.variation %}
|
||||
@@ -35,7 +35,7 @@
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="cp{{ form.pos.identity }}"
|
||||
<div id="cp{{ form.pos.id }}"
|
||||
class="panel-collapse collapsed in">
|
||||
<div class="panel-body">
|
||||
{% bootstrap_form form layout="horizontal" %}
|
||||
|
||||
@@ -26,10 +26,10 @@
|
||||
method="post">
|
||||
{% csrf_token %}
|
||||
{% if line.variation %}
|
||||
<input type="hidden" name="variation_{{ line.item.identity }}_{{ line.variation.identity }}"
|
||||
<input type="hidden" name="variation_{{ line.item.id }}_{{ line.variation.id }}"
|
||||
value="1" />
|
||||
{% else %}
|
||||
<input type="hidden" name="item_{{ line.item.identity }}"
|
||||
<input type="hidden" name="item_{{ line.item.id }}"
|
||||
value="1" />
|
||||
{% endif %}
|
||||
<button class="btn btn-mini btn-link"><i class="fa fa-minus"></i></button>
|
||||
@@ -41,10 +41,10 @@
|
||||
method="post" data-asynctask>
|
||||
{% csrf_token %}
|
||||
{% if line.variation %}
|
||||
<input type="hidden" name="variation_{{ line.item.identity }}_{{ line.variation.identity }}"
|
||||
<input type="hidden" name="variation_{{ line.item.id }}_{{ line.variation.id }}"
|
||||
value="1" />
|
||||
{% else %}
|
||||
<input type="hidden" name="item_{{ line.item.identity }}"
|
||||
<input type="hidden" name="item_{{ line.item.id }}"
|
||||
value="1" />
|
||||
{% endif %}
|
||||
<button class="btn btn-mini btn-link"><i class="fa fa-plus"></i></button>
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
{% if item.picture %}
|
||||
<a href="{{ item.picture.url }}" class="productpicture"
|
||||
data-title="{{ item.name }}"
|
||||
data-lightbox="{{ item.identity }}">
|
||||
data-lightbox="{{ item.id }}">
|
||||
<img src="{{ item.picture|thumbnail_url:'productlist' }}"
|
||||
alt="{{ item.name }}" />
|
||||
</a>
|
||||
@@ -109,7 +109,7 @@
|
||||
<div class="col-md-2 col-xs-6 availability-box available">
|
||||
<input type="number" class="form-control input-item-count" placeholder="0" min="0"
|
||||
max="{{ var.cached_availability.1 }}"
|
||||
name="variation_{{ item.identity }}_{{ var.variation.identity }}">
|
||||
name="variation_{{ item.id }}_{{ var.variation.id }}">
|
||||
</div>
|
||||
{% else %}
|
||||
{% include "pretixpresale/event/fragment_availability.html" with avail=var.cached_availability.0 %}
|
||||
@@ -125,7 +125,7 @@
|
||||
{% if item.picture %}
|
||||
<a href="{{ item.picture.url }}" class="productpicture"
|
||||
data-title="{{ item.name }}"
|
||||
data-lightbox="{{ item.identity }}">
|
||||
data-lightbox="{{ item.id }}">
|
||||
<img src="{{ item.picture|thumbnail_url:'productlist' }}"
|
||||
alt="{{ item.name }}" />
|
||||
</a>
|
||||
@@ -144,7 +144,7 @@
|
||||
{% if item.cached_availability.0 == 100 %}
|
||||
<div class="col-md-2 col-xs-6 availability-box available">
|
||||
<input type="number" class="form-control input-item-count" placeholder="0" min="0"
|
||||
max="{{ item.cached_availability.1 }}" name="item_{{ item.identity }}">
|
||||
max="{{ item.cached_availability.1 }}" name="item_{{ item.id }}">
|
||||
</div>
|
||||
{% else %}
|
||||
{% include "pretixpresale/event/fragment_availability.html" with avail=item.cached_availability.0 %}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a data-toggle="collapse" href="#cp{{ form.pos.identity }}"
|
||||
<a data-toggle="collapse" href="#cp{{ form.pos.id }}"
|
||||
data-parent="#questions_accordion">
|
||||
<strong>{{ form.pos.item }}</strong>
|
||||
{% if form.pos.variation %}
|
||||
@@ -24,7 +24,7 @@
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="cp{{ form.pos.identity }}"
|
||||
<div id="cp{{ form.pos.id }}"
|
||||
class="panel-collapse collapsed {% if forloop.counter0 == 0 %}in{% endif %}">
|
||||
<div class="panel-body">
|
||||
{% bootstrap_form form layout="horizontal" %}
|
||||
|
||||
@@ -14,7 +14,7 @@ class CartMixin:
|
||||
"""
|
||||
A list of this users cart position
|
||||
"""
|
||||
return list(CartPosition.objects.current.filter(
|
||||
return list(CartPosition.objects.filter(
|
||||
cart_id=self.request.session.session_key, event=self.request.event
|
||||
).order_by(
|
||||
'item', 'variation'
|
||||
@@ -26,7 +26,7 @@ class CartMixin:
|
||||
))
|
||||
|
||||
def get_cart(self, answers=False, queryset=None, payment_fee=None):
|
||||
queryset = queryset or CartPosition.objects.current.filter(
|
||||
queryset = queryset or CartPosition.objects.filter(
|
||||
cart_id=self.request.session.session_key, event=self.request.event
|
||||
)
|
||||
|
||||
@@ -49,8 +49,8 @@ class CartMixin:
|
||||
def keyfunc(pos):
|
||||
if answers and ((pos.item.admission and self.request.event.settings.attendee_names_asked)
|
||||
or pos.item.questions.all()):
|
||||
return pos.id, "", "", ""
|
||||
return "", pos.item_id, pos.variation_id, pos.price
|
||||
return pos.id, 0, 0, 0
|
||||
return 0, pos.item_id, pos.variation_id, pos.price
|
||||
|
||||
positions = []
|
||||
for k, g in groupby(sorted(list(cartpos), key=keyfunc), key=keyfunc):
|
||||
|
||||
@@ -37,13 +37,13 @@ class CartActionMixin:
|
||||
continue
|
||||
if key.startswith('item_'):
|
||||
try:
|
||||
items.append((key.split("_")[1], None, int(value)))
|
||||
items.append((int(key.split("_")[1]), None, int(value)))
|
||||
except ValueError:
|
||||
messages.error(self.request, _('Please enter numbers only.'))
|
||||
return []
|
||||
elif key.startswith('variation_'):
|
||||
try:
|
||||
items.append((key.split("_")[1], key.split("_")[2], int(value)))
|
||||
items.append((int(key.split("_")[1]), int(key.split("_")[2]), int(value)))
|
||||
except ValueError:
|
||||
messages.error(self.request, _('Please enter numbers only.'))
|
||||
return []
|
||||
@@ -60,7 +60,7 @@ class CartRemove(EventViewMixin, CartActionMixin, View):
|
||||
if not items:
|
||||
return redirect(self.get_error_url())
|
||||
|
||||
remove_items_from_cart(self.request.event.identity, items, self.request.session.session_key)
|
||||
remove_items_from_cart(self.request.event.id, items, self.request.session.session_key)
|
||||
messages.success(self.request, _('Your cart has been updated.'))
|
||||
return redirect(self.get_success_url())
|
||||
|
||||
@@ -81,7 +81,7 @@ class CartAdd(EventViewMixin, CartActionMixin, AsyncAction, View):
|
||||
def post(self, request, *args, **kwargs):
|
||||
items = self._items_from_post_data()
|
||||
if items:
|
||||
return self.do(self.request.event.identity, items, self.request.session.session_key)
|
||||
return self.do(self.request.event.id, items, self.request.session.session_key)
|
||||
else:
|
||||
if 'ajax' in self.request.GET or 'ajax' in self.request.POST:
|
||||
return JsonResponse({
|
||||
|
||||
@@ -59,7 +59,8 @@ class EventIndex(EventViewMixin, CartMixin, TemplateView):
|
||||
# insert categories into a set for uniqueness
|
||||
# a set is unsorted, so sort again by category
|
||||
],
|
||||
key=lambda group: (group[0].position, group[0].identity) if group[0] is not None else (0, "")
|
||||
key=lambda group: (group[0].position, group[0].id) if (
|
||||
group[0] is not None and group[0].id is not None) else (0, 0)
|
||||
)
|
||||
|
||||
context['cart'] = self.get_cart()
|
||||
|
||||
@@ -23,8 +23,8 @@ class OrderDetailMixin:
|
||||
@cached_property
|
||||
def order(self):
|
||||
try:
|
||||
return Order.objects.current.get(secret=self.kwargs['secret'],
|
||||
event=self.request.event, code=self.kwargs['order'])
|
||||
return Order.objects.get(secret=self.kwargs['secret'],
|
||||
event=self.request.event, code=self.kwargs['order'])
|
||||
except Order.DoesNotExist:
|
||||
return None
|
||||
|
||||
@@ -80,7 +80,7 @@ class OrderDetails(EventViewMixin, OrderDetailMixin, CartMixin, TemplateView):
|
||||
ctx['download_buttons'] = self.download_buttons
|
||||
ctx['cart'] = self.get_cart(
|
||||
answers=True,
|
||||
queryset=OrderPosition.objects.current.filter(order=self.order)
|
||||
queryset=OrderPosition.objects.filter(order=self.order)
|
||||
)
|
||||
if self.order.status == Order.STATUS_PENDING:
|
||||
ctx['payment'] = self.payment_provider.order_pending_render(self.request, self.order)
|
||||
@@ -251,9 +251,8 @@ class OrderCancel(EventViewMixin, OrderDetailMixin, TemplateView):
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
order = self.order.clone()
|
||||
order.status = Order.STATUS_CANCELLED
|
||||
order.save()
|
||||
self.order.status = Order.STATUS_CANCELLED
|
||||
self.order.save()
|
||||
return redirect(self.get_order_url())
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
@@ -302,5 +301,5 @@ class OrderDownload(EventViewMixin, OrderDetailMixin, View):
|
||||
cf.save()
|
||||
ct.cachedfile = cf
|
||||
ct.save()
|
||||
generate(self.order.identity, self.output.identifier)
|
||||
generate(self.order.id, self.output.identifier)
|
||||
return redirect(reverse('cachedfile.download', kwargs={'id': ct.cachedfile.id}))
|
||||
|
||||
@@ -20,6 +20,6 @@ class OrganizerIndex(OrganizerViewMixin, ListView):
|
||||
else:
|
||||
query &= Q(Q(date_from__gte=now()) | Q(date_to__gte=now()))
|
||||
order = 'date_from'
|
||||
return Event.objects.current.filter(
|
||||
return Event.objects.filter(
|
||||
Q(organizer=self.request.organizer) & query
|
||||
).order_by(order)
|
||||
|
||||
@@ -17,7 +17,7 @@ class QuestionsViewMixin:
|
||||
cartpos = cr if isinstance(cr, CartPosition) else None
|
||||
orderpos = cr if isinstance(cr, OrderPosition) else None
|
||||
form = QuestionsForm(event=self.request.event,
|
||||
prefix=cr.identity,
|
||||
prefix=cr.id,
|
||||
cartpos=cartpos,
|
||||
orderpos=orderpos,
|
||||
data=(self.request.POST if self.request.method == 'POST' else None))
|
||||
@@ -37,7 +37,6 @@ class QuestionsViewMixin:
|
||||
# answers to the questions / in the CartPosition object
|
||||
for k, v in form.cleaned_data.items():
|
||||
if k == 'attendee_name':
|
||||
form.pos = form.pos.clone()
|
||||
form.pos.attendee_name = v if v != '' else None
|
||||
form.pos.save()
|
||||
elif k.startswith('question_') and v is not None:
|
||||
@@ -48,7 +47,6 @@ class QuestionsViewMixin:
|
||||
if v == '':
|
||||
field.answer.delete()
|
||||
else:
|
||||
field.answer = field.answer.clone()
|
||||
field.answer.answer = v
|
||||
field.answer.save()
|
||||
elif v != '':
|
||||
|
||||
Reference in New Issue
Block a user