keyboards.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. from aiogram.utils.keyboard import InlineKeyboardMarkup, InlineKeyboardButton, CallbackData
  2. from loader import db
  3. start_kb = InlineKeyboardMarkup(inline_keyboard=[
  4. [
  5. InlineKeyboardButton(text="Начать", callback_data="main:menu")
  6. ],
  7. ])
  8. today_kb = InlineKeyboardMarkup(inline_keyboard=[
  9. [
  10. InlineKeyboardButton(text="Сегодня", callback_data="today")
  11. ],
  12. ])
  13. confirm_kb = InlineKeyboardMarkup(inline_keyboard=[
  14. [
  15. InlineKeyboardButton(text="Подтвердить создание", callback_data="confirm")
  16. ],
  17. [
  18. InlineKeyboardButton(text="Отменить", callback_data="cancel")
  19. ],
  20. ])
  21. main_kb = InlineKeyboardMarkup(inline_keyboard=[
  22. [
  23. InlineKeyboardButton(text="📋 Список сотрудников", callback_data="main:list")
  24. ],
  25. [
  26. InlineKeyboardButton(text="🔎 Поиск сотрудника", callback_data="main:search")
  27. ],
  28. [
  29. InlineKeyboardButton(text="➕ Добавить сотрудника", callback_data="main:add")
  30. ],
  31. ])
  32. search_kb = InlineKeyboardMarkup(inline_keyboard=[
  33. [
  34. InlineKeyboardButton(text="👤 Поиск по ФИО", callback_data="search:name")
  35. ],
  36. [
  37. InlineKeyboardButton(text="🗂 Поиск по проекту", callback_data="search:project")
  38. ],
  39. [
  40. InlineKeyboardButton(text="🗂👨‍💼 Поиск внутри проекта", callback_data="search:project_user")
  41. ],
  42. [
  43. InlineKeyboardButton(text="👨‍💼 Поиск по должности", callback_data="search:position")
  44. ],
  45. [
  46. InlineKeyboardButton(text="🕓 Поиск по времени прихода", callback_data="search:time")
  47. ],
  48. [
  49. InlineKeyboardButton(text="🔙 Назад", callback_data="main:back")
  50. ]
  51. ])
  52. search_proj_kb = InlineKeyboardMarkup(inline_keyboard=[[
  53. InlineKeyboardButton(text="📋 Списки по проектам", callback_data="search:project")
  54. ]
  55. ])
  56. search_pos_kb = InlineKeyboardMarkup(inline_keyboard=[[
  57. InlineKeyboardButton(text="📋 Списки по должностям", callback_data="search:position_list")
  58. ]
  59. ])
  60. async def create_project_search_kb(projects: dict) -> InlineKeyboardMarkup | None:
  61. if not projects:
  62. return None
  63. return InlineKeyboardMarkup(inline_keyboard=[[
  64. InlineKeyboardButton(text="🔙 В меню поиска", callback_data="main:search")
  65. ]] + [
  66. [
  67. InlineKeyboardButton(text=project, callback_data=f"search:s_project:{project}")
  68. ] for project in projects
  69. ])
  70. async def create_position_search_kb(positions: dict) -> InlineKeyboardMarkup | None:
  71. if not positions:
  72. return None
  73. return InlineKeyboardMarkup(inline_keyboard=[[
  74. InlineKeyboardButton(text="🔙 В меню поиска", callback_data="main:search")
  75. ]] + [
  76. [
  77. InlineKeyboardButton(text=pos, callback_data=f"search:s_pos:{pos}")
  78. ] for pos in positions
  79. ])
  80. cancel_b_kb = InlineKeyboardMarkup(inline_keyboard=[
  81. [
  82. InlineKeyboardButton(text="Отменить", callback_data="cancel_b")
  83. ]
  84. ])
  85. edit_kb = InlineKeyboardMarkup(inline_keyboard=[
  86. [
  87. InlineKeyboardButton(text="Изменить ФИО", callback_data="name")
  88. ],
  89. [
  90. InlineKeyboardButton(text="Изменить должность", callback_data="position")
  91. ],
  92. [
  93. InlineKeyboardButton(text="Изменить проект", callback_data="project")
  94. ],
  95. [
  96. InlineKeyboardButton(text="Изменить аватарку", callback_data="avatar")
  97. ],
  98. [
  99. InlineKeyboardButton(text="Изменить дату прихода", callback_data="time_join")
  100. ],
  101. [
  102. InlineKeyboardButton(text="Завершить изменения", callback_data="confirm")
  103. ],
  104. [
  105. InlineKeyboardButton(text="Отменить", callback_data="cancel")
  106. ],
  107. ])
  108. # Список выводит до 99 сотрудников, возможна последующая доработка, до вывода любого кол-ва через создание страниц.
  109. async def create_personal_list_kb(personal: list, search: bool = False) -> InlineKeyboardMarkup:
  110. kb = [
  111. [
  112. InlineKeyboardButton(text="🔙 Главное меню", callback_data="main:back")
  113. ],
  114. ]
  115. if not search:
  116. kb.append([
  117. InlineKeyboardButton(text="🗂 Открыть списки по проектам", callback_data="search:project")
  118. ])
  119. kb.append([
  120. InlineKeyboardButton(text="👨‍💼 Открыть списки по должности", callback_data="search:position_list")
  121. ])
  122. if personal:
  123. for pers in personal:
  124. kb.append([InlineKeyboardButton(text=pers['full_name'].title(),
  125. callback_data=f'pers:show:{pers["personal_id"]}')])
  126. return InlineKeyboardMarkup(inline_keyboard=kb)
  127. async def create_personal_kb(personal_id: int, role) -> InlineKeyboardMarkup | None:
  128. if personal_id == -1:
  129. return None
  130. kb = [
  131. [
  132. InlineKeyboardButton(text="🔙 Список всех сотрудников", callback_data=f"pers:back:{personal_id}")
  133. ]
  134. ]
  135. if role == "admin":
  136. kb.append([
  137. InlineKeyboardButton(text="Редактировать", callback_data=f'pers:edit:{personal_id}')
  138. ])
  139. kb.append([
  140. InlineKeyboardButton(text="Удалить", callback_data=f'pers:del:{personal_id}')
  141. ])
  142. return InlineKeyboardMarkup(inline_keyboard=kb)