fix date_picker, fix filter, improve language selector

This commit is contained in:
Alexander Kalinovsky
2025-01-10 13:45:02 +01:00
parent 3898a333fa
commit ced47ac993
4 changed files with 20 additions and 12 deletions

View File

@@ -247,7 +247,7 @@ async def view_filter_edit(query: CallbackQuery, **kwargs):
if cmd == "clear": if cmd == "clear":
await ViewSetting.set_filter(session = db_session, user_id = user.id, entity_name = entity_descriptor.class_name, filter = None) await ViewSetting.set_filter(session = db_session, user_id = user.id, entity_name = entity_descriptor.class_name, filter = None)
context_data_bak = state_data.pop("context_data_bak") context_data_bak = state_data.pop("context_data_bak", None)
if context_data_bak: if context_data_bak:
state_data["context_data"] = context_data_bak state_data["context_data"] = context_data_bak
@@ -271,6 +271,7 @@ async def view_filter_edit(query: CallbackQuery, **kwargs):
else: else:
state_data.pop("context_data", None)
return await route_callback(message = query, back = False, **kwargs) return await route_callback(message = query, back = False, **kwargs)
@@ -315,7 +316,7 @@ async def view_filter_edit_input(message: Message, **kwargs):
#state_data.pop("context_data") #state_data.pop("context_data")
#return await route_callback(message = message, back = False, **kwargs) #return await route_callback(message = message, back = False, **kwargs)
context_data_bak = state_data.pop("context_data_bak") context_data_bak = state_data.pop("context_data_bak", None)
if context_data_bak: if context_data_bak:
state_data["context_data"] = context_data_bak state_data["context_data"] = context_data_bak
context_data = ContextData.unpack(context_data_bak) context_data = ContextData.unpack(context_data_bak)
@@ -336,6 +337,7 @@ async def view_filter_edit_input(message: Message, **kwargs):
else: else:
state_data.pop("context_data", None)
return await route_callback(message = message, back = False, **kwargs) return await route_callback(message = message, back = False, **kwargs)

View File

@@ -109,6 +109,9 @@ async def date_picker_year(query: CallbackQuery,
start_date = datetime.strptime(callback_data.data, "%Y-%m-%d") start_date = datetime.strptime(callback_data.data, "%Y-%m-%d")
state_data = await state.get_data()
kwargs["state_data"] = state_data
keyboard_builder = InlineKeyboardBuilder() keyboard_builder = InlineKeyboardBuilder()
keyboard_builder.row(InlineKeyboardButton(text = "🔼", keyboard_builder.row(InlineKeyboardButton(text = "🔼",
callback_data = ContextData( callback_data = ContextData(
@@ -117,8 +120,7 @@ async def date_picker_year(query: CallbackQuery,
entity_name = callback_data.entity_name, entity_name = callback_data.entity_name,
entity_id = callback_data.entity_id, entity_id = callback_data.entity_id,
field_name = callback_data.field_name, field_name = callback_data.field_name,
data = start_date.replace(year = start_date.year - 20).strftime("%Y-%m-%d"), data = start_date.replace(year = start_date.year - 20).strftime("%Y-%m-%d")).pack()))
save_state = True).pack()))
for r in range(4): for r in range(4):
buttons = [] buttons = []
@@ -143,15 +145,14 @@ async def date_picker_year(query: CallbackQuery,
entity_name = callback_data.entity_name, entity_name = callback_data.entity_name,
entity_id = callback_data.entity_id, entity_id = callback_data.entity_id,
field_name = callback_data.field_name, field_name = callback_data.field_name,
data = start_date.replace(year = start_date.year + 20).strftime("%Y-%m-%d"), data = start_date.replace(year = start_date.year + 20).strftime("%Y-%m-%d")).pack()))
save_state = True).pack()))
field_descriptor = get_field_descriptor(app, callback_data) field_descriptor = get_field_descriptor(app, callback_data)
await wrap_editor(keyboard_builder = keyboard_builder, await wrap_editor(keyboard_builder = keyboard_builder,
field_descriptor = field_descriptor, field_descriptor = field_descriptor,
callback_data = callback_data, callback_data = callback_data,
state = state) state_data = state_data)
await query.message.edit_reply_markup(reply_markup = keyboard_builder.as_markup()) await query.message.edit_reply_markup(reply_markup = keyboard_builder.as_markup())
@@ -160,6 +161,9 @@ async def date_picker_year(query: CallbackQuery,
async def date_picker_month(query: CallbackQuery, callback_data: ContextData, app: "QBotApp", **kwargs): async def date_picker_month(query: CallbackQuery, callback_data: ContextData, app: "QBotApp", **kwargs):
field_descriptor = get_field_descriptor(app, callback_data) field_descriptor = get_field_descriptor(app, callback_data)
state: FSMContext = kwargs["state"]
state_data = await state.get_data()
kwargs["state_data"] = state_data
await date_picker(query.message, await date_picker(query.message,
field_descriptor = field_descriptor, field_descriptor = field_descriptor,

View File

@@ -47,6 +47,8 @@ async def entity_list_callback(query: CallbackQuery, **kwargs):
await entity_list(message = query, navigation_stack = stack, **kwargs) await entity_list(message = query, navigation_stack = stack, **kwargs)
def calc_total_pages(items_count: int, page_size: int) -> int:
return max(items_count // page_size + (1 if items_count % page_size else 0), 1)
async def entity_list(message: CallbackQuery | Message, async def entity_list(message: CallbackQuery | Message,
callback_data: ContextData, callback_data: ContextData,
@@ -79,9 +81,6 @@ async def entity_list(message: CallbackQuery | Message,
entity_filter = await ViewSetting.get_filter(session = db_session, user_id = user.id, entity_name = entity_descriptor.class_name) entity_filter = await ViewSetting.get_filter(session = db_session, user_id = user.id, entity_name = entity_descriptor.class_name)
def calc_total_pages(items_count: int, page_size: int) -> int:
return max(items_count // page_size + (1 if items_count % page_size else 0), 1)
if issubclass(entity_type, OwnedBotEntity): if issubclass(entity_type, OwnedBotEntity):
if EntityPermission.READ_ALL in user_permissions or EntityPermission.LIST_ALL in user_permissions: if EntityPermission.READ_ALL in user_permissions or EntityPermission.LIST_ALL in user_permissions:
items_count = await entity_type.get_count(session = db_session, filter = entity_filter) items_count = await entity_type.get_count(session = db_session, filter = entity_filter)

View File

@@ -1,6 +1,7 @@
from aiogram import Router, F from aiogram import Router, F
from aiogram.types import Message, CallbackQuery, InlineKeyboardButton, InlineKeyboardMarkup from aiogram.types import Message, CallbackQuery, InlineKeyboardButton, InlineKeyboardMarkup
from aiogram.fsm.context import FSMContext from aiogram.fsm.context import FSMContext
from aiogram.utils.i18n import I18n
from logging import getLogger from logging import getLogger
from sqlmodel.ext.asyncio.session import AsyncSession from sqlmodel.ext.asyncio.session import AsyncSession
@@ -69,6 +70,8 @@ async def set_language(message: CallbackQuery, **kwargs):
user.lang = LanguageBase(callback_data.data) user.lang = LanguageBase(callback_data.data)
await db_session.commit() await db_session.commit()
i18n: I18n = kwargs["i18n"]
with i18n.use_locale(user.lang):
await route_callback(message, **kwargs) await route_callback(message, **kwargs)