Beispiel #1
0
    def before_get(self, args, kwargs):
        if kwargs.get('ticket_id'):
            if has_access('is_coorganizer'):
                ticket = safe_query_kwargs(Ticket, kwargs, 'ticket_id')
                if ticket.discount_code_id:
                    kwargs['id'] = ticket.discount_code_id
                else:
                    kwargs['id'] = None
            else:
                raise UnprocessableEntityError(
                    {'source': ''},
                    "Please verify your permission. You must have coorganizer "
                    "privileges to view ticket discount code details",
                )
        if kwargs.get('event_id'):
            if has_access('is_admin'):
                event = safe_query_kwargs(Event, kwargs, 'event_id')
                if event.discount_code_id:
                    kwargs['id'] = event.discount_code_id
                else:
                    kwargs['id'] = None
            else:
                raise UnprocessableEntityError(
                    {'source': ''},
                    "Please verify your permission. You must be admin to view event discount code details",
                )

        if kwargs.get('event_identifier'):
            event = safe_query_kwargs(Event, kwargs, 'event_identifier',
                                      'identifier')
            kwargs['event_id'] = event.id

        if kwargs.get('discount_event_identifier'):
            event = safe_query(
                Event,
                'identifier',
                kwargs['discount_event_identifier'],
                'event_identifier',
            )
            kwargs['discount_event_id'] = event.id

        if kwargs.get('event_id') and has_access('is_admin'):
            event = safe_query_kwargs(Event, kwargs, 'event_id')
            if event.discount_code_id:
                kwargs['id'] = event.discount_code_id
            else:
                kwargs['id'] = None

        # Any registered user can fetch discount code details using the code.
        if kwargs.get('code'):
            # filter on deleted_at is required to catch the id of a
            # discount code which has not been deleted.
            discount = (db.session.query(DiscountCode).filter_by(
                code=kwargs.get('code'),
                event_id=kwargs.get('discount_event_id'),
                deleted_at=None,
            ).first())
            if discount:
                kwargs['id'] = discount.id
                if discount.valid_from:
                    discount_tz = discount.valid_from.tzinfo
                current_time = datetime.now().replace(
                    tzinfo=discount_tz or timezone('UTC'))
                if not discount.is_active:
                    raise MethodNotAllowed({'parameter': '{code}'},
                                           "Discount Code is not active")
                if (current_time < discount.valid_from
                        or current_time > discount.valid_expire_time):
                    raise MethodNotAllowed(
                        {'parameter': '{code}'},
                        "Discount Code is not active in current time frame",
                    )
            else:
                raise ObjectNotFound({'parameter': '{code}'},
                                     "DiscountCode: not found")

            self.schema = DiscountCodeSchemaTicket
            return

        if kwargs.get('id'):
            try:
                discount = (db.session.query(DiscountCode).filter_by(
                    id=kwargs.get('id')).one())
            except NoResultFound:
                raise ObjectNotFound({'parameter': '{id}'},
                                     "DiscountCode: not found")

            #             if discount.used_for == 'ticket' and has_access('is_coorganizer', event_id=discount.event_id):
            if discount.used_for == 'ticket':
                self.schema = DiscountCodeSchemaTicket

            #             elif discount.used_for == 'event' and has_access('is_admin'):
            elif discount.used_for == 'event':
                self.schema = DiscountCodeSchemaEvent
            else:
                raise UnprocessableEntityError({'source': ''},
                                               "Please verify your permission")
