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, 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)
Esempio n. 3
0
def apply_promo():
    discount = TicketingManager.get_discount_code(request.form.get('event_id'), request.form.get('promo_code', ''))
    access_code = TicketingManager.get_access_code(request.form.get('event_id'), request.form.get('promo_code', ''))
    if discount and access_code and discount.is_active:
        return jsonify({
            'discount_type': discount.type,
            'discount_amount': discount.value,
            'discount_status': True,
            'access_status': True,
            'access_code_ticket': access_code.tickets,
            'discount_code_ticket': discount.tickets,
        })
    elif discount and discount.is_active:
        return jsonify({
            'discount_type': discount.type,
            'discount_amount': discount.value,
            'discount_status': True,
            'access_status': False,
            'discount_code_ticket': discount.tickets,
        })
    elif access_code:
        return jsonify({
            'access_status': True,
            'discount_status': False,
            'access_code_ticket': access_code.tickets,
        })
    else:
        return jsonify({
            'discount_status': False,
            'access_status': False,
        })
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)
Esempio n. 5
0
def display_my_tickets():
    page_content = {
        "tab_upcoming_events": "Upcoming Events",
        "tab_past_events": "Past Events",
        "title": "My Tickets"
    }

    upcoming_events_orders = TicketingManager.get_orders_of_user(
        upcoming_events=True)
    past_events_orders = TicketingManager.get_orders_of_user(
        upcoming_events=False)
    placeholder_images = DataGetter.get_event_default_images()
    custom_placeholder = DataGetter.get_custom_placeholders()
    im_config = DataGetter.get_image_configs()
    im_size = ''
    for config in im_config:
        if config.page == 'mysession':
            im_size = config.size

    return render_template('gentelella/admin/mytickets/mytickets_list.html',
                           page_content=page_content,
                           upcoming_events_orders=upcoming_events_orders,
                           past_events_orders=past_events_orders,
                           placeholder_images=placeholder_images,
                           custom_placeholder=custom_placeholder,
                           im_size=im_size)
def access_codes_edit(event_id, access_code_id=None):
    if not TicketingManager.get_access_code(event_id, access_code_id):
        abort(404)
    if request.method == 'POST':
        TicketingManager.create_edit_access_code(request.form, event_id, access_code_id)
        flash("The access code has been edited.", "success")
        return redirect(url_for('.access_codes_view', event_id=event_id))
    return access_codes_create(event_id, access_code_id)
Esempio n. 7
0
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 access_codes_create(event_id, access_code_id=None):
    event = DataGetter.get_event(event_id)
    if request.method == 'POST':
        TicketingManager.create_edit_access_code(request.form, event_id)
        flash("The access code has been added.", "success")
        return redirect(url_for('.access_codes_view', event_id=event_id))
    access_code = None
    if access_code_id:
        access_code = TicketingManager.get_access_code(event_id, access_code_id)
    return render_template('gentelella/users/events/tickets/access_codes_create.html', event=event, event_id=event_id,
                           access_code=access_code)
 def discount_codes_create(self, event_id, discount_code_id=None):
     event = DataGetter.get_event(event_id)
     if request.method == 'POST':
         TicketingManager.create_edit_discount_code(request.form, event_id)
         flash("The discount code has been added.", "success")
         return redirect(url_for('.discount_codes_view', event_id=event_id))
     discount_code = None
     if discount_code_id:
         discount_code = TicketingManager.get_discount_code(event_id, discount_code_id)
     return self.render('/gentelella/admin/event/tickets/discount_codes_create.html', event=event, event_id=event_id,
                        discount_code=discount_code)
Esempio n. 10
0
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)
Esempio n. 11
0
    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 discount_codes_create(self, event_id, discount_code_id=None):
     event = DataGetter.get_event(event_id)
     if request.method == 'POST':
         TicketingManager.create_edit_discount_code(request.form, event_id)
         flash("The discount code has been added.", "success")
         return redirect(url_for('.discount_codes_view', event_id=event_id))
     discount_code = None
     if discount_code_id:
         discount_code = TicketingManager.get_discount_code(
             event_id, discount_code_id)
     return self.render(
         '/gentelella/admin/event/tickets/discount_codes_create.html',
         event=event,
         event_id=event_id,
         discount_code=discount_code)
