Пример #1
0
def allocate_waiting():
    """Allocate available tickets to people on the waiting list."""
    if not APP.config["TICKETS_ON_SALE"]:
        return

    tickets_available = purchase_logic.guest_tickets_available()

    ticket_type = APP.config["DEFAULT_TICKET_TYPE"]

    for wait in models.Waiting.query.order_by(
            models.Waiting.waiting_since).all():
        if wait.waiting_for > tickets_available:
            break

        tickets = [
            models.Ticket(wait.user, ticket_type.slug, ticket_type.price)
            for _ in xrange(wait.waiting_for)
        ]

        DB.session.add_all(tickets)
        DB.session.delete(wait)

        APP.email_manager.send_template(
            wait.user.email,
            "You have been allocated tickets",
            "waiting_allocation.email",
            user=wait.user,
            num_tickets=wait.waiting_for,
            expiry=tickets[0].expires,
        )

        DB.session.commit()

        tickets_available -= wait.waiting_for
Пример #2
0
def allocate_waiting():
    """Allocate available tickets to people on the waiting list."""
    if not APP.config['TICKETS_ON_SALE']:
        return

    tickets_available = purchase_logic.guest_tickets_available()

    ticket_type = APP.config['DEFAULT_TICKET_TYPE']

    for wait in models.Waiting.query.order_by(
            models.Waiting.waiting_since
    ).all():
        if wait.waiting_for > tickets_available:
            break

        tickets = [
            models.Ticket(
                wait.user,
                ticket_type.slug,
                ticket_type.price
            )
            for _ in xrange(wait.waiting_for)
        ]

        DB.session.add_all(tickets)
        DB.session.delete(wait)

        APP.email_manager.send_template(
            wait.user.email,
            'You have been allocated tickets',
            'waiting_allocation.email',
            user=wait.user,
            num_tickets=wait.waiting_for,
            expiry=tickets[0].expires
        )

        DB.session.commit()

        tickets_available -= wait.waiting_for
Пример #3
0
def checkout():
    """Allow the group leader to purchase tickets on behalf of the group."""
    if not login.current_user.purchase_group:
        flask.flash(
            (
                'You are not currently a member of a purchase group. Please '
                'use the "Buy Tickets" link to purchase tickets individually.'
            ),
            'info'
        )
        return flask.redirect(flask.url_for('dashboard.dashboard_home'))
    elif login.current_user != login.current_user.purchase_group.leader:
        flask.flash(
            (
                'Only your group leader {0} can purchase tickets on behalf of '
                'your purchase group.'
            ).format(login.current_user.purchase_group.leader.full_name),
            'info'
        )
        return flask.redirect(flask.url_for('dashboard.dashboard_home'))
    elif not APP.config['TICKETS_ON_SALE']:
        flask.flash(
            (
                'You will only be able to purchase tickets on behalf of your '
                'purchase group when general release starts.'
            ),
            'info'
        )
        return flask.redirect(flask.url_for('dashboard.dashboard_home'))
    elif login.current_user.purchase_group.purchased:
        flask.flash(
            (
                'The tickets have already been purchased for your purchase '
                'group.'
            ),
            'info'
        )
        return flask.redirect(flask.url_for('dashboard.dashboard_home'))

    guest_tickets_available = purchase_logic.guest_tickets_available()

    if models.Waiting.query.count() > 0 or (
            guest_tickets_available <
            login.current_user.purchase_group.total_guest_tickets_requested
    ):
        flask.flash(
            (
                'No tickets are available for your group.'
            ),
            'info'
        )

        if purchase_logic.wait_available(login.current_user):
            flask.flash(
                (
                    'If you and your group members still want to try to obtain '
                    'tickets, you should all join the waiting list.'
                ),
                'info'
            )
            return flask.redirect(flask.url_for('purchase.wait'))
        else:
            return flask.redirect(flask.url_for('dashboard.dashboard_home'))

    if flask.request.method != 'POST':
        return flask.render_template('group_purchase/checkout.html')

    tickets = [
        models.Ticket(
            request.requester,
            request.ticket_type.slug,
            request.ticket_type.price
        )
        for request in login.current_user.purchase_group.requests
        for _ in xrange(request.number_requested)
    ]

    DB.session.add_all(tickets)

    login.current_user.purchase_group.purchased = True

    DB.session.commit()

    APP.log_manager.log_event(
        'Completed Group Purchase',
        user=login.current_user,
        tickets=tickets,
        purchase_group=login.current_user.purchase_group
    )

    expiry_time = util.format_timedelta(APP.config['TICKET_EXPIRY_TIME'])

    for user in set(
            request.requester
            for request in login.current_user.purchase_group.requests
            if request.requester != login.current_user
    ):
        APP.email_manager.send_template(
            user.email,
            'Group Purchase Completed - Complete Payment Now!',
            'group_purchase_completed.email',
            name=user.forenames,
            group_leader=login.current_user.full_name,
            url=flask.url_for('purchase.complete_payment', _external=True),
            expiry_time=expiry_time
        )

    flask.flash('The tickets for your group have been reserved', 'success')
    flask.flash('You can now proceed to pay for your own tickets.', 'info')
    flask.flash(
        (
            'Your group members have been emailed to remind them to pay for '
            'their tickets.'
        ),
        'info'
    )
    flask.flash(
        'Any tickets not paid for within {0} will be cancelled.'.format(
            expiry_time
        ),
        'warning'
    )

    return flask.redirect(flask.url_for('purchase.complete_payment'))
