コード例 #1
0
ファイル: tickets.py プロジェクト: ventful/open-event-server
def get_stock(id):
    event_id = id

    if not id.isnumeric():
        event_id = Event.query.filter_by(identifier=id).first_or_404().id

    tickets = Ticket.query.filter_by(event_id=event_id,
                                     deleted_at=None,
                                     is_hidden=False).all()
    stock = []
    for ticket in tickets:
        availability = {}
        total_count = ticket.quantity - get_sold_and_reserved_tickets_count(
            ticket.id)
        availability["id"] = ticket.id
        availability["name"] = ticket.name
        availability["quantity"] = ticket.quantity
        availability["available"] = max(0, total_count)
        stock.append(availability)

    return jsonify(stock)
コード例 #2
0
    def test_count_sold_and_reserved_tickets(self):
        """Method to test the count query of sold tickets"""

        with self.app.test_request_context():
            ticket = TicketFactory()

            completed_order = OrderFactory(status='completed')
            placed_order = OrderFactory(status='placed')
            initializing_order = OrderFactory(status='initializing',
                                              created_at=datetime.utcnow() -
                                              timedelta(minutes=5))
            pending_order = OrderFactory(status='pending',
                                         created_at=datetime.utcnow() -
                                         timedelta(minutes=35))
            expired_time_order = OrderFactory(status='initializing',
                                              created_at=common.date_)
            expired_order = OrderFactory(status='expired')

            db.session.commit()

            # will not be counted as they have no order_id
            AttendeeFactoryBase.create_batch(2)
            # will be counted as attendee have valid orders
            AttendeeFactoryBase.create_batch(6, order_id=completed_order.id)
            # will be counted as attendee has valid placed order
            AttendeeFactoryBase(order_id=placed_order.id)
            # will be counted as attendee has initializing order under order expiry time
            AttendeeFactoryBase.create_batch(4, order_id=initializing_order.id)
            # will be counted as attendee has pending order under 30+order expiry time
            AttendeeFactoryBase.create_batch(2, order_id=pending_order.id)
            # will not be counted as the order is not under order expiry time
            AttendeeFactoryBase.create_batch(3, order_id=expired_time_order.id)
            # will not be counted as the order has an expired state
            AttendeeFactoryBase.create_batch(5, order_id=expired_order.id)

            count = get_sold_and_reserved_tickets_count(ticket.event_id)

            self.assertEqual(count, 13)
コード例 #3
0
    def reserved_count(self):
        from app.api.attendees import get_sold_and_reserved_tickets_count

        return get_sold_and_reserved_tickets_count(self.id)
コード例 #4
0
    def test_count_sold_and_reserved_tickets(self):
        """Method to test the count query of sold tickets"""

        with self.app.test_request_context():
            event = EventFactoryBasic()
            ticket = TicketFactory()
            other_ticket = TicketFactory()

            completed_order = OrderFactory(status='completed')
            placed_order = OrderFactory(status='placed')
            initializing_order = OrderFactory(status='initializing',
                                              created_at=datetime.utcnow() -
                                              timedelta(minutes=5))
            pending_order = OrderFactory(status='pending',
                                         created_at=datetime.utcnow() -
                                         timedelta(minutes=35))
            expired_time_order = OrderFactory(status='initializing',
                                              created_at=common.date_)
            expired_order = OrderFactory(status='expired')

            db.session.commit()

            # will not be counted as they have no order_id
            AttendeeFactoryBase.create_batch(2,
                                             ticket_id=ticket.id,
                                             event_id=event.id)
            # will be counted as attendee have valid orders
            AttendeeFactoryBase.create_batch(6,
                                             order_id=completed_order.id,
                                             ticket_id=ticket.id,
                                             event_id=event.id)
            # will be counted as attendee has valid placed order
            AttendeeFactoryBase(order_id=placed_order.id,
                                ticket_id=ticket.id,
                                event_id=event.id)
            # will not be counted as they are deleted
            AttendeeFactoryBase.create_batch(
                3,
                order_id=placed_order.id,
                ticket_id=ticket.id,
                event_id=event.id,
                deleted_at=datetime.utcnow(),
            )
            # will be counted as attendee has initializing order under order expiry time
            AttendeeFactoryBase.create_batch(4,
                                             order_id=initializing_order.id,
                                             ticket_id=ticket.id,
                                             event_id=event.id)
            # will be counted as attendee has pending order under 30+order expiry time
            AttendeeFactoryBase.create_batch(2,
                                             order_id=pending_order.id,
                                             ticket_id=ticket.id,
                                             event_id=event.id)
            # will not be counted as the order is not under order expiry time
            AttendeeFactoryBase.create_batch(3,
                                             order_id=expired_time_order.id,
                                             ticket_id=ticket.id,
                                             event_id=event.id)
            # will not be counted as the order has an expired state
            AttendeeFactoryBase.create_batch(5,
                                             order_id=expired_order.id,
                                             ticket_id=ticket.id,
                                             event_id=event.id)
            # will not be counted as the attendees have different ticket ID
            AttendeeFactoryBase.create_batch(
                2,
                order_id=completed_order.id,
                ticket_id=other_ticket.id,
                event_id=event.id,
            )

            count = get_sold_and_reserved_tickets_count(ticket.id)

            assert count == 13

            # Last 2 attendees belong to other ticket
            assert get_sold_and_reserved_tickets_count(other_ticket.id) == 2