def fees_by_events_view(self): from_date = request.args.get('from_date') to_date = request.args.get('to_date') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.fees_by_events_view')) marketer_role = CustomSysRole.query.filter_by(name='Marketer').first() marketer_id = login.current_user.id if login.current_user.is_sys_role( marketer_role.id) else None if from_date and to_date: orders = TicketingManager.get_orders( from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y'), status='completed', marketer_id=marketer_id) else: orders = TicketingManager.get_orders(status='completed', marketer_id=marketer_id) events = DataGetter.get_all_events() fee_summary = {} for event in events: fee_summary[str(event.id)] = { 'name': event.name, 'payment_currency': event.payment_currency, 'fee_rate': get_fee(event.payment_currency), 'fee_amount': 0, 'tickets_count': 0 } fee_total = 0 tickets_total = 0 for order in orders: for order_ticket in order.tickets: fee_summary[str( order.event.id)]['tickets_count'] += order_ticket.quantity tickets_total += order_ticket.quantity ticket = CachedGetter.get_ticket(order_ticket.ticket_id) if order.paid_via != 'free' and order.amount > 0 and ticket.price > 0: fee = ticket.price * ( get_fee(order.event.payment_currency) / 100) fee = forex(order.event.payment_currency, self.display_currency, fee) fee_summary[str(order.event.id)]['fee_amount'] += fee fee_total += fee return self.render('/gentelella/admin/super_admin/sales/fees.html', fee_summary=fee_summary, display_currency=self.display_currency, from_date=from_date, to_date=to_date, tickets_total=tickets_total, fee_total=fee_total)
def display_orders(event_id): from_date = request.args.get('from_date') to_date = request.args.get('to_date') discount_code = request.args.get('discount_code') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.display_orders', event_id=event_id)) if from_date and to_date: orders = TicketingManager.get_orders( event_id=event_id, from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y')) elif discount_code == '': return redirect(url_for('.display_orders', event_id=event_id)) elif discount_code: orders = TicketingManager.get_orders( event_id=event_id, discount_code=discount_code, ) else: orders = TicketingManager.get_orders(event_id) event = DataGetter.get_event(event_id) return render_template('gentelella/users/events/tickets/orders.html', event=event, event_id=event_id, orders=orders, from_date=from_date, to_date=to_date, discount_code=discount_code)
def display_orders(event_id, pdf=None): from_date = request.args.get('from_date') to_date = request.args.get('to_date') discount_code = request.args.get('discount_code') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.display_orders', event_id=event_id)) if from_date and to_date: orders = TicketingManager.get_orders( event_id=event_id, from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y') ) elif discount_code == '': return redirect(url_for('.display_orders', event_id=event_id)) elif discount_code: orders = TicketingManager.get_orders( event_id=event_id, discount_code=discount_code, ) else: orders = TicketingManager.get_orders(event_id) event = DataGetter.get_event(event_id) if pdf is not None: return (event, event_id, orders, discount_code) else: return render_template('gentelella/users/events/tickets/orders.html', event=event, event_id=event_id, orders=orders, from_date=from_date, to_date=to_date, discount_code=discount_code)
def fees_by_events_view(): from_date = request.args.get('from_date') to_date = request.args.get('to_date') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.fees_by_events_view')) marketer_role = CustomSysRole.query.filter_by(name='Marketer').first() marketer_id = login.current_user.id if login.current_user.is_sys_role(marketer_role.id) else None if from_date and to_date: orders = TicketingManager.get_orders( from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y'), status='completed', marketer_id=marketer_id ) else: orders = TicketingManager.get_orders(status='completed', marketer_id=marketer_id) events = DataGetter.get_all_events() fee_summary = {} for event in events: fee_summary[str(event.id)] = { 'name': event.name, 'payment_currency': event.payment_currency, 'fee_rate': get_fee(event.payment_currency), 'fee_amount': 0, 'tickets_count': 0 } fee_total = 0 tickets_total = 0 for order in orders: if order.event: for order_ticket in order.tickets: fee_summary[str(order.event.id)]['tickets_count'] += order_ticket.quantity tickets_total += order_ticket.quantity ticket = CachedGetter.get_ticket(order_ticket.ticket_id) if order.paid_via != 'free' and order.amount > 0 and ticket.price > 0: fee = ticket.price * (get_fee(order.event.payment_currency) / 100) fee = forex(order.event.payment_currency, display_currency, fee) fee_summary[str(order.event.id)]['fee_amount'] += fee fee_total += fee return render_template('gentelella/super_admin/sales/fees.html', fee_summary=fee_summary, display_currency=display_currency, from_date=from_date, to_date=to_date, tickets_total=tickets_total, fee_total=fee_total, navigation_bar=list_navbar())
def fees_by_events_view(self): from_date = request.args.get('from_date') to_date = request.args.get('to_date') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.fees_by_events_view')) if from_date and to_date: orders = TicketingManager.get_orders( from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y'), status='completed' ) else: orders = TicketingManager.get_orders(status='completed') events = DataGetter.get_all_events() fee_summary = {} for event in events: fee_summary[str(event.id)] = { 'name': event.name, 'payment_currency': event.payment_currency, 'fee_rate': get_fee(event.payment_currency), 'fee_amount': 0, 'tickets_count': 0 } fee_total = 0 tickets_total = 0 for order in orders: for order_ticket in order.tickets: fee_summary[str(order.event.id)]['tickets_count'] += order_ticket.quantity tickets_total += order_ticket.quantity ticket = TicketingManager.get_ticket(order_ticket.ticket_id) if order.paid_via != 'free' and order.amount > 0 and ticket.price > 0: fee = ticket.price * (get_fee(order.event.payment_currency)/100) fee = forex(order.event.payment_currency, self.display_currency, fee) fee_summary[str(order.event.id)]['fee_amount'] += fee fee_total += fee return self.render('/gentelella/admin/super_admin/sales/fees.html', fee_summary=fee_summary, display_currency=self.display_currency, from_date=from_date, to_date=to_date, tickets_total=tickets_total, fee_total=fee_total)
def export(event_id): orders = TicketingManager.get_orders(event_id) headers = [ 'Order#', 'Order Date', 'Status', 'Payment Type', 'Total Amount', 'Quantity', 'Discount Code', 'First Name', 'Last Name', 'Email' ] rows = [headers] for order in orders: if order.status != "deleted": column = [] column.append(str(order.get_invoice_number())) column.append( str(order.created_at) if order.created_at else '') column.append(str(order.status) if order.status else '') column.append(str(order.paid_via) if order.paid_via else '') column.append(str(order.amount) if order.amount else '') column.append(str(order.get_tickets_count())) column.append( str(order.discount_code.code) if order. discount_code else '') column.append( str(order.user.user_detail.firstname.encode('utf-8') ) if order.user.user_detail and order.user.user_detail.firstname else '') column.append( str(order.user.user_detail.lastname.encode('utf-8') ) if order.user.user_detail and order.user.user_detail.lastname else '') column.append( str(order.user.email) if order.user.email else '') rows.append(column) return rows
def display_ticket_stats(event_id): event = DataGetter.get_event(event_id) orders = TicketingManager.get_orders(event_id) orders_summary = { 'completed': { 'class': 'success', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'pending': { 'class': 'warning', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 } } tickets_summary = {} for ticket in event.tickets: tickets_summary[str(ticket.id)] = { 'name': ticket.name, 'quantity': ticket.quantity, 'completed': { 'tickets_count': 0, 'sales': 0 }, 'pending': { 'tickets_count': 0, 'sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'sales': 0 } } for order in orders: if order.status == 'initialized': order.status = 'pending' orders_summary[str(order.status)]['orders_count'] += 1 orders_summary[str(order.status)]['total_sales'] += order.amount for order_ticket in order.tickets: orders_summary[str(order.status)]['tickets_count'] += order_ticket.quantity ticket = get_ticket(order_ticket.ticket_id) tickets_summary[str(ticket.id)][str(order.status)]['tickets_count'] += order_ticket.quantity if order.paid_via != 'free' and order.amount > 0: tickets_summary[str(ticket.id)][str(order.status)]['sales'] += order_ticket.quantity * ticket.price return render_template('gentelella/admin/event/tickets/tickets.html', event=event, event_id=event_id, orders_summary=orders_summary, tickets_summary=tickets_summary)
def export(event_id): orders = TicketingManager.get_orders(event_id) headers = 'Order#,Order Date, Status, Payment Type, Total Amount, Quantity, Discount Code,' \ 'First Name, Last Name, Email \n' rows = [headers] for order in orders: if order.status != "deleted": column = [] column.append(str(order.get_invoice_number())) column.append( str(order.created_at) if order.created_at else '') column.append(str(order.status) if order.status else '') column.append(str(order.paid_via) if order.paid_via else '') column.append(str(order.amount) if order.amount else '') column.append(str(order.get_tickets_count())) column.append( str(order.discount_code.code) if order. discount_code else '') column.append( str(order.user.user_detail.firstname) if order.user. user_detail and order.user.user_detail.firstname else '') column.append( str(order.user.user_detail.lastname) if order.user. user_detail and order.user.user_detail.lastname else '') column.append( str(order.user.email) if order.user.email else '') rows.append(','.join(column)) csv_content = '\n'.join(rows) return csv_content
def export(event_id): orders = TicketingManager.get_orders(event_id) headers = 'Order#,Order Date, Status, Payment Type, Total Amount, Quantity, Discount Code,' \ 'First Name, Last Name, Email \n' rows = [headers] for order in orders: if order.status != "deleted": column = [] column.append(str(order.get_invoice_number())) column.append(str(order.created_at) if order.created_at else '') column.append(str(order.status) if order.status else '') column.append(str(order.paid_via) if order.paid_via else '') column.append(str(order.amount) if order.amount else '') column.append(str(order.get_tickets_count())) column.append(str(order.discount_code.code) if order.discount_code else '') column.append(str(order.user.user_detail.firstname.encode('utf-8')) if order.user.user_detail and order.user.user_detail.firstname else '') column.append(str(order.user.user_detail.lastname.encode('utf-8')) if order.user.user_detail and order.user.user_detail.lastname else '') column.append(str(order.user.email) if order.user.email else '') rows.append(','.join(column)) csv_content = '\n'.join(rows) return csv_content
def display_attendees(self, event_id): event = DataGetter.get_event(event_id) orders = TicketingManager.get_orders(event_id, status='completed') return self.render('/gentelella/admin/event/tickets/attendees.html', event=event, event_id=event_id, orders=orders)
def display_orders(self, event_id): event = DataGetter.get_event(event_id) orders = TicketingManager.get_orders(event_id) return self.render('/gentelella/admin/event/tickets/orders.html', event=event, event_id=event_id, orders=orders)
def display_attendees(event_id): event = DataGetter.get_event(event_id) orders = TicketingManager.get_orders(event_id) holders = [] for order in orders: for holder in order.ticket_holders: discount = TicketingManager.get_discount_code( event_id, order.discount_code_id) order_holder = {} order_holder['order_invoice'] = order.get_invoice_number() order_holder['order_url'] = url_for('ticketing.view_order_after_payment', order_identifier=order.identifier) \ if order.status == 'completed' else url_for('ticketing.show_transaction_error', \ order_identifier=order.identifier) order_holder['by_whom'] = order.user.user_detail.fullname if order.user.user_detail \ and order.user.user_detail.fullname else order.user.email order_holder['paid_via'] = order.paid_via order_holder['status'] = order.status order_holder['completed_at'] = order.completed_at order_holder['created_at'] = order.created_at order_holder['ticket_name'] = holder.ticket.name order_holder['firstname'] = holder.firstname order_holder['lastname'] = holder.lastname order_holder['email'] = holder.email order_holder['ticket_name'] = holder.ticket.name order_holder['ticket_price'] = holder.ticket.price if discount and str( holder.ticket.id) in discount.tickets.split(","): if discount.type == "amount": order_holder['ticket_price'] = order_holder[ 'ticket_price'] - discount.value else: order_holder['ticket_price'] = order_holder['ticket_price'] - (order_holder['ticket_price'] \ * discount.value / 100.0 ) order_holder['checked_in'] = holder.checked_in order_holder['id'] = holder.id holders.append(order_holder) if len(order.ticket_holders) == 0: order_holder = {} order_holder['order_invoice'] = order.get_invoice_number() order_holder['order_url'] = url_for('ticketing.view_order_after_payment', order_identifier=order.identifier) \ if order.status == 'completed' else url_for('ticketing.show_transaction_error', \ order_identifier=order.identifier) order_holder['by_whom'] = order.user.user_detail.fullname if order.user.user_detail \ and order.user.user_detail.fullname else order.user.email order_holder['paid_via'] = order.paid_via order_holder['status'] = order.status order_holder['completed_at'] = order.completed_at order_holder['created_at'] = order.created_at holders.append(order_holder) return render_template('gentelella/admin/event/tickets/attendees.html', event=event, event_id=event_id, holders=holders)
def sales_by_marketer_view(by_discount_code=False): from_date = request.args.get('from_date') to_date = request.args.get('to_date') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.sales_by_marketer_view')) orders_summary = { 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0, 'total_discounts': 0 } tickets_summary = {} if not by_discount_code: user_roles = UserSystemRole.query.filter(CustomSysRole.name == 'Marketer').all() active_users_ids = [x.id for x in user_roles] marketers = User.query.filter(User.id.in_(active_users_ids)).all() for marketer in marketers: tickets_summary[str(marketer.id)] = { 'email': marketer.email, 'name': marketer.user_detail.firstname, 'tickets_count': 0, 'sales': 0, 'discounts': 0 } else: discount_codes = InvoicingManager.get_discount_codes() for discount_code in discount_codes: tickets_summary[str(discount_code.id)] = { 'email': discount_code.code, 'name': str(discount_code.value) + '% off for ' + str(discount_code.max_quantity) + ' months', 'tickets_count': 0, 'sales': 0, 'discounts': 0, 'marketer': discount_code.marketer.email } events = DataGetter.get_all_events_with_discounts() for event in events: temp_month_summary = {} print event discount_coupon = CachedGetter.get_discount_code(event.discount_code_id) if not by_discount_code: key = str(discount_coupon.marketer_id) else: key = str(discount_coupon.id) if from_date and to_date: orders = TicketingManager.get_orders( from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y'), status='completed', event_id=event.id ) else: orders = TicketingManager.get_orders(status='completed', event_id=event.id) for order in orders: if order.status == 'completed' and order.paid_via != 'free': orders_summary['orders_count'] += 1 key = '{month:02d}{year:d}'.format(month=order.completed_at.month, year=order.completed_at.year) temp_month_summary[key] = order.amount orders_summary['sales'] += order.amount for order_ticket in order.tickets: tickets_summary[key]['tickets_count'] += order_ticket.quantity orders_summary['tickets_count'] += order_ticket.quantity # Calculate discount on a monthly basis month_count = 1 for amount in temp_month_summary: if discount_coupon.max_quantity <= month_count: tickets_summary[key]['discounts'] \ += amount * (discount_coupon.value / 100) orders_summary['total_discounts'] += amount * (discount_coupon.value / 100) month_count += 1 return render_template('gentelella/super_admin/sales/by_marketer.html', tickets_summary=tickets_summary, display_currency=display_currency, from_date=from_date, to_date=to_date, key_name='marketers' if not by_discount_code else 'discount codes', orders_summary=orders_summary, navigation_bar=list_navbar())
def display_ticket_stats(event_id): event = DataGetter.get_event(event_id) orders = TicketingManager.get_orders(event_id) orders_summary = { 'completed': { 'class': 'success', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'placed': { 'class': 'info', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'pending': { 'class': 'warning', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'deleted': { 'class': 'primary', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'cancelled': { 'class': 'default', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 } } tickets_summary = {} for ticket in event.tickets: tickets_summary[str(ticket.id)] = { 'name': ticket.name, 'quantity': ticket.quantity, 'completed': { 'tickets_count': 0, 'sales': 0 }, 'placed': { 'tickets_count': 0, 'sales': 0 }, 'pending': { 'tickets_count': 0, 'sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'sales': 0 }, 'deleted': { 'tickets_count': 0, 'sales': 0 }, 'cancelled': { 'tickets_count': 0, 'sales': 0 }, } for order in orders: if order.status == 'initialized': order.status = 'pending' fees = DataGetter.get_fee_settings_by_currency( DataGetter.get_event(order.event_id).payment_currency) orders_summary[str(order.status)]['orders_count'] += 1 orders_summary[str(order.status)]['total_sales'] += order.amount for order_ticket in order.tickets: discount = TicketingManager.get_discount_code( event_id, order.discount_code_id) orders_summary[str( order.status)]['tickets_count'] += order_ticket.quantity ticket = get_ticket(order_ticket.ticket_id) tickets_summary[str(ticket.id)][str( order.status)]['tickets_count'] += order_ticket.quantity ticket_price = ticket.price if fees and not ticket.absorb_fees: order_fee = fees.service_fee * (ticket.price * order_ticket.quantity) / 100.0 if order_fee > fees.maximum_fee: ticket_price = ticket.price + fees.maximum_fee / order_ticket.quantity else: ticket_price = ticket.price + fees.service_fee * ticket.price / 100.0 if order.paid_via != 'free' and order.amount > 0: if discount and str(ticket.id) in discount.tickets.split(","): if discount.type == "amount": tickets_summary[str(ticket.id)][str( order.status )]['sales'] += order_ticket.quantity * (ticket_price - discount.value) else: tickets_summary[str(ticket.id)][str( order.status )]['sales'] += order_ticket.quantity * ( ticket_price - discount.value * ticket_price / 100.0) else: tickets_summary[str(ticket.id)][str( order.status )]['sales'] += order_ticket.quantity * ticket_price return render_template('gentelella/users/events/tickets/tickets.html', event=event, event_id=event_id, orders_summary=orders_summary, tickets_summary=tickets_summary)
def display_attendees(event_id): event = DataGetter.get_event(event_id) from_date = request.args.get('from_date') to_date = request.args.get('to_date') selected_ticket = request.args.get('ticket_name') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.display_attendees', event_id=event_id)) if from_date and to_date: orders = TicketingManager.get_orders( event_id=event_id, from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y')) else: orders = TicketingManager.get_orders(event_id) holders = [] ticket_names = [] for ticket in event.tickets: ticket_names.append(ticket.name) for order in orders: for holder in order.ticket_holders: if selected_ticket is not None: if selected_ticket != "All": if holder.ticket.name != selected_ticket: continue discount = TicketingManager.get_discount_code( event_id, order.discount_code_id) order_holder = { 'order_invoice': order.get_invoice_number(), 'paid_via': order.paid_via, 'status': order.status, 'completed_at': order.completed_at, 'created_at': order.created_at, 'ticket_name': holder.ticket.name, 'firstname': holder.firstname, 'lastname': holder.lastname, 'email': holder.email, 'ticket_price': holder.ticket.price } if order.status == 'completed': order_holder['order_url'] = url_for( 'ticketing.view_order_after_payment', order_identifier=order.identifier) else: order_holder['order_url'] = url_for( 'ticketing.show_transaction_error', order_identifier=order.identifier) order_holder['by_whom'] = order.user.user_detail.fullname \ if order.user.user_detail and order.user.user_detail.fullname else order.user.email if discount and str( holder.ticket.id) in discount.tickets.split(","): if discount.type == "amount": order_holder['ticket_price'] = order_holder[ 'ticket_price'] - discount.value else: order_holder['ticket_price'] -= order_holder[ 'ticket_price'] * discount.value / 100.0 order_holder['checked_in'] = holder.checked_in order_holder['id'] = holder.id holders.append(order_holder) if len(order.ticket_holders) == 0: order_holder = { 'order_invoice': order.get_invoice_number(), 'paid_via': order.paid_via, 'status': order.status, 'completed_at': order.completed_at, 'created_at': order.created_at } if order.status == 'completed': order_holder['order_url'] = url_for( 'ticketing.view_order_after_payment', order_identifier=order.identifier) else: order_holder['order_url'] = url_for( 'ticketing.show_transaction_error', order_identifier=order.identifier) order_holder['by_whom'] = order.user.user_detail.fullname \ if order.user.user_detail and order.user.user_detail.fullname else order.user.email holders.append(order_holder) return render_template('gentelella/users/events/tickets/attendees.html', event=event, event_id=event_id, holders=holders, from_date=from_date, to_date=to_date, ticket_names=ticket_names, selected_ticket=selected_ticket)
def details_view(event_id): event = DataGetter.get_event(event_id) orders = TicketingManager.get_orders(event_id) checklist = {"": ""} if fields_not_empty(event, [ 'name', 'start_time', 'end_time', 'location_name', 'organizer_name', 'organizer_description' ]): checklist["1"] = 'success' elif fields_not_empty(event, ['name', 'start_time', 'end_time']): checklist["1"] = 'missing_some' else: checklist["1"] = 'missing_main' call_for_speakers = DataGetter.get_call_for_papers(event_id).first() if call_for_speakers: if fields_not_empty(call_for_speakers, ['announcement', 'start_date', 'end_date']): checklist["4"] = "success" elif fields_not_empty(call_for_speakers, ['start_date', 'end_date']): checklist["4"] = "missing_some" else: checklist["4"] = 'missing_main' else: checklist["4"] = "optional" sponsors = DataGetter.get_sponsors(event_id).all() if not sponsors: checklist["2"] = 'optional' else: for sponsor in sponsors: if fields_not_empty( sponsor, ['name', 'description', 'url', 'level', 'logo']): checklist["2"] = 'success' break else: checklist["2"] = 'missing_some' if event.has_session_speakers: session_types = DataGetter.get_session_types_by_event_id(event_id) tracks = DataGetter.get_tracks(event_id) microlocations = DataGetter.get_microlocations(event_id) if not session_types and not tracks and not microlocations: checklist["3"] = 'optional' elif not session_types or not tracks or not microlocations: checklist["3"] = 'missing_main' else: for session_type in session_types: if fields_not_empty(session_type, ['name', 'length']): checklist["3"] = 'success' break else: checklist["3"] = 'missing_some' for microlocation in microlocations: if fields_not_empty(microlocation, ['name']): checklist["3"] = 'success' break else: checklist["3"] = 'missing_some' for tracks in tracks: if fields_not_empty(tracks, ['name', 'color']): checklist["3"] = 'success' break else: checklist["3"] = 'missing_some' checklist["5"] = 'success' else: checklist["3"] = 'optional' checklist["4"] = 'optional' checklist["5"] = 'optional' if not current_user.can_publish_event( ) and not AuthManager.is_verified_user(): flash( Markup( 'To make your event live, please verify your email by ' 'clicking on the confirmation link that has been emailed to you.<br>' 'Did not get the email? Please <a href="/resend_email/" class="alert-link"> click here to ' 'resend the confirmation.</a>')) sessions = { 'pending': get_count( DataGetter.get_sessions_by_state_and_event_id('pending', event_id)), 'accepted': get_count( DataGetter.get_sessions_by_state_and_event_id( 'accepted', event_id)), 'rejected': get_count( DataGetter.get_sessions_by_state_and_event_id( 'rejected', event_id)), 'draft': get_count( DataGetter.get_sessions_by_state_and_event_id('draft', event_id)) } tickets_summary = {} for ticket in event.tickets: tickets_summary[str(ticket.id)] = { 'name': ticket.name, 'quantity': ticket.quantity, 'completed': { 'tickets_count': 0, 'sales': 0 }, 'placed': { 'tickets_count': 0, 'sales': 0 }, 'pending': { 'tickets_count': 0, 'sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'sales': 0 }, 'deleted': { 'tickets_count': 0, 'sales': 0 }, 'cancelled': { 'tickets_count': 0, 'sales': 0 }, } orders_summary = { 'completed': { 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'placed': { 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'pending': { 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'expired': { 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'deleted': { 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'cancelled': { 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 } } for order in orders: if order.status == 'initialized': order.status = 'pending' fees = DataGetter.get_fee_settings_by_currency( DataGetter.get_event(order.event_id).payment_currency) orders_summary[str(order.status)]['orders_count'] += 1 orders_summary[str(order.status)]['total_sales'] += order.amount for order_ticket in order.tickets: discount = TicketingManager.get_discount_code( event_id, order.discount_code_id) orders_summary[str( order.status)]['tickets_count'] += order_ticket.quantity ticket = get_ticket(order_ticket.ticket_id) tickets_summary[str(ticket.id)][str( order.status)]['tickets_count'] += order_ticket.quantity ticket_price = ticket.price if fees and not ticket.absorb_fees: order_fee = fees.service_fee * (ticket.price * order_ticket.quantity) / 100.0 if order_fee > fees.maximum_fee: ticket_price = ticket.price + fees.maximum_fee / order_ticket.quantity else: ticket_price = ticket.price + fees.service_fee * ticket.price / 100.0 if order.paid_via != 'free' and order.amount > 0: if discount and str(ticket.id) in discount.tickets.split(","): if discount.type == "amount": tickets_summary[str(ticket.id)][str( order.status )]['sales'] += order_ticket.quantity * (ticket_price - discount.value) else: tickets_summary[str(ticket.id)][str( order.status )]['sales'] += order_ticket.quantity * ( ticket_price - discount.value * ticket_price / 100.0) else: tickets_summary[str(ticket.id)][str( order.status )]['sales'] += order_ticket.quantity * ticket_price return render_template('gentelella/users/events/details/details.html', event=event, checklist=checklist, sessions=sessions, tickets_summary=tickets_summary, orders_summary=orders_summary, settings=get_settings())
def display_attendees(event_id, pdf=None): event = DataGetter.get_event(event_id) from_date = request.args.get('from_date') to_date = request.args.get('to_date') selected_ticket = request.args.get('ticket_name') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.display_attendees', event_id=event_id)) if from_date and to_date: orders = TicketingManager.get_orders( event_id=event_id, from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y') ) else: orders = TicketingManager.get_orders(event_id) holders = [] ticket_names = [] for ticket in event.tickets: ticket_names.append(ticket.name) for order in orders: for holder in order.ticket_holders: if selected_ticket is not None: if selected_ticket != "All": if holder.ticket.name != selected_ticket: continue discount = TicketingManager.get_discount_code(event_id, order.discount_code_id) order_holder = { 'order_invoice': order.get_invoice_number(), 'paid_via': order.paid_via, 'status': order.status, 'completed_at': order.completed_at, 'created_at': order.created_at, 'ticket_name': holder.ticket.name, 'ticket_type': holder.ticket.type, 'firstname': holder.firstname, 'lastname': holder.lastname, 'email': holder.email, 'country': holder.country, 'ticket_price': holder.ticket.price, 'discount': discount } if order.status == 'completed': order_holder['order_url'] = url_for('ticketing.view_order_after_payment', order_identifier=order.identifier) else: order_holder['order_url'] = url_for('ticketing.show_transaction_error', order_identifier=order.identifier) order_holder['by_whom'] = order.user.user_detail.fullname \ if order.user.user_detail and order.user.user_detail.fullname else order.user.email if discount and str(holder.ticket.id) in discount.tickets.split(","): if discount.type == "amount": order_holder['ticket_price'] = order_holder['ticket_price'] - discount.value else: order_holder['ticket_price'] -= order_holder['ticket_price'] * discount.value / 100.0 order_holder['checked_in'] = holder.checked_in order_holder['id'] = holder.id holders.append(order_holder) if len(order.ticket_holders) == 0: order_holder = { 'order_invoice': order.get_invoice_number(), 'paid_via': order.paid_via, 'status': order.status, 'completed_at': order.completed_at, 'created_at': order.created_at } if order.status == 'completed': order_holder['order_url'] = url_for('ticketing.view_order_after_payment', order_identifier=order.identifier) else: order_holder['order_url'] = url_for('ticketing.show_transaction_error', order_identifier=order.identifier) order_holder['by_whom'] = order.user.user_detail.fullname \ if order.user.user_detail and order.user.user_detail.fullname else order.user.email holders.append(order_holder) if pdf is not None: return (event, event_id, holders, orders, ticket_names, selected_ticket) else: return render_template('gentelella/users/events/tickets/attendees.html', event=event, event_id=event_id, holders=holders, from_date=from_date, to_date=to_date, ticket_names=ticket_names, selected_ticket=selected_ticket)
def sales_by_events_view(self, path): from_date = request.args.get('from_date') to_date = request.args.get('to_date') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.sales_by_events_view', path=path)) promoted_events = path == 'promoted-events' if from_date and to_date: orders = TicketingManager.get_orders( from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y'), promoted_event=promoted_events) else: orders = TicketingManager.get_orders( promoted_event=promoted_events) if promoted_events: events = DataGetter.get_all_events_with_discounts() else: events = DataGetter.get_all_events() completed_count = 0 completed_amount = 0 tickets_count = 0 orders_summary = { 'completed': { 'class': 'success', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'pending': { 'class': 'warning', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 } } tickets_summary_event_wise = {} tickets_summary_organizer_wise = {} tickets_summary_location_wise = {} for event in events: tickets_summary_event_wise[str(event.id)] = { 'name': event.name, 'payment_currency': event.payment_currency, 'marketer': '', 'discount_code': '', 'completed': { 'tickets_count': 0, 'sales': 0 }, 'pending': { 'tickets_count': 0, 'sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'sales': 0 } } if promoted_events: tickets_summary_event_wise[str(event.id)]['marketer'] = \ event.discount_code.marketer.email tickets_summary_event_wise[str(event.id)]['discount_code'] = \ str(event.discount_code.value) + '% off for ' + str(event.discount_code.max_quantity) + ' months' tickets_summary_organizer_wise[str(event.creator_id)] = \ copy.deepcopy(tickets_summary_event_wise[str(event.id)]) if event.creator: tickets_summary_organizer_wise[str( event.creator_id)]['name'] = event.creator.email tickets_summary_location_wise[unicode(event.searchable_location_name)] = \ copy.deepcopy(tickets_summary_event_wise[str(event.id)]) tickets_summary_location_wise[unicode(event.searchable_location_name)]['name'] = \ event.searchable_location_name for order in orders: if order.status == 'initialized': order.status = 'pending' orders_summary[str(order.status)]['orders_count'] += 1 orders_summary[str(order.status)]['total_sales'] += forex( order.event.payment_currency, self.display_currency, order.amount) for order_ticket in order.tickets: orders_summary[str( order.status)]['tickets_count'] += order_ticket.quantity ticket = CachedGetter.get_ticket(order_ticket.ticket_id) tickets_summary_event_wise[str(order.event_id)][str(order.status)]['tickets_count'] \ += order_ticket.quantity tickets_summary_organizer_wise[str(order.event.creator_id)][str(order.status)]['tickets_count'] \ += order_ticket.quantity tickets_summary_location_wise[str(order .event.searchable_location_name)][str(order .status)]['tickets_count'] \ += order_ticket.quantity if order.paid_via != 'free' and order.amount > 0: tickets_summary_event_wise[str(order.event_id)][str(order.status)]['sales'] += \ order_ticket.quantity * ticket.price tickets_summary_organizer_wise[str(order.event.creator_id)][str(order.status)]['sales'] += \ order_ticket.quantity * ticket.price tickets_summary_location_wise[str(order.event. searchable_location_name)][str(order. status)]['sales'] += \ order_ticket.quantity * ticket.price if path == 'events' or path == 'promoted-events': return self.render( '/gentelella/admin/super_admin/sales/by_events.html', tickets_summary=tickets_summary_event_wise, display_currency=self.display_currency, from_date=from_date, to_date=to_date, path=path, orders_summary=orders_summary) elif path == 'organizers': return self.render( '/gentelella/admin/super_admin/sales/by_organizer.html', tickets_summary=tickets_summary_organizer_wise, display_currency=self.display_currency, from_date=from_date, to_date=to_date, path=path, orders_summary=orders_summary) elif path == 'locations': return self.render( '/gentelella/admin/super_admin/sales/by_location.html', tickets_summary=tickets_summary_location_wise, display_currency=self.display_currency, from_date=from_date, to_date=to_date, path=path, orders_summary=orders_summary) else: abort(404)
def sales_by_events_view(path): from_date = request.args.get('from_date') to_date = request.args.get('to_date') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.sales_by_events_view', path=path)) promoted_events = path == 'promoted-events' if from_date and to_date: orders = TicketingManager.get_orders( from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y'), promoted_event=promoted_events ) else: orders = TicketingManager.get_orders(promoted_event=promoted_events) if promoted_events: events = DataGetter.get_all_events_with_discounts() else: events = DataGetter.get_all_events() orders_summary = { 'completed': { 'class': 'success', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'pending': { 'class': 'warning', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 } } tickets_summary_event_wise = {} tickets_summary_organizer_wise = {} tickets_summary_location_wise = {} for event in events: tickets_summary_event_wise[str(event.id)] = { 'name': event.name, 'payment_currency': event.payment_currency, 'marketer': '', 'discount_code': '', 'completed': { 'tickets_count': 0, 'sales': 0 }, 'pending': { 'tickets_count': 0, 'sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'sales': 0 } } if promoted_events: tickets_summary_event_wise[str(event.id)]['marketer'] = \ event.discount_code.marketer.email tickets_summary_event_wise[str(event.id)]['discount_code'] = \ str(event.discount_code.value) + '% off for ' + str(event.discount_code.max_quantity) + ' months' tickets_summary_organizer_wise[str(event.creator_id)] = \ copy.deepcopy(tickets_summary_event_wise[str(event.id)]) if event.creator: tickets_summary_organizer_wise[str(event.creator_id)]['name'] = event.creator.email tickets_summary_location_wise[unicode(event.searchable_location_name)] = \ copy.deepcopy(tickets_summary_event_wise[str(event.id)]) tickets_summary_location_wise[unicode(event.searchable_location_name)]['name'] = \ event.searchable_location_name for order in orders: if order.status == 'initialized': order.status = 'pending' orders_summary[str(order.status)]['orders_count'] += 1 orders_summary[str(order.status)]['total_sales'] += forex(order.event.payment_currency, display_currency, order.amount) for order_ticket in order.tickets: orders_summary[str(order.status)]['tickets_count'] += order_ticket.quantity ticket = CachedGetter.get_ticket(order_ticket.ticket_id) tickets_summary_event_wise[str(order.event_id)][str(order.status)]['tickets_count'] \ += order_ticket.quantity tickets_summary_organizer_wise[str(order.event.creator_id)][str(order.status)]['tickets_count'] \ += order_ticket.quantity tickets_summary_location_wise[str(order .event.searchable_location_name)][str(order .status)]['tickets_count'] \ += order_ticket.quantity if order.paid_via != 'free' and order.amount > 0: tickets_summary_event_wise[str(order.event_id)][str(order.status)]['sales'] += \ order_ticket.quantity * ticket.price tickets_summary_organizer_wise[str(order.event.creator_id)][str(order.status)]['sales'] += \ order_ticket.quantity * ticket.price tickets_summary_location_wise[str(order.event. searchable_location_name)][str(order. status)]['sales'] += \ order_ticket.quantity * ticket.price if path == 'events' or path == 'promoted-events': return render_template('gentelella/admin/super_admin/sales/by_events.html', tickets_summary=tickets_summary_event_wise, display_currency=display_currency, from_date=from_date, to_date=to_date, path=path, orders_summary=orders_summary, navigation_bar=list_navbar()) elif path == 'organizers': return render_template('gentelella/admin/super_admin/sales/by_organizer.html', tickets_summary=tickets_summary_organizer_wise, display_currency=display_currency, from_date=from_date, to_date=to_date, path=path, orders_summary=orders_summary, navigation_bar=list_navbar()) elif path == 'locations': return render_template('gentelella/admin/super_admin/sales/by_location.html', tickets_summary=tickets_summary_location_wise, display_currency=display_currency, from_date=from_date, to_date=to_date, path=path, orders_summary=orders_summary, navigation_bar=list_navbar()) else: abort(404)
def display_ticket_stats(event_id): event = DataGetter.get_event(event_id) orders = TicketingManager.get_orders(event_id) orders_summary = { 'completed': { 'class': 'success', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'placed': { 'class': 'info', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'pending': { 'class': 'warning', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'deleted': { 'class': 'primary', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'cancelled': { 'class': 'default', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 } } tickets_summary = {} for ticket in event.tickets: tickets_summary[str(ticket.id)] = { 'name': ticket.name, 'quantity': ticket.quantity, 'completed': { 'tickets_count': 0, 'sales': 0 }, 'placed': { 'tickets_count': 0, 'sales': 0 }, 'pending': { 'tickets_count': 0, 'sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'sales': 0 }, 'deleted': { 'tickets_count': 0, 'sales': 0 }, 'cancelled': { 'tickets_count': 0, 'sales': 0 }, } for order in orders: if order.status == 'initialized': order.status = 'pending' fees = DataGetter.get_fee_settings_by_currency(DataGetter.get_event(order.event_id).payment_currency) orders_summary[str(order.status)]['orders_count'] += 1 orders_summary[str(order.status)]['total_sales'] += order.amount for order_ticket in order.tickets: discount = TicketingManager.get_discount_code(event_id, order.discount_code_id) orders_summary[str(order.status)]['tickets_count'] += order_ticket.quantity ticket = get_ticket(order_ticket.ticket_id) tickets_summary[str(ticket.id)][str(order.status)]['tickets_count'] += order_ticket.quantity ticket_price = ticket.price if fees and not ticket.absorb_fees: order_fee = fees.service_fee * (ticket.price * order_ticket.quantity) / 100.0 if order_fee > fees.maximum_fee: ticket_price = ticket.price + fees.maximum_fee / order_ticket.quantity else: ticket_price = ticket.price + fees.service_fee * ticket.price / 100.0 if order.paid_via != 'free' and order.amount > 0: if discount and str(ticket.id) in discount.tickets.split(","): if discount.type == "amount": tickets_summary[str(ticket.id)][str(order.status)]['sales'] += order_ticket.quantity * ( ticket_price - discount.value) else: tickets_summary[str(ticket.id)][str(order.status)]['sales'] += order_ticket.quantity * ( ticket_price - discount.value * ticket_price / 100.0) else: tickets_summary[str(ticket.id)][str(order.status)]['sales'] += order_ticket.quantity * ticket_price return render_template('gentelella/users/events/tickets/tickets.html', event=event, event_id=event_id, orders_summary=orders_summary, tickets_summary=tickets_summary)
def sales_by_events_view(path): from_date = request.args.get('from_date') to_date = request.args.get('to_date') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.sales_by_events_view', path=path)) promoted_events = path == 'discounted-events' if from_date and to_date: orders = TicketingManager.get_orders( from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y'), promoted_event=promoted_events ) else: orders = TicketingManager.get_orders(promoted_event=promoted_events) if promoted_events: events = DataGetter.get_all_events_with_discounts() else: events = DataGetter.get_all_events() orders_summary = { 'completed': { 'class': 'success', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'placed': { 'class': 'info', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'pending': { 'class': 'warning', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'deleted': { 'class': 'primary', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'cancelled': { 'class': 'default', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 } } tickets_summary_event_wise = {} tickets_summary_organizer_wise = {} tickets_summary_location_wise = {} for event in events: tickets_summary_event_wise[str(event.id)] = { 'name': event.name, 'payment_currency': event.payment_currency, 'marketer': '', 'discount_code': '', 'live_url': url_for('event_detail.display_event_detail_home', identifier=event.identifier).replace('events', 'e'), 'event_url': url_for('events.details_view', event_id=event.id), 'start_time': event.start_time, 'end_time': event.end_time, 'completed': { 'tickets_count': 0, 'sales': 0 }, 'placed': { 'tickets_count': 0, 'sales': 0 }, 'pending': { 'tickets_count': 0, 'sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'sales': 0 }, 'cancelled': { 'tickets_count': 0, 'sales': 0 }, 'deleted': { 'tickets_count': 0, 'sales': 0 }, } organizer = DataGetter.get_user_event_roles_by_role_name(event.id, 'organizer').first() if promoted_events: tickets_summary_event_wise[str(event.id)]['marketer'] = \ event.discount_code.marketer.email tickets_summary_event_wise[str(event.id)]['discount_code'] = \ str(event.discount_code.value) + '% off for ' + str(event.discount_code.max_quantity) + ' months' tickets_summary_organizer_wise[str(organizer.user.id)] = \ copy.deepcopy(tickets_summary_event_wise[str(event.id)]) if organizer: tickets_summary_organizer_wise[str(organizer.user.id)]['name'] = organizer.user.email tickets_summary_location_wise[unicode(event.searchable_location_name)] = \ copy.deepcopy(tickets_summary_event_wise[str(event.id)]) tickets_summary_location_wise[unicode(event.searchable_location_name)]['name'] = \ event.searchable_location_name for order in orders: if order.event: if order.status == 'initialized': order.status = 'pending' orders_summary[str(order.status)]['orders_count'] += 1 orders_summary[str(order.status)]['total_sales'] += forex(order.event.payment_currency, display_currency, order.amount) for order_ticket in order.tickets: discount = TicketingManager.get_discount_code(order.event_id, order.discount_code_id) orders_summary[str(order.status)]['tickets_count'] += order_ticket.quantity ticket = CachedGetter.get_ticket(order_ticket.ticket_id) tickets_summary_event_wise[str(order.event_id)][str(order.status)]['tickets_count'] \ += order_ticket.quantity tickets_summary_organizer_wise[str(organizer.user.id)][str(order.status)]['tickets_count'] \ += order_ticket.quantity tickets_summary_location_wise[unicode(order.event.searchable_location_name)][str(order.status)][ 'tickets_count'] \ += order_ticket.quantity if order.paid_via != 'free' and order.amount > 0: if discount and str(ticket.id) in discount.tickets.split(","): if discount.type == "amount": tickets_summary_event_wise[str(order.event_id)][str(order.status)][ 'sales'] += forex(order.event.payment_currency, display_currency, \ order_ticket.quantity * (ticket.price - discount.value)) tickets_summary_organizer_wise[str(organizer.user.id)][str(order.status)][ 'sales'] += forex(order.event.payment_currency, display_currency, \ order_ticket.quantity * (ticket.price - discount.value)) tickets_summary_location_wise[str(order.event.searchable_location_name)][str(order.status)][ 'sales'] += forex(order.event.payment_currency, display_currency, \ order_ticket.quantity * (ticket.price - discount.value)) else: tickets_summary_event_wise[str(order.event_id)][str(order.status)]['sales'] += \ forex(order.event.payment_currency, display_currency, \ order_ticket.quantity * (ticket.price - discount.value * ticket.price / 100.0)) tickets_summary_organizer_wise[str(organizer.user.id)][str(order.status)]['sales'] += \ forex(order.event.payment_currency, display_currency, \ order_ticket.quantity * (ticket.price - discount.value * ticket.price / 100.0)) tickets_summary_location_wise[str(order.event.searchable_location_name)][str(order.status)]['sales'] += \ forex(order.event.payment_currency, display_currency, \ order_ticket.quantity * (ticket.price - discount.value * ticket.price / 100.0)) else: tickets_summary_event_wise[str(order.event_id)][str(order.status)][ 'sales'] += forex(order.event.payment_currency, display_currency, order_ticket.quantity * ticket.price) tickets_summary_organizer_wise[str(organizer.user.id)][str(order.status)][ 'sales'] += forex(order.event.payment_currency, display_currency, order_ticket.quantity * ticket.price) tickets_summary_location_wise[str(order.event.searchable_location_name)][str(order.status)][ 'sales'] += forex(order.event.payment_currency, display_currency, order_ticket.quantity * ticket.price) if path == 'events' or path == 'discounted-events': return render_template( 'gentelella/super_admin/sales/by_events.html', tickets_summary=tickets_summary_event_wise, display_currency=display_currency, from_date=from_date, to_date=to_date, path=path, orders_summary=orders_summary, navigation_bar=list_navbar()) elif path == 'organizers': return render_template( 'gentelella/super_admin/sales/by_organizer.html', tickets_summary=tickets_summary_organizer_wise, display_currency=display_currency, from_date=from_date, to_date=to_date, path=path, orders_summary=orders_summary, navigation_bar=list_navbar()) elif path == 'locations': return render_template( 'gentelella/super_admin/sales/by_location.html', tickets_summary=tickets_summary_location_wise, display_currency=display_currency, from_date=from_date, to_date=to_date, path=path, orders_summary=orders_summary, navigation_bar=list_navbar()) else: abort(404)
def display_ticket_stats(self, event_id): event = DataGetter.get_event(event_id) orders = TicketingManager.get_orders(event_id) completed_count = 0 completed_amount = 0 tickets_count = 0 orders_summary = { 'completed': { 'class': 'success', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'pending': { 'class': 'warning', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 } } tickets_summary = {} for ticket in event.tickets: tickets_summary[str(ticket.id)] = { 'name': ticket.name, 'quantity': ticket.quantity, 'completed': { 'tickets_count': 0, 'sales': 0 }, 'pending': { 'tickets_count': 0, 'sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'sales': 0 } } for order in orders: if order.status == 'initialized': order.status = 'pending' orders_summary[str(order.status)]['orders_count'] += 1 orders_summary[str(order.status)]['total_sales'] += order.amount for order_ticket in order.tickets: orders_summary[str( order.status)]['tickets_count'] += order_ticket.quantity ticket = self.get_ticket(order_ticket.ticket_id) tickets_summary[str(ticket.id)][str( order.status)]['tickets_count'] += order_ticket.quantity if order.paid_via != 'free' and order.amount > 0: tickets_summary[str(ticket.id)][str( order.status )]['sales'] += order_ticket.quantity * ticket.price return self.render('/gentelella/admin/event/tickets/tickets.html', event=event, event_id=event_id, orders_summary=orders_summary, tickets_summary=tickets_summary)
def sales_by_events_view(self, path): from_date = request.args.get('from_date') to_date = request.args.get('to_date') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.sales_by_events_view', path=path)) if from_date and to_date: orders = TicketingManager.get_orders( from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y') ) else: orders = TicketingManager.get_orders() events = DataGetter.get_all_events() completed_count = 0 completed_amount = 0 tickets_count = 0 orders_summary = { 'completed': { 'class': 'success', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'pending': { 'class': 'warning', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 } } tickets_summary_event_wise = {} tickets_summary_organizer_wise = {} tickets_summary_location_wise = {} for event in events: tickets_summary_event_wise[str(event.id)] = { 'name': event.name, 'payment_currency': event.payment_currency, 'completed': { 'tickets_count': 0, 'sales': 0 }, 'pending': { 'tickets_count': 0, 'sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'sales': 0 } } tickets_summary_organizer_wise[str(event.creator_id)] = \ copy.deepcopy(tickets_summary_event_wise[str(event.id)]) if event.creator: tickets_summary_organizer_wise[str(event.creator_id)]['name'] = event.creator.email tickets_summary_location_wise[unicode(event.searchable_location_name)] = \ copy.deepcopy(tickets_summary_event_wise[str(event.id)]) tickets_summary_location_wise[unicode(event.searchable_location_name)]['name'] = \ event.searchable_location_name for order in orders: if order.status == 'initialized': order.status = 'pending' orders_summary[str(order.status)]['orders_count'] += 1 orders_summary[str(order.status)]['total_sales'] += forex(order.event.payment_currency, self.display_currency, order.amount) for order_ticket in order.tickets: orders_summary[str(order.status)]['tickets_count'] += order_ticket.quantity ticket = TicketingManager.get_ticket(order_ticket.ticket_id) tickets_summary_event_wise[str(order.event_id)][str(order.status)]['tickets_count'] \ += order_ticket.quantity tickets_summary_organizer_wise[str(order.event.creator_id)][str(order.status)]['tickets_count'] \ += order_ticket.quantity tickets_summary_location_wise[str(order .event.searchable_location_name)][str(order .status)]['tickets_count'] \ += order_ticket.quantity if order.paid_via != 'free' and order.amount > 0: tickets_summary_event_wise[str(order.event_id)][str(order.status)]['sales'] += \ order_ticket.quantity * ticket.price tickets_summary_organizer_wise[str(order.event.creator_id)][str(order.status)]['sales'] += \ order_ticket.quantity * ticket.price tickets_summary_location_wise[str(order.event. searchable_location_name)][str(order. status)]['sales'] += \ order_ticket.quantity * ticket.price if path == 'events': return self.render('/gentelella/admin/super_admin/sales/by_events.html', tickets_summary=tickets_summary_event_wise, display_currency=self.display_currency, from_date=from_date, to_date=to_date, orders_summary=orders_summary) elif path == 'organizers': return self.render('/gentelella/admin/super_admin/sales/by_organizer.html', tickets_summary=tickets_summary_organizer_wise, display_currency=self.display_currency, from_date=from_date, to_date=to_date, orders_summary=orders_summary) elif path == 'locations': return self.render('/gentelella/admin/super_admin/sales/by_location.html', tickets_summary=tickets_summary_location_wise, display_currency=self.display_currency, from_date=from_date, to_date=to_date, orders_summary=orders_summary) else: abort(404)