mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
Allow blocked seats to be booked in backend (#5585)
This commit is contained in:
committed by
GitHub
parent
29906c6288
commit
0b46982e6d
@@ -280,13 +280,13 @@ class Seat(models.Model):
|
|||||||
|
|
||||||
def is_available(self, ignore_cart=None, ignore_orderpos=None, ignore_voucher_id=None,
|
def is_available(self, ignore_cart=None, ignore_orderpos=None, ignore_voucher_id=None,
|
||||||
sales_channel='web',
|
sales_channel='web',
|
||||||
ignore_distancing=False, distance_ignore_cart_id=None):
|
ignore_distancing=False, distance_ignore_cart_id=None, always_allow_blocked=False):
|
||||||
from .orders import Order
|
from .orders import Order
|
||||||
from .organizer import SalesChannel
|
from .organizer import SalesChannel
|
||||||
|
|
||||||
if isinstance(sales_channel, SalesChannel):
|
if isinstance(sales_channel, SalesChannel):
|
||||||
sales_channel = sales_channel.identifier
|
sales_channel = sales_channel.identifier
|
||||||
if self.blocked and sales_channel not in self.event.settings.seating_allow_blocked_seats_for_channel:
|
if not always_allow_blocked and self.blocked and sales_channel not in self.event.settings.seating_allow_blocked_seats_for_channel:
|
||||||
return False
|
return False
|
||||||
opqs = self.orderposition_set.filter(
|
opqs = self.orderposition_set.filter(
|
||||||
order__status__in=[Order.STATUS_PENDING, Order.STATUS_PAID],
|
order__status__in=[Order.STATUS_PENDING, Order.STATUS_PAID],
|
||||||
|
|||||||
@@ -1670,13 +1670,14 @@ class OrderChangeManager:
|
|||||||
AddBlockOperation = namedtuple('AddBlockOperation', ('position', 'block_name', 'ignore_from_quota_while_blocked'))
|
AddBlockOperation = namedtuple('AddBlockOperation', ('position', 'block_name', 'ignore_from_quota_while_blocked'))
|
||||||
RemoveBlockOperation = namedtuple('RemoveBlockOperation', ('position', 'block_name', 'ignore_from_quota_while_blocked'))
|
RemoveBlockOperation = namedtuple('RemoveBlockOperation', ('position', 'block_name', 'ignore_from_quota_while_blocked'))
|
||||||
|
|
||||||
def __init__(self, order: Order, user=None, auth=None, notify=True, reissue_invoice=True):
|
def __init__(self, order: Order, user=None, auth=None, notify=True, reissue_invoice=True, allow_blocked_seats=False):
|
||||||
self.order = order
|
self.order = order
|
||||||
self.user = user
|
self.user = user
|
||||||
self.auth = auth
|
self.auth = auth
|
||||||
self.event = order.event
|
self.event = order.event
|
||||||
self.split_order = None
|
self.split_order = None
|
||||||
self.reissue_invoice = reissue_invoice
|
self.reissue_invoice = reissue_invoice
|
||||||
|
self.allow_blocked_seats = allow_blocked_seats
|
||||||
self._committed = False
|
self._committed = False
|
||||||
self._totaldiff_guesstimate = 0
|
self._totaldiff_guesstimate = 0
|
||||||
self._quotadiff = Counter()
|
self._quotadiff = Counter()
|
||||||
@@ -2197,7 +2198,7 @@ class OrderChangeManager:
|
|||||||
for seat, diff in self._seatdiff.items():
|
for seat, diff in self._seatdiff.items():
|
||||||
if diff <= 0:
|
if diff <= 0:
|
||||||
continue
|
continue
|
||||||
if not seat.is_available(sales_channel=self.order.sales_channel, ignore_distancing=True) or diff > 1:
|
if not seat.is_available(sales_channel=self.order.sales_channel, ignore_distancing=True, always_allow_blocked=self.allow_blocked_seats) or diff > 1:
|
||||||
raise OrderError(self.error_messages['seat_unavailable'].format(seat=seat.name))
|
raise OrderError(self.error_messages['seat_unavailable'].format(seat=seat.name))
|
||||||
|
|
||||||
if self.event.has_subevents:
|
if self.event.has_subevents:
|
||||||
|
|||||||
@@ -2146,7 +2146,8 @@ class OrderChange(OrderView):
|
|||||||
self.order,
|
self.order,
|
||||||
user=self.request.user,
|
user=self.request.user,
|
||||||
notify=notify,
|
notify=notify,
|
||||||
reissue_invoice=self.other_form.cleaned_data['reissue_invoice'] if self.other_form.is_valid() else True
|
reissue_invoice=self.other_form.cleaned_data['reissue_invoice'] if self.other_form.is_valid() else True,
|
||||||
|
allow_blocked_seats=True,
|
||||||
)
|
)
|
||||||
form_valid = (self._process_add_fees(ocm) and
|
form_valid = (self._process_add_fees(ocm) and
|
||||||
self._process_add_positions(ocm) and
|
self._process_add_positions(ocm) and
|
||||||
|
|||||||
Reference in New Issue
Block a user