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():
return {'error': 'Authentication required'}, 401
from ..database.models import MatchModel
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()
try:
# Check for date parameter in query string
date_param = request.args.get('date')
# Get today's date
today = date.today()
# Get today's date in VENUE timezone (not server timezone)
today = get_today_venue_date(api_bp.db_manager)
yesterday = today - timedelta(days=1)
# First, auto-fail old fixtures with pending/scheduled/bet results
......@@ -4164,6 +4165,7 @@ def get_cashier_pending_matches():
# Determine the target date for fixture selection
if date_param:
# Parse the date parameter (format: YYYY-MM-DD)
# This date is in venue timezone (user's local date selection)
try:
target_date = datetime.strptime(date_param, '%Y-%m-%d').date()
except ValueError:
......@@ -4174,11 +4176,21 @@ def get_cashier_pending_matches():
else:
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)
# Use UTC times for database comparison since start_time is stored in UTC
fixtures_with_target_start = session.query(MatchModel.fixture_id)\
.filter(MatchModel.start_time.isnot(None))\
.filter(MatchModel.start_time >= datetime.combine(target_date, datetime.min.time()))\
.filter(MatchModel.start_time < datetime.combine(target_date, datetime.max.time()))\
.filter(MatchModel.start_time >= utc_start)\
.filter(MatchModel.start_time <= utc_end)\
.order_by(MatchModel.created_at.desc())\
.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