Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
14 kB
1
Indexable
Never
from aiogram import Router, F
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import StatesGroup, State
from aiogram.types import Message, ForceReply, KeyboardButton,FSInputFile, InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery
from datetime import datetime, date
import numpy as np
import Funcs
import requests
import firebase
import time
router = Router()

token = '6268498821:AAGGDDITcRI2RFtyljkGUff5IB39ihtWtOk'
# token = '5937921652:AAGKX0CLleIeFxKWpSCtB2fY1sxUvtOzK98'
h_text = "Я Додо Джин!\nЯ умею напоминать о списании заготовок. Напиши в чате /writeoff и я попрошу прислать фото этикетки на лексане. Отправь фото в ответ и я напомню о сроках. Один раз за час до срока и один раз после срока списания продукта.\n Могу отличать несколько маркировок на одном фото.\nЭтикетки с маркировкой должны быть читаемы. Для правильного распознавания на фото не должно быть текста кроме маркировки\nНа фото должно быть видно тару, продукт и количество продукта.\n Формат этикетки:\n-Продукт\n-дд.мм.гг, чч:мм\n-дд.мм.гг, чч:мм\n-Сотрудник\n\n Команда /photoreport предложит загрузить разные фотоотчеты, которые можно просматривать через веб-интерфейс.\n"
is_r = 0
class Upload_PH(StatesGroup):
    writeoff_ph = State()
    photorep_ph = State()
    photorep_MK = State()
    photorep_GP = State()
    photorep_WR = State()
def getDF(message, reptype, time, file = "", text = ""):
    Url, photo = Funcs.getURL(message.photo[-1].file_id, token)
    df = [
        "add",  # Статус
        message.date.strftime("%d.%m.%Y, %H:%M:%S"),                    # Время
        message.chat.id,                                                # Id чата
        message.chat.title,                                             # Название чата
        message.chat.type,                                              # Тип чата
        message.from_user.id,                                           # Id отправителя
        message.from_user.username,                                     # Username отправителя
        message.from_user.first_name,                                   # Имя отправителя
        message.message_id,                                             # Id сообщения
        message.media_group_id,                                         # Id медиа-группы
        message.reply_to_message.message_id,                            # Id сообщения(ответ)
        message.reply_to_message.date.strftime("%d.%m.%Y, %H:%M:%S"),   # Время сообщения(ответ)
        reptype,                                                        # Выбор
        time,                                                           # Категория
        Url,                                                            # Url фото
        message.reply_to_message.text,                                  # Текст сообщения(ответ)
        message.chat.title,                                             # Название чата
        file,                                                           # ""
        message.photo[-2].file_id,                                      # Id фото
        photo,                                                          # фото
        "lmd",                                                          # Дата изменения
        text                                                              # Текст
    ]
    # df = list(map(str, df))
    return df
def getDate():
    day = datetime.now()
    d, mo, y, h, m = day.day, day.month, day.year, day.hour, day.minute
    f = lambda x: '0' + str(x) if x < 10 else x
    dt = "Утро"
    if 12<=h<17:
        dt = "День"
    elif 17<=h<=23:
        dt = "Вечер"
    elif 0<h<4:
        dt = "Ночь"
    d, mo, h, m = map(f, [d, mo, h, m])
    date = {
        "all":f"{dt} {d}.{mo}.{y}, {h}:{m}",
        "dt":dt,
        "time": f"{d}.{mo}.{y}, {h}:{m}"
    }
    return date
# @router.message()
# async def send_welcome(message: Message):
#     while message.photo[-1].file_id:
#         print(message.photo[-1].file_id)
@router.message(Command('cancel'))
async def send_welcome(message: Message, state: FSMContext):
    await state.clear()
@router.message(Command('start'))
async def send_welcome(message: Message):
   await message.reply(h_text)
@router.message(Command("help"))
async def send_welcome(message: Message):
    await message.reply(h_text)
