diff --git a/bot_modules/all_orders.py b/bot_modules/all_orders.py new file mode 100644 index 0000000..a98b0df --- /dev/null +++ b/bot_modules/all_orders.py @@ -0,0 +1,118 @@ +# -*- 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, orders +from template import bd_item_select, bd_item_view, bd_item + + +# --------------------------------------------------------- +# БД +module_name = 'all_orders' + +table = orders.table + +init_access = f'{user_access.user_access_group_new}=-' + +# --------------------------------------------------------- +# Сообщения и кнопки + +button_names = {} +button_names.update(orders.button_names) +button_names.pop(mod_table_operate.ButtonNames.ADD) + +cur_button_names = { + mod_simple_message.ButtonNames.START: "‍🛒 Все заказы", + mod_table_operate.ButtonNames.LIST: "📃 Список всех заказов", + orders.ButtonNames.LIST_CURRENT: "📃 Список текущих заказов", + 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.ADDRESS): "𝌴 Изменить адрес в заказе", + mod_table_operate.EditButton(bd_table.TableFieldDestiny.ACCESS): "✋ Изменить доступ к заказу", + mod_table_operate.EditButton(bd_table.TableFieldDestiny.STATUS): "𝌴 Изменить статус в заказе", + mod_table_operate.EnumButton(orders.OrderStatus.NEW): "Заказ ожидает модерации", + mod_table_operate.EnumButton(orders.OrderStatus.PAY): "Заказ ожидает оплаты", + mod_table_operate.EnumButton(orders.OrderStatus.ADDRESS): "Заказ ожидает уточнения адреса", + mod_table_operate.EnumButton(orders.OrderStatus.FINISH): "Заказ выполнен", + mod_table_operate.ButtonNames.DEL: "❌ Удалить заказ",} +button_names.update(cur_button_names) + +messages = {} +messages.update(orders.messages) + +cur_messages = { + mod_simple_message.Messages.START: f''' +{button_names[mod_simple_message.ButtonNames.START]} + +''', + mod_table_operate.EditMessage(bd_table.TableFieldDestiny.STATUS): f''' +Текущий статус заказа: +#{orders.status_field} + +Введите новый статус заказа: +''', + mod_table_operate.Messages.OPEN: f''' +Заказ: #{orders.name_field} + +Описание и состав заказа: #{orders.desc_field} + +Статус: #{orders.status_field} + +Пользователь: #{orders.parent_id_field} + +Адрес доставки: #{orders.address_field} + +Время создания: #{orders.create_datetime_field} +''', +} + +messages.update(orders.messages_order_status) +messages.update(cur_messages) + +def GetCurItemsTemplate(a_Bot, a_TableName, a_StatusFieldName): + def GetBDItems(a_Message, a_UserGroups, a_ParentID): + request = f'SELECT * FROM {a_TableName} WHERE {a_StatusFieldName} != ?' + return a_Bot.SQLRequest(request, param = ([user_id, str(OrderStatus.FINISH)])) + return GetBDItems + +def GetBDItemsForUserTemplate(a_Bot, a_TableName): + def GetBDItems(a_Message, a_UserGroups, a_ParentID): + return bd_item.GetAllItemsTemplate(a_Bot, a_TableName)() + return GetBDItems + +class DBItemForUserSelectSource(bd_item_select.DBItemSelectSource): + def __init__(self, a_Bot, a_TableName, a_ParentIDFieldName, a_PrevPrefix, a_ButtonName, a_OnlyCurrent = False): + super().__init__(a_Bot, a_TableName, a_ParentIDFieldName, a_PrevPrefix, a_ButtonName) + self.m_OnlyCurrent = a_OnlyCurrent + + 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 + +class ModuleAllOrders(orders.ModuleOrders): + 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 GetInitBDCommands(self): + # уже сделано в ModuleUserOrders + return [] + + def GetName(self): + return module_name + + def SelectSourceTemplate(self, a_PrevPrefix, a_ButtonName): + parent_id_field = self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.PARENT_ID) + return DBItemForUserSelectSource(self.m_Bot, self.m_Table.GetName(), parent_id_field, a_PrevPrefix, a_ButtonName) + + def SelectSourceForCurrentTemplate(self, a_PrevPrefix, a_ButtonName): + parent_id_field = self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.PARENT_ID) + return DBItemForUserSelectSource(self.m_Bot, self.m_Table.GetName(), parent_id_field, a_PrevPrefix, a_ButtonName, a_OnlyCurrent = True) + diff --git a/bot_modules/orders.py b/bot_modules/orders.py index 4bf4a9b..227ea9f 100644 --- a/bot_modules/orders.py +++ b/bot_modules/orders.py @@ -53,21 +53,16 @@ class ButtonNames(Enum): button_names = { mod_simple_message.ButtonNames.START: "‍🛒 Заказы", - mod_table_operate.ButtonNames.LIST: "📃 Список всех заказов", - ButtonNames.LIST_CURRENT: "📃 Список текущих заказов", + mod_table_operate.ButtonNames.LIST: "📃 Список всех моих заказов", + ButtonNames.LIST_CURRENT: "📃 Список моих текущих заказов", 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.ADDRESS): "𝌴 Изменить адрес в заказе", - mod_table_operate.EditButton(bd_table.TableFieldDestiny.STATUS): "𝌴 Изменить статус в заказе", - mod_table_operate.EditButton(bd_table.TableFieldDestiny.ACCESS): "✋ Изменить доступ к заказу", - mod_table_operate.EnumButton(OrderStatus.NEW): "Заказ ожидает модерации", - mod_table_operate.EnumButton(OrderStatus.PAY): "Заказ ожидает оплаты", - mod_table_operate.EnumButton(OrderStatus.ADDRESS): "Заказ ожидает уточнения адреса", - mod_table_operate.EnumButton(OrderStatus.FINISH): "Заказ выполнен", - mod_table_operate.ButtonNames.DEL: "❌ Удалить заказ", + 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.ADDRESS): "𝌴 Изменить адрес в моём заказе", + mod_table_operate.EditButton(bd_table.TableFieldDestiny.ACCESS): "✋ Изменить доступ к моему заказу", + mod_table_operate.ButtonNames.DEL: "❌ Удалить мой заказ", } messages = { @@ -137,12 +132,6 @@ messages = { Введите новый адрес доставки заказа (укажите, кто, когда и где его сможет забрать): ''', - mod_table_operate.EditMessage(bd_table.TableFieldDestiny.STATUS): f''' -Текущий статус заказа: -#{status_field} - -Введите новый статус заказа: -''', mod_table_operate.EditMessage(bd_table.TableFieldDestiny.ACCESS): f''' Текущий доступ к заказу: #{access_field} @@ -195,11 +184,8 @@ class DBItemForUserSelectSource(bd_item_select.DBItemSelectSource): return True class ModuleOrders(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 + def __init__(self, a_Table, a_Messages, a_Buttons, a_ParentModName, a_ChildModName, a_InitAccess, a_ChildModuleNameList, a_EditModuleNameList, a_Bot, a_ModuleAgregator, a_BotMessages, a_BotButtons, a_Log): + super().__init__(table, a_Messages, a_Buttons, a_ParentModName, a_ChildModName, a_InitAccess, a_ChildModuleNameList, a_EditModuleNameList, a_Bot, a_ModuleAgregator, a_BotMessages, a_BotButtons, a_Log) def SelectSourceTemplate(self, a_PrevPrefix, a_ButtonName): parent_id_field = self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.PARENT_ID) @@ -257,3 +243,9 @@ class ModuleOrders(mod_table_operate.TableOperateModule): access_mode = user_access.AccessMode.VIEW\ ) +class ModuleUserOrders(ModuleOrders): + 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/main.py b/main.py index eafe68c..e6de562 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 +from bot_modules import orders, all_orders log_start_message = 'Бот успешно запущен!' @@ -36,6 +36,7 @@ mod_users_name = users.module_name mod_groups_name = groups.module_name mod_user_in_groups_name = user_in_groups.module_name mod_orders_name = orders.module_name +mod_all_orders_name = all_orders.module_name start_mod_list = [mod_start_name] mod_access = access.ModuleAccess(start_mod_list, g_Bot, g_ModuleAgregator, g_BotMessages, g_BotButtons, g_Log) @@ -90,9 +91,13 @@ 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.ModuleOrders(None, None, child_mod_name_list, start_mod_list, g_Bot, g_ModuleAgregator, g_BotMessages, g_BotButtons, g_Log) +mod_orders = orders.ModuleUserOrders(None, None, child_mod_name_list, start_mod_list, g_Bot, g_ModuleAgregator, g_BotMessages, g_BotButtons, g_Log) g_ModuleAgregator.AddModule(mod_orders) +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_Log) +g_ModuleAgregator.AddModule(mod_all_orders) + child_mod_name_list = [ mod_profile.GetName(), mod_backup.GetName(), @@ -101,6 +106,7 @@ child_mod_name_list = [ mod_project.GetName(), mod_languages.GetName(), mod_orders.GetName(), + mod_all_orders.GetName(), ] mod_start = start.ModuleStart(child_mod_name_list, g_Bot, g_ModuleAgregator, g_BotMessages, g_BotButtons, g_Log) g_ModuleAgregator.AddModule(mod_start)