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 import uuid
from django.db import models from django.db import models
from tmc.models import CustomTable
class Item(models.Model): class Item(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user_id = models.BigIntegerField() user_id = models.BigIntegerField()
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True) created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True) updated_at = models.DateTimeField(auto_now=True)
tmc = models.ManyToManyField(CustomTable)
def __str__(self): def __str__(self):
return f"Tg item {self.id}" return f"Tg item {self.id}"

View File

@ -16,6 +16,7 @@ from telegram.constants import ParseMode, ChatType, MessageEntityType
from .apps import TgBotClass from .apps import TgBotClass
from .models import Item from .models import Item
from tmc.models import CustomTable, BaseCustomField
import logging import logging
@ -29,7 +30,7 @@ class TgBotApp:
await update.message.reply_markdown_v2( await update.message.reply_markdown_v2(
( (
"Это бот для проведения инвентаризации\n" "Это бот для проведения инвентаризации\n"
"/inv - начать новую инвентаризацию" "/inv \-\- начать новую инвентаризацию"
), ),
# reply_markup=ForceReply(selective=True), # reply_markup=ForceReply(selective=True),
reply_parameters=ReplyParameters(message_id=update.message.message_id), reply_parameters=ReplyParameters(message_id=update.message.message_id),
@ -39,8 +40,9 @@ class TgBotApp:
user = update.effective_user user = update.effective_user
current_step = context.chat_data.get("step", None) current_step = context.chat_data.get("step", None)
logger.info(f"Step {current_step} from user {user.full_name}") logger.info(f"Step {current_step} from user {user.full_name}")
if not current_step and update.message.text == "/inv": 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( await update.message.reply_markdown_v2(
( (
f"Специалист {user.name or user.full_name}, ID {user.id}\n" 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), reply_parameters=ReplyParameters(message_id=update.message.message_id),
) )
context.chat_data["step"] = "name"
context.chat_data["inv"] = inv.id context.chat_data["inv"] = inv.id
context.chat_data["step"] = "name"
elif current_step is "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 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( await update.message.reply_markdown_v2(
( (
f"Инвентаризация `#{inv.id}`\n" f"Инвентаризация `#{inv.id}`\n"
f"Название объекта `{inv.name}`" f"Название объекта `{inv.name}`\n"
f"Объекты ТМЦ {', '.join(tmc)}\n"
"Вставьте название объекта, который будете добавлять"
), ),
reply_parameters=ReplyParameters(message_id=update.message.message_id), 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["step"] = None
context.chat_data["inv"] = None
async def error(self, update: Update, context: CallbackContext): async def error(self, update: Update, context: CallbackContext):
logger.info(f"error in tgbot {context.error}\nReply update") logger.info(f"error in tgbot {context.error}\nReply update")