# @router.message()
# async def some_text(message: Message):
#     pass
@router.message(Command("writeoff"))
async def write_off(message: Message, state: FSMContext):
    print("Write-Off")
    await state.clear()
    # day = datetime.now()
    # d, mo, y, h, m = day.day, day.month, day.year, day.hour, day.minute
    # f = lambda x: '0'+ str(x) if x<10 else x
    # d,mo,h,m = map(f,[d,mo,h,m])
    # d_t = f"{d}.{mo}.{y}, {h}:{m}"
    d_t = getDate()
    await message.answer(f"Фото: Маркировка\n{d_t['all']}", reply_markup = ForceReply())
    await state.set_state(Upload_PH.writeoff_ph)
@router.message(Command('photoreport'))
async def Photorep(message: Message, state: FSMContext):
    await state.clear()
    print("дата и время: ",getDate())
    kb = [
        [
            InlineKeyboardButton(text="Фотоотчёт", callback_data="Фотоотчёт"),
            InlineKeyboardButton(text="Чеки", callback_data="Чеки")
        ],
        [InlineKeyboardButton(text="Списание", callback_data="Списание")]
    ]
    keyboard = InlineKeyboardMarkup(inline_keyboard=kb)
    await message.answer("Загрузить фотоотчет.", reply_markup=keyboard)
    await state.set_state(Upload_PH.photorep_ph)
# @router.message(Upload_PH.photorep_ph)
# async def T1(message: Message, state: FSMContext):
#     await message.answer("Загрузить фотоотчет.!!")
@router.message(Upload_PH.writeoff_ph, F.photo)
async def Send_Photoes(message: Message, state: FSMContext):
    # res = file_path = requests.get(f'https://api.telegram.org/bot{token}/getFile?file_id={message.photo[-1].file_id}').json()['result'][
    #     'file_path']
    # print(res)
    # UrlPhoto = "https://api.telegram.org/file/bot" + token + "/" + res
    # df =np.array([
    #        "add",                                       # Статус
    #        message.date.strftime("%m.%d.%Y, %H:%M:%S"), # Время
    #        message.chat.id,                             # Id чата
    #        message.chat.title,                          # Название чата
    #        message.chat.type,                           # Тип чата
    #        message.from_user.id,                        # Id отправителя
    #        message.from_user.username,                  # Username отправителя
    #        message.from_user.first_name,                # Имя отправителя
    #        message.message_id,                          # Id сообщения
    #        message.media_group_id,                      # Id медиа-группы
    #        message.reply_to_message.message_id,         # Id сообщения(ответ)
    #        message.reply_to_message.date.strftime("%m.%d.%Y, %H:%M:%S"),# Время сообщения(ответ)
    #        "Выбор",                                     # Выбор
    #        "категория",                                 # Категория
    #        UrlPhoto,                                    # Url фото
    #        message.reply_to_message.text,               # Текст сообщения(ответ)
    #        message.chat.title,                          # Название чата
    #        'Empty',                                     # ""
    #        message.photo[-2].file_id,                   # Id фото
    #        photo,                                       # фото
    #        "lmd",                                       # Дата изменения
    #        "OCR"                                        # Текст
    #        ])
    print(message)
    is_end = True
    start = time.time()
    date = getDate()
    ans = ''
    # is_new = False
    f = lambda x,y: str(x+1) if y>1 else ''
    ### Получение фотографий продукта
    files = Funcs.virez(id = message.photo[-1].file_id, token = token)
    all_text = files["text"][0]["all"]
    # print(files["text"][0]["text"])
    ### Загрузка фото
    arr = getDF(message, reptype="Маркировка", time=date["dt"], file="", text=all_text)
    # print("arr ", arr)
    res = firebase.upl_base(arr)
    # print("res ", res)
    # print(files)
    # return 0
    # for file in files:

    if "0" in res: ### Если фото новое
        ### Загрузка продукта
        for i in range(len(files["file"])):
            # df = getDF(message, reptype="Маркировка", time=date["dt"], file=files[i])
            # print("файл", files[i])
            # photo = FSInputFile(file)
            upl_mark = firebase.add_to_base(n=str(i), name=res["name"], photo_path=files["file"][i], mark=files["text"][i])
            ans = time.time() - start

    elif "1" in res:
        await message.reply(res["1"])
        await message.answer(f"Фото: {res['type']}\n{getDate()['all']}", reply_markup=ForceReply())
        await state.set_state(Upload_PH.writeoff_ph)
        is_end = False

    print("конец ", is_end)
    if is_end:
        await state.clear()
