add one tmc

This commit is contained in:
Kseninia Mikhaylova 2024-07-05 13:53:01 +03:00
parent 3922bd3454
commit 431655eaac
2 changed files with 43 additions and 7 deletions

View File

@ -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}"

View File

@ -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")