diff --git a/models.py b/models.py index 5698eb8..0774a36 100644 --- a/models.py +++ b/models.py @@ -597,22 +597,23 @@ def get_today_checks(user_id: int): JOIN websites w ON w.id = sw.website_id JOIN shift_users su ON su.shift_id = s.id AND su.user_id = %s LEFT JOIN shift_checks sc - ON sc.website_id = w.id AND sc.user_id = %s AND DATE(sc.checked_at) = CURDATE() + ON sc.id = ( + SELECT sc2.id FROM shift_checks sc2 + WHERE sc2.website_id = w.id AND sc2.user_id = %s + AND IF(w.check_type = 'weekly', + YEARWEEK(sc2.checked_at, 1) = YEARWEEK(CURDATE(), 1), + DATE(sc2.checked_at) = CURDATE()) + ORDER BY sc2.checked_at DESC + LIMIT 1 + ) WHERE s.is_active = 1 AND w.is_active = 1 AND LOCATE(CAST(DAYOFWEEK(CURDATE()) AS CHAR), s.days_of_week) > 0 AND (w.visibility = 'all' OR EXISTS (SELECT 1 FROM website_users wu WHERE wu.website_id=w.id AND wu.user_id=%s)) - AND (w.check_type = 'daily' - OR (w.check_type = 'weekly' - AND NOT EXISTS ( - SELECT 1 FROM shift_checks sc2 - WHERE sc2.website_id=w.id AND sc2.user_id=%s - AND YEARWEEK(sc2.checked_at,1)=YEARWEEK(CURDATE(),1) - ))) GROUP BY w.id, sc.id, sc.checked_at, sc.user_note, sc.user_id ORDER BY sort_order, w.name """, - (user_id, user_id, user_id, user_id), + (user_id, user_id, user_id), ) else: cur.execute( @@ -622,20 +623,21 @@ def get_today_checks(user_id: int): sc.id AS check_id, sc.checked_at, sc.user_note, sc.user_id AS checked_by_id FROM websites w LEFT JOIN shift_checks sc - ON sc.website_id=w.id AND sc.user_id=%s AND DATE(sc.checked_at)=CURDATE() + ON sc.id = ( + SELECT sc2.id FROM shift_checks sc2 + WHERE sc2.website_id = w.id AND sc2.user_id = %s + AND IF(w.check_type = 'weekly', + YEARWEEK(sc2.checked_at, 1) = YEARWEEK(CURDATE(), 1), + DATE(sc2.checked_at) = CURDATE()) + ORDER BY sc2.checked_at DESC + LIMIT 1 + ) WHERE w.is_active=1 AND (w.visibility='all' OR EXISTS (SELECT 1 FROM website_users wu WHERE wu.website_id=w.id AND wu.user_id=%s)) - AND (w.check_type='daily' - OR (w.check_type='weekly' - AND NOT EXISTS ( - SELECT 1 FROM shift_checks sc2 - WHERE sc2.website_id=w.id AND sc2.user_id=%s - AND YEARWEEK(sc2.checked_at,1)=YEARWEEK(CURDATE(),1) - ))) ORDER BY w.name """, - (user_id, user_id, user_id), + (user_id, user_id), ) rows = cur.fetchall() cur.close()