Beispiel #2
0
    def before_get_object(self, view_kwargs):
        """
        before get method for Discount Code detail
        :param view_kwargs:
        :return:
        """
        if view_kwargs.get('event_identifier'):
            event = safe_query_kwargs(
                Event,
                view_kwargs,
                'event_identifier',
                'identifier',
            )
            view_kwargs['event_id'] = event.id

        if view_kwargs.get('event_id') and has_access('is_admin'):
            event = safe_query_kwargs(Event, view_kwargs, 'event_id')
            if event.discount_code_id:
                view_kwargs['id'] = event.discount_code_id
            else:
                view_kwargs['id'] = None

        if view_kwargs.get('event_invoice_id') and has_access('is_admin'):
            event_invoice = safe_query_kwargs(
                EventInvoice,
                view_kwargs,
                'event_invoice_id',
            )
            if event_invoice.discount_code_id:
                view_kwargs['id'] = event_invoice.discount_code_id
            else:
                view_kwargs['id'] = None

        if view_kwargs.get('event_invoice_identifier') and has_access(
                'is_admin'):
            event_invoice = safe_query_kwargs(EventInvoice, view_kwargs,
                                              'event_invoice_identifier',
                                              'identifier')
            if event_invoice.discount_code_id:
                view_kwargs['id'] = event_invoice.discount_code_id
            else:
                view_kwargs['id'] = None

        if view_kwargs.get('id'):
            try:
                discount = (self.session.query(DiscountCode).filter_by(
                    id=view_kwargs.get('id')).one())
            except NoResultFound:
                raise ObjectNotFound({'parameter': '{id}'},
                                     "DiscountCode: not found")

            if 'code' in view_kwargs:  # usage via discount code is public
                self.schema = DiscountCodeSchemaPublic
                return

            #             if discount.used_for == 'ticket' and has_access('is_coorganizer', event_id=discount.event_id):
            if discount.used_for == 'ticket':
                self.schema = DiscountCodeSchemaTicket

            #             elif discount.used_for == 'event' and has_access('is_admin'):
            elif discount.used_for == 'event':
                self.schema = DiscountCodeSchemaEvent
            else:
                raise UnprocessableEntityError({'source': ''},
                                               "Please verify your permission")

        elif not view_kwargs.get('id') and not has_access('is_admin'):
            raise UnprocessableEntityError(
                {'source': ''},
                "Please verify your permission. You must be admin to view event\
                                      discount code details",
            )
 def after_get_object(self, stream, view_kwargs):
     if stream and not stream.user_can_access:
         raise ObjectNotFound({'parameter': 'id'},
                              f"Video Stream: {stream.id} not found")
