skip empty days in weekly schedules

This commit is contained in:
Server 2026-08-30 14:36:54 +00:00
parent b33256c63e
commit 69899a3a3f
4 changed files with 31 additions and 17 deletions

View file

@ -2,7 +2,7 @@ from telebot.types import InlineQuery
from models import logger
from models.bot import Inlines, bot
from models.schedule import dayStrings, generateDaySchedule
from models.schedule import dayStrings, generateDaySchedule, generateWeekSchedule
from models.user import validate
@ -57,10 +57,10 @@ def default_query(query: InlineQuery):
week.weekNumber += 1
title = "следующую"
week_type = "четную" if week.weekNumber % 2 == 0 else "нечетную"
output = f"<i>Расписание на </i><b>{title}</b><i> {week_type} неделю</i>\n"
for weekday in range(len(week.days)):
week.weekDay = weekday
output += generateDaySchedule(week, False) + "\n\n"
output = (
f"<i>Расписание на </i><b>{title}</b><i> {week_type} неделю</i>\n"
f"{generateWeekSchedule(week)}"
)
inline.add(
"Расписание на неделю 📅",
f"{week_type.capitalize()} неделя",

View file

@ -4,7 +4,7 @@ from telebot.util import quick_markup
from models.bot import bot, Markup, Strings, send, Receive, Default
from models.user import validate
from models.schedule import generateDaySchedule, dayStrings
from models.schedule import dayStrings, generateDaySchedule, generateWeekSchedule
from utils.calendar import ICS
@ -84,11 +84,9 @@ def defaultState(message: Message):
s.weekDay = 0
s.weekNumber += 1
resultString = f'<i>Расписание на </i><b>следующую</b><i> {"четную" if s.weekNumber%2==0 else "нечетную"} неделю</i>\n'
for index, _ in enumerate(s.days):
s.weekDay = index
resultString += generateDaySchedule(s, False) +'\n\n'
resultString += generateWeekSchedule(s)
return send(u.id, resultString, reply_markup = Markup.default(u))
case Strings.schedule_another_days:

View file

@ -2,7 +2,13 @@ from telebot.types import Message
from models import logger
from models.bot import Markup, Strings, bot, send
from models.schedule import ScheduleAPIError, ScheduleTarget, generateDaySchedule, search_targets
from models.schedule import (
ScheduleAPIError,
ScheduleTarget,
generateDaySchedule,
generateWeekSchedule,
search_targets,
)
from models.user import User, validate
@ -63,11 +69,7 @@ def render_schedule_action(user: User, target: ScheduleTarget, text: str) -> str
return generateDaySchedule(schedule)
if action in (Strings.odd, Strings.even):
schedule.weekNumber = 2 if action == Strings.even else 1
result = f"<i>{action.split()[0]} неделя</i>\n"
for weekday in range(len(schedule.days)):
schedule.weekDay = weekday
result += generateDaySchedule(schedule, False) + "\n\n"
return result.rstrip()
return f"<i>{action.split()[0]} неделя</i>\n{generateWeekSchedule(schedule)}"
return None

View file

@ -332,3 +332,17 @@ def generateDaySchedule(
result = header + "\n".join(lesson.text(isToday) for lesson in lessons)
last_end = max(lesson.end for lesson in lessons)
return result + f"\nПары закончатся в <i>{last_end[0]}:{last_end[1]:02d}</i>"
def generateWeekSchedule(schedule: Schedule) -> str:
original_weekday = schedule.weekDay
days = []
try:
for weekday in range(len(schedule.days)):
schedule.weekDay = weekday
if schedule.today():
days.append(generateDaySchedule(schedule, False))
finally:
schedule.weekDay = original_weekday
return "\n\n".join(days) if days else "Пар на этой неделе нет 🥰"