diff --git a/back/tgbot/models.py b/back/tgbot/models.py index bbae866..a08b97e 100644 --- a/back/tgbot/models.py +++ b/back/tgbot/models.py @@ -1,12 +1,16 @@ import uuid from django.db import models +from tmc.models import CustomTable + + class Item(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) user_id = models.BigIntegerField() name = models.CharField(max_length=255) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) + tmc = models.ManyToManyField(CustomTable) def __str__(self): return f"Tg item {self.id}" diff --git a/back/tgbot/tgbot.py b/back/tgbot/tgbot.py index ebbea59..f33e474 100644 --- a/back/tgbot/tgbot.py +++ b/back/tgbot/tgbot.py @@ -16,6 +16,7 @@ from telegram.constants import ParseMode, ChatType, MessageEntityType from .apps import TgBotClass from .models import Item +from tmc.models import CustomTable, BaseCustomField import logging @@ -29,7 +30,7 @@ class TgBotApp: await update.message.reply_markdown_v2( ( "Это бот для проведения инвентаризации\n" - "/inv - начать новую инвентаризацию" + "/inv \-\- начать новую инвентаризацию" ), # reply_markup=ForceReply(selective=True), reply_parameters=ReplyParameters(message_id=update.message.message_id), @@ -39,8 +40,9 @@ class TgBotApp: 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 current_step and update.message.text == "/inv": - inv = await sync_to_async(Item.objects.create)(user_id=user.id) + inv = await Item.objects.acreate(user_id=user.id) await update.message.reply_markdown_v2( ( f"Специалист {user.name or user.full_name}, ID {user.id}\n" @@ -49,21 +51,51 @@ class TgBotApp: ), reply_parameters=ReplyParameters(message_id=update.message.message_id), ) - context.chat_data["step"] = "name" context.chat_data["inv"] = inv.id + context.chat_data["step"] = "name" + elif current_step is "name": - inv = await sync_to_async(Item.objects.get)(id=context.chat_data["inv"]) + inv = await Item.objects.aget(id=context.chat_data["inv"]) inv.name = update.message.text - await sync_to_async(inv.save)() + await inv.asave() + + tmc = [] + async for e in CustomTable.objects.all(): + tmc.append(f"`{e.name}`") + await update.message.reply_markdown_v2( ( f"Инвентаризация `#{inv.id}`\n" - f"Название объекта `{inv.name}`" + f"Название объекта `{inv.name}`\n" + f"Объекты ТМЦ {', '.join(tmc)}\n" + "Вставьте название объекта, который будете добавлять" ), reply_parameters=ReplyParameters(message_id=update.message.message_id), ) - # context.chat_data["step"] = "add" + logger.info(tmc) + context.chat_data["step"] = "add_tmc" + + elif current_step is "add_tmc": + tmc_name = update.message.text + tmc = await CustomTable.objects.aget(name=tmc_name) + + inv = await Item.objects.aget(id=context.chat_data["inv"]) + await inv.tmc.aadd(tmc) + + fields = [] + async for e in tmc.fields.all(): + fields.append(f"`{e.name}`") + await update.message.reply_markdown_v2( + ( + f"Необходимые данные {', '.join(fields)}" + ), + reply_parameters=ReplyParameters(message_id=update.message.message_id), + ) + # context.chat_data["step"] = "name" + + if "step" in context.chat_data and context.chat_data["step"] == current_step: context.chat_data["step"] = None + context.chat_data["inv"] = None async def error(self, update: Update, context: CallbackContext): logger.info(f"error in tgbot {context.error}\nReply update")