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
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)
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)
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)