updated at

This commit is contained in:
Kseninia Mikhaylova 2024-07-19 13:51:42 +03:00
parent e01a416c76
commit 679996692a
2 changed files with 31 additions and 6 deletions

View File

@ -27,6 +27,7 @@ from telegram.constants import ParseMode
from django.conf import settings from django.conf import settings
from django.urls import reverse from django.urls import reverse
from django.db import models
from .apps import TgBotUpdater from .apps import TgBotUpdater
from .models import TgItem, TmcElement, TmcField from .models import TgItem, TmcElement, TmcField
@ -151,8 +152,18 @@ class TgBot:
def format_inv(self, inv): def format_inv(self, inv):
return f"Инвентаризация `{inv.name}` от `{inv.created_at.strftime('%x')}`" return f"Инвентаризация `{inv.name}` от `{inv.created_at.strftime('%x')}`"
async def get_tmc_count(self, inv):
tmc_count = []
async for e in inv.tmc.values("tmc__name").annotate(
count=models.Count("tmc__name")
):
tmc_count.append(e)
return tmc_count
def format_tmc_count(self, tmc_count): def format_tmc_count(self, tmc_count):
return f"Количество ТМЦ {tmc_count}" res = ["Всего ТМЦ:"]
res.append(", ".join([f"{e['tmc__name']} \({e['count']}\)" for e in tmc_count]))
return " ".join(res)
def format_tmc_name(self, tmc): def format_tmc_name(self, tmc):
return f"Название ТМЦ `{tmc.name}`" return f"Название ТМЦ `{tmc.name}`"
@ -202,6 +213,7 @@ class TgBot:
await tmc_element.field.aadd(tmc_field) await tmc_element.field.aadd(tmc_field)
await inv.tmc.aadd(tmc_element) await inv.tmc.aadd(tmc_element)
await inv.asave()
context.chat_data["tmc"] = tmc_element.id context.chat_data["tmc"] = tmc_element.id
context.chat_data["step"] = "add_tmc" context.chat_data["step"] = "add_tmc"
@ -261,7 +273,7 @@ class TgBot:
text = "\n".join( text = "\n".join(
[ [
self.format_inv(inv), self.format_inv(inv),
self.format_tmc_count(await inv.tmc.acount()), self.format_tmc_count(await self.get_tmc_count(inv)),
"Выберите, какую ТМЦ вы осматриваете:", "Выберите, какую ТМЦ вы осматриваете:",
] ]
) )
@ -302,7 +314,7 @@ class TgBot:
text = "\n".join( text = "\n".join(
[ [
self.format_inv(inv), self.format_inv(inv),
self.format_tmc_count(await inv.tmc.acount()), self.format_tmc_count(await self.get_tmc_count(inv)),
self.format_tmc_name(tmc), self.format_tmc_name(tmc),
f"Что вы загружаете?", f"Что вы загружаете?",
] ]
@ -329,7 +341,8 @@ class TgBot:
elif current_step == "add_element": elif current_step == "add_element":
inv = await TgItem.objects.aget(id=context.chat_data["inv"]) inv = await TgItem.objects.aget(id=context.chat_data["inv"])
tmc = await inv.tmc.aget(id=context.chat_data["tmc"]) tmc_element = await inv.tmc.aget(id=context.chat_data["tmc"])
tmc = await CustomTable.objects.aget(id=tmc_element.tmc_id)
element = await TmcField.objects.aget(id=context.chat_data["element"]) element = await TmcField.objects.aget(id=context.chat_data["element"])
field = await BaseCustomField.objects.aget(id=element.field_id) field = await BaseCustomField.objects.aget(id=element.field_id)
@ -339,7 +352,7 @@ class TgBot:
"\n".join( "\n".join(
[ [
self.format_inv(inv), self.format_inv(inv),
self.format_tmc_count(await inv.tmc.acount()), self.format_tmc_count(await self.get_tmc_count(inv)),
self.format_tmc_name(tmc), self.format_tmc_name(tmc),
self.format_element(field), self.format_element(field),
f"Загрузите фото или пришлите текст", f"Загрузите фото или пришлите текст",
@ -363,6 +376,8 @@ class TgBot:
element.text = update.message.text element.text = update.message.text
await element.asave() await element.asave()
await inv.asave()
await update.effective_message.reply_markdown_v2( await update.effective_message.reply_markdown_v2(
"Изображение сохранено" if update.message.photo else "Текст сохранен" "Изображение сохранено" if update.message.photo else "Текст сохранен"
) )

View File

@ -1,4 +1,5 @@
from django.conf import settings from django.conf import settings
from django.db import models
import json import json
import time import time
@ -19,10 +20,18 @@ logger = logging.getLogger("root")
class TgItemViewSet(viewsets.ModelViewSet): class TgItemViewSet(viewsets.ModelViewSet):
queryset = TgItem.objects.all().order_by('-updated_at') queryset = TgItem.objects.all().order_by("-updated_at")
serializer_class = TgItemSerializer serializer_class = TgItemSerializer
http_method_names = ["post", "get"] http_method_names = ["post", "get"]
def retrieve(self, request, pk=None):
item = TgItem.objects.get(id=pk)
logger.info(
item.tmc.values("tmc__name").annotate(count=models.Count("tmc__name"))
)
return super().retrieve(request, pk)
# return Response(serializer.data)
@action(detail=False, methods=["post"], url_path=settings.TGBOT["WEBHOOK_URL"]) @action(detail=False, methods=["post"], url_path=settings.TGBOT["WEBHOOK_URL"])
def send_tg_data(self, request): def send_tg_data(self, request):
TgBotUpdater.my_queue.put( TgBotUpdater.my_queue.put(
@ -51,6 +60,7 @@ class TmcFieldViewset(viewsets.ModelViewSet):
del TgBotUpdater.return_values[chat_id] del TgBotUpdater.return_values[chat_id]
break break
return Response(response) return Response(response)
@action(detail=False, methods=["get"], url_path=r"get_image/(?P<field_id>[^/.]+)") @action(detail=False, methods=["get"], url_path=r"get_image/(?P<field_id>[^/.]+)")
def get_image(self, request, field_id): def get_image(self, request, field_id):
TgBotUpdater.my_queue.put({"name": "admin_get_image", "queryset": field_id}) TgBotUpdater.my_queue.put({"name": "admin_get_image", "queryset": field_id})