Пример #1
0
    def test_ticket_creation(self):
        with self.app.app_context():
            self.db.session.add(self.user)
            tt = TicketType.query.filter_by(fixed_id=0).one()
            ticket = Ticket(type=tt, user_id=self.user.id)
            self.db.session.add(ticket)
            self.db.session.commit()

            # A ticket without a payment isn't sold...
            assert sum(TicketType.get_ticket_sales().values()) == 0
            assert ticket.id is not None

            ticket.paid = True
            self.db.session.flush()
            # ... but a paid one is
            assert sum(TicketType.get_ticket_sales().values()) == 1

            ticket.expires = datetime.utcnow() - timedelta(minutes=1)
            self.db.session.flush()
            # Expired tickets still count towards capacity
            assert sum(TicketType.get_ticket_sales().values()) == 1

            ticket.paid = False
            self.db.session.flush()
            assert sum(TicketType.get_ticket_sales().values()) == 0
Пример #2
0
 def create_ticket_from_json(self, json=None):
     birth_date = str(time.strptime(json['birthDate'], "%Y-%m-%d")[:3])
     birth_date = re.sub(',\s', '-', birth_date)
     birth_date = re.sub('(\(|\))', '', birth_date)
     ticket = Ticket()
     ticket.first_name = json['firstName']
     ticket.last_name = json['lastName']
     ticket.birth_date = birth_date
     ticket.email = json['email']
     ticket.postal_code = json['zipCode'].replace(' ', '')
     ticket.residence = json['residence']
     ticket.city = json['city']
     ticket.purchase_date = time.strftime("%Y-%m-%d")
     ticket.paid = True
     ticket.price = self.get_ticket_price(ticket)
     db.session.add(ticket)
     db.session.commit()
     self.orders.append(ticket.ticket_id)
Пример #3
0
def tickets_choose_free(user_id=None):
    has_price = TicketPrice.query.filter(TicketPrice.price_int > 0)

    free_tts = TicketType.query.filter(
        ~has_price.filter(TicketPrice.type.expression).exists(), ).order_by(
            TicketType.order).all()

    if user_id is None:
        form = FreeTicketsNewUserForm()
        user = None
        new_user = True
    else:
        form = FreeTicketsForm()
        user = User.query.get_or_404(user_id)
        new_user = False

    if request.method != 'POST':
        for tt in free_tts:
            form.types.append_entry()
            form.types[-1].type_id.data = tt.id

    tts = {tt.id: tt for tt in free_tts}
    for f in form.types:
        f._type = tts[f.type_id.data]
        # TODO: apply per-user limits
        values = range(f._type.personal_limit + 1)
        f.amount.values = values
        f._any = any(values)

    if form.validate_on_submit():
        if new_user:
            app.logger.info('Creating new user with email %s and name %s',
                            form.email.data, form.name.data)
            user = User(form.email.data, form.name.data)
            flash('Created account for %s' % form.email.data)

        tickets = []
        for f in form.types:
            if f.amount.data:
                tt = f._type
                for i in range(f.amount.data):
                    t = Ticket(type=tt, user_id=user_id)
                    t.paid = True
                    user.tickets.append(t)
                    tickets.append(t)

                app.logger.info('Allocated %s %s tickets to user',
                                f.amount.data, tt.name)

        db.session.add(user)
        db.session.commit()

        code = user.login_code(app.config['SECRET_KEY'])
        send_template_email('Your complimentary tickets to EMF',
                            user.email,
                            app.config['CONTACT_EMAIL'],
                            'emails/tickets-free.txt',
                            user=user,
                            code=code,
                            tickets=tickets,
                            new_user=new_user)

        flash('Allocated %s ticket(s)' % len(tickets))
        return redirect(url_for('.tickets_choose_free'))

    if new_user:
        users = User.query.order_by(User.id).all()
    else:
        users = None

    return render_template('admin/tickets-choose-free.html',
                           form=form,
                           tts=free_tts,
                           user=user,
                           users=users)
Пример #4
0
def tickets_choose_free(user_id=None):
    has_price = TicketPrice.query.filter(TicketPrice.price_int > 0)

    free_tts = TicketType.query.filter(
        ~has_price.filter(TicketPrice.type.expression).exists(),
    ).order_by(TicketType.order).all()

    if user_id is None:
        form = FreeTicketsNewUserForm()
        user = None
        new_user = True
    else:
        form = FreeTicketsForm()
        user = User.query.get_or_404(user_id)
        new_user = False

    if request.method != 'POST':
        for tt in free_tts:
            form.types.append_entry()
            form.types[-1].type_id.data = tt.id

    tts = {tt.id: tt for tt in free_tts}
    for f in form.types:
        f._type = tts[f.type_id.data]
        # TODO: apply per-user limits
        values = range(f._type.personal_limit + 1)
        f.amount.values = values
        f._any = any(values)

    if form.validate_on_submit():
        if new_user:
            app.logger.info('Creating new user with email %s and name %s',
                            form.email.data, form.name.data)
            user = User(form.email.data, form.name.data)
            flash('Created account for %s' % form.email.data)

        tickets = []
        for f in form.types:
            if f.amount.data:
                tt = f._type
                for i in range(f.amount.data):
                    t = Ticket(type=tt, user_id=user_id)
                    t.paid = True
                    user.tickets.append(t)
                    tickets.append(t)

                app.logger.info('Allocated %s %s tickets to user', f.amount.data, tt.name)

        db.session.add(user)
        db.session.commit()

        code = user.login_code(app.config['SECRET_KEY'])
        msg = Message('Your complimentary tickets to EMF',
                      sender=app.config['TICKETS_EMAIL'],
                      recipients=[user.email])

        msg.body = render_template('emails/tickets-free.txt',
                            user=user, code=code, tickets=tickets,
                            new_user=new_user)

        if feature_enabled('ISSUE_TICKETS'):
            attach_tickets(msg, user)

        mail.send(msg)

        flash('Allocated %s ticket(s)' % len(tickets))
        return redirect(url_for('.tickets_choose_free'))

    if new_user:
        users = User.query.order_by(User.id).all()
    else:
        users = None

    return render_template('admin/tickets-choose-free.html',
                           form=form, tts=free_tts, user=user, users=users)