def create_order(form, from_organizer=False): order = Order() order.status = 'pending' order.identifier = TicketingManager.get_new_order_identifier() order.event_id = form.get('event_id') if from_organizer: order.paid_via = form.get('payment_via') ticket_ids = form.getlist('ticket_ids[]') ticket_quantity = form.getlist('ticket_quantities[]') ticket_discount=form.get('promo_code','') discount=None if ticket_discount: discount=TicketingManager.get_discount_code(form.get('event_id'), form.get('promo_code','')) if not discount: flash('The promotional code entered is not valid. No offer has been applied to this order.', 'danger') else: flash('The promotional code entered is valid.offer has been applied to this order.', 'success') ticket_subtotals = [] if from_organizer: ticket_subtotals = form.getlist('ticket_subtotals[]') amount = 0 for index, id in enumerate(ticket_ids): if not string_empty(id) and int(ticket_quantity[index]) > 0: with db.session.no_autoflush: order_ticket = OrderTicket() order_ticket.ticket = TicketingManager.get_ticket(id) order_ticket.quantity = int(ticket_quantity[index]) order.tickets.append(order_ticket) if from_organizer: amount += int(ticket_subtotals[index]) else: amount += (order_ticket.ticket.price * order_ticket.quantity) if discount and discount.type=="amount": order.amount = max(amount-discount.value,0) elif discount: order.amount=amount-(discount.value*amount/100) else: order.amount=amount if login.current_user.is_authenticated: order.user_id = login.current_user.id save_to_db(order) return order
def create_order(form, from_organizer=False): order = Order() order.status = 'pending' order.identifier = TicketingManager.get_new_order_identifier() order.event_id = form.get('event_id') if from_organizer: order.paid_via = form.get('payment_via') ticket_ids = form.getlist('ticket_ids[]') ticket_quantity = form.getlist('ticket_quantities[]') ticket_subtotals = [] if from_organizer: ticket_subtotals = form.getlist('ticket_subtotals[]') amount = 0 for index, id in enumerate(ticket_ids): if not string_empty(id) and int(ticket_quantity[index]) > 0: with db.session.no_autoflush: order_ticket = OrderTicket() order_ticket.ticket = TicketingManager.get_ticket(id) order_ticket.quantity = int(ticket_quantity[index]) order.tickets.append(order_ticket) if from_organizer: amount += int(ticket_subtotals[index]) else: amount += (order_ticket.ticket.price * order_ticket.quantity) order.amount = amount if login.current_user.is_authenticated: order.user_id = login.current_user.id save_to_db(order) return order
def create_order(form, from_organizer=False): order = Order() order.status = 'pending' order.identifier = TicketingManager.get_new_order_identifier() order.event_id = form.get('event_id') if from_organizer: order.paid_via = form.get('payment_via') ticket_ids = form.getlist('ticket_ids[]') ticket_quantity = form.getlist('ticket_quantities[]') ticket_discount = form.get('promo_code', '') discount = None if ticket_discount: discount = TicketingManager.get_discount_code(form.get('event_id'), form.get('promo_code', '')) access_code = TicketingManager.get_access_code(form.get('event_id'), form.get('promo_code', '')) if access_code and discount: order.discount_code = discount flash('Both access code and discount code have been applied. You can make this order now.', 'success') elif discount: order.discount_code = discount flash('The promotional code entered is valid. Offer has been applied to this order.', 'success') elif access_code: flash('Your access code is applied and you can make this order now.', 'success') else: flash('The promotional code entered is not valid. No offer has been applied to this order.', 'danger') ticket_subtotals = [] if from_organizer: ticket_subtotals = form.getlist('ticket_subtotals[]') amount = 0 total_discount = 0 fees = DataGetter.get_fee_settings_by_currency(DataGetter.get_event(order.event_id).payment_currency) for index, id in enumerate(ticket_ids): if not string_empty(id) and int(ticket_quantity[index]) > 0: with db.session.no_autoflush: order_ticket = OrderTicket() order_ticket.ticket = TicketingManager.get_ticket(id) order_ticket.quantity = int(ticket_quantity[index]) order.tickets.append(order_ticket) if order_ticket.ticket.absorb_fees or not fees: ticket_amount = (order_ticket.ticket.price * order_ticket.quantity) amount += (order_ticket.ticket.price * order_ticket.quantity) else: order_fee = fees.service_fee * (order_ticket.ticket.price * order_ticket.quantity) / 100 if order_fee > fees.maximum_fee: ticket_amount = (order_ticket.ticket.price * order_ticket.quantity) + fees.maximum_fee amount += (order_ticket.ticket.price * order_ticket.quantity) + fees.maximum_fee else: ticket_amount = (order_ticket.ticket.price * order_ticket.quantity) + order_fee amount += (order_ticket.ticket.price * order_ticket.quantity) + order_fee if from_organizer: amount += float(ticket_subtotals[index]) else: if discount and str(order_ticket.ticket.id) in discount.tickets.split(","): if discount.type == "amount": total_discount += discount.value * order_ticket.quantity else: total_discount += discount.value * ticket_amount / 100 if discount: order.amount = max(amount - total_discount, 0) elif discount: order.amount = amount - (discount.value * amount / 100.0) else: order.amount = amount if login.current_user.is_authenticated: order.user_id = login.current_user.id save_to_db(order) return order