예제 #1
0
def get_ticket(current_user, event_id, ticket_id):
    """
    A ticket can be returned from the Event if the ticket and Event exist and below to the user.
    The event and ticket Ids must be valid.
    :param current_user: User
    :param event_id: event Id
    :param ticket_id: ticket Id
    :return:
    """
    # Check ticket id is an integer
    try:
        int(ticket_id)
    except ValueError:
        return response('failed', 'Provide a valid ticket Id', 202)

    # Get the user event
    event = get_user_event(current_user, event_id)
    if event is None:
        return response('failed', 'User has no event with Id ' + event_id, 404)

    # Get the ticket from the event
    ticket = event.tickets.filter_by(ticket_id=ticket_id).first()
    if not ticket:
        abort(404)
    return response_with_event_ticket('success', ticket, 200)
예제 #2
0
def delete(current_user, event_id, ticket_id):
    """
    Delete a ticket from the user's event.
    :param current_user: User
    :param event_id: event Id
    :param ticket_id: ticket Id
    :return: Http Response
    """
    # Check ticket id is an integer
    try:
        int(ticket_id)
    except ValueError:
        return response('failed', 'Provide a valid ticket Id', 202)

    # Get the user event
    event = get_user_event(current_user, event_id)
    if event is None:
        return response('failed', 'User has no event with Id ' + event_id, 202)

    # Delete the ticket from the event
    ticket = event.tickets.filter_by(ticket_id=ticket_id).first()
    if not ticket:
        abort(404)
    ticket.delete()
    return response(
        'success',
        'Successfully deleted the ticket from event with Id ' + event_id, 200)
예제 #3
0
def bad_method(e):
    """
    Custom response to 400 errors.
    :param e:
    :return:
    """
    return response('failed', 'Bad request', 400)
예제 #4
0
def ticket_not_found(e):
    """
    Custom response to 404 errors.
    :param e:
    :return:
    """
    return response('failed', 'ticket not found', 404)
예제 #5
0
def get_tickets(current_user, event_id):
    """
    A user's ticket belonging to an Event specified by the event_id are returned if the Event Id
    is valid and belongs to the user.
    An empty ticket list is returned if the event has no tickets.
    :param current_user: User
    :param event_id: Event Id
    :return: List of Tickets
    """
    # Get the user event
    event = get_user_event(current_user, event_id)
    if event is None:
        return response('failed', 'Event not found', 404)

    # Get tickets in the event
    page = request.args.get('page', 1, type=int)
    q = request.args.get('q', None, type=str)
    tickets, nex, pagination, previous = get_paginated_tickets(
        event, event_id, page, q)

    # Make a list of tickets
    if tickets:
        result = []
        for ticket in tickets:
            result.append(ticket.json())
        return response_with_pagination(result, previous, nex,
                                        pagination.total)
    return response_with_pagination([], previous, nex, 0)
예제 #6
0
def post(current_user, event_id, guest_id):
    """
    Storing a ticket into an event
    :param current_user: User
    :param event_id: event Id
    :return: Http Response
    """
    if not request.content_type == 'application/json':
        return response('failed', 'Content-type must be application/json', 401)

    data = request.get_json().get("ticket")
    ticket_qr_code = data.get('qr_code')
    ticket_vvip = data.get('vvip')
    ticket_accepted = data.get('accepted')
    ticket_scanned = data.get('scanned')
    ticket_comments = data.get('comments') if data.get(
        'comments') is not None else ""

    if not (event_id and guest_id and ticket_qr_code and ticket_vvip
            and ticket_scanned and ticket_accepted):
        return response(
            'failed', 'Missing some ticket attribute(s), nothing has changed.',
            401)

    # Get the user event
    event = get_user_event(current_user, event_id)
    if event is None:
        return response('failed', 'User has no event with Id ' + event_id, 202)

    # Get the user guest
    guest = get_user_guest(current_user, guest_id)
    if guest is None:
        return response('failed', 'User has no guest with Id ' + guest_id, 202)

    # Check if ticket exists already
    ticket = get_user_ticket(current_user, event_id, guest_id)
    if ticket is not None:
        return response(
            'failed', 'Ticket exists already for guest id ' + guest_id +
            ' participating at event id ' + event_id, 202)

    # Save the event ticket into the Database
    ticket = Ticket(event_id, guest_id, ticket_qr_code, ticket_vvip,
                    ticket_accepted, ticket_scanned)
    ticket.comments = ticket_comments
    ticket.save()
    return response_with_event_ticket('success', ticket, 200)
예제 #7
0
def edit_ticket(current_user, event_id, ticket_id):
    """
    Edit a ticket with a valid Id. The request content-type must be json and also the event
    in which the ticket belongs must be among the user`s events.
    The new data of the ticket must be present in the payload.
    :param current_user: User
    :param event_id: event Id
    :param ticket_id: ticket Id
    :return: Response of Edit ticket
    """
    if not request.content_type == 'application/json':
        return response('failed', 'Content-type must be application/json', 401)

    try:
        int(ticket_id)
    except ValueError:
        return response('failed', 'Provide a valid ticket Id', 202)

    # Get the user event
    event = get_user_event(current_user, event_id)
    if event is None:
        return response('failed', 'User has no event with Id ' + event_id, 202)

    # Get the ticket
    ticket = event.tickets.filter_by(ticket_id=ticket_id).first()
    if not ticket:
        abort(404)

    # Check for Json data
    request_json_data = request.get_json().get("ticket")
    scanned = request_json_data.get('scanned') if request_json_data.get(
        'scanned') is not None else ""
    accepted = request_json_data.get('accepted') if request_json_data.get(
        'accepted') is not None else ""
    vvip = request_json_data.get('vvip') if request_json_data.get(
        'vvip') is not None else ""
    comments = request_json_data.get('comments') if request_json_data.get(
        'comments') is not None else ""

    if not (scanned and accepted and vvip):
        return response(
            'failed', 'Missing some ticket attribute(s), nothing has changed.',
            401)

    # Update the ticket record
    ticket.update(scanned, accepted, vvip, comments)
    return response_with_event_ticket('success', ticket, 200)