inline_

2024-08-12 17:46 | Публичная
from aiogram.filters.callback_data import CallbackData
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

from bot.constants import report_types
from bot.core_bot import get_all_regions_from_database, get_retailers_by_region_from_database


class RetailerIDCallback(CallbackData, prefix='retailer'):
    foo: str
    retailer_id: int


class RetailerCallback(CallbackData, prefix='retailer'):
    foo: str
    keyboard_selection: str


class RegionCallback(CallbackData, prefix='region'):
    foo: str
    region_id: int


class RetailerDateCallback(CallbackData, prefix='date'):
    foo: str
    retailer_id: int


class CancelActionCallback(CallbackData, prefix='cancel_action'):
    foo: str


class RetailerReportTypeCallback(CallbackData, prefix='report_type'):
    foo: str
    report_type: str


class DeleteSalesDataCallback(CallbackData, prefix='delete_action'):
    foo: str

class UploadSalesDataCallback(CallbackData, prefix='upload_action'):
    foo: str

class RetailerKeyboards:
    def create_main_keyboard(self):
        keyboard = InlineKeyboardMarkup(
            inline_keyboard=[
                [
                    InlineKeyboardButton(
                        text='Добавить Ритейлера ➕',
                        callback_data=RetailerCallback(
                            foo='show_regions',
                            keyboard_selection='add_keyboard'
                        ).pack()
                    ),
                    InlineKeyboardButton(
                        text='Просмотр Региона 👀',
                        callback_data=RetailerCallback(
                            foo='show_regions',
                            keyboard_selection='show_keyboard'
                        ).pack()
                    )
                ],
                [
                    InlineKeyboardButton(
                        text='Загрузить спецификацию',
                        callback_data=RetailerCallback(
                            foo='download_specification',
                            keyboard_selection='none'
                        ).pack()
                    ),
                ],
                [
                    InlineKeyboardButton(
                        text='Кастомные Функции 🌚',
                        callback_data=RetailerCallback(
                            foo='custom_functions',
                            keyboard_selection='none'
                        ).pack()
                    ),
                ],
                [
                    InlineKeyboardButton(
                        text='Выгрузить Данные 🚛',
                        callback_data=RetailerCallback(
                            foo='download_data_menu',
                            keyboard_selection='none'
                        ).pack()
                    ),
                ],
                [
                    InlineKeyboardButton(
                        text='Удалить Данные',
                        callback_data=RetailerCallback(
                            foo='remove_data_menu',
                            keyboard_selection='none'
                        ).pack()
                    ),
                ]
            ]

        )

        return keyboard

    def create_report_type_keyboard(self):
        inline_keyboard = []
        for report_type, label in report_types.items():
            inline_keyboard.append([
                InlineKeyboardButton(
                    text=label,
                    callback_data=RetailerReportTypeCallback(
                        foo='add_retailer_name',
                        report_type=report_type
                    ).pack()
                )
            ])

        inline_keyboard.append([
            InlineKeyboardButton(
                text='Отмена - ❌',
                callback_data=CancelActionCallback(
                    foo='cancel_action'
                ).pack()
            )
        ])
        keyboard = InlineKeyboardMarkup(inline_keyboard=inline_keyboard)
        return keyboard

    def change_report_type_keyboard(self):
        inline_keyboard = []
        for report_type, label in report_types.items():
            inline_keyboard.append([
                InlineKeyboardButton(
                    text=label,
                    callback_data=RetailerReportTypeCallback(
                        foo='apply_report_changes',
                        report_type=report_type
                    ).pack()
                )
            ])

        inline_keyboard.append([
            InlineKeyboardButton(
                text='Отмена - ❌',
                callback_data=CancelActionCallback(
                    foo='cancel_action'
                ).pack()
            )
        ])
        keyboard = InlineKeyboardMarkup(inline_keyboard=inline_keyboard)
        return keyboard


    def create_retailers_show_keyboard(self, region_id):
        retailers: list[tuple] = get_retailers_by_region_from_database(region_id)
        # print(retailers)
        buttons = [
            [
                InlineKeyboardButton(
                    text=f'{retailer_name} - {report_types[report_type]}',
                    callback_data=RetailerIDCallback(
                        foo='showing_retailer_options',
                        retailer_id=int(retailer_id)
                    ).pack()
                )
            ]
            for retailer_id, retailer_name, report_type in retailers
        ]

        buttons.append([
            InlineKeyboardButton(
                text='Отмена - ❌',
                callback_data=CancelActionCallback(
                    foo='cancel_action'
                ).pack()
            )
        ])

        keyboard = InlineKeyboardMarkup(inline_keyboard=buttons)
        return keyboard

    def create_retailer_manager_keyboard(self, retailer_id):
        buttons = [
            [
                InlineKeyboardButton(
                    text='Загрузить EXCEL - 📥',
                    callback_data=RetailerIDCallback(
                        foo='select_upload_date',
                        retailer_id=int(retailer_id)
                    ).pack()
                )
            ],
            [
                InlineKeyboardButton(
                    text='Изменить ТИП ОТЧЕТА - ⚙️',
                    callback_data=RetailerIDCallback(
                        foo='change_report_type',
                        retailer_id=int(retailer_id)
                    ).pack()
                )
            ],
            [
                InlineKeyboardButton(
                    text='Удалить Ритейлера - 🗑️',
                    callback_data=RetailerIDCallback(
                        foo='delete_retailer',
                        retailer_id=int(retailer_id)
                    ).pack()
                )
            ],
            [
                InlineKeyboardButton(
                    text='Отмена - ❌',
                    callback_data=CancelActionCallback(
                        foo='cancel_action'
                    ).pack()
                )
            ],
        ]

        keyboard = InlineKeyboardMarkup(inline_keyboard=buttons)
        return keyboard

    def create_retailer_select_upload_date(self, retailer_id):
        keyboard = InlineKeyboardMarkup(
            inline_keyboard=[
                [
                    InlineKeyboardButton(
                        text='Выгрузить за последний месяц',
                        callback_data=RetailerDateCallback(
                            foo='upload_last_month',
                            retailer_id=retailer_id
                        ).pack()
                    ),
                ],
                [
                    InlineKeyboardButton(
                        text='Выгрузить за определенный период',
                        callback_data=RetailerDateCallback(
                            foo='upload_custom_date',
                            retailer_id=retailer_id
                        ).pack()
                    ),
                ],
                [
                    InlineKeyboardButton(
                        text='Отмена - ❌',
                        callback_data=CancelActionCallback(
                            foo='cancel_action'
                        ).pack()
                    )
                ],
            ]
        )
        return keyboard


class RegionKeyboards:
    def __init__(self):
        self.regions: list[tuple[int, str]] = get_all_regions_from_database()

    def create_show_regions_keyboard(self):
        buttons = [
            [
                InlineKeyboardButton(
                    text=region_name,
                    callback_data=RegionCallback(
                        foo='show_retailers_by_region',
                        region_id=int(region_id)
                    ).pack()
                )
            ]
            for region_id, region_name in self.regions
        ]

        buttons.append([
            InlineKeyboardButton(
                text='Отмена - ❌',
                callback_data=CancelActionCallback(
                    foo='cancel_action'
                ).pack()
            )
        ])

        keyboard = InlineKeyboardMarkup(inline_keyboard=buttons)
        return keyboard

    def create_adding_retailer_keyboard(self):
        print('add_retailer?')
        buttons = [
            [
                InlineKeyboardButton(
                    text=region_name,
                    callback_data=RegionCallback(
                        foo='add_retailer',
                        region_id=int(region_id)
                    ).pack()
                )
            ]
            for region_id, region_name in self.regions
        ]

        buttons.append([
            InlineKeyboardButton(
                text='Отмена - ❌',
                callback_data=CancelActionCallback(
                    foo='cancel_action'
                ).pack()
            )
        ])

        keyboard = InlineKeyboardMarkup(inline_keyboard=buttons)
        return keyboard


class SalesDataKeyboards:
    def delete_data_keyboard(self):
        keyboard = InlineKeyboardMarkup(
            inline_keyboard=[
                [
                    InlineKeyboardButton(
                        text='Удалить данные за указанный период',
                        callback_data=DeleteSalesDataCallback(
                            foo='delete_date'
                        ).pack()
                    )
                ],
                [
                    InlineKeyboardButton(
                        text='Удалить данные 1 ретейлера за указанный период',
                        callback_data=DeleteSalesDataCallback(
                            foo='delete_retailer_date'
                        ).pack()
                    ),
                ],
                [
                    InlineKeyboardButton(
                        text='Отмена - ❌',
                        callback_data=CancelActionCallback(
                            foo='cancel_action'
                        ).pack()
                    )
                ],
            ]
        )
        return keyboard


class UnloadDataKeyboards:
    def unload_data_keyboard(self):
        keyboard = InlineKeyboardMarkup(
            inline_keyboard=[
                [
                    InlineKeyboardButton(
                        text='Выгрузить все данные за весь период',
                        callback_data=UploadSalesDataCallback(
                            foo='unload_all_date_all_time'
                        ).pack()
                    )
                ],
                [
                    InlineKeyboardButton(
                        text='Выгрузить  данные 1 ретейлера за указанный период',
                        callback_data=UploadSalesDataCallback(
                            foo='unload_date_time'
                        ).pack()
                    ),
                ],
                [
                    InlineKeyboardButton(
                        text='Выгрузить данные по всем ретейлерам за указанный период',
                        callback_data=UploadSalesDataCallback(
                            foo='unload_retailer_custom_date'
                        ).pack()
                    ),
                ],
                [
                    InlineKeyboardButton(
                        text='Отмена - ❌',
                        callback_data=CancelActionCallback(
                            foo='cancel_action'
                        ).pack()
                    )
                ],
            ]
        )
        return keyboard
#Функция для выгрузки
#@self.dp.callback_query(RetailerCallback.filter(F.foo == 'show_regions'))
#        @user_permission
#        async def (
#                query: CallbackQuery,
 #               callback_data: RetailerCallback,
Вернуться ко Всем Вставкам
Открыть чат
Чат с Send-Code AI Закрыть чат