Пример #4
0
def checkout():
    """Allow the group leader to purchase tickets on behalf of the group."""
    if not login.current_user.purchase_group:
        flask.flash(
            (
                'You are not currently a member of a purchase group. Please '
                'use the "Buy Tickets" link to purchase tickets individually.'
            ),
            'info'
        )
        return flask.redirect(flask.url_for('dashboard.dashboard_home'))
    elif login.current_user != login.current_user.purchase_group.leader:
        flask.flash(
            (
                'Only your group leader {0} can purchase tickets on behalf of '
                'your purchase group.'
            ).format(login.current_user.purchase_group.leader.full_name),
            'info'
        )
        return flask.redirect(flask.url_for('dashboard.dashboard_home'))
    elif not APP.config['TICKETS_ON_SALE']:
        flask.flash(
            (
                'You will only be able to purchase tickets on behalf of your '
                'purchase group when general release starts.'
            ),
            'info'
        )
        return flask.redirect(flask.url_for('dashboard.dashboard_home'))
    elif login.current_user.purchase_group.purchased:
        flask.flash(
            (
                'The tickets have already been purchased for your purchase '
                'group.'
            ),
            'info'
        )
        return flask.redirect(flask.url_for('dashboard.dashboard_home'))

    guest_tickets_available = purchase_logic.guest_tickets_available()

    if models.Waiting.query.count() > 0 or (
            guest_tickets_available <
            login.current_user.purchase_group.total_guest_tickets_requested
    ):
        flask.flash(
            (
                'No tickets are available for your group.'
            ),
            'info'
        )

        if purchase_logic.wait_available(login.current_user):
            flask.flash(
                (
                    'If you and your group members still want to try to obtain '
                    'tickets, you should all join the waiting list.'
                ),
                'info'
            )
            return flask.redirect(flask.url_for('purchase.wait'))
        else:
            return flask.redirect(flask.url_for('dashboard.dashboard_home'))

    if flask.request.method != 'POST':
        return flask.render_template('group_purchase/checkout.html')

    tickets = [
        models.Ticket(
            request.requester,
            request.ticket_type.slug,
            request.ticket_type.price
        )
        for request in login.current_user.purchase_group.requests
        for _ in xrange(request.number_requested)
    ]

    DB.session.add_all(tickets)

    login.current_user.purchase_group.purchased = True

    DB.session.commit()

    APP.log_manager.log_event(
        'Completed Group Purchase',
        user=login.current_user,
        tickets=tickets,
        purchase_group=login.current_user.purchase_group
    )

    expiry_time = util.format_timedelta(APP.config['TICKET_EXPIRY_TIME'])

    for user in set(
            request.requester
            for request in login.current_user.purchase_group.requests
            if request.requester != login.current_user
    ):
        APP.email_manager.send_template(
            user.email,
            'Group Purchase Completed - Complete Payment Now!',
            'group_purchase_completed.email',
            name=user.forenames,
            group_leader=login.current_user.full_name,
            url=flask.url_for('purchase.complete_payment', _external=True),
            expiry_time=expiry_time
        )

    flask.flash('The tickets for your group have been reserved', 'success')
    flask.flash('You can now proceed to pay for your own tickets.', 'info')
    flask.flash(
        (
            'Your group members have been emailed to remind them to pay for '
            'their tickets.'
        ),
        'info'
    )
    flask.flash(
        'Any tickets not paid for within {0} will be cancelled.'.format(
            expiry_time
        ),
        'warning'
    )

    return flask.redirect(flask.url_for('purchase.complete_payment'))