Beispiel #4
0
def calculate_order_amount(tickets, discount_code=None):
    from app.api.helpers.ticketing import validate_discount_code, validate_tickets
    from app.models.discount_code import DiscountCode

    ticket_ids = {ticket['id'] for ticket in tickets}
    ticket_map = {int(ticket['id']): ticket for ticket in tickets}
    fetched_tickets = validate_tickets(ticket_ids)

    if tickets and discount_code:
        discount_code = validate_discount_code(discount_code, tickets=tickets)

    event = tax = tax_included = fees = None
    total_amount = total_tax = total_discount = 0.0
    ticket_list = []
    for ticket in fetched_tickets:
        ticket_tax = discounted_tax = 0.0
        ticket_info = ticket_map[ticket.id]
        discount_amount = 0.0
        discount_data = None
        ticket_fee = 0.0

        quantity = ticket_info.get('quantity', 1)  # Default to single ticket
        if not event:
            event = ticket.event

            if event.deleted_at:
                raise ObjectNotFound({'pointer': 'tickets/event'},
                                     f'Event: {event.id} not found')

            fees = TicketFees.query.filter_by(
                currency=event.payment_currency).first()

        if not tax and event.tax:
            tax = event.tax
            tax_included = tax.is_tax_included_in_price

        if ticket.type in ['donation', 'donationRegistration']:
            price = ticket_info.get('price')
            if not price or price > ticket.max_price or price < ticket.min_price:
                raise UnprocessableEntityError(
                    {'pointer': 'tickets/price'},
                    f"Price for donation ticket should be present and within range "
                    f"{ticket.min_price} to {ticket.max_price}",
                )
        else:
            price = ticket.price if ticket.type not in [
                'free', 'freeRegistration'
            ] else 0.0

        if tax:
            if tax_included:
                ticket_tax = price - price / (1 + tax.rate / 100)
            else:
                ticket_tax = price * tax.rate / 100

        if discount_code and ticket.type not in ['free', 'freeRegistration']:
            code = (DiscountCode.query.with_parent(ticket).filter_by(
                id=discount_code.id).first())
            if code:
                if discount_code.id == code.id:
                    if code.type == 'amount':
                        discount_amount = min(code.value, price)
                        discount_percent = (discount_amount / price) * 100
                        if tax:
                            if tax_included:
                                discounted_tax = (price - discount_amount) - (
                                    price - discount_amount) / (1 +
                                                                tax.rate / 100)
                            else:
                                discounted_tax = ((price - discount_amount) *
                                                  tax.rate / 100)
                    else:
                        discount_amount = (price * code.value) / 100
                        if tax:
                            discounted_tax = ticket_tax - (ticket_tax *
                                                           code.value / 100)
                        discount_percent = code.value
                    discount_data = {
                        'code': discount_code.code,
                        'percent': round(discount_percent, 2),
                        'amount': round(discount_amount, 2),
                        'total': round(discount_amount * quantity, 2),
                        'type': code.type,
                    }

        total_discount += round(discount_amount * quantity, 2)
        if fees and not ticket.is_fee_absorbed:
            ticket_fee = fees.service_fee * (price * quantity) / 100
            if ticket_fee > fees.maximum_fee:
                ticket_fee = fees.maximum_fee
        sub_total = ticket_fee + (price - discount_amount) * quantity
        total_amount = total_amount + sub_total
        ticket_list.append({
            'id': ticket.id,
            'name': ticket.name,
            'price': price,
            'quantity': quantity,
            'discount': discount_data,
            'ticket_fee': round(ticket_fee, 2),
            'sub_total': round(sub_total, 2),
            'ticket_tax': round(ticket_tax, 2),
            'discounted_tax': round(discounted_tax, 2),
        })

    sub_total = total_amount
    tax_dict = None
    if tax:
        if tax_included:
            total_tax = total_amount - total_amount / (1 + tax.rate / 100)
        else:
            total_tax = total_amount * tax.rate / 100
            total_amount += total_tax
        tax_dict = dict(
            included=tax_included,
            amount=round(total_tax, 2),
            percent=tax.rate if tax else 0.0,
            name=tax.name,
        )

    return dict(
        tax=tax_dict,
        sub_total=round(sub_total, 2),
        total=round(total_amount, 2),
        discount=round(total_discount, 2),
        tickets=ticket_list,
    )
    def before_get(self, args, kwargs):
        if kwargs.get('ticket_id'):
            if has_access('is_coorganizer'):
                ticket = safe_query(db, Ticket, 'id', kwargs['ticket_id'], 'ticket_id')
                if ticket.discount_code_id:
                    kwargs['id'] = ticket.discount_code_id
                else:
                    kwargs['id'] = None
            else:
                raise UnprocessableEntity(
                    {'source': ''},
                    "Please verify your permission. You must have coorganizer "
                    "privileges to view ticket discount code details")
        if kwargs.get('event_id'):
            if has_access('is_admin'):
                event = safe_query(db, Event, 'id', kwargs['event_id'], 'event_id')
                if event.discount_code_id:
                    kwargs['id'] = event.discount_code_id
                else:
                    kwargs['id'] = None
            else:
                raise UnprocessableEntity(
                    {'source': ''},
                    "Please verify your permission. You must be admin to view event discount code details")

        if kwargs.get('event_identifier'):
            event = safe_query(
                db, Event, 'identifier', kwargs['event_identifier'],
                'event_identifier')
            kwargs['event_id'] = event.id

        if kwargs.get('event_id') and has_access('is_admin'):
            event = safe_query(db, Event, 'id', kwargs['event_id'], 'event_id')
            if event.discount_code_id:
                kwargs['id'] = event.discount_code_id
            else:
                kwargs['id'] = None

        # Any registered user can fetch discount code details using the code.
        if kwargs.get('code'):
            # filter on deleted_at is required to catch the id of a
            # discount code which has not been deleted.
            discount = db.session.query(DiscountCode).filter_by(code=kwargs.get('code'), deleted_at=None).first()
            if discount:
                kwargs['id'] = discount.id
            else:
                raise ObjectNotFound({'parameter': '{code}'}, "DiscountCode: not found")

            self.schema = DiscountCodeSchemaTicket
            return

        if kwargs.get('id'):
            try:
                discount = db.session.query(
                    DiscountCode).filter_by(id=kwargs.get('id')).one()
            except NoResultFound:
                raise ObjectNotFound(
                    {'parameter': '{id}'}, "DiscountCode: not found")

            if discount.used_for == 'ticket' and has_access('is_coorganizer', event_id=discount.event_id):
                self.schema = DiscountCodeSchemaTicket

            elif discount.used_for == 'event' and has_access('is_admin'):
                self.schema = DiscountCodeSchemaEvent
            else:
                raise UnprocessableEntity({'source': ''},
                                          "Please verify your permission")
