|
1 | | -from datetime import datetime |
| 1 | +import datetime |
2 | 2 |
|
3 | 3 | from flask import Blueprint, request, jsonify, abort, make_response |
4 | 4 | from flask_jwt_extended import current_user |
5 | 5 | from flask_rest_jsonapi import ResourceDetail, ResourceList, ResourceRelationship |
6 | 6 | from flask_rest_jsonapi.exceptions import ObjectNotFound |
7 | 7 | from sqlalchemy.orm.exc import NoResultFound |
| 8 | +from sqlalchemy import or_ |
8 | 9 |
|
9 | 10 | from app.api.bootstrap import api |
10 | 11 | from app.api.helpers.db import safe_query, get_count |
|
25 | 26 | from app.models.ticket_holder import TicketHolder |
26 | 27 | from app.models.user import User |
27 | 28 |
|
| 29 | +from app.settings import get_settings |
| 30 | + |
| 31 | + |
28 | 32 | attendee_misc_routes = Blueprint('attendee_misc', __name__, url_prefix='/v1') |
29 | 33 |
|
30 | 34 |
|
@@ -56,8 +60,10 @@ def before_post(self, args, kwargs, data): |
56 | 60 | "Ticket belongs to a different Event" |
57 | 61 | ) |
58 | 62 | # Check if the ticket is already sold out or not. |
59 | | - if get_count(db.session.query(TicketHolder.id). |
60 | | - filter_by(ticket_id=int(data['ticket']), deleted_at=None)) >= ticket.quantity: |
| 63 | + order_expiry_time = get_settings()['order_expiry_time'] |
| 64 | + if get_count(db.session.query(TicketHolder.id).filter(TicketHolder.ticket_id==int(data['ticket']), |
| 65 | + TicketHolder.state=='placed',TicketHolder.deleted_at.is_(None), or_(TicketHolder.state=='initializing', |
| 66 | + TicketHolder.created_at<datetime.datetime.utcnow()+datetime.timedelta(minutes=order_expiry_time)))) >= ticket.quantity: |
61 | 67 | raise ConflictException( |
62 | 68 | {'pointer': '/data/attributes/ticket_id'}, |
63 | 69 | "Ticket already sold out" |
|
0 commit comments