def send_event_fee_notification():
    with app.app_context():
        events = Event.query.all()
        for event in events:
            latest_invoice = EventInvoice.filter_by(event_id=event.id).order_by(EventInvoice.created_at.desc()).first()

            if latest_invoice:
                orders = Order.query\
                    .filter_by(event_id=event.id)\
                    .filter_by(status='completed')\
                    .filter(Order.completed_at > latest_invoice.created_at).all()
            else:
                orders = Order.query.filter_by(event_id=event.id).filter_by(status='completed').all()

            fee_total = 0
            for order in orders:
                for order_ticket in order.tickets:
                    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_total += fee

            if fee_total > 0:
                new_invoice = EventInvoice(amount=fee_total, event_id=event.id, user_id=event.creator_id)
                save_to_db(new_invoice)
                prev_month = monthdelta(new_invoice.created_at, 1).strftime("%b %Y")  # Displayed as Aug 2016
                send_email_for_monthly_fee_payment(new_invoice.user.email,
                                                   event.name,
                                                   prev_month,
                                                   new_invoice.amount,
                                                   url_for('event_invoicing.view_invoice',
                                                           invoice_identifier=new_invoice.identifier, _external=True))
def access_codes_delete(event_id, access_code_id=None):
    access_code = TicketingManager.get_access_code(event_id, access_code_id)
    if not access_code:
        abort(404)
    delete_from_db(access_code, "Access code deleted")
    flash("The access code has been deleted.", "warning")
    return redirect(url_for('.access_codes_view', event_id=event_id))
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)
Esempio n. 16
0
    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
Esempio n. 17
0
 def charge_stripe_order_payment(self):
     status, result = TicketingManager.charge_stripe_order_payment(
         request.form)
     if status:
         return jsonify({"status": "ok", "message": result.transaction_id})
     else:
         return jsonify({"status": "error", "message": result})
def discount_codes_delete(event_id, discount_code_id=None):
    discount_code = TicketingManager.get_discount_code(event_id, discount_code_id)
    if not discount_code:
        abort(404)
    delete_from_db(discount_code, "Discount code deleted")
    flash("The discount code has been deleted.", "warning")
    return redirect(url_for('.discount_codes_view', event_id=event_id))
def add_order(event_id):
    if request.method == 'POST':
        order = TicketingManager.create_order(request.form, True)
        return redirect(url_for('.proceed_order', event_id=event_id, order_identifier=order.identifier))

    event = DataGetter.get_event(event_id)
    return render_template('gentelella/users/events/tickets/add_order.html', event=event, event_id=event_id)
Esempio n. 20
0
    def export(event_id):
        (_, event_id, holders, _, _) = TicketingManager.get_attendee_export_info(event_id=event_id)
        if event_id == 275:
            headers = ['Order#', 'Order Date', 'Status', 'First Name', 'Last Name', 'Email', 'Country',
                'Occupation', 'Company/Instt', 'Gender', 'Expertise', 'Welcome Reception', 'Recruitment',
                'Unesco Hackathon', 'Payment Type', 'Ticket Name', 'Ticket Price', 'Ticket Type']

            fields = ('order_invoice', 'created_at', 'status', 'firstname', 'lastname', 'email', 'country',
                'occupation', 'occupation_detail', 'gender', 'expertise', 'welcome_reception', 'recruitment',
                'unesco_hackathon', 'paid_via', 'ticket_name', 'ticket_price', 'ticket_type')
        else:
            headers = ['Order#', 'Order Date', 'Status', 'First Name', 'Last Name', 'Email',
                       'Country', 'Payment Type', 'Ticket Name', 'Ticket Price', 'Ticket Type']

            fields = (
            'order_invoice', 'created_at', 'status', 'firstname', 'lastname',
            'email', 'country', 'paid_via', 'ticket_name', 'ticket_price', 'ticket_type')
        rows = [headers]
        for holder in holders:
            if holder['status'] != "deleted":
                columns = []
                for f in fields:
                    if type(holder.get(f, '')) == unicode:
                        columns.append(str(holder.get(f, '').encode('utf-8')))
                    else:
                        columns.append(str(holder.get(f, '')))
                rows.append(columns)

        return rows