Beispiel #6
0
    def update_relationship(self, json_data, relationship_field,
                            related_id_field, view_kwargs):
        """Update a relationship

        :param dict json_data: the request params
        :param str relationship_field: the model attribute used for relationship
        :param str related_id_field: the identifier field of the related model
        :param dict view_kwargs: kwargs from the resource view
        :return boolean: True if relationship have changed else False
        """
        self.before_update_relationship(json_data, relationship_field,
                                        related_id_field, view_kwargs)

        obj = self.get_object(view_kwargs)

        if obj is None:
            url_field = getattr(self, 'url_field', 'id')
            filter_value = view_kwargs[url_field]
            raise ObjectNotFound('{}: {} not found'.format(
                self.model.__name__, filter_value),
                                 source={'parameter': url_field})

        if not hasattr(obj, relationship_field):
            raise RelationNotFound("{} has no attribute {}".format(
                obj.__class__.__name__, relationship_field))

        related_model = getattr(obj.__class__,
                                relationship_field).property.mapper.class_

        updated = False

        if isinstance(json_data['data'], list):
            related_objects = []

            for obj_ in json_data['data']:
                related_objects.append(
                    self.get_related_object(related_model, related_id_field,
                                            obj_))

            obj_ids = {
                getattr(obj__, related_id_field)
                for obj__ in getattr(obj, relationship_field)
            }
            new_obj_ids = {
                getattr(related_object, related_id_field)
                for related_object in related_objects
            }
            if obj_ids != new_obj_ids:
                setattr(obj, relationship_field, related_objects)
                updated = True

        else:
            related_object = None

            if json_data['data'] is not None:
                related_object = self.get_related_object(
                    related_model, related_id_field, json_data['data'])

            obj_id = getattr(getattr(obj, relationship_field),
                             related_id_field, None)
            new_obj_id = getattr(related_object, related_id_field, None)
            if obj_id != new_obj_id:
                setattr(obj, relationship_field, related_object)
                updated = True

        try:
            self.session.commit()
        except JsonApiException as e:
            self.session.rollback()
            raise e
        except Exception as e:
            self.session.rollback()
            raise JsonApiException("Update relationship error: " + str(e))

        self.after_update_relationship(obj, updated, json_data,
                                       relationship_field, related_id_field,
                                       view_kwargs)

        return obj, updated
