diff --git a/back/tgbot/tgbot.py b/back/tgbot/tgbot.py index 32a59af..a9813c9 100644 --- a/back/tgbot/tgbot.py +++ b/back/tgbot/tgbot.py @@ -95,6 +95,7 @@ class TgBot: self.inv, ) ) + TgBot.app.add_handler(CallbackQueryHandler(self.stop_inv, "stop_inv")) TgBot.app.add_handler(CallbackQueryHandler(self.get_inv, r"get_inv@(.*?)")) TgBot.app.add_handler(CallbackQueryHandler(self.add_tmc, r"add_tmc@(.*?)")) TgBot.app.add_handler( @@ -151,13 +152,26 @@ class TgBot: return f"Инвентаризация `{inv.name}` от `{inv.created_at.strftime('%x')}`" def format_tmc_count(self, tmc_count): - return f"Количество ТМЦ {tmc_count}\n" + return f"Количество ТМЦ {tmc_count}" def format_tmc_name(self, tmc): - return f"Название ТМЦ `{tmc.name}`\n" + return f"Название ТМЦ `{tmc.name}`" def format_element(self, field): - return f"Элемент `{field.name}`\n" + return f"Элемент `{field.name}`" + + def stop_inv_button(self): + return [ + InlineKeyboardButton( + "❌❌❌ Остановить инвентаризацию", callback_data="stop_inv" + ) + ] + + async def stop_inv(self, update: Update, context: CallbackContext): + query = update.callback_query + await update.effective_message.edit_reply_markup(InlineKeyboardMarkup([])) + await query.answer() + context.chat_data.clear() async def get_inv(self, update: Update, context: CallbackContext): query = update.callback_query @@ -244,29 +258,31 @@ class TgBot: context.chat_data["inv"] = inv.id context.chat_data["step"] = "add_tmc" + text = "\n".join( + [ + self.format_inv(inv), + self.format_tmc_count(await inv.tmc.acount()), + "Выберите, какую ТМЦ вы осматриваете:", + ] + ) + keyboard = [ + [ + InlineKeyboardButton( + i["name"], + callback_data=f'{context.chat_data["step"]}@{i["id"]}', + ) + for i in arr + ] + for arr in keys + ] + keyboard.append(self.stop_inv_button()) + await update.effective_message.reply_markdown_v2( - "\n".join( - [ - self.format_inv(inv), - self.format_tmc_count(await inv.tmc.acount()), - "Выберите, какую ТМЦ вы осматриваете:", - ] - ), + text, reply_parameters=ReplyParameters( message_id=update.effective_message.message_id ), - reply_markup=InlineKeyboardMarkup( - [ - [ - InlineKeyboardButton( - i["name"], - callback_data=f'{context.chat_data["step"]}@{i["id"]}', - ) - for i in arr - ] - for arr in keys - ] - ), + reply_markup=InlineKeyboardMarkup(keyboard), ) elif current_step == "add_tmc": @@ -283,30 +299,32 @@ class TgBot: context.chat_data["tmc"] = tmc_element.id context.chat_data["step"] = "add_element" + text = "\n".join( + [ + self.format_inv(inv), + self.format_tmc_count(await inv.tmc.acount()), + self.format_tmc_name(tmc), + f"Что вы загружаете?", + ] + ) + keyboard = [ + [ + InlineKeyboardButton( + i["name"], + callback_data=f'{context.chat_data["step"]}@{i["id"]}', + ) + for i in arr + ] + for arr in keys + ] + keyboard.append(self.stop_inv_button()) + await update.effective_message.reply_markdown_v2( - "\n".join( - [ - self.format_inv(inv), - self.format_tmc_count(await inv.tmc.acount()), - self.format_tmc_name(tmc), - f"Что вы загружаете?", - ] - ), + text, reply_parameters=ReplyParameters( message_id=update.effective_message.message_id ), - reply_markup=InlineKeyboardMarkup( - [ - [ - InlineKeyboardButton( - i["name"], - callback_data=f'{context.chat_data["step"]}@{i["id"]}', - ) - for i in arr - ] - for arr in keys - ] - ), + reply_markup=InlineKeyboardMarkup(keyboard), ) elif current_step == "add_element": @@ -316,6 +334,7 @@ class TgBot: field = await BaseCustomField.objects.aget(id=element.field_id) context.chat_data["step"] = "add_element_data" + await update.effective_message.reply_markdown_v2( "\n".join( [