Esempio n. 21
0
 def test_discounts_edit(self):
     with app.test_request_context():
         event, discount_code = create_discount_code(self)
         response = self.app.get(url_for(
             'event_ticket_sales.discount_codes_edit',
             event_id=event.id,
             discount_code_id=discount_code.id),
                                 follow_redirects=True)
         self.assertTrue(str(discount_code.code) in response.data,
                         msg=response.data)
         data = {
             "code": "ABC_123",
             "value": "100",
             "value_type": "percent",
             "min_quantity": "1",
             "max_quantity": "2",
             "tickets_number": "30",
             "tickets[]": ["1", "2"]
         }
         response = self.app.post(url_for(
             'event_ticket_sales.discount_codes_edit',
             event_id=event.id,
             discount_code_id=discount_code.id),
                                  data=data,
                                  follow_redirects=True)
         self.assertTrue(TicketingManager.get_discount_code(
             event.id, discount_code.id).type == 'percent',
                         msg=response.data)
def create_order():
    order = TicketingManager.create_order(request.form)
    if request.form.get('promo_code', '') != '':
        flash(
            'The promotional code entered is valid. No offer has been applied to this order.',
            'danger')
    return redirect(url_for('.view_order', order_identifier=order.identifier))
def access_codes_view(event_id):
    event = DataGetter.get_event(event_id)
    access_codes = TicketingManager.get_access_codes(event_id)
    return render_template('gentelella/users/events/tickets/access_codes.html',
                           event=event,
                           access_codes=access_codes,
                           event_id=event_id)
Esempio n. 24
0
    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_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)
Esempio n. 26
0
    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 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 access_codes_delete(event_id, access_code_id=None):
    access_code = TicketingManager.get_access_code(event_id, access_code_id)
    if not access_code:
        abort(404)
    delete_from_db(access_code, "Access code deleted")
    flash("The access code has been deleted.", "warning")
    return redirect(url_for('.access_codes_view', event_id=event_id))
 def test_discounts_toggle(self):
     with app.test_request_context():
         event, discount_code = create_discount_code(self)
         response = self.app.get(url_for('event_ticket_sales.discount_codes_toggle', event_id=event.id,
                                         discount_code_id=discount_code.id), follow_redirects=True)
         self.assertFalse(TicketingManager.get_discount_code(event.id, discount_code.id).is_active,
                          msg=response.data)
Esempio n. 30
0
def paypal_callback(order_identifier, function):
    order = TicketingManager.get_order_by_identifier(order_identifier)
    if not order or order.status == 'expired':
        abort(404)
    if function == 'cancel':
        order.status = 'expired'
        save_to_db(order)
        return redirect(url_for('event_detail.display_event_detail_home', identifier=order.event.identifier))
    elif function == 'success':
        status, result = TicketingManager.charge_paypal_order_payment(order)
        if status:
            return redirect(url_for('.view_order', order_identifier=order_identifier))
        else:
            flash("An error occurred while processing your transaction. " + str(result), "danger")
            return redirect(url_for('.show_transaction_error', order_identifier=order_identifier))
    abort(404)
def initiate_order_payment():
    paid_via = request.form.get('pay_via_service', 'stripe')
    result = TicketingManager.initiate_order_payment(request.form, paid_via)
    if result:
        if request.form.get('pay_via_service', 'stripe') != 'paypal':
            return jsonify({
                "status":
                "ok",
                "email":
                result.user.email,
                "action":
                "start_stripe" if result.status == 'initialized'
                and paid_via == 'stripe' else "show_completed"
            })
        else:
            return jsonify({
                "status":
                "ok",
                "email":
                result.user.email,
                "action":
                "start_paypal",
                "redirect_url":
                PayPalPaymentsManager.get_checkout_url(result)
            })
    else:
        return jsonify({"status": "error"})
 def discount_codes_view(self, event_id):
     event = DataGetter.get_event(event_id)
     discount_codes = TicketingManager.get_discount_codes(event_id)
     return self.render(
         '/gentelella/admin/event/tickets/discount_codes.html',
         event=event,
         discount_codes=discount_codes,
         event_id=event_id)
def view_order_after_payment(order_identifier):
    order = TicketingManager.get_and_set_expiry(order_identifier)
    if not order or (order.status != 'completed' and order.status != 'placed'):
        abort(404)
    return render_template(
        'gentelella/guest/ticketing/order_post_payment.html',
        order=order,
        event=order.event)
 def test_order_payment_paypal_cancel(self):
     with app.test_request_context():
         event, ticket, identifier = create_order(self)
         response = self.app.get(
             url_for('ticketing.paypal_callback', order_identifier=identifier, function="cancel"),
             follow_redirects=True)
         order = TicketingManager.get_order_by_identifier(identifier)
         self.assertTrue(order.status == 'expired', msg=order.status)
