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 import logger
from models.bot import Inlines, bot from models.bot import Inlines, bot
from models.schedule import dayStrings, generateDaySchedule from models.schedule import dayStrings, generateDaySchedule, generateWeekSchedule
from models.user import validate from models.user import validate
@ -57,10 +57,10 @@ def default_query(query: InlineQuery):
week.weekNumber += 1 week.weekNumber += 1
title = "следующую" title = "следующую"
week_type = "четную" if week.weekNumber % 2 == 0 else "нечетную" week_type = "четную" if week.weekNumber % 2 == 0 else "нечетную"
output = f"<i>Расписание на </i><b>{title}</b><i> {week_type} неделю</i>\n" output = (
for weekday in range(len(week.days)): f"<i>Расписание на </i><b>{title}</b><i> {week_type} неделю</i>\n"
week.weekDay = weekday f"{generateWeekSchedule(week)}"
output += generateDaySchedule(week, False) + "\n\n" )
inline.add( inline.add(
"Расписание на неделю 📅", "Расписание на неделю 📅",
f"{week_type.capitalize()} неделя", 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.bot import bot, Markup, Strings, send, Receive, Default
from models.user import validate from models.user import validate
from models.schedule import generateDaySchedule, dayStrings from models.schedule import dayStrings, generateDaySchedule, generateWeekSchedule
from utils.calendar import ICS from utils.calendar import ICS
@ -85,9 +85,7 @@ def defaultState(message: Message):
s.weekNumber += 1 s.weekNumber += 1
resultString = f'<i>Расписание на </i><b>следующую</b><i> {"четную" if s.weekNumber%2==0 else "нечетную"} неделю</i>\n' resultString = f'<i>Расписание на </i><b>следующую</b><i> {"четную" if s.weekNumber%2==0 else "нечетную"} неделю</i>\n'
for index, _ in enumerate(s.days): resultString += generateWeekSchedule(s)
s.weekDay = index
resultString += generateDaySchedule(s, False) +'\n\n'
return send(u.id, resultString, reply_markup = Markup.default(u)) return send(u.id, resultString, reply_markup = Markup.default(u))

View file

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

View file

@ -332,3 +332,17 @@ def generateDaySchedule(
result = header + "\n".join(lesson.text(isToday) for lesson in lessons) result = header + "\n".join(lesson.text(isToday) for lesson in lessons)
last_end = max(lesson.end 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>" 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 "Пар на этой неделе нет 🥰"