diff --git a/back/tgbot/tgbot.py b/back/tgbot/tgbot.py index 1ec9126..aac1c90 100644 --- a/back/tgbot/tgbot.py +++ b/back/tgbot/tgbot.py @@ -111,6 +111,13 @@ class TgBot: TgBot.app.add_handler(CallbackQueryHandler(self.terdeep_back, "terdeep_back")) TgBot.app.add_handler(CallbackQueryHandler(self.terdeep_next, "terdeep_next")) + TgBot.app.add_handler( + MessageHandler( + filters.ChatType.PRIVATE & filters.Regex(r"/terdeep_(\d.*)"), + self.terdeep_set, + ) + ) + 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@(.*?)")) @@ -123,9 +130,9 @@ class TgBot: await update.message.reply_markdown_v2( ( "Это бот для проведения инвентаризации\n" - "/my \-\- продолжить инвентаризацию\n" - "/inv \-\- начать новую инвентаризацию" "/ter \-\- список территорий" + "/my \-\- продолжить инвентаризацию\n" + "/inv \-\- начать новую инвентаризацию\n" ), # reply_markup=ForceReply(selective=True), reply_parameters=ReplyParameters(message_id=update.message.message_id), @@ -208,6 +215,8 @@ class TgBot: inv_id = query.data.split("@")[-1] inv = await TgItem.objects.aget(id=inv_id) + + context.chat_data["terdeep_value"] = inv.location_id context.chat_data["inv"] = inv.id context.chat_data["step"] = "name" @@ -366,27 +375,57 @@ class TgBot: update, context, "terdeep", TerritoryItem.objects.filter(parent_id=parent) ) + async def terdeep_set(self, update: Update, context: CallbackContext): + context.chat_data["terdeep_value"] = re.findall( + r"/terdeep_(\d.*)", update.effective_message.text + )[0] + text = ( + "Вы выбрали территорию инвентаризации\n" + "Теперь вы можете начать инвентаризацию /inv" + ) + await update.effective_message.reply_markdown_v2( + text=text, + reply_parameters=ReplyParameters( + message_id=update.effective_message.message_id + ), + ) + async def inv(self, update: Update, context: CallbackContext): user = update.effective_user current_step = context.chat_data.get("step", None) logger.info(f"Step {current_step} from user {user.full_name}") + if not context.chat_data.get("terdeep_value", None): + await update.effective_message.reply_markdown_v2( + text=("Вы не выбрали территорию /ter"), + reply_parameters=ReplyParameters( + message_id=update.effective_message.message_id + ), + ) + return + if update.effective_message.text == "/inv": context.chat_data["step"] = "name" + current_ter_id = context.chat_data.get("terdeep_value", None) + current_ter = await TerritoryItem.objects.aget(id=current_ter_id) await update.effective_message.reply_markdown_v2( "\n".join([self.format_username(user), f"Введите название объекта"]), reply_parameters=ReplyParameters( message_id=update.effective_message.message_id ), + reply_markup=ReplyKeyboardMarkup([[KeyboardButton(current_ter.name)]]), ) if current_step == "name": if not context.chat_data.get("inv", None): - loc = await TerritoryItem.objects.aget(id=35) - inv = await TgItem.objects.acreate(user_id=user.id, location=loc) + current_ter_id = context.chat_data.get("terdeep_value", None) + current_ter = await TerritoryItem.objects.aget(id=current_ter_id) + inv = await TgItem.objects.acreate(user_id=user.id, location=current_ter) inv.name = update.message.text await inv.asave() + res = await update.effective_message.reply_text('Ок, сохранено', reply_markup=ReplyKeyboardRemove()) + await res.delete() else: inv = await TgItem.objects.aget(id=context.chat_data["inv"])