def discount_codes_view(event_id):
    event = DataGetter.get_event(event_id)
    discount_codes = TicketingManager.get_discount_codes(event_id)
    return render_template(
        'gentelella/users/events/tickets/discount_codes.html',
        event=event,
        discount_codes=discount_codes,
        event_id=event_id)
Esempio n. 36
0
 def test_order_payment_paypal(self):
     with app.test_request_context():
         event, ticket, identifier = create_order(self)
         data = {
             "identifier": identifier,
             "email": "*****@*****.**",
             "firstname": "John",
             "lastname": "Doe",
             "address": "ACME Lane",
             "city": "Loony",
             "state": "Tunes",
             "zipcode": "1451145",
             "country": "Warner",
             "pay_via_service": "paypal"
         }
         response = self.app.post(
             url_for('ticketing.initiate_order_payment'),
             data=data,
             follow_redirects=True)
         response_json = json.loads(response.data)
         self.assertEqual(data['email'],
                          response_json['email'],
                          msg=response.data)
         self.assertEqual("start_paypal",
                          response_json['action'],
                          msg=response.data)
         self.assertTrue("redirect_url" in response_json, msg=response.data)
         order = TicketingManager.get_order_by_identifier(identifier)
         self.assertEqual(order.status, 'initialized', msg=response.data)
         order.brand = "Visa"
         order.completed_at = datetime.now()
         order.status = "completed"
         order.paid_via = "paypal"
         order.transaction_id = "87906533255"
         save_to_db(order)
         response = self.app.get(url_for(
             'ticketing.view_order_after_payment',
             order_identifier=identifier),
                                 follow_redirects=True)
         self.assertTrue("ACME Lane" in response.data, msg=response.data)
         self.assertTrue("87906533255" in response.data, msg=response.data)
         self.assertTrue(str(event.name) in response.data,
                         msg=response.data)
         self.assertTrue(str(ticket.name) in response.data,
                         msg=response.data)
         response = self.app.get(url_for('ticketing.view_order',
                                         order_identifier=identifier),
                                 follow_redirects=False)
         self.assertEqual(response.status_code,
                          302,
                          msg=response.status_code)
         response = self.app.get(url_for(
             'ticketing.view_order_after_payment_pdf',
             order_identifier=identifier),
                                 follow_redirects=False)
         self.assertEqual(response.status_code,
                          200,
                          msg=response.status_code)
def access_codes_toggle(event_id, access_code_id=None):
    access_code = TicketingManager.get_access_code(event_id, access_code_id)
    if not access_code:
        abort(404)
    access_code.is_active = not access_code.is_active
    save_to_db(access_code)
    message = "Activated." if access_code.is_active else "Deactivated."
    flash("The access code has been " + message, "success")
    return redirect(url_for('.access_codes_view', event_id=event_id))
def access_codes_toggle(event_id, access_code_id=None):
    access_code = TicketingManager.get_access_code(event_id, access_code_id)
    if not access_code:
        abort(404)
    access_code.is_active = not access_code.is_active
    save_to_db(access_code)
    message = "Activated." if access_code.is_active else "Deactivated."
    flash("The access code has been " + message, "success")
    return redirect(url_for('.access_codes_view', event_id=event_id))
 def discount_codes_toggle(self, event_id, discount_code_id=None):
     discount_code = TicketingManager.get_discount_code(event_id, discount_code_id)
     if not discount_code:
         abort(404)
     discount_code.is_active = not discount_code.is_active
     save_to_db(discount_code)
     message = "Activated." if discount_code.is_active else "Deactivated."
     flash("The discount code has been " + message, "success")
     return redirect(url_for('.discount_codes_view', event_id=event_id))
def view_order_after_payment(order_identifier):
    order = TicketingManager.get_and_set_expiry(order_identifier)
    if not order or (order.status != 'completed' and order.status != 'placed'):
        abort(404)
    flash("An email with the ticket has also been sent to your email account.")
    return render_template(
        'gentelella/guest/ticketing/order_post_payment.html',
        order=order,
        event=order.event)
