def payment(self, request, *args, **kwargs): event_id = self.kwargs.get("pk", None) event = Event.objects.get(id=event_id) registration = event.get_registration(request.user) if not event.is_priced or not event.use_stripe: raise APIEventNotPriced() if registration is None or not registration.can_pay: raise APIPaymentDenied() if registration.has_paid(): raise APIPaymentExists() if registration.payment_intent_id is None: # If the payment_intent was not created when registering chain( async_initiate_payment.s(registration.id), save_and_notify_payment.s(registration.id), ).delay() else: async_retrieve_payment.delay(registration.id) payment_serializer = RegistrationPaymentReadSerializer( registration, context={"request": request}) response_data = payment_serializer.data return Response(data=response_data, status=status.HTTP_202_ACCEPTED)
def get_registrations(self, obj): queryset = obj.registrations.all() if obj.event.is_priced: return RegistrationPaymentReadSerializer(queryset, context=self.context, many=True).data return RegistrationReadSerializer(queryset, context=self.context, many=True).data
def payment(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) event_id = self.kwargs.get('pk', None) event = Event.objects.get(id=event_id) registration = event.get_registration(request.user) if not event.is_priced or not event.use_stripe: raise PermissionDenied() if registration.has_paid(): raise APIPaymentExists() registration.charge_status = constants.PAYMENT_PENDING registration.save() chain( async_payment.s(registration.id, serializer.data['token']), registration_payment_save.s(registration.id) ).delay() payment_serializer = RegistrationPaymentReadSerializer( registration, context={'request': request} ) return Response(data=payment_serializer.data, status=status.HTTP_202_ACCEPTED)
class RegistrationPaymentReadSocketSerializer(WebsocketSerializer): payload = RegistrationPaymentReadSerializer()