@router.message(Upload_PH.writeoff_ph)
async def food_size_chosen(message: Message, state: FSMContext):
    await message.answer("Это не фото, отправьте фото маркировки")
    # Сброс состояния и сохранённых данных у пользователя
@router.callback_query(Upload_PH.photorep_ph)
async def Choose(callback: CallbackQuery, state: FSMContext):
    text = callback.data
    print(text)
    # if text == "Фотоотчёт":
    kb = [
        [
            InlineKeyboardButton(text="Маркировка продуктов", callback_data="Маркировка продуктов")],
        [
            InlineKeyboardButton(text="Температура", callback_data="Температура"),
            InlineKeyboardButton(text="Чек листы", callback_data="Чек листы"),
        ],
        [
         InlineKeyboardButton(text="Горячий цех", callback_data="Горячий цех"),
         InlineKeyboardButton(text="Зал", callback_data="Зал"),
        ]
    ]
        # keyboard = InlineKeyboardMarkup(inline_keyboard=kb)
        # await callback.message.edit_text("Выбор отчета", reply_markup=keyboard)
        # await state.set_state(Upload_PH.photorep_MK)
    if text == "Чеки":
        kb = [
            [
                InlineKeyboardButton(text="Расходы", callback_data="Расходы"),
                InlineKeyboardButton(text="Самозанятые", callback_data="Самозанятые"),
            ]
        ]
    kb.append([InlineKeyboardButton(text="←", callback_data="back")])
    keyboard = InlineKeyboardMarkup(inline_keyboard=kb)
    await callback.message.edit_text("Выбор отчета", reply_markup=keyboard)
    await state.set_state(Upload_PH.photorep_MK)
@router.callback_query(Upload_PH.photorep_MK)
async def Choose(callback: CallbackQuery, state: FSMContext):
    text = callback.data
    if text == "back":
        # print("дата и время: ", getDate())
        kb = [
            [
                InlineKeyboardButton(text="Фотоотчёт", callback_data="Фотоотчёт"),
                InlineKeyboardButton(text="Чеки", callback_data="Чеки")
            ],
            [InlineKeyboardButton(text="Списание", callback_data="Списание")]
        ]
        keyboard = InlineKeyboardMarkup(inline_keyboard=kb)
        await callback.message.edit_text("Загрузить фотоотчет.", reply_markup=keyboard)
        await state.set_state(Upload_PH.photorep_ph)
        # callback.message.edit_text("Выбор отчета", reply_markup=keyboard)
    else:
        await callback.message.reply(f"Отчет: {text}\n{getDate()['all']}", reply_markup = ForceReply())
        # await callback.message.delete()
        await state.set_state(Upload_PH.photorep_GP)
@router.message(Upload_PH.photorep_GP, F.photo)
async def Upl_Photo(message: Message, state: FSMContext):
    global is_r
    mes = message.reply_to_message.text.split("\n")
    retype = mes[0].split(":")[1]
    time = mes[1].split(" ")[0]
    print("retype", retype)
    print("time", time)
    arr = getDF(message, reptype=retype, time= time)
    print(arr)
    res = firebase.upl_base(arr)
    print("res",res)
    if "1" in res:
        await message.reply(res["1"])
        await message.answer(f"Отчет:{res['type']}\n{getDate()['all']}", reply_markup=ForceReply())
        # await callback.message.delete()
        await state.set_state(Upload_PH.photorep_GP)
        is_r = 1
    else:
        is_r = 0
        await state.set_state(Upload_PH.photorep_MK)