def view_order_after_payment(order_identifier):
    order = TicketingManager.get_and_set_expiry(order_identifier)
    if not order or (order.status != 'completed' and order.status != 'placed'):
        abort(404)
    flash("An email with the ticket has also been sent to your email account.")
    fees = DataGetter.get_fee_settings_by_currency(order.event.payment_currency)
    return render_template('gentelella/guest/ticketing/order_post_payment.html',
                           order=order,
                           event=order.event,
                           fees=fees)
def view_order_tickets_after_payment_pdf(order_identifier):
    order = TicketingManager.get_and_set_expiry(order_identifier)
    if not order or order.status != 'completed':
        abort(404)
    pdf = create_pdf(render_template('gentelella/guest/ticketing/pdf/ticket.html', order=order))
    response = make_response(pdf.getvalue())
    response.headers['Content-Type'] = 'application/pdf'
    response.headers['Content-Disposition'] = \
        'inline; filename=%s-Ticket.pdf' % order.event.name
    return response
 def test_order_expire(self):
     with app.test_request_context():
         event, ticket, identifier = create_order(self)
         response = self.app.get(url_for('ticketing.view_order', order_identifier=identifier), follow_redirects=True)
         self.assertEqual(response.status_code, 200, msg=response.status_code)
         self.assertTrue(str(event.name) in response.data, msg=response.data)
         order = TicketingManager.get_order_by_identifier(identifier)
         order.created_at = datetime.utcnow() - timedelta(minutes=11)
         save_to_db(order)
         response = self.app.get(url_for('ticketing.view_order', order_identifier=identifier), follow_redirects=True)
         self.assertEqual(response.status_code, 404, msg=response.status_code)
Esempio n. 44
0
def view_order_after_payment(order_identifier):
    order = TicketingManager.get_and_set_expiry(order_identifier)
    email = request.args.get('email', '')
    if not order or (order.status != 'completed' and order.status != 'placed'):
        abort(404)
    fees = DataGetter.get_fee_settings_by_currency(order.event.payment_currency)
    return render_template('gentelella/guest/ticketing/order_post_payment.html',
                           order=order,
                           event=order.event,
                           fees=fees,
                           email=email)
 def view_order_after_payment_pdf(self, order_identifier):
     order = TicketingManager.get_and_set_expiry(order_identifier)
     if not order or order.status != 'completed':
         abort(404)
     pdf = create_pdf(self.render('/gentelella/guest/ticketing/invoice_pdf.html',
                                  order=order, event=order.event))
     response = make_response(pdf.getvalue())
     response.headers['Content-Type'] = 'application/pdf'
     response.headers['Content-Disposition'] = \
         'inline; filename=%s.pdf' % order.get_invoice_number()
     return response
def attendee_check_in_toggle(event_id, holder_id):
    holder = TicketingManager.attendee_check_in_out(event_id, holder_id)
    if holder:
        return jsonify({
            'status': 'ok',
            'checked_in': holder.checked_in
        })

    return jsonify({
        'status': 'invalid_holder_id'
    })
def charge_stripe_order_payment():
    status, result = TicketingManager.charge_stripe_order_payment(request.form)
    if status:
        return jsonify({
            "status": "ok",
            "message": result.transaction_id
        })
    else:
        return jsonify({
            "status": "error",
            "message": result
        })
 def index_view(self):
     live_events = DataGetter.get_live_events()
     draft_events = DataGetter.get_draft_events()
     past_events = DataGetter.get_past_events()
     all_events = DataGetter.get_all_events()
     imported_events = DataGetter.get_imports_by_user()
     free_ticket_count = {}
     paid_ticket_count = {}
     donation_ticket_count = {}
     max_free_ticket = {}
     max_paid_ticket = {}
     max_donation_ticket = {}
     for event in all_events:
         free_ticket_count[event.id] = TicketingManager.get_orders_count_by_type(event.id, type='free')
         max_free_ticket[event.id] = TicketingManager.get_max_orders_count(event.id, type='free')
         paid_ticket_count[event.id] = TicketingManager.get_orders_count_by_type(event.id, type='paid')
         max_paid_ticket[event.id] = TicketingManager.get_max_orders_count(event.id, type='paid')
         donation_ticket_count[event.id] = TicketingManager.get_orders_count_by_type(event.id, type='donation')
         max_donation_ticket[event.id] = TicketingManager.get_max_orders_count(event.id, type='donation')
     if not is_verified_user():
         flash(Markup('Your account is unverified. '
                      'Please verify 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>'))
     return self.render('/gentelella/admin/event/index.html',
                        live_events=live_events,
                        draft_events=draft_events,
                        past_events=past_events,
                        all_events=all_events,
                        free_ticket_count=free_ticket_count,
                        paid_ticket_count=paid_ticket_count,
                        donation_ticket_count=donation_ticket_count,
                        max_free_ticket=max_free_ticket,
                        max_paid_ticket=max_paid_ticket,
                        max_donation_ticket=max_donation_ticket,
                        imported_events=imported_events)
