diff --git a/bot_modules/all_orders.py b/bot_modules/all_orders.py index 9f40bb9..350745a 100644 --- a/bot_modules/all_orders.py +++ b/bot_modules/all_orders.py @@ -4,7 +4,7 @@ # Заказы from bot_sys import bot_bd, keyboard, user_access, bd_table -from bot_modules import mod_table_operate, mod_simple_message, orders +from bot_modules import mod_table_operate, mod_simple_message, orders, access_utils from template import bd_item_select, bd_item_view, bd_item # --------------------------------------------------------- @@ -62,7 +62,7 @@ cur_messages = { Статус: #{orders.status_field} -Пользователь: #{orders.parent_id_field} +Пользователь: #{orders.user_id_field} Адрес доставки: #{orders.address_field} @@ -85,15 +85,16 @@ messages.update(orders.messages_order_status) messages.update(messages_notification) messages.update(cur_messages) -def GetCurItemsTemplate(a_Bot, a_TableName, a_StatusFieldName): +def GetCurItemsTemplate(a_Bot, a_TableName, a_StatusFieldName, a_ParentIDFieldName): def GetBDItems(a_Message, a_UserGroups, a_ParentID): - request = f'SELECT * FROM {a_TableName} WHERE {a_StatusFieldName} != ?' - return a_Bot.SQLRequest(request, param = ([str(orders.OrderStatus.FINISH)])) + request = f'SELECT * FROM {a_TableName} WHERE {a_ParentIDFieldName} = ? AND {a_StatusFieldName} != ?' + return a_Bot.SQLRequest(request, param = ([a_ParentID, str(orders.OrderStatus.FINISH)])) return GetBDItems -def GetBDItemsForUserTemplate(a_Bot, a_TableName): +def GetBDItemsForUserTemplate(a_Bot, a_TableName, a_ParentIDFieldName): def GetBDItems(a_Message, a_UserGroups, a_ParentID): - return bd_item.GetAllItemsTemplate(a_Bot, a_TableName)() + request = f'SELECT * FROM {a_TableName} WHERE {a_ParentIDFieldName} = ?' + return a_Bot.SQLRequest(request, param = ([a_ParentID])) return GetBDItems class DBItemForUserSelectSource(bd_item_select.DBItemSelectSource): @@ -103,11 +104,8 @@ class DBItemForUserSelectSource(bd_item_select.DBItemSelectSource): def GetItemsFunc(self): if self.m_OnlyCurrent: - return GetCurItemsTemplate(self.m_Bot, self.m_TableName, orders.status_field) - return GetBDItemsForUserTemplate(self.m_Bot, self.m_TableName) - - def IsFirst(self): - return True + return GetCurItemsTemplate(self.m_Bot, self.m_TableName, orders.status_field, self.m_ParentIDFieldName) + return GetBDItemsForUserTemplate(self.m_Bot, self.m_TableName, self.m_ParentIDFieldName) class ModuleAllOrders(orders.ModuleOrders): def __init__(self, a_ParentModName, a_ChildModName, a_ChildModuleNameList, a_EditModuleNameList, a_Bot, a_ModuleAgregator, a_BotMessages, a_BotButtons, a_BotSubscribes, a_Log): @@ -115,7 +113,9 @@ class ModuleAllOrders(orders.ModuleOrders): def GetInitBDCommands(self): # уже сделано в ModuleUserOrders - return [] + return [ + access_utils.GetAccessForModuleRequest(self.GetName(), self.m_InitAccess, self.m_DefInitAccess), + ] def GetName(self): return module_name @@ -134,6 +134,7 @@ class ModuleAllOrders(orders.ModuleOrders): return n + ":" + str(a_Item[parent_field_id]), k, a async def OnChangeField(self, a_Field, a_ItemID, a_ItemData, a_EditUserID): + super().OnChangeField(a_Field, a_ItemID, a_ItemData, a_EditUserID) if a_Field.m_Destiny == bd_table.TableFieldDestiny.STATUS: key_field = self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.KEY) item = bd_item.GetBDItemsTemplate(self.m_Bot, self.m_Table.GetName(), key_field)(a_ItemID) @@ -142,10 +143,10 @@ class ModuleAllOrders(orders.ModuleOrders): return item = item[0] - parent_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.PARENT_ID) + user_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.USER_ID) status_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.STATUS) - print('OnChangeField', item, parent_field_id, status_field_id) - owner_id = item[parent_field_id] + print('OnChangeField', item, user_field_id, status_field_id) + owner_id = item[user_field_id] new_status = item[status_field_id] msg = self.GetMessage(mod_table_operate.NotificationMessage(new_status)) if not msg: diff --git a/bot_modules/authorize.py b/bot_modules/authorize.py index dced8b2..02e4763 100644 --- a/bot_modules/authorize.py +++ b/bot_modules/authorize.py @@ -241,11 +241,14 @@ messages = { } messages_subscribes = { - mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ADD):f'''Данные по авторизации созданы''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD):f'''Данные по авторизации созданы''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT):f'''Данные по авторизации отредактированы''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL):f'''Данные по авторизации удалены''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_EDIT):f'''Данные по авторизации отредактированы #item_id''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_DEL):f'''Данные по авторизации удалены #item_id''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD_WITH_PARENT):f'''Данные по авторизации созданы''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT_WITH_PARENT):f'''Данные по авторизации отредактированы''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL_WITH_PARENT):f'''Данные по авторизации удалены''', } messages.update(messages_subscribes) diff --git a/bot_modules/bd_version.py b/bot_modules/bd_version.py index 081a075..2d5eff5 100644 --- a/bot_modules/bd_version.py +++ b/bot_modules/bd_version.py @@ -47,5 +47,5 @@ class ModuleBDVersion(mod_table_operate.TableOperateModule): def GetInitBDCommands(self): return super(). GetInitBDCommands() + [ - f"INSERT OR IGNORE INTO {table_name} ({base_version_number_field}, {sub_version_number_field}) VALUES ('{1}', '{0}');" + f"INSERT OR IGNORE INTO {table_name} ({base_version_number_field}, {sub_version_number_field}) VALUES ('{1}', '{1}');" ] diff --git a/bot_modules/comments.py b/bot_modules/comments.py index b5c8457..6f6be15 100644 --- a/bot_modules/comments.py +++ b/bot_modules/comments.py @@ -119,11 +119,14 @@ messages = { } messages_subscribes = { - mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ADD):f'''Комментарий создан''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD):f'''Комментарий создан''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT):f'''Комментарий отредактирован''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL):f'''Комментарий удалён''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_EDIT):f'''Комментарий отредактирован #item_id''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_DEL):f'''Комментарий удалён #item_id''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD_WITH_PARENT):f'''Комментарий создан''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT_WITH_PARENT):f'''Комментарий отредактирован''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL_WITH_PARENT):f'''Комментарий удалён''', } messages.update(messages_subscribes) diff --git a/bot_modules/mod_table_operate.py b/bot_modules/mod_table_operate.py index 5c257c4..4188812 100644 --- a/bot_modules/mod_table_operate.py +++ b/bot_modules/mod_table_operate.py @@ -51,6 +51,12 @@ class Messages(Enum): SELECT_TO_DELETE = auto() SUCCESS_DELETE = auto() +def GetCurItem(a_Bot, a_TableName, a_KeyName, a_KeyValue): + items = bd_item.GetBDItemsTemplate(a_Bot, a_TableName, a_KeyName)(a_KeyValue) + if len(items) == 1: + return items[0] + return None + create_fsm_create_cmd = ''' class FSMCreate{a_ModName}(StatesGroup): {items} @@ -99,7 +105,7 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): return self.GetButtonNameAndKeyValueAndAccess(a_Item) self.m_GetButtonNameAndKeyValueAndAccessFunc = GetButtonNameAndKeyValueAndAccess - async def PreDelete(a_CallbackQuery, a_Item, a_None): + async def PreDelete(a_CallbackQuery, a_Item, a_None, table_name = self.m_Table.GetName()): return await self.PreDelete(a_CallbackQuery, a_Item, a_None) self.m_PreDeleteFunc = PreDelete @@ -209,7 +215,7 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): return a_Msg def ShowMessageTemplate(self, a_Message, Inline_keyboard_template_func = None, a_EnablePhoto = False): - async def ShowMessage(a_CallbackQuery, a_Item, a_ItemDict): + async def ShowMessage(a_CallbackQuery, a_Item, a_ItemDict, table_name = self.m_Table.GetName()): msg = a_Message.StaticCopy() # TODO: добавить поддержку языков в a_MessageName Inline_keyboard_func = None @@ -218,7 +224,8 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): lang = str(a_CallbackQuery.from_user.language_code) msg = msg.GetMessageForLang(lang).StaticCopy() msg = self.UpdateMessageByDict(msg, lang, a_ItemDict, a_EnablePhoto = a_EnablePhoto) - if a_Item: + + if a_Item and self.m_Table.GetName() == table_name: if len(a_Item) < self.m_Table.GetFieldsCount() - 1: # Для проектов это нужно. Там на 1 меньше поле. TODO разделить отправку сообщений item_access и Inline_keyboard_func return simple_message.WorkFuncResult(self.GetMessage(Messages.ERROR_FIND)) elif len(a_Item) == self.m_Table.GetFieldsCount(): @@ -252,6 +259,18 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): item_id = a_ItemID await self.SendSubscribe(subscribe_type, item_id, user_id) + table_name = self.m_Table.GetName() + key_name = self.GetKeyFieldName() + + cur_item = GetCurItem(self.m_Bot, table_name, key_name, a_ItemID) + print(cur_item) + + parent_id_field_index = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.PARENT_ID) + if parent_id_field_index and cur_item and cur_item[parent_id_field_index]: + subscribe_type = bot_subscribes.SubscribeType.ANY_ITEM_DEL_WITH_PARENT + item_id = cur_item[parent_id_field_index] + await self.SendSubscribe(subscribe_type, item_id, user_id) + return simple_message.WorkFuncResult(self.GetMessage(Messages.SUCCESS_DELETE)) async def AddBDItemFunc(self, a_ItemData, a_UserID): @@ -295,10 +314,15 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): else: self.m_Log.Success(f'Пользователь {a_UserID}. Добавлена запись в таблицу {request} {param}.') - subscribe_type = bot_subscribes.SubscribeType.ADD + subscribe_type = bot_subscribes.SubscribeType.ANY_ITEM_ADD item_id = -1 await self.SendSubscribe(subscribe_type, item_id, a_UserID) + if parent_id_field and a_ItemData[parent_id_field]: + subscribe_type = bot_subscribes.SubscribeType.ANY_ITEM_ADD_WITH_PARENT + item_id = a_ItemData[parent_id_field] + await self.SendSubscribe(subscribe_type, item_id, a_UserID) + return res, error async def SendSubscribe(self, a_Type, a_ItemID, a_OwnerUserID): @@ -316,7 +340,10 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): a_Message = None user_groups = None parse_mode = None - await simple_message.SendMessage(self.m_Bot, a_BotMessage, a_GetButtonsFunc, a_GetInlineButtonsFunc, a_UserID, a_Message, user_groups, parse_mode=parse_mode) + try: + await simple_message.SendMessage(self.m_Bot, a_BotMessage, a_GetButtonsFunc, a_GetInlineButtonsFunc, a_UserID, a_Message, user_groups, parse_mode=parse_mode) + except: + return def SelectSourceTemplate(self, a_PrevPrefix, a_ButtonName): parent_id_field = self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.PARENT_ID) @@ -369,6 +396,18 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): await self.SendSubscribe(subscribe_type, item_id, a_EditUserID) + table_name = self.m_Table.GetName() + key_name = self.GetKeyFieldName() + + cur_item = GetCurItem(self.m_Bot, table_name, key_name, a_ItemID) + print(cur_item) + + parent_id_field_index = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.PARENT_ID) + if parent_id_field_index and cur_item and cur_item[parent_id_field_index]: + subscribe_type = bot_subscribes.SubscribeType.ANY_ITEM_EDIT_WITH_PARENT + item_id = cur_item[parent_id_field_index] + await self.SendSubscribe(subscribe_type, item_id, a_EditUserID) + def RegisterEdit(self, a_Field, a_AccessMode = user_access.AccessMode.EDIT): a_ButtonName = self.GetButton(EditButton(a_Field.m_Destiny)) a_EditMessage = self.GetMessage(EditMessage(a_Field.m_Destiny)) @@ -391,7 +430,7 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): GetButtonNameAndKeyValueAndAccess = self.m_GetButtonNameAndKeyValueAndAccessFunc GetAccess = self.m_GetAccessFunc - a_Prefix = self.RegisterSelect(a_ButtonName, a_AccessMode, only_parent = True) + a_Prefix = self.RegisterSelect(a_ButtonName, user_access.AccessMode.VIEW, only_parent = True) bd_item_edit.EditBDItemRegisterHandlers(self.m_Bot, \ self.SelectSourceTemplate(a_Prefix, a_ButtonName), \ @@ -536,7 +575,7 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): # Удаление a_ButtonName = self.GetButton(ButtonNames.DEL) if a_ButtonName: - a_Prefix = self.RegisterSelect(a_ButtonName, user_access.AccessMode.DELETE) + a_Prefix = self.RegisterSelect(a_ButtonName, user_access.AccessMode.VIEW) bd_item_delete.DeleteBDItemRegisterHandlers(self.m_Bot, \ a_Prefix, \ table_name, \ @@ -550,7 +589,7 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): # Добавление a_ButtonName = self.GetButton(ButtonNames.ADD) if a_ButtonName: - a_Prefix = self.RegisterSelect(a_ButtonName, user_access.AccessMode.ADD, only_parent = True) + a_Prefix = self.RegisterSelect(a_ButtonName, user_access.AccessMode.VIEW, only_parent = True) check_func = bd_item.GetCheckForTextFunc(a_ButtonName) if a_Prefix: diff --git a/bot_modules/needs.py b/bot_modules/needs.py index ace1d88..0bba8ba 100644 --- a/bot_modules/needs.py +++ b/bot_modules/needs.py @@ -120,11 +120,14 @@ messages = { } messages_subscribes = { - mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ADD):f'''Потребность создана''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD):f'''Потребность создана''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT):f'''Потребность отредактирована''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL):f'''Потребность удалёна''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_EDIT):f'''Потребность отредактирована #item_id''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_DEL):f'''Потребность удалёна #item_id''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD_WITH_PARENT):f'''Потребность создана''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT_WITH_PARENT):f'''Потребность отредактирована''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL_WITH_PARENT):f'''Потребность удалёна''', } messages.update(messages_subscribes) diff --git a/bot_modules/orders.py b/bot_modules/orders.py index 1c4a973..1f8ecdb 100644 --- a/bot_modules/orders.py +++ b/bot_modules/orders.py @@ -22,6 +22,7 @@ module_name = 'orders' table_name = module_name key_name = 'orderID' +user_id_field = 'userID' name_field = 'orderName' desc_field = 'orderDesc' photo_field = 'orderPhoto' @@ -30,10 +31,11 @@ status_field = 'orderStatus' address_field = 'orderAddress' access_field = 'orderAccess' create_datetime_field = 'orderCreateDateTime' -parent_id_field = 'userID' +parent_id_field = 'catID' table = bd_table.Table(table_name, [ bd_table.TableField(key_name, bd_table.TableFieldDestiny.KEY, bd_table.TableFieldType.INT), + bd_table.TableField(user_id_field, bd_table.TableFieldDestiny.USER_ID, 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.PHOTO), @@ -134,7 +136,7 @@ messages = { ''', mod_table_operate.EditMessage(bd_table.TableFieldDestiny.ADDRESS): f''' Текущий адрес заказа: -#{desc_field} +#{address_field} Введите новый адрес доставки заказа (укажите, кто, когда и где его сможет забрать): ''', @@ -164,26 +166,31 @@ messages_order_status = { messages.update(messages_order_status) messages_subscribes = { - mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ADD):f'''Заказ создан''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD):f'''Заказ создан''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT):f'''Заказ отредактирован''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL):f'''Заказ удалён''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_EDIT):f'''Заказ отредактирован #item_id''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_DEL):f'''Заказ удалён #item_id''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD_WITH_PARENT):f'''Заказ создан''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT_WITH_PARENT):f'''Заказ отредактирован''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL_WITH_PARENT):f'''Заказ удалён''', } messages.update(messages_subscribes) -def GetCurItemsTemplate(a_Bot, a_TableName, a_UserIDFieldName, a_StatusFieldName): +def GetCurItemsTemplate(a_Bot, a_TableName, a_UserIDFieldName, a_ParentIDFieldName, a_StatusFieldName): def GetBDItems(a_Message, a_UserGroups, a_ParentID): user_id = str(a_Message.from_user.id) - request = f'SELECT * FROM {a_TableName} WHERE {a_UserIDFieldName} = ? AND {a_StatusFieldName} != ?' - return a_Bot.SQLRequest(request, param = ([user_id, str(OrderStatus.FINISH)])) + request = f'SELECT * FROM {a_TableName} WHERE {a_ParentIDFieldName} = ? AND {a_UserIDFieldName} = ? AND {a_StatusFieldName} != ?' + return a_Bot.SQLRequest(request, param = ([a_ParentID, user_id, str(OrderStatus.FINISH)])) return GetBDItems -def GetBDItemsForUserTemplate(a_Bot, a_TableName, a_UserIDFieldName): +def GetBDItemsForUserTemplate(a_Bot, a_TableName, a_UserIDFieldName, a_ParentIDFieldName): def GetBDItems(a_Message, a_UserGroups, a_ParentID): user_id = str(a_Message.from_user.id) - return bd_item.GetBDItemsTemplate(a_Bot, a_TableName, a_UserIDFieldName)(user_id) + request = f'SELECT * FROM {a_TableName} WHERE {a_ParentIDFieldName} = ? AND {a_UserIDFieldName} = ?' + print('GetBDItemsForUserTemplate', user_id, request, a_ParentID) + return a_Bot.SQLRequest(request, param = ([a_ParentID, user_id])) return GetBDItems class DBItemForUserSelectSource(bd_item_select.DBItemSelectSource): @@ -193,11 +200,8 @@ class DBItemForUserSelectSource(bd_item_select.DBItemSelectSource): def GetItemsFunc(self): if self.m_OnlyCurrent: - return GetCurItemsTemplate(self.m_Bot, self.m_TableName, self.m_ParentIDFieldName, status_field) - return GetBDItemsForUserTemplate(self.m_Bot, self.m_TableName, self.m_ParentIDFieldName) - - def IsFirst(self): - return True + return GetCurItemsTemplate(self.m_Bot, self.m_TableName, user_id_field, self.m_ParentIDFieldName, status_field) + return GetBDItemsForUserTemplate(self.m_Bot, self.m_TableName, user_id_field, self.m_ParentIDFieldName) class ModuleOrders(mod_table_operate.TableOperateModule): def __init__(self, a_Table, a_Messages, a_Buttons, a_ParentModName, a_ChildModName, a_InitAccess, a_DefInitAccess, a_ChildModuleNameList, a_EditModuleNameList, a_Bot, a_ModuleAgregator, a_BotMessages, a_BotButtons, a_BotSubscribes, a_Log): @@ -213,7 +217,7 @@ class ModuleOrders(mod_table_operate.TableOperateModule): def AddBDItemFunc(self, a_ItemData, a_UserID): parent_id_field = self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.PARENT_ID) - a_ItemData[parent_id_field] = a_UserID + a_ItemData[user_id_field] = a_UserID a_ItemData[status_field] = str(OrderStatus.NEW) a_ItemData[address_field] = '' a_ItemData[photo_pay_field] = '0' diff --git a/bot_modules/orders_cat.py b/bot_modules/orders_cat.py new file mode 100644 index 0000000..0288656 --- /dev/null +++ b/bot_modules/orders_cat.py @@ -0,0 +1,138 @@ +# -*- coding: utf8 -*- +# Общественное достояние, 2023, Алексей Безбородов (Alexei Bezborodov) + +# Проекты + +from bot_sys import bot_bd, keyboard, user_access, bd_table, bot_subscribes +from bot_modules import mod_table_operate, mod_simple_message + +# --------------------------------------------------------- +# БД +module_name = 'orders_cat' + +table_name = module_name +key_name = 'catID' +name_field = 'catName' +desc_field = 'catDesc' +photo_field = 'catPhoto' +access_field = 'catAccess' +create_datetime_field = 'catCreateDateTime' + +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.PHOTO), + 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), + ]) + +init_access = f'{user_access.user_access_group_new}=v' + +# --------------------------------------------------------- +# Сообщения и кнопки + +button_names = { + mod_simple_message.ButtonNames.START: "🟥 Категории", + mod_table_operate.ButtonNames.LIST: "📃 Список категорий", + mod_table_operate.ButtonNames.ADD: "✅ Добавить категорию", + mod_table_operate.ButtonNames.EDIT: "🛠 Редактировать категорию", + mod_table_operate.EditButton(bd_table.TableFieldDestiny.PHOTO): "☐ Изменить изображение в категории", + mod_table_operate.EditButton(bd_table.TableFieldDestiny.NAME): "≂ Изменить название в категории", + mod_table_operate.EditButton(bd_table.TableFieldDestiny.DESC): "𝌴 Изменить описание в категории", + mod_table_operate.EditButton(bd_table.TableFieldDestiny.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} + +Время создания: #{create_datetime_field} +''', + mod_table_operate.CreateMessage(bd_table.TableFieldDestiny.NAME): ''' +Создание категории. Шаг №1 + +Введите название категории: +''', + mod_table_operate.CreateMessage(bd_table.TableFieldDestiny.DESC): ''' +Создание категории. Шаг №2 + +Введите описание категории: +''', + mod_table_operate.CreateMessage(bd_table.TableFieldDestiny.PHOTO): ''' +Создание категории. Шаг №3 + +Загрузите обложку для категории (Фото): +Она будет отображаться в его описании. +''', + mod_table_operate.Messages.SUCCESS_CREATE: '''✅ Категория успешно добавлена!''', + mod_table_operate.Messages.START_EDIT: ''' +Пожалуйста, выберите действие: +''', + mod_table_operate.Messages.SELECT_TO_EDIT: ''' +Выберите проект, который вы хотите отредактировать. +''', + mod_table_operate.EditMessage(bd_table.TableFieldDestiny.PHOTO): ''' +Загрузите новую обложку для категории (Фото): +Она будет отображаться в его описании. +''', + mod_table_operate.EditMessage(bd_table.TableFieldDestiny.NAME): f''' +Текущее название категории: +#{name_field} + +Введите новое название категории: +''', + mod_table_operate.EditMessage(bd_table.TableFieldDestiny.DESC): f''' +Текущее описание категории: +#{desc_field} + +Введите новое описание категории: +''', + mod_table_operate.EditMessage(bd_table.TableFieldDestiny.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: '''✅ Категория успешно удалёна!''', +} + +messages_subscribes = { + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD):f'''Категория создана''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT):f'''Категория отредактирована''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL):f'''Категория удалена''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_EDIT):f'''Категория отредактирована #item_id''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_DEL):f'''Категория удалена #item_id''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD_WITH_PARENT):f'''Категория создана''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT_WITH_PARENT):f'''Категория отредактирована''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL_WITH_PARENT):f'''Категория удалена''', +} + +messages.update(messages_subscribes) + +class ModuleOrdersCat(mod_table_operate.TableOperateModule): + def __init__(self, a_ParentModName, a_ChildModName, a_ChildModuleNameList, a_EditModuleNameList, a_Bot, a_ModuleAgregator, a_BotMessages, a_BotButtons, a_BotSubscribes, a_Log): + super().__init__(table, messages, button_names, a_ParentModName, a_ChildModName, init_access, init_access, a_ChildModuleNameList, a_EditModuleNameList, a_Bot, a_ModuleAgregator, a_BotMessages, a_BotButtons, a_BotSubscribes, a_Log) + + def GetName(self): + return module_name + diff --git a/bot_modules/projects.py b/bot_modules/projects.py index a3fc0c0..3ed3438 100644 --- a/bot_modules/projects.py +++ b/bot_modules/projects.py @@ -118,11 +118,14 @@ messages = { } messages_subscribes = { - mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ADD):f'''Проект создан''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD):f'''Проект создан''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT):f'''Проект отредактирован''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL):f'''Проект удалён''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_EDIT):f'''Проект отредактирован #item_id''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_DEL):f'''Проект удалён #item_id''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD_WITH_PARENT):f'''Проект создан''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT_WITH_PARENT):f'''Проект отредактирован''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL_WITH_PARENT):f'''Проект удалён''', } messages.update(messages_subscribes) diff --git a/bot_modules/subscribes.py b/bot_modules/subscribes.py index 6c4e663..3731920 100644 --- a/bot_modules/subscribes.py +++ b/bot_modules/subscribes.py @@ -59,11 +59,14 @@ button_names = { mod_table_operate.EditButton(bd_table.TableFieldDestiny.SUBSCRIBE_TYPE): "𝌴 Изменить тип в моей подписке", mod_table_operate.EditButton(bd_table.TableFieldDestiny.ITEM_ID): "𝌴 Изменить элемент в моей подписке", mod_table_operate.EditButton(bd_table.TableFieldDestiny.ACCESS): "✋ Изменить доступ к моей подписке", - mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ADD): "Добавление элемента", + mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ANY_ITEM_ADD): "Добавление элемента", mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ANY_ITEM_DEL): "Удаление какого либо элемента", mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ANY_ITEM_EDIT): "Редактирование какого либо элемента", mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ITEM_DEL): "Удаление определённого элемента", mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ITEM_EDIT): "Редактирование определённого элемента", + mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ANY_ITEM_ADD_WITH_PARENT): "Добавление элемента с родителем", + mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ANY_ITEM_DEL_WITH_PARENT): "Удаление элемента с родителем", + mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ANY_ITEM_EDIT_WITH_PARENT): "Редактирование элемента с родителем", mod_table_operate.ButtonNames.DEL: "❌ Удалить мою подписку", } @@ -102,7 +105,7 @@ messages = { mod_table_operate.CreateMessage(bd_table.TableFieldDestiny.ITEM_ID): ''' Создание подписки. Шаг №3 -Номер элемента, на который нужно подписаться (-1, если элемента нет): +Номер элемента или его родителя, на который нужно подписаться (-1, если элемента нет): ''', mod_table_operate.Messages.SUCCESS_CREATE: '''✅ Подписка успешно добавлена!''', mod_table_operate.Messages.START_EDIT: ''' @@ -143,13 +146,16 @@ messages = { mod_table_operate.Messages.SUCCESS_DELETE: '''✅ Подписка успешно удалёна!''', } -# TODO Возможно это не нужно есть же mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ADD) см. выше +# TODO Возможно это не нужно есть же mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ANY_ITEM_ADD) см. выше messages_subs_type_status = { - mod_table_operate.EnumMessageForView(bot_subscribes.SubscribeType.ADD): f'''Добавление элемента''', + mod_table_operate.EnumMessageForView(bot_subscribes.SubscribeType.ANY_ITEM_ADD): f'''Добавление элемента''', mod_table_operate.EnumMessageForView(bot_subscribes.SubscribeType.ANY_ITEM_DEL): f'''Удаление элемента''', mod_table_operate.EnumMessageForView(bot_subscribes.SubscribeType.ANY_ITEM_EDIT): f'''Редактирование элемента''', mod_table_operate.EnumMessageForView(bot_subscribes.SubscribeType.ITEM_DEL): f'''Удаление конкретного элемента''', mod_table_operate.EnumMessageForView(bot_subscribes.SubscribeType.ITEM_EDIT): f'''Редактирование конкретного элемента''', + mod_table_operate.EnumMessageForView(bot_subscribes.SubscribeType.ANY_ITEM_ADD_WITH_PARENT): f'''Добавление элемента''', + mod_table_operate.EnumMessageForView(bot_subscribes.SubscribeType.ANY_ITEM_DEL_WITH_PARENT): f'''Удаление элемента''', + mod_table_operate.EnumMessageForView(bot_subscribes.SubscribeType.ANY_ITEM_EDIT_WITH_PARENT): f'''Редактирование элемента''', } messages.update(messages_subs_type_status) diff --git a/bot_modules/tasks.py b/bot_modules/tasks.py index 1523adb..23f52a7 100644 --- a/bot_modules/tasks.py +++ b/bot_modules/tasks.py @@ -120,11 +120,14 @@ messages = { } messages_subscribes = { - mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ADD):f'''Задача создана''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD):f'''Задача создана''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT):f'''Задача отредактирована''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL):f'''Задача удалёна''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_EDIT):f'''Задача отредактирована #item_id''', mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ITEM_DEL):f'''Задача удалёна #item_id''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_ADD):f'''Задача создана''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_EDIT):f'''Задача отредактирована''', + mod_table_operate.SubscribeMessage(bot_subscribes.SubscribeType.ANY_ITEM_DEL):f'''Задача удалёна''', } messages.update(messages_subscribes) diff --git a/bot_sys/bot_subscribes.py b/bot_sys/bot_subscribes.py index db22367..91a3001 100644 --- a/bot_sys/bot_subscribes.py +++ b/bot_sys/bot_subscribes.py @@ -8,11 +8,14 @@ from enum import auto # Тип поля в таблице class SubscribeType(Enum): - ADD = auto() + ANY_ITEM_ADD = auto() ANY_ITEM_DEL = auto() ANY_ITEM_EDIT = auto() ITEM_DEL = auto() ITEM_EDIT = auto() + ANY_ITEM_ADD_WITH_PARENT = auto() + ANY_ITEM_DEL_WITH_PARENT = auto() + ANY_ITEM_EDIT_WITH_PARENT = auto() class BotSubscribes: def __init__(self): @@ -57,17 +60,17 @@ def Test(): mod_1 = 'proj' mod_2 = 'backup' s = BotSubscribes() - s.AddSubscribe(user_id_1, mod_1, SubscribeType.ADD) + s.AddSubscribe(user_id_1, mod_1, SubscribeType.ANY_ITEM_ADD) s.AddSubscribe(user_id_2, mod_2, SubscribeType.ITEM_DEL) - assert len(s.GetUserIDs(mod_1, SubscribeType.ADD)) == 1 + assert len(s.GetUserIDs(mod_1, SubscribeType.ANY_ITEM_ADD)) == 1 assert len(s.GetUserIDs(mod_1, SubscribeType.ANY_ITEM_DEL)) == 0 - assert user_id_1 in s.GetUserIDs(mod_1, SubscribeType.ADD) - assert not user_id_2 in s.GetUserIDs(mod_1, SubscribeType.ADD) - assert not user_id_3 in s.GetUserIDs(mod_1, SubscribeType.ADD) + assert user_id_1 in s.GetUserIDs(mod_1, SubscribeType.ANY_ITEM_ADD) + assert not user_id_2 in s.GetUserIDs(mod_1, SubscribeType.ANY_ITEM_ADD) + assert not user_id_3 in s.GetUserIDs(mod_1, SubscribeType.ANY_ITEM_ADD) assert len(s.GetUserIDs(mod_2, SubscribeType.ITEM_DEL)) == 1 - assert len(s.GetUserIDs(mod_2, SubscribeType.ADD)) == 0 + assert len(s.GetUserIDs(mod_2, SubscribeType.ANY_ITEM_ADD)) == 0 assert user_id_2 in s.GetUserIDs(mod_2, SubscribeType.ITEM_DEL) assert not user_id_1 in s.GetUserIDs(mod_2, SubscribeType.ITEM_DEL) assert not user_id_3 in s.GetUserIDs(mod_2, SubscribeType.ITEM_DEL) diff --git a/main.py b/main.py index b064418..4a0e35a 100644 --- a/main.py +++ b/main.py @@ -6,7 +6,7 @@ import os from bot_sys import config, log, aiogram_bot, bot_messages, bd_table, user_access from bot_modules import mod_agregator, start, profile, backup, users_groups_agregator, access, projects, tasks, needs, comments from bot_modules import languages, messages, buttons, users, groups, user_in_groups -from bot_modules import orders, all_orders, authorize +from bot_modules import orders_cat, orders, all_orders, authorize from bot_modules import bd_version from bot_sys import bot_subscribes @@ -40,6 +40,7 @@ mod_buttons_name = buttons.module_name mod_users_name = users.module_name mod_groups_name = groups.module_name mod_user_in_groups_name = user_in_groups.module_name +mod_orders_cat_name = orders_cat.module_name mod_orders_name = orders.module_name mod_all_orders_name = all_orders.module_name @@ -96,11 +97,15 @@ mod_buttons = buttons.ModuleButtons(mod_languages_name, None, child_mod_name_lis g_ModuleAgregator.AddModule(mod_buttons) child_mod_name_list = [mod_start_name] -mod_orders = orders.ModuleUserOrders(None, None, child_mod_name_list, start_mod_list, g_Bot, g_ModuleAgregator, g_BotMessages, g_BotButtons, g_BotSubscribes, g_Log) -g_ModuleAgregator.AddModule(mod_orders) +mod_orders_cat = orders_cat.ModuleOrdersCat(None, mod_orders_name, child_mod_name_list, start_mod_list, g_Bot, g_ModuleAgregator, g_BotMessages, g_BotButtons, g_BotSubscribes, g_Log) +g_ModuleAgregator.AddModule(mod_orders_cat) child_mod_name_list = [mod_start_name] -mod_all_orders = all_orders.ModuleAllOrders(None, None, child_mod_name_list, start_mod_list, g_Bot, g_ModuleAgregator, g_BotMessages, g_BotButtons, g_BotSubscribes, g_Log) +mod_orders = orders.ModuleUserOrders(mod_orders_cat_name, None, child_mod_name_list, start_mod_list, g_Bot, g_ModuleAgregator, g_BotMessages, g_BotButtons, g_BotSubscribes, g_Log) +g_ModuleAgregator.AddModule(mod_orders) + +child_mod_name_list = [mod_start_name, mod_orders_cat_name] +mod_all_orders = all_orders.ModuleAllOrders(mod_orders_cat_name, None, child_mod_name_list, start_mod_list, g_Bot, g_ModuleAgregator, g_BotMessages, g_BotButtons, g_BotSubscribes, g_Log) g_ModuleAgregator.AddModule(mod_all_orders) child_mod_name_list = [mod_start_name] diff --git a/template/bd_item.py b/template/bd_item.py index 8cc9783..edfbf83 100644 --- a/template/bd_item.py +++ b/template/bd_item.py @@ -100,7 +100,7 @@ def CheckAccessBDItemTemplate(a_Bot, a_TableName, a_KeyName, a_KeyValue, a_WorkF a_Bot.GetLog().Error(msg) return simple_message.WorkFuncResult(bot_messages.MakeBotMessage(msg)), None - result_work_func = await a_WorkFunc(a_CallbackQuery, item[0], None) + result_work_func = await a_WorkFunc(a_CallbackQuery, item[0], None, table_name = a_TableName) if result_work_func is None or result_work_func.m_BotMessage is None: return result_work_func, result_work_func