@ -88,7 +88,8 @@ main_menu = InlineKeyboardMarkup(row_width=2).add(
InlineKeyboardButton ( " 🌍 Контакты " , callback_data = " menu_contacts " ) ,
InlineKeyboardButton ( " 📞 Связь " , callback_data = " menu_contact " ) ,
InlineKeyboardButton ( " ✅ Добавить пациента " , callback_data = " menu_registration " ) ,
InlineKeyboardButton ( " 🏥 О Клинике " , callback_data = " o_klinike " )
InlineKeyboardButton ( " 🏥 О Клинике " , callback_data = " o_klinike " ) ,
InlineKeyboardButton ( " 📑 Заказать справку для налоговой " , callback_data = " fns_spravka " )
)
# Подменю "контакты"
@ -201,6 +202,30 @@ async def handle_main_menu(call: types.CallbackQuery):
@dp . callback_query_handler ( lambda c : c . data == " fns_spravka " )
async def show_patient_list ( call : types . CallbackQuery ) :
user_id = call . from_user . id
form_url = f " https://tgbotpolimed.pirogov.ai/?user_id= { user_id } "
form_url_fns = f " https://tgbotpolimed.pirogov.ai/fns?user_id= { user_id } "
telegram_id = call . from_user . id
patients = find_patients_by_id ( telegram_id )
if not patients :
await call . message . edit_text ( " Пациенты с вашим Telegram ID не найдены. " )
return
patient_list = " \n " . join (
[ f " { i + 1 } . { patient [ ' ФИО ' ] } " for i , patient in enumerate ( patients ) ]
)
await call . message . edit_text ( f ' Если пациент присутствует в списке, то для оформления налогового вычета за медицинские услуги, предоставленные в Клинике, пожалуйста, заполните форму ниже, нажав на кнопку " Заказать справку " . \n \n '
f ' ☝🏼Если пациента нет в списке зарегистрированных, пожалуйста, добавьте его через Telegram, нажав на кнопку ниже " Добавить пациента " . \n \n '
f " <b>Список зарегистрированных пациентов:</b> \n \n { patient_list } \n \n " ,
reply_markup = InlineKeyboardMarkup ( row_width = 1 ) . add ( InlineKeyboardButton ( text = " Заказать справку " , web_app = WebAppInfo ( url = form_url_fns ) ) ,
InlineKeyboardButton ( text = " Добавить пациента " , web_app = WebAppInfo ( url = form_url ) ) ,
InlineKeyboardButton ( " ▶️ Назад " , callback_data = " main_menu " ) ) , parse_mode = " HTML " )
# Обработка нажатия на "Запись на исследование"
@ -591,7 +616,7 @@ def find_patients_by_id(telegram_id):
records = sheet . get_all_records ( ) # Получаем все строки таблицы
patients = [ ]
for record in records :
if str ( record [ " Telegram ID " ] ) == str ( telegram_id ) :
if str ( record [ " Telegram ID " ] ) == str ( telegram_id ) and str ( record [ " Верификация " ] ) == " Пройдена " :
patients . append ( record )
return patients
@ -753,24 +778,18 @@ patient_callback = CallbackData("patient", "index")
async def show_patients ( message : types . Message ) :
telegram_id = message . from_user . id
patients = find_patients_by_id ( telegram_id )
print ( patients )
if not patients :
await message . answer ( " Пациенты с вашим Telegram ID не найдены. " )
return
keyboard = InlineKeyboardMarkup ( row_width = 3 ) # Теперь 2 кнопки в строке
buttons = [
InlineKeyboardButton (
text = patient [ " ФИО " ] ,
callback_data = patient_callback . new ( index = index )
)
for index , patient in enumerate ( patients )
]
# Добавляем кнопки в клавиатуру по 2 в строке
keyboard . add ( * buttons )
# Формируем текстовый список пациентов
patient_list = " \n " . join (
[ f " { index + 1 } . { patient [ ' ФИО ' ] } " for index , patient in enumerate ( patients ) ]
)
await message . answer ( " Выберите пациента: " , reply_markup = keyboard )
await message . answer ( f " Вот список ваших пациентов: \n \n { patient_list } " )
def authorize_google ( ) :