Пример #5
0
def checkout():
    """Allow the group leader to purchase tickets on behalf of the group."""
    if not login.current_user.purchase_group:
        flask.flash(
            ("You are not currently a member of a purchase group. Please "
             'use the "Buy Tickets" link to purchase tickets individually.'),
            "info",
        )
        return flask.redirect(flask.url_for("dashboard.dashboard_home"))
    elif login.current_user != login.current_user.purchase_group.leader:
        flask.flash(
            ("Only your group leader {0} can purchase tickets on behalf of "
             "your purchase group.").format(
                 login.current_user.purchase_group.leader.full_name),
            "info",
        )
        return flask.redirect(flask.url_for("dashboard.dashboard_home"))
    elif not APP.config["TICKETS_ON_SALE"]:
        flask.flash(
            ("You will only be able to purchase tickets on behalf of your "
             "purchase group when general release starts."),
            "info",
        )
        return flask.redirect(flask.url_for("dashboard.dashboard_home"))
    elif login.current_user.purchase_group.purchased:
        flask.flash(
            ("The tickets have already been purchased for your purchase "
             "group."),
            "info",
        )
        return flask.redirect(flask.url_for("dashboard.dashboard_home"))

    guest_tickets_available = purchase_logic.guest_tickets_available()

    if models.Waiting.query.count() > 0 or (
            guest_tickets_available <
            login.current_user.purchase_group.total_guest_tickets_requested):
        flask.flash(("No tickets are available for your group."), "info")

        if purchase_logic.wait_available(login.current_user):
            flask.flash(
                ("If you and your group members still want to try to obtain "
                 "tickets, you should all join the waiting list."),
                "info",
            )
            return flask.redirect(flask.url_for("purchase.wait"))
        else:
            return flask.redirect(flask.url_for("dashboard.dashboard_home"))

    if flask.request.method != "POST":
        return flask.render_template("group_purchase/checkout.html")

    tickets = [
        models.Ticket(request.requester, request.ticket_type.slug,
                      request.ticket_type.price)
        for request in login.current_user.purchase_group.requests
        for _ in xrange(request.number_requested)
    ]

    DB.session.add_all(tickets)

    login.current_user.purchase_group.purchased = True

    DB.session.commit()

    APP.log_manager.log_event(
        "Completed Group Purchase",
        user=login.current_user,
        tickets=tickets,
        purchase_group=login.current_user.purchase_group,
    )

    expiry_time = util.format_timedelta(APP.config["TICKET_EXPIRY_TIME"])

    for user in set(request.requester
                    for request in login.current_user.purchase_group.requests
                    if request.requester != login.current_user):
        APP.email_manager.send_template(
            user.email,
            "Group Purchase Completed - Complete Payment Now!",
            "group_purchase_completed.email",
            name=user.forenames,
            group_leader=login.current_user.full_name,
            url=flask.url_for("purchase.complete_payment", _external=True),
            expiry_time=expiry_time,
        )

    flask.flash("The tickets for your group have been reserved", "success")
    flask.flash("You can now proceed to pay for your own tickets.", "info")
    flask.flash(
        ("Your group members have been emailed to remind them to pay for "
         "their tickets."),
        "info",
    )
    flask.flash(
        "Any tickets not paid for within {0} will be cancelled.".format(
            expiry_time),
        "warning",
    )

    return flask.redirect(flask.url_for("purchase.complete_payment"))