From 82b15597bc89b95e7112c73bd5310dfb155d3381 Mon Sep 17 00:00:00 2001 From: Alexei Date: Sat, 27 May 2023 16:34:55 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BA=D0=B0=D0=B7=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bot_modules/mod_table_operate.py | 81 ++++++++------------ bot_modules/orders.py | 161 +++++++++++++++++++++++++++++++++++++++ bot_sys/bd_table.py | 2 + template/bd_item_delete.py | 10 --- template/bd_item_edit.py | 11 +-- template/bd_item_select.py | 89 +++++++++++++++++----- template/bd_item_view.py | 10 +-- 7 files changed, 270 insertions(+), 94 deletions(-) create mode 100644 bot_modules/orders.py diff --git a/bot_modules/mod_table_operate.py b/bot_modules/mod_table_operate.py index a0cfb86..c6ae5a5 100644 --- a/bot_modules/mod_table_operate.py +++ b/bot_modules/mod_table_operate.py @@ -245,35 +245,28 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): return res, error + def SelectItemsTemplate(self): + return bd_item_select.GetBDItemsTemplate(self.m_Bot, self.m_Table.GetName(), self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.PARENT_ID)) + + def SelectSourceTemplate(self, a_PrevPrefix, a_ButtonName): + parent_id_field = self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.PARENT_ID) + return DBItemSelectSource(self.m_Bot, self.m_TableName.GetName(), parent_id_field, a_PrevPrefix, a_ButtonName) + def RegisterSelect(self, a_ButtonName, access_mode, only_parent = False): a_Prefix = None if self.m_ParentModName: parent_mod = self.GetModule(self.m_ParentModName) a_Prefix = parent_mod.RegisterSelect(a_ButtonName, access_mode, only_parent = False) - if not only_parent: - a_Prefix = bd_item_select.NextSelectBDItemRegisterHandlers(self.m_Bot, \ - a_Prefix, \ - self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.PARENT_ID), \ - self.m_Table.GetName(), \ - self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.KEY), \ - self.m_GetButtonNameAndKeyValueAndAccessFunc, \ - self.GetMessage(Messages.SELECT), \ - self.m_GetAccessFunc,\ - access_mode = access_mode\ - ) - else: - if not only_parent: - a_PrefixBase = a_ButtonName.GetDesc() - a_Prefix = bd_item_select.FirstSelectBDItemRegisterHandlers(self.m_Bot, \ - a_PrefixBase, \ - a_ButtonName, \ - self.m_Table.GetName(), \ - self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.KEY), \ + + if not only_parent: + a_Prefix = bd_item_select.SelectRegisterHandlers(self.m_Bot, \ + self.SelectSourceTemplate(a_Prefix, a_ButtonName), \ self.m_GetButtonNameAndKeyValueAndAccessFunc, \ self.GetMessage(Messages.SELECT), \ self.m_GetAccessFunc,\ access_mode = access_mode\ ) + return a_Prefix def RegisterHandlers(self): @@ -306,30 +299,23 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): a_ButtonName = self.GetButton(ButtonNames.LIST) if a_ButtonName: a_Prefix = self.RegisterSelect(a_ButtonName, user_access.AccessMode.VIEW, only_parent = True) - if a_Prefix: - bd_item_view.LastSelectAndShowBDItemRegisterHandlers(self.m_Bot, \ - a_Prefix,\ - parent_id_field, \ - table_name,\ - key_name, \ - self.ShowMessageTemplate(self.GetMessage(Messages.OPEN), GetViewItemInlineKeyboardTemplate), \ - GetButtonNameAndKeyValueAndAccess, \ - self.GetMessage(Messages.SELECT), \ - GetAccess, \ - defaul_keyboard_func, \ - access_mode = user_access.AccessMode.VIEW\ - ) - else: - bd_item_view.FirstSelectAndShowBDItemRegisterHandlers(self.m_Bot, \ - a_ButtonName, \ - table_name, \ - key_name, \ - self.ShowMessageTemplate(self.GetMessage(Messages.OPEN), GetViewItemInlineKeyboardTemplate), \ - GetButtonNameAndKeyValueAndAccess, \ - self.GetMessage(Messages.SELECT), \ - GetAccess, \ - defaul_keyboard_func\ - ) + + a_Prefix = bd_item_select.SelectRegisterHandlers(self.m_Bot,\ + self.SelectSourceTemplate(a_Prefix, a_ButtonName), \ + a_GetButtonNameAndKeyValueAndAccessFunc,\ + self.GetMessage(Messages.SELECT),\ + GetAccess,\ + access_mode = user_access.AccessMode.VIEW\ + ) + bd_item_view.ShowBDItemRegisterHandlers(self.m_Bot,\ + a_Prefix,\ + table_name,\ + key_name,\ + self.ShowMessageTemplate(self.GetMessage(Messages.OPEN),GetViewItemInlineKeyboardTemplate),\ + GetAccess,\ + defaul_keyboard_func,\ + access_mode = user_access.AccessMode.VIEW\ + ) self.m_SelectPrefix = a_Prefix # Удаление @@ -387,20 +373,15 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): return self.OnChange() a_Prefix = self.RegisterSelect(a_ButtonName, a_AccessMode, only_parent = True) - check_func = bd_item.GetCheckForTextFunc(a_ButtonName) - if a_Prefix: - check_func = bd_item.GetCheckForPrefixFunc(a_Prefix) - #print(a_ButtonName, a_Prefix, check_func) + bd_item_edit.EditBDItemRegisterHandlers(self.m_Bot, \ - a_Prefix, \ + self.SelectSourceTemplate(a_Prefix, a_ButtonName), \ a_FSM, \ - check_func, \ self.GetMessage(Messages.SELECT_TO_EDIT), \ self.ShowMessageTemplate(a_EditMessage), \ self.ShowMessageTemplate(self.GetMessage(Messages.SUCCESS_EDIT)), \ table_name, \ key_name, \ - parent_id_field, \ a_FieldName, \ GetButtonNameAndKeyValueAndAccess, \ GetAccess, \ diff --git a/bot_modules/orders.py b/bot_modules/orders.py new file mode 100644 index 0000000..836c59f --- /dev/null +++ b/bot_modules/orders.py @@ -0,0 +1,161 @@ +# -*- coding: utf8 -*- +# Общественное достояние, 2023, Алексей Безбородов (Alexei Bezborodov) + +# Заказы + +from bot_sys import bot_bd, keyboard, user_access, bd_table +from bot_modules import mod_table_operate, mod_simple_message + +from enum import Enum +from enum import auto + +class OrderStatus(Enum): + NEW = auto() + PAY = auto() + ADDRESS = auto() + FINISH = auto() + +# --------------------------------------------------------- +# БД +module_name = 'orders' + +table_name = module_name +key_name = 'orderID' +name_field = 'orderName' +desc_field = 'orderDesc' +photo_field = 'orderPhoto' +status_field = 'orderStatus' +address_field = 'orderAddres' +access_field = 'orderAccess' +create_datetime_field = 'orderCreateDateTime' +parent_id_field = 'userID' + +table = bd_table.Table(table_name, [ + bd_table.TableField(key_name, bd_table.TableFieldDestiny.KEY, bd_table.TableFieldType.INT), + bd_table.TableField(name_field, bd_table.TableFieldDestiny.NAME, bd_table.TableFieldType.STR), + bd_table.TableField(desc_field, bd_table.TableFieldDestiny.DESC, bd_table.TableFieldType.STR), + bd_table.TableField(photo_field, bd_table.TableFieldDestiny.PHOTO, bd_table.TableFieldType.STR), + bd_table.TableField(status_field, bd_table.TableFieldDestiny.STATUS, bd_table.TableFieldType.STR), + bd_table.TableField(address_field, bd_table.TableFieldDestiny.ADDRESS, bd_table.TableFieldType.STR), + bd_table.TableField(access_field, bd_table.TableFieldDestiny.ACCESS, bd_table.TableFieldType.STR), + bd_table.TableField(create_datetime_field, bd_table.TableFieldDestiny.CREATE_DATE, bd_table.TableFieldType.STR), + bd_table.TableField(parent_id_field, bd_table.TableFieldDestiny.PARENT_ID, bd_table.TableFieldType.INT), + ]) + +init_access = f'{user_access.user_access_group_new}=va' + +# --------------------------------------------------------- +# Сообщения и кнопки + +class ButtonNames(Enum): + LIST_ALL = auto() + EDIT_ADDRESS = auto() + +class Messages(Enum): + EDIT_ADDRESS = auto() + +button_names = { + mod_simple_message.ButtonNames.START: "👨‍👨‍👧‍👦 🛒 Заказы", + mod_table_operate.ButtonNames.LIST: "📃 Список текущих заказов", + ButtonNames.LIST_ALL: "📃 Список всех заказов", + mod_table_operate.ButtonNames.ADD: "✅ Добавить заказ", + mod_table_operate.ButtonNames.EDIT: "🛠 Редактировать заказ", + mod_table_operate.ButtonNames.EDIT_PHOTO: "☐ Изменить изображение в заказе", + mod_table_operate.ButtonNames.EDIT_NAME: "≂ Изменить название в заказе", + mod_table_operate.ButtonNames.EDIT_DESC: "𝌴 Изменить описание в заказе", + mod_table_operate.ButtonNames.EDIT_ACCESS: "✋ Изменить доступ к заказу", + mod_table_operate.ButtonNames.DEL: "❌ Удалить заказ", +} + +messages = { + mod_simple_message.Messages.START: f''' +{button_names[mod_simple_message.ButtonNames.START]} + +''', + mod_table_operate.Messages.SELECT: ''' +Пожалуйста, выберите заказ: +''', + mod_table_operate.Messages.ERROR_FIND: ''' +❌ Ошибка, заказ не найден +''', + mod_table_operate.Messages.OPEN: f''' +Заказ: #{name_field} + +#{desc_field} + +Статус:#{status_field} + +Адрес доставки:#{address_field} + +Время создания: #{create_datetime_field} +''', + mod_table_operate.Messages.CREATE_NAME: ''' +Создание заказа. Шаг №1 + +Введите название заказа: +''', + mod_table_operate.Messages.CREATE_DESC: ''' +Создание заказа. Шаг №2 + +Введите описание заказа: +''', + mod_table_operate.Messages.CREATE_PHOTO: ''' +Создание заказа. Шаг №3 + +Загрузите обложку для заказа (Фото): +Она будет отображаться в его описании. +''', + mod_table_operate.Messages.SUCCESS_CREATE: '''✅ Заказ успешно добавлен!''', + mod_table_operate.Messages.START_EDIT: ''' +Пожалуйста, выберите действие: +''', + mod_table_operate.Messages.SELECT_TO_EDIT: ''' +Выберите заказ, который вы хотите отредактировать. +''', + mod_table_operate.Messages.EDIT_PHOTO: ''' +Загрузите новую обложку для заказа (Фото): +Она будет отображаться в его описании. +''', + mod_table_operate.Messages.EDIT_NAME: f''' +Текущее название заказа: +#{name_field} + +Введите новое название заказа: +''', + mod_table_operate.Messages.EDIT_DESC: f''' +Текущее описание заказа: +#{desc_field} + +Введите новое описание заказа: +''', + Messages.EDIT_ADDRESS: f''' +Текущий адрес заказа: +#{desc_field} + +Введите новый адрес доставки заказа (укажите, кто, когда и где его сможет забрать): +''', + mod_table_operate.Messages.EDIT_ACCESS: f''' +Текущий доступ к заказу: +#{access_field} + +{user_access.user_access_readme} + +Введите новую строку доступа: +''', + mod_table_operate.Messages.SUCCESS_EDIT: '''✅ Заказ успешно отредактирован!''', + mod_table_operate.Messages.SELECT_TO_DELETE: ''' +Выберите заказ, который вы хотите удалить. +Все задачи и потребности в этом заказе так же будут удалены! +''', + mod_table_operate.Messages.SUCCESS_DELETE: '''✅ Заказ успешно удалён!''', +} + +class ModuleProjects(mod_table_operate.TableOperateModule): + def __init__(self, a_ParentModName, a_ChildModName, a_ChildModuleNameList, a_EditModuleNameList, a_Bot, a_ModuleAgregator, a_BotMessages, a_BotButtons, a_Log): + super().__init__(table, messages, button_names, a_ParentModName, a_ChildModName, init_access, a_ChildModuleNameList, a_EditModuleNameList, a_Bot, a_ModuleAgregator, a_BotMessages, a_BotButtons, a_Log) + + def GetName(self): + return module_name + + + diff --git a/bot_sys/bd_table.py b/bot_sys/bd_table.py index aaacb4f..26eaaab 100644 --- a/bot_sys/bd_table.py +++ b/bot_sys/bd_table.py @@ -19,6 +19,8 @@ class TableFieldDestiny(Enum): DEFAULT_ACCESS = auto() CREATE_DATE = auto() PARENT_ID = auto() + STATUS = auto() + ADDRESS = auto() OTHER = auto() class TableField: diff --git a/template/bd_item_delete.py b/template/bd_item_delete.py index 7c7a355..51345ec 100644 --- a/template/bd_item_delete.py +++ b/template/bd_item_delete.py @@ -29,16 +29,6 @@ def DeleteBDItemTemplate(a_Bot, a_TableName, a_KeyName, a_PreDeleteWorkFunc, a_P return simple_message.SimpleMessageTemplate(a_Bot, DeleteBDItem, a_ButtonFunc, None, a_AccessFunc, access_mode) -def SelectAndDeleteBDItemRegisterHandlers(a_Bot, a_PrevPrefix, a_StartCheckFunc, a_TableName : str, a_KeyName, a_ParentIDFieldName,a_PreDeleteWorkFunc, a_PostDeleteWorkFunc, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, a_ButtonFunc, access_mode = user_access.AccessMode.DELETE): - reg_func = a_Bot.RegisterMessageHandler - if a_ParentIDFieldName: - reg_func = a_Bot.RegisterCallbackHandler - - a_Prefix = bd_item.HashPrefix(f'delete_{a_TableName}_{a_KeyName}:') - sel_handler = bd_item_select.SelectDBItemTemplate(a_Bot, a_TableName, a_ParentIDFieldName, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, a_PrevPrefix, a_Prefix, access_mode) - reg_func(sel_handler, a_StartCheckFunc) - a_Bot.RegisterCallbackHandler(DeleteBDItemTemplate(a_Bot, a_TableName, a_KeyName, a_PreDeleteWorkFunc, a_PostDeleteWorkFunc, a_Prefix, a_AccessFunc, a_ButtonFunc, access_mode), bd_item.GetCheckForPrefixFunc(a_Prefix)) - def DeleteBDItemRegisterHandlers(a_Bot, a_PrevPrefix, a_TableName : str, a_KeyName, a_PreDeleteWorkFunc, a_PostDeleteWorkFunc, a_AccessFunc, a_ButtonFunc, access_mode = user_access.AccessMode.DELETE): a_Bot.RegisterCallbackHandler(DeleteBDItemTemplate(a_Bot, a_TableName, a_KeyName, a_PreDeleteWorkFunc, a_PostDeleteWorkFunc, a_PrevPrefix, a_AccessFunc, a_ButtonFunc, access_mode), bd_item.GetCheckForPrefixFunc(a_PrevPrefix)) diff --git a/template/bd_item_edit.py b/template/bd_item_edit.py index a665349..a443b3d 100644 --- a/template/bd_item_edit.py +++ b/template/bd_item_edit.py @@ -33,15 +33,12 @@ def FinishEditBDItemTemplate(a_Bot, a_FSM, a_TableName, a_KeyName, a_FieldName, return bd_item_add.FinishAddBDItemTemplate(a_Bot, a_FSM, EditBDItemFunc, a_TableName, a_KeyName, a_FieldName, a_MessageFunc, a_AccessFunc, a_ButtonFunc, access_mode = access_mode, field_type = field_type) -def EditBDItemRegisterHandlers(a_Bot, a_PrevPrefix, a_FSM, a_StartCheckFunc, a_StartMessage, a_EditMessageFunc, a_FinishMessageFunc, a_TableName : str, a_KeyName, a_ParentIDFieldName, a_FieldName, a_GetButtonNameAndKeyValueAndAccessFunc, a_AccessFunc, a_ButtonFunc, a_OnChangeFunc, access_mode = user_access.AccessMode.EDIT, field_type = bd_item.FieldType.text): - reg_func = a_Bot.RegisterMessageHandler - if a_ParentIDFieldName: - reg_func = a_Bot.RegisterCallbackHandler - +def EditBDItemRegisterHandlers(a_Bot, a_SelectSource, a_FSM, a_StartMessage, a_EditMessageFunc, a_FinishMessageFunc, a_TableName : str, a_KeyName, a_FieldName, a_GetButtonNameAndKeyValueAndAccessFunc, a_AccessFunc, a_ButtonFunc, a_OnChangeFunc, access_mode = user_access.AccessMode.EDIT, field_type = bd_item.FieldType.text): keyboard_cancel = bd_item.GetCancelKeyboardButtonsTemplate(a_Bot, a_AccessFunc, access_mode) a_Prefix = bd_item.HashPrefix(f'edit_{a_TableName}_{a_KeyName}_{a_FieldName}:') - sel_handler = bd_item_select.SelectDBItemTemplate(a_Bot, a_TableName, a_ParentIDFieldName, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, a_PrevPrefix, a_Prefix, access_mode) - reg_func(sel_handler, a_StartCheckFunc) + + SelectCustomRegisterHandlers(a_Bot, a_SelectSource, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, access_mode = access_mode) + a_Bot.RegisterCallbackHandler(StartEditBDItemTemplate(a_Bot, a_FSM, a_EditMessageFunc, a_TableName, a_KeyName, a_Prefix, a_AccessFunc, keyboard_cancel, a_ButtonFunc, access_mode), bd_item.GetCheckForPrefixFunc(a_Prefix)) if field_type == bd_item.FieldType.photo: a_Bot.RegisterMessageHandler(FinishEditBDItemTemplate(a_Bot, a_FSM, a_TableName, a_KeyName, a_FieldName, a_FinishMessageFunc, a_AccessFunc, a_ButtonFunc, a_OnChangeFunc, access_mode, field_type = field_type), content_types = ['photo', 'text'], state = a_FSM.item_field) diff --git a/template/bd_item_select.py b/template/bd_item_select.py index 2e199bd..50151b6 100644 --- a/template/bd_item_select.py +++ b/template/bd_item_select.py @@ -7,14 +7,12 @@ from bot_sys import user_access, bot_bd, keyboard from bot_modules import access_utils, groups_utils from template import simple_message, bd_item -def GetBDItemsListKeyboardButtonsTemplate(a_Bot, a_TableName : str, a_ParentIDFieldName, a_PrevPrefix, a_NextPrefix : str, a_GetButtonNameAndKeyValueAndAccessFunc, access_mode = user_access.AccessMode.VIEW): +from abc import ABC, abstractmethod + +def GetCustomListKeyboardButtonsTemplate(a_Bot, a_GetItemsFunc, a_PrevPrefix, a_NextPrefix : str, a_GetButtonNameAndKeyValueAndAccessFunc, access_mode = user_access.AccessMode.VIEW): def GetBDItemsListKeyboardButtons(a_Message, a_UserGroups): parent_id = bd_item.GetKeyDataFromCallbackMessage(a_Message, a_PrevPrefix) - items = [] - if a_ParentIDFieldName and parent_id and parent_id != '': - items = bd_item.GetBDItemsTemplate(a_Bot, a_TableName, a_ParentIDFieldName)(parent_id) - else: - items = bd_item.GetAllItemsTemplate(a_Bot, a_TableName)() + items = a_GetItemsFunc(a_Message, a_UserGroups, parent_id) items_button_list = [] for t in items: @@ -27,23 +25,78 @@ def GetBDItemsListKeyboardButtonsTemplate(a_Bot, a_TableName : str, a_ParentIDFi return keyboard.MakeInlineKeyboardButtons(a_Bot, items_button_list, a_UserGroups) return GetBDItemsListKeyboardButtons -def SelectDBItemTemplate(a_Bot, a_TableName : str, a_ParentIDFieldName, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, a_PrevPrefix, a_NextPrefix, access_mode = user_access.AccessMode.VIEW): - inline_keyboard_func = GetBDItemsListKeyboardButtonsTemplate(a_Bot, a_TableName, a_ParentIDFieldName, a_PrevPrefix, a_NextPrefix, a_GetButtonNameAndKeyValueAndAccessFunc) +def GetBDItemsTemplate(a_Bot, a_TableName : str, a_ParentIDFieldName): + def GetBDItems(a_Message, a_UserGroups, a_ParentID): + items = [] + if a_ParentIDFieldName and a_ParentID and a_ParentID != '': + items = bd_item.GetBDItemsTemplate(a_Bot, a_TableName, a_ParentIDFieldName)(a_ParentID) + else: + items = bd_item.GetAllItemsTemplate(a_Bot, a_TableName)() + + return items + return GetBDItems + +def SelectCustomTemplate(a_Bot, a_GetItemsFunc, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, a_PrevPrefix, a_NextPrefix, access_mode = user_access.AccessMode.VIEW): + inline_keyboard_func = GetCustomListKeyboardButtonsTemplate(a_Bot, a_GetItemsFunc, a_PrevPrefix, a_NextPrefix, a_GetButtonNameAndKeyValueAndAccessFunc) return simple_message.InfoMessageTemplate(a_Bot, a_StartMessage, None, inline_keyboard_func, a_AccessFunc, access_mode) -def FirstSelectBDItemRegisterHandlers(a_Bot, a_PrefixBase, a_ButtonName, a_TableName : str, a_KeyName, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, access_mode = user_access.AccessMode.VIEW): +class ISelectSource(ABC): + @abstractmethod + def IsFirst(self): + pass + + @abstractmethod + def GetItemsFunc(self): + pass + + @abstractmethod + def GetCheckFunc(self): + pass + + @abstractmethod + def GetPrevPrefix(self): + pass + + @abstractmethod + def GetPrefixBase(self): + pass + +class DBItemSelectSource: + def __init__(self, a_Bot, a_TableName, a_ParentIDFieldName, a_PrevPrefix, a_ButtonName): + self.a_Bot = a_Bot + self.a_TableName = a_TableName + self.a_ParentIDFieldName = a_ParentIDFieldName + self.a_PrevPrefix = a_PrevPrefix + self.a_ButtonName = a_ButtonName + + def IsFirst(self): + return not self.a_ParentIDFieldName + + def GetItemsFunc(self): + return GetBDItemsTemplate(self.a_Bot, self.a_TableName, self.a_ParentIDFieldName) + + def GetCheckFunc(self): + if self.IsFirst(): + return bd_item.GetCheckForTextFunc(a_ButtonName) + return bd_item.GetCheckForPrefixFunc(a_PrevPrefix) + + def GetPrevPrefix(self): + return self.a_PrevPrefix - a_Prefix = bd_item.HashPrefix(f'first_select_{a_TableName}_{a_KeyName}_in_base_{a_PrefixBase}:') + def GetPrefixBase(self): + if self.a_PrevPrefix: + return self.a_PrevPrefix + return self.a_ButtonName - sel_handler = SelectDBItemTemplate(a_Bot, a_TableName, None, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, None, a_Prefix, access_mode = access_mode) - a_Bot.RegisterMessageHandler(sel_handler, bd_item.GetCheckForTextFunc(a_ButtonName)) +def SelectRegisterHandlers(a_Bot, a_SelectSource, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, access_mode = user_access.AccessMode.VIEW): + reg_func = a_Bot.RegisterMessageHandler + if not a_SelectSource.IsFirst(): + reg_func = a_Bot.RegisterCallbackHandler - return a_Prefix + a_NextPrefix = bd_item.HashPrefix(f'select_{a_SelectSource}_after_prefix_or_in_base_{a_SelectSource.GetPrefixBase()}:') -def NextSelectBDItemRegisterHandlers(a_Bot, a_PrevPrefix, a_ParentIDFieldName, a_TableName : str, a_KeyName, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, access_mode = user_access.AccessMode.VIEW): - a_Prefix = bd_item.HashPrefix(f'next_select_{a_TableName}_{a_KeyName}_{a_ParentIDFieldName}_after_prefix_{a_PrevPrefix}:') + sel_handler = SelectCustomTemplate(a_Bot, a_SelectSource.GetItemsFunc(), a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, a_SelectSource.GetPrevPrefix(), a_NextPrefix, access_mode = access_mode) + reg_func(sel_handler, a_SelectSource.GetCheckFunc()) - sel_handler = SelectDBItemTemplate(a_Bot, a_TableName, a_ParentIDFieldName, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, a_PrevPrefix, a_Prefix, access_mode = access_mode) - a_Bot.RegisterCallbackHandler(sel_handler, bd_item.GetCheckForPrefixFunc(a_PrevPrefix)) + return a_NextPrefix - return a_Prefix diff --git a/template/bd_item_view.py b/template/bd_item_view.py index e40b06f..6513d41 100644 --- a/template/bd_item_view.py +++ b/template/bd_item_view.py @@ -5,18 +5,10 @@ from bot_sys import user_access, bot_bd, keyboard from bot_modules import access_utils, groups_utils -from template import simple_message, bd_item_select, bd_item_delete, bd_item +from template import simple_message, bd_item_delete, bd_item def ShowBDItemTemplate(a_Bot, a_TableName, a_KeyName, a_WorkFunc, a_Prefix, a_AccessFunc, a_ButtonFunc, access_mode = user_access.AccessMode.VIEW): return bd_item_delete.DeleteBDItemTemplate(a_Bot, a_TableName, a_KeyName, a_WorkFunc, None, a_Prefix, a_AccessFunc, a_ButtonFunc, access_mode = access_mode, delete = False) def ShowBDItemRegisterHandlers(a_Bot, a_PrevPrefix, a_TableName : str, a_KeyName, a_ShowItemWorkFunc, a_AccessFunc, a_ButtonFunc, access_mode = user_access.AccessMode.VIEW): a_Bot.RegisterCallbackHandler(ShowBDItemTemplate(a_Bot, a_TableName, a_KeyName, a_ShowItemWorkFunc, a_PrevPrefix, a_AccessFunc, a_ButtonFunc, access_mode = access_mode), bd_item.GetCheckForPrefixFunc(a_PrevPrefix)) - -def FirstSelectAndShowBDItemRegisterHandlers(a_Bot, a_ButtonName, a_TableName : str, a_KeyName, a_ShowItemWorkFunc, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, a_ButtonFunc, access_mode = user_access.AccessMode.VIEW): - a_Prefix = bd_item_select.FirstSelectBDItemRegisterHandlers(a_Bot, '', a_ButtonName, a_TableName, a_KeyName, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, access_mode = access_mode) - ShowBDItemRegisterHandlers(a_Bot, a_Prefix, a_TableName, a_KeyName, a_ShowItemWorkFunc, a_AccessFunc, a_ButtonFunc, access_mode = access_mode) - -def LastSelectAndShowBDItemRegisterHandlers(a_Bot, a_PrevPrefix, a_ParentIDFieldName, a_TableName : str, a_KeyName, a_ShowItemWorkFunc, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, a_ButtonFunc, access_mode = user_access.AccessMode.VIEW): - a_Prefix = bd_item_select.NextSelectBDItemRegisterHandlers(a_Bot, a_PrevPrefix, a_ParentIDFieldName, a_TableName, a_KeyName, a_GetButtonNameAndKeyValueAndAccessFunc, a_StartMessage, a_AccessFunc, access_mode = access_mode) - ShowBDItemRegisterHandlers(a_Bot, a_Prefix, a_TableName, a_KeyName, a_ShowItemWorkFunc, a_AccessFunc, a_ButtonFunc, access_mode = access_mode)