def pay_choose(): basket, total = get_basket() if not basket: redirect(url_for('tickets')) return render_template('payment-choose.html', basket=basket, total=total, StripePayment=StripePayment)
def add_payment_and_tickets(paymenttype): """ Insert payment and tickets from session data into DB """ infodata = session.get('ticketinfo') basket, total = get_basket() currency = get_user_currency() if not (basket and total): return None payment = paymenttype(currency, total) payment.amount += paymenttype.premium(currency, total) current_user.payments.append(payment) app.logger.info('Creating tickets for basket %s', basket) app.logger.info('Payment: %s for %s %s (was %s)', paymenttype.name, payment.amount, currency, total) app.logger.info('Ticket info: %s', infodata) if infodata: infolists = sum([infodata[i] for i in ticket_forms], []) for info in infolists: ticket_id = int(info.pop('ticket_id')) ticket = basket[ticket_id] for k, v in info.items(): attrib = TicketAttrib(k, v) ticket.attribs.append(attrib) for ticket in basket: name = get_form_name(ticket.type) if name and not ticket.attribs: app.logger.error('Ticket %s has no attribs', ticket) return None current_user.tickets.append(ticket) ticket.payment = payment if currency == 'GBP': ticket.expires = datetime.utcnow() + timedelta( days=app.config.get('EXPIRY_DAYS_TRANSFER')) elif currency == 'EUR': ticket.expires = datetime.utcnow() + timedelta( days=app.config.get('EXPIRY_DAYS_TRANSFER_EURO')) db.session.commit() session.pop('basket', None) session.pop('ticketinfo', None) return payment
def add_payment_and_tickets(paymenttype): """ Insert payment and tickets from session data into DB """ infodata = session.get('ticketinfo') basket, total = get_basket() currency = get_user_currency() if not (basket and total): return None payment = paymenttype(currency, total) payment.amount += paymenttype.premium(currency, total) current_user.payments.append(payment) app.logger.info('Creating tickets for basket %s', basket) app.logger.info('Payment: %s for %s %s (was %s)', paymenttype.name, payment.amount, currency, total) app.logger.info('Ticket info: %s', infodata) if infodata: infolists = sum([infodata[i] for i in ticket_forms], []) for info in infolists: ticket_id = int(info.pop('ticket_id')) ticket = basket[ticket_id] for k, v in info.items(): attrib = TicketAttrib(k, v) ticket.attribs.append(attrib) for ticket in basket: name = get_form_name(ticket.type) if name and not ticket.attribs: app.logger.error('Ticket %s has no attribs', ticket) return None current_user.tickets.append(ticket) ticket.payment = payment if currency == 'GBP': ticket.expires = datetime.utcnow() + timedelta(days=app.config.get('EXPIRY_DAYS_TRANSFER')) elif currency == 'EUR': ticket.expires = datetime.utcnow() + timedelta(days=app.config.get('EXPIRY_DAYS_TRANSFER_EURO')) db.session.commit() session.pop('basket', None) session.pop('ticketinfo', None) return payment
def build_info_form(formdata): basket, total = get_basket() if not basket: return None, basket, total parent_form = TicketInfoForm(formdata) # First, filter to the currently exposed forms forms = [getattr(parent_form, f) for f in ticket_forms] if not any(forms): # Nothing submitted, so create forms for the basket for i, ticket in enumerate(basket): name = get_form_name(ticket.type) if not name: continue f = getattr(parent_form, name) f.append_entry() ticket.form = f[-1] ticket.form.ticket_id.data = i if not any(forms): # No forms to fill return None, basket, total else: # If we have some details, match them to the basket # FIXME: doesn't play well with multiple browser tabs form_tickets = [t for t in basket if get_form_name(t.type)] entries = sum([f.entries for f in forms], []) for ticket, subform in zip(form_tickets, entries): ticket.form = subform # FIXME: check that there aren't any surplus submitted forms return parent_form, basket, total