Beispiel #7
0
 def after_get_object(self, event, view_kwargs):
     if event.state == "draft":
         if not is_logged_in() or not has_access('is_coorganizer',
                                                 event_id=event.id):
             raise ObjectNotFound({'parameter': '{id}'}, "Event: not found")
    def before_post(self, args, kwargs, data=None):
        """
        method to add user_id to view_kwargs before post
        :param args:
        :param kwargs:
        :param data:
        :return:
        """
        data['user'] = current_user.id
        require_relationship(['event', 'user'], data)

        if not has_access('is_coorganizer', event_id=data['event']):
            event = db.session.query(Event).filter_by(id=data['event']).one()
            if event.state == "draft":
                raise ObjectNotFound(
                    {'parameter': 'event_id'},
                    "Event: {} not found".format(data['event']),
                )

        if (
            get_count(
                db.session.query(Event).filter_by(
                    id=int(data['event']), is_sessions_speakers_enabled=False
                )
            )
            > 0
        ):
            raise ForbiddenError({'pointer': ''}, "Speakers are disabled for this Event")

        if (
            not data.get('is_email_overridden')
            and get_count(
                db.session.query(Speaker).filter_by(
                    event_id=int(data['event']), email=data['email'], deleted_at=None
                )
            )
            > 0
        ):
            raise ForbiddenError(
                {'pointer': ''}, 'Speaker with this Email ID already exists'
            )

        if data.get('is_email_overridden') and not has_access(
            'is_organizer', event_id=data['event']
        ):
            raise ForbiddenError(
                {'pointer': 'data/attributes/is_email_overridden'},
                'Organizer access required to override email',
            )
        elif (
            data.get('is_email_overridden')
            and has_access('is_organizer', event_id=data['event'])
            and not data.get('email')
        ):
            data['email'] = current_user.email

        if 'sessions' in data:
            session_ids = data['sessions']
            for session_id in session_ids:
                if not has_access('is_session_self_submitted', session_id=session_id):
                    raise ObjectNotFound(
                        {'parameter': 'session_id'},
                        "Session: {} not found".format(session_id),
                    )

        data['complex_field_values'] = validate_custom_form_constraints_request(
            'speaker', SpeakerSchema, Speaker(event_id=data['event']), data
        )
