diff --git a/app/api/tickets.py b/app/api/tickets.py index b9f5c86864..6b2db3b779 100644 --- a/app/api/tickets.py +++ b/app/api/tickets.py @@ -53,7 +53,7 @@ def before_post(self, args, kwargs, data): def before_create_object(self, data, view_kwargs): """ - before create method to check if paid ticket has a paymentMethod enabled + before create method to check if paid/donation ticket has a paymentMethod enabled :param data: :param view_kwargs: :return: @@ -77,6 +77,13 @@ def before_create_object(self, data, view_kwargs): "Event having paid ticket must have a payment method", ) + if data.get('type') == 'donation': + if not event.is_payment_enabled(): + raise UnprocessableEntity( + {'event_id': data['event']}, + "Event having donation ticket must have a payment method", + ) + if data.get('sales_ends_at') > event.ends_at: raise UnprocessableEntity( {'sales_ends_at': '/data/attributes/sales-ends-at'}, @@ -225,7 +232,7 @@ def before_get_object(self, view_kwargs): def before_update_object(self, ticket, data, view_kwargs): """ - method to check if paid ticket has payment method before updating ticket object + method to check if paid/donation ticket has payment method before updating ticket object :param ticket: :param data: :param view_kwargs: @@ -248,6 +255,23 @@ def before_update_object(self, ticket, data, view_kwargs): "Event having paid ticket must have a payment method", ) + if ticket.type == 'donation': + try: + event = ( + db.session.query(Event) + .filter_by(id=ticket.event.id, deleted_at=None) + .one() + ) + except NoResultFound: + raise UnprocessableEntity( + {'event_id': ticket.event.id}, "Event does not exist" + ) + if not event.is_payment_enabled(): + raise UnprocessableEntity( + {'event_id': ticket.event.id}, + "Event having donation ticket must have a payment method", + ) + decorators = ( api.has_permission( 'is_coorganizer',