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)
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)
def reserved_count(self): from app.api.attendees import get_sold_and_reserved_tickets_count return get_sold_and_reserved_tickets_count(self.id)
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