Esempio n. 49
0
def index_view():
    live_events = DataGetter.get_all_live_events()
    draft_events = DataGetter.get_all_draft_events()
    past_events = DataGetter.get_all_past_events()
    all_events = DataGetter.get_all_events()
    trash_events = DataGetter.get_trash_events()
    free_ticket_count = {}
    paid_ticket_count = {}
    donation_ticket_count = {}
    max_free_ticket = {}
    max_paid_ticket = {}
    max_donation_ticket = {}
    for event in all_events:
        free_ticket_count[event.id] = TicketingManager.get_orders_count_by_type(event.id, type='free')
        max_free_ticket[event.id] = TicketingManager.get_max_orders_count(event.id, type='free')
        paid_ticket_count[event.id] = TicketingManager.get_orders_count_by_type(event.id, type='paid')
        max_paid_ticket[event.id] = TicketingManager.get_max_orders_count(event.id, type='paid')
        donation_ticket_count[event.id] = TicketingManager.get_orders_count_by_type(event.id, type='donation')
        max_donation_ticket[event.id] = TicketingManager.get_max_orders_count(event.id, type='donation')
    return render_template('gentelella/admin/super_admin/events/events.html',
                           live_events=live_events,
                           draft_events=draft_events,
                           past_events=past_events,
                           all_events=all_events,
                           trash_events=trash_events,
                           free_ticket_count=free_ticket_count,
                           paid_ticket_count=paid_ticket_count,
                           donation_ticket_count=donation_ticket_count,
                           max_free_ticket=max_free_ticket,
                           max_paid_ticket=max_paid_ticket,
                           max_donation_ticket=max_donation_ticket,
                           navigation_bar=list_navbar())
def proceed_order(event_id, order_identifier):
    order = TicketingManager.get_order_by_identifier(order_identifier)
    if order:
        if order.status == 'completed':
            return redirect(url_for('ticketing.view_order_after_payment', order_identifier=order_identifier))
        return render_template('gentelella/guest/ticketing/order_pre_payment.html', order=order, event=order.event,
                               countries=list(pycountry.countries),
                               from_organizer=True,
                               pay_via=order.paid_via,
                               stripe_publishable_key=get_settings()['stripe_publishable_key'])
    else:
        abort(404)
    return redirect(url_for('.display_ticket_stats', event_id=event_id))
Esempio n. 51
0
def user_tickets(user_id):
    page_content = {"tab_upcoming_events": "Upcoming Events",
                    "tab_past_events": "Past Events",
                    "title": "My Tickets"}

    upcoming_events_orders = TicketingManager.get_orders_of_user(user_id=user_id, upcoming_events=True)
    past_events_orders = TicketingManager.get_orders_of_user(user_id=user_id, upcoming_events=False)
    placeholder_images = DataGetter.get_event_default_images()
    custom_placeholder = DataGetter.get_custom_placeholders()
    im_config = DataGetter.get_image_configs()
    im_size = ''
    for config in im_config:
        if config.page == 'mysession':
            im_size = config.size

    return render_template('gentelella/users/mytickets/mytickets_list.html',
                           page_content=page_content,
                           upcoming_events_orders=upcoming_events_orders,
                           past_events_orders=past_events_orders,
                           placeholder_images=placeholder_images,
                           custom_placeholder=custom_placeholder,
                           im_size=im_size)
def check_duplicate_access_code(event_id):
    code = request.args.get('code')
    current = request.args.get('current')
    if not current:
        current = ''
    access_code = TicketingManager.get_access_code(event_id, code)
    if (current == "" and access_code) or (current != "" and access_code and access_code.id != int(current)):
        return jsonify({
            "status": "invalid"
        }), 404

    return jsonify({
        "status": "valid"
    }), 200