Fix date filter to use venue timezone for fixture selection

- Changed from server local date (date.today()) to venue timezone date
- Use get_today_venue_date() for proper timezone-aware date calculation
- Convert venue date range to UTC for database queries using venue_to_utc_datetime()
- This fixes the issue where selecting yesterday's date showed today's fixture
- The database stores start_time in UTC, so we need to convert the selected date to UTC range
parent 980b13fb
...@@ -4148,14 +4148,15 @@ def get_cashier_pending_matches(): ...@@ -4148,14 +4148,15 @@ def get_cashier_pending_matches():
return {'error': 'Authentication required'}, 401 return {'error': 'Authentication required'}, 401
from ..database.models import MatchModel from ..database.models import MatchModel
from datetime import datetime, date, timedelta from datetime import datetime, date, timedelta
from ..utils.timezone_utils import get_today_venue_date, venue_to_utc_datetime
session = api_bp.db_manager.get_session() session = api_bp.db_manager.get_session()
try: try:
# Check for date parameter in query string # Check for date parameter in query string
date_param = request.args.get('date') date_param = request.args.get('date')
# Get today's date # Get today's date in VENUE timezone (not server timezone)
today = date.today() today = get_today_venue_date(api_bp.db_manager)
yesterday = today - timedelta(days=1) yesterday = today - timedelta(days=1)
# First, auto-fail old fixtures with pending/scheduled/bet results # First, auto-fail old fixtures with pending/scheduled/bet results
...@@ -4164,6 +4165,7 @@ def get_cashier_pending_matches(): ...@@ -4164,6 +4165,7 @@ def get_cashier_pending_matches():
# Determine the target date for fixture selection # Determine the target date for fixture selection
if date_param: if date_param:
# Parse the date parameter (format: YYYY-MM-DD) # Parse the date parameter (format: YYYY-MM-DD)
# This date is in venue timezone (user's local date selection)
try: try:
target_date = datetime.strptime(date_param, '%Y-%m-%d').date() target_date = datetime.strptime(date_param, '%Y-%m-%d').date()
except ValueError: except ValueError:
...@@ -4174,11 +4176,21 @@ def get_cashier_pending_matches(): ...@@ -4174,11 +4176,21 @@ def get_cashier_pending_matches():
else: else:
target_date = today target_date = today
# Convert venue date range to UTC for database query
# The database stores start_time in UTC
venue_start = datetime.combine(target_date, datetime.min.time())
venue_end = datetime.combine(target_date, datetime.max.time())
utc_start = venue_to_utc_datetime(venue_start, api_bp.db_manager)
utc_end = venue_to_utc_datetime(venue_end, api_bp.db_manager)
logger.info(f"DEBUG: Date filter - target_date={target_date}, venue_start={venue_start}, utc_start={utc_start}, utc_end={utc_end}")
# Find fixtures with start_time on the target date (get the LAST one) # Find fixtures with start_time on the target date (get the LAST one)
# Use UTC times for database comparison since start_time is stored in UTC
fixtures_with_target_start = session.query(MatchModel.fixture_id)\ fixtures_with_target_start = session.query(MatchModel.fixture_id)\
.filter(MatchModel.start_time.isnot(None))\ .filter(MatchModel.start_time.isnot(None))\
.filter(MatchModel.start_time >= datetime.combine(target_date, datetime.min.time()))\ .filter(MatchModel.start_time >= utc_start)\
.filter(MatchModel.start_time < datetime.combine(target_date, datetime.max.time()))\ .filter(MatchModel.start_time <= utc_end)\
.order_by(MatchModel.created_at.desc())\ .order_by(MatchModel.created_at.desc())\
.first() .first()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment