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,