Beispiel #9
0
def get_id(view_kwargs):
    """
    method to get the resource id for fetching details
    :param view_kwargs:
    :return:
    """
    if view_kwargs.get('identifier'):
        event = safe_query_kwargs(Event, view_kwargs, 'identifier',
                                  'identifier')
        view_kwargs['id'] = event.id

    if view_kwargs.get('sponsor_id') is not None:
        sponsor = safe_query_kwargs(Sponsor, view_kwargs, 'sponsor_id')
        if sponsor.event_id is not None:
            view_kwargs['id'] = sponsor.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('user_favourite_event_id') is not None:
        user_favourite_event = safe_query_kwargs(
            UserFavouriteEvent,
            view_kwargs,
            'user_favourite_event_id',
        )
        if user_favourite_event.event_id is not None:
            view_kwargs['id'] = user_favourite_event.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('copyright_id') is not None:
        copyright = safe_query_kwargs(EventCopyright, view_kwargs,
                                      'copyright_id')
        if copyright.event_id is not None:
            view_kwargs['id'] = copyright.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('track_id') is not None:
        track = safe_query_kwargs(Track, view_kwargs, 'track_id')
        if track.event_id is not None:
            view_kwargs['id'] = track.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('session_type_id') is not None:
        session_type = safe_query_kwargs(SessionType, view_kwargs,
                                         'session_type_id')
        if session_type.event_id is not None:
            view_kwargs['id'] = session_type.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('faq_type_id') is not None:
        faq_type = safe_query_kwargs(FaqType, view_kwargs, 'faq_type_id')
        if faq_type.event_id is not None:
            view_kwargs['id'] = faq_type.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('event_invoice_id') is not None:
        event_invoice = safe_query_kwargs(EventInvoice, view_kwargs,
                                          'event_invoice_id')
        if event_invoice.event_id is not None:
            view_kwargs['id'] = event_invoice.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('event_invoice_identifier') is not None:
        event_invoice = safe_query_kwargs(EventInvoice, view_kwargs,
                                          'event_invoice_identifier',
                                          'identifier')
        if event_invoice.event_id is not None:
            view_kwargs['id'] = event_invoice.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('discount_code_id') is not None:
        discount_code = safe_query_kwargs(DiscountCode, view_kwargs,
                                          'discount_code_id')
        if discount_code.event_id is not None:
            view_kwargs['id'] = discount_code.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('session_id') is not None:
        sessions = safe_query_kwargs(Session, view_kwargs, 'session_id')
        if sessions.event_id is not None:
            view_kwargs['id'] = sessions.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('social_link_id') is not None:
        social_link = safe_query_kwargs(SocialLink, view_kwargs,
                                        'social_link_id')
        if social_link.event_id is not None:
            view_kwargs['id'] = social_link.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('tax_id') is not None:
        tax = safe_query_kwargs(Tax, view_kwargs, 'tax_id')
        if tax.event_id is not None:
            view_kwargs['id'] = tax.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('stripe_authorization_id') is not None:
        stripe_authorization = safe_query_kwargs(
            StripeAuthorization,
            view_kwargs,
            'stripe_authorization_id',
        )
        if stripe_authorization.event_id is not None:
            view_kwargs['id'] = stripe_authorization.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('user_id') is not None:
        try:
            discount_code = (db.session.query(DiscountCode).filter_by(
                id=view_kwargs['discount_code_id']).one())
        except NoResultFound:
            raise ObjectNotFound(
                {'parameter': 'discount_code_id'},
                "DiscountCode: {} not found".format(
                    view_kwargs['discount_code_id']),
            )
        else:
            if discount_code.event_id is not None:
                view_kwargs['id'] = discount_code.event_id
            else:
                view_kwargs['id'] = None

    if view_kwargs.get('speakers_call_id') is not None:
        speakers_call = safe_query_kwargs(SpeakersCall, view_kwargs,
                                          'speakers_call_id')
        if speakers_call.event_id is not None:
            view_kwargs['id'] = speakers_call.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('ticket_id') is not None:
        ticket = safe_query_kwargs(Ticket, view_kwargs, 'ticket_id')
        if ticket.event_id is not None:
            view_kwargs['id'] = ticket.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('ticket_tag_id') is not None:
        ticket_tag = safe_query_kwargs(TicketTag, view_kwargs, 'ticket_tag_id')
        if ticket_tag.event_id is not None:
            view_kwargs['id'] = ticket_tag.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('role_invite_id') is not None:
        role_invite = safe_query_kwargs(RoleInvite, view_kwargs,
                                        'role_invite_id')
        if role_invite.event_id is not None:
            view_kwargs['id'] = role_invite.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('users_events_role_id') is not None:
        users_events_role = safe_query_kwargs(
            UsersEventsRoles,
            view_kwargs,
            'users_events_role_id',
        )
        if users_events_role.event_id is not None:
            view_kwargs['id'] = users_events_role.event_id

    if view_kwargs.get('access_code_id') is not None:
        access_code = safe_query_kwargs(AccessCode, view_kwargs,
                                        'access_code_id')
        if access_code.event_id is not None:
            view_kwargs['id'] = access_code.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('speaker_id'):
        try:
            speaker = (db.session.query(Speaker).filter_by(
                id=view_kwargs['speaker_id']).one())
        except NoResultFound:
            raise ObjectNotFound(
                {'parameter': 'speaker_id'},
                "Speaker: {} not found".format(view_kwargs['speaker_id']),
            )
        else:
            if speaker.event_id:
                view_kwargs['id'] = speaker.event_id
            else:
                view_kwargs['id'] = None

    if view_kwargs.get('email_notification_id'):
        try:
            email_notification = (
                db.session.query(EmailNotification).filter_by(
                    id=view_kwargs['email_notification_id']).one())
        except NoResultFound:
            raise ObjectNotFound(
                {'parameter': 'email_notification_id'},
                "Email Notification: {} not found".format(
                    view_kwargs['email_notification_id']),
            )
        else:
            if email_notification.event_id:
                view_kwargs['id'] = email_notification.event_id
            else:
                view_kwargs['id'] = None

    if view_kwargs.get('microlocation_id'):
        try:
            microlocation = (db.session.query(Microlocation).filter_by(
                id=view_kwargs['microlocation_id']).one())
        except NoResultFound:
            raise ObjectNotFound(
                {'parameter': 'microlocation_id'},
                "Microlocation: {} not found".format(
                    view_kwargs['microlocation_id']),
            )
        else:
            if microlocation.event_id:
                view_kwargs['id'] = microlocation.event_id
            else:
                view_kwargs['id'] = None

    if view_kwargs.get('attendee_id'):
        attendee = safe_query_kwargs(TicketHolder, view_kwargs, 'attendee_id')
        if attendee.event_id is not None:
            view_kwargs['id'] = attendee.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('custom_form_id') is not None:
        custom_form = safe_query_kwargs(CustomForms, view_kwargs,
                                        'custom_form_id')
        if custom_form.event_id is not None:
            view_kwargs['id'] = custom_form.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('faq_id') is not None:
        faq = safe_query_kwargs(Faq, view_kwargs, 'faq_id')
        if faq.event_id is not None:
            view_kwargs['id'] = faq.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('order_identifier') is not None:
        order = safe_query_kwargs(Order, view_kwargs, 'order_identifier',
                                  'identifier')
        if order.event_id is not None:
            view_kwargs['id'] = order.event_id
        else:
            view_kwargs['id'] = None

    if view_kwargs.get('feedback_id') is not None:
        feedback = safe_query_kwargs(Feedback, view_kwargs, 'feedback_id')
        if feedback.event_id is not None:
            view_kwargs['id'] = feedback.event_id
        else:
            view_kwargs['id'] = None

    return view_kwargs
    def create_object(self, data, view_kwargs):
        """
        create_object method for the Charges layer
        charge the user using paypal or stripe
        :param data:
        :param view_kwargs:
        :return:
        """

        if view_kwargs.get('order_identifier').isdigit():
            # when id is passed
            order = Order.query.filter_by(
                id=view_kwargs['order_identifier']).first()
        else:
            # when identifier is passed
            order = Order.query.filter_by(
                identifier=view_kwargs['order_identifier']).first()

        if not order:
            raise ObjectNotFound(
                {'parameter': 'order_identifier'},
                "Order with identifier: {} not found".format(
                    view_kwargs['order_identifier']),
            )
        if (order.status == 'cancelled' or order.status == 'expired'
                or order.status == 'completed'):
            raise ConflictError(
                {'parameter': 'id'},
                "You cannot charge payments on a cancelled, expired or completed order",
            )
        if (not order.amount) or order.amount == 0:
            raise ConflictError({'parameter': 'id'},
                                "You cannot charge payments on a free order")

        data['id'] = order.id

        # charge through stripe
        if order.payment_mode == 'stripe':
            if not order.event.can_pay_by_stripe:
                raise ConflictError(
                    {'': ''}, "This event doesn't accept payments by Stripe")

            success, response = TicketingManager.create_payment_intent_for_order_stripe(
                order)
            data['status'] = success
            data['message'] = response

        # charge through paypal
        elif order.payment_mode == 'paypal':
            if (not data.get('paypal_payer_id')) or (
                    not data.get('paypal_payment_id')):
                raise UnprocessableEntityError(
                    {'source': ''},
                    "paypal_payer_id or paypal_payment_id or both missing")
            if not order.event.can_pay_by_paypal:
                raise ConflictError(
                    {'': ''}, "This event doesn't accept payments by Paypal")

            success, response = TicketingManager.charge_paypal_order_payment(
                order, data['paypal_payer_id'], data['paypal_payment_id'])
            data['status'] = success
            data['message'] = response

        return data
 def get_object(self, kwargs, qs):
     obj = self._data_layer.get_object(kwargs, qs=qs)
     if not obj:
         raise ObjectNotFound(
             f"{self.schema.Meta.type_}: {kwargs['id']} not found")
     return obj
 def after_get_object(self, session, view_kwargs):
     is_speaker_or_admin = is_logged_in() and has_access(
         'is_speaker_for_session', id=session.id
     )
     if session.state not in ['accepted', 'confirmed'] and not is_speaker_or_admin:
         raise ObjectNotFound({'parameter': '{id}'}, "Session: not found")
Beispiel #13
0
 def after_get(self, result):
     if result['data'] is None:
         raise ObjectNotFound(detail='', source={})