menu.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. from webservice_running.lib.menu import *
  2. WSR_ALL = ['serivce_tariff_local']
  3. #TODO - providers+resources on map
  4. WSR_CLIENT_MY = ['order_local', 'orders_local', 'frequent_address', 'favorite_contacts', 'preferred_providers']
  5. WSR_MENU_CLIENT_MY_OPERATIONS = ['order_local/add']
  6. WSR_NOT_MENU_CLIENT_MY_OPERATIONS = ['order_local/edit', 'frequent_address/add', 'frequent_address/edit', 'frequent_address/del', 'favorite_contacts/add', 'favorite_contacts/edit', 'favorite_contacts/del', 'preferred_providers/add', 'preferred_providers/edit', 'preferred_providers/del']
  7. #WEBSERVICE_RUNNING_MENU
  8. MENU_GLOBAL_CUSTOMIZABLE = ['main_local', 'service_tariffs_local']
  9. STAFF_METASERVICE_MENU_CUSTOMIZABLE = ['resources_local', 'providers_local', 'orders_local', 'cooperate_request' ]
  10. STAFF_MY_PARTNER_MENU_CUSTOMIZABLE = ['resources_local', 'providers_local', 'orders_local']
  11. STAFF_MY_PROVIDER_MENU_CUSTOMIZABLE = ['resources_local', 'orders_local']
  12. CLIENT_MY_MENU_CUSTOMIZABLE = ['cooperate_request', 'order_local/add', 'orders_local', 'frequent_address', 'frequent_contacts', 'preferred_providers']
  13. #CUSTOM PAGES
  14. WSR_EXTENDED_MY = []
  15. #WSR_EXTENDED_MY = ['frequent_address', 'frequent_contacts', 'preferred_providers']
  16. WSR_EXTENDED = []
  17. #TODO - providers+resources on map (NOT MY, GLOBAL or MY meant by geolocation+preferences)
  18. MENU_SCHEME_LIST = {
  19. 'main': ['sharix_admin', 'house', 'Главная'],
  20. # 'main_local': ['webservice_running', 'house', 'Главная сервиса'],
  21. 'service_categories': ['sharix_admin', 'briefcase', 'Категории услуг'],
  22. 'service_tariffs': ['sharix_admin', 'briefcase', 'Тарифы'],
  23. 'partners': ['sharix_admin', 'handshake', 'Партнеры'],
  24. 'resources': ['sharix_admin', 'hdd-network', 'Ресурсы'],
  25. # 'resources_local': ['webservice_running', 'hdd-network', 'Ресурсы'],
  26. 'providers': ['sharix_admin', 'person', 'Исполнители'],
  27. #'providers_local': ['webservice_running', 'person', 'Исполнители'],
  28. # 'orders': ['sharix_admin', 'clock-history', 'Заказы'],
  29. # 'orders_local': ['webservice_running', 'clock-history', 'Заказы'],
  30. 'access_control': ['sharix_admin', 'hdd-network', 'Права доступа'],
  31. 'relationship': ['sharix_admin', 'hdd-network', 'Взаимоотношения'],
  32. 'ticket_list_list': ['tickets', 'tickets', 'Заявки'],
  33. 'support_chat': ['sharix_admin', 'tickets', 'Чат техподдержки'],
  34. 'cooperate_request': ['sharix_admin', 'credit-card', 'Стать партнером'],
  35. 'job_request_metaservice': ['sharix_admin', 'credit-card', 'Вакансии'],
  36. # 'frequent_address': ['webservice_running', 'person', 'Частые адреса'],
  37. # 'frequent_contacts': ['webservice_running', 'person', 'Частые контакты'],
  38. 'preferred_providers': ['webservice_running', 'person', 'Желаемые исполнители'],
  39. }
  40. #Same idea as vvv, maybe some custom pages for example for reports later
  41. METASERVICE_ADMIN_ALL = ['partners', 'orders', 'access_control', 'resources', 'providers']
  42. #note: delete 'delete' operation from urlpatterns! Question - should be edit and change status apart or not?
  43. METASERVICE_ADMIN_OPERATIONS = ['service_category/add', 'service_category/edit', 'service_category/change_status']
  44. #TODO - page to add money to client balance manually based on manual b2b payments! And add logic connected to platform if possible later. 2 balances - platform and manual local.
  45. #Add pages similar to platform's for payment reports for manual payments.
  46. METASERVICE_SUPERVISOR_ALL = ['partners', 'resources', 'providers', 'orders', 'access_control']
  47. METASERVICE_SUPPORT_ALL = ['partners', 'resources', 'providers', 'orders', 'orders/edit']
  48. METASERVICE_TECHSUPPORT_ALL = ['partners', 'resources', 'providers']
  49. #LOCAL - same idea except access_control that is only in open by default
  50. PARTNER_ADMIN_MY = ['resources', 'providers', 'access_control']
  51. PARTNER_ADMIN_OPERATIONS = ['service_tariff/add', 'service_tariff/edit', 'service_tariff/change_status']
  52. PARTNER_SUPERVISOR_MY = ['resources', 'providers', 'access_control']
  53. PARTNER_SUPPORT_MY = ['resources', 'providers', 'orders', 'orders/edit']
  54. PARTNER_TECHSUPPORT_MY = ['resources', 'providers']
  55. #LOCAL - same idea +local
  56. #CHECK Documentation - it seems provider should be able to add service_tariffs that he want to appy to himself based on partner's restrictions
  57. #order change_status or edit - based on handlers logic. Provider should be able to tell system he wants to process the order or customize it
  58. PROVIDER_MY_OPERATIONS = ['resource/add', 'resource/edit', 'resource', 'order/change_status']
  59. PROVIDER_MY = ['resources', 'orders']
  60. #on partners page provider might make a connection with another partner - does that mean PARTNERS list should be in ALL category?
  61. CLIENT_MY = ['order', 'orders']
  62. CLIENT_MY_OPERATIONS = ['order/edit', 'order/add']
  63. #TODO should be something for transactions
  64. #READ MENU DESCRIPTION STARTS HERE!!! vvv
  65. #Idea - Menu categories
  66. #GLOBAL_MENU - same for all users, info on forms may vary according to roles, but view is one for all
  67. #MENU_GLOBAL = ['service_categories', 'support_chat', 'job_request_metaservice']
  68. MENU_GLOBAL = ['tickets_list_list', 'service_categories', 'support_chat', 'job_request_metaservice']
  69. MENU_OPEN = ['main', 'service_tariffs', 'cooperate_request']
  70. #Thus menu points for all staff roles is the same
  71. STAFF_METASERVICE_MENU_GLOBAL = ['access_control', 'relationship', 'partners']
  72. STAFF_METASERVICE_MENU_OPEN = ['resources', 'providers', 'orders']
  73. #Another set of pages that lists only MY PARTNER objects - needed for the situation for users with multiple roles. For each Partner connection - same set of pages, maybe it's good idea to hide it
  74. STAFF_MY_PARTNER_MENU_GLOBAL = ['access_control', 'partners']
  75. STAFF_MY_PARTNER_MENU_OPEN = ['resources', 'providers', 'orders']
  76. STAFF_MY_PROVIDER_MENU_OPEN = ['resources', 'orders']
  77. CLIENT_MY_MENU_GLOBAL = ['transactions']
  78. CLIENT_MY_MENU_OPEN = ['orders']
  79. #3 variants to show customizable pages, it depends on settings of a project ALL (PURE), ALL + CUSTOMIZABLE (REPLACE) replaced, ALL + CUSTOMIZABLE added (APPEND)
  80. #function to check if menu should be visible:
  81. # function that get roles by userid
  82. STAFF_METASERVICE_ROLES = ['METASERVICE-ADMIN', 'METASERVICE-SUPERVISOR', 'METASERVICE-SUPPORT', 'METASERVICE-TECHSUPPORT']
  83. STAFF_PARTNER_ROLES = ['PARTNER-ADMIN', 'PARTNER-SUPERVISOR', 'PARTNER-SUPPORT', 'PARTNER-TECHSUPPORT', 'PROVIDER']
  84. CLIENT_ROLES = ['CLIENT']
  85. #if user role in list provided and page name in a connected list then menu item is visible
  86. #so we have to know user_id and page type and MENU_ALG algorythm
  87. MENU_ALG = 'APPEND'
  88. global visible_pages
  89. visible_pages = []
  90. if MENU_ALG == 'PURE':
  91. visible_pages.extend(MENU_GLOBAL)
  92. visible_pages.extend(MENU_OPEN)
  93. if MENU_ALG == 'REPLACE':
  94. visible_pages.extend(MENU_GLOBAL)
  95. visible_pages.extend(MENU_GLOBAL_CUSTOMIZABLE)
  96. if MENU_ALG == 'APPEND':
  97. visible_pages.extend(MENU_GLOBAL)
  98. visible_pages.extend(MENU_GLOBAL_CUSTOMIZABLE)
  99. visible_pages.extend(MENU_OPEN)
  100. #TODO - change menu template to FOR loop with parameters - name, link, icon
  101. # menu structure should base on config file with menu structure as settings
  102. MENU_SCHEME = True
  103. MENU_SCHEME_LIST_OPEN = {
  104. 'main': ['sharix_admin', 'house', 'Главная'],
  105. 'service_categories': ['sharix_admin', 'briefcase', 'Категории услуг'],
  106. 'service_tariffs': ['sharix_admin', 'briefcase', 'Тарифы'],
  107. 'partners': ['sharix_admin', 'handshake', 'Партнеры'],
  108. 'resources': ['sharix_admin', 'hdd-network', 'Ресурсы'],
  109. 'providers': ['sharix_admin', 'person', 'Исполнители'],
  110. 'orders': ['sharix_admin', 'clock-history', 'Заказы'],
  111. 'access_control': ['sharix_admin', 'hdd-network', 'Права доступа'],
  112. 'tickets_list_list': ['tickets', 'tickets', 'Заявки'],
  113. 'support_chat': ['sharix_admin', 'tickets', 'Чат техподдержки'],
  114. 'job_request_metaservice': ['sharix_admin', 'credit-card', 'Вакансии'],
  115. 'cooperate_request': ['sharix_admin', 'credit-card', 'Стать партнером'],
  116. }
  117. def gen_avaliable_pages(roles):
  118. #any(x in role for x in STAFF_METASERVICE_ROLES):
  119. #global visible_pages
  120. global MENU_SCHEME_LIST
  121. visible_pages = []
  122. if MENU_ALG == 'PURE':
  123. visible_pages.extend(MENU_GLOBAL)
  124. visible_pages.extend(MENU_OPEN)
  125. if MENU_ALG == 'REPLACE':
  126. visible_pages.extend(MENU_GLOBAL)
  127. visible_pages.extend(MENU_GLOBAL_CUSTOMIZABLE)
  128. if MENU_ALG == 'APPEND':
  129. visible_pages.extend(MENU_GLOBAL)
  130. visible_pages.extend(MENU_GLOBAL_CUSTOMIZABLE)
  131. visible_pages.extend(MENU_OPEN)
  132. if any(x in roles for x in STAFF_METASERVICE_ROLES):
  133. if MENU_ALG == 'PURE':
  134. visible_pages.extend(STAFF_METASERVICE_MENU_GLOBAL)
  135. visible_pages.extend(STAFF_METASERVICE_MENU_OPEN)
  136. if MENU_ALG == 'REPLACE':
  137. visible_pages.extend(STAFF_METASERVICE_MENU_GLOBAL)
  138. visible_pages.extend(STAFF_METASERVICE_MENU_CUSTOMIZABLE)
  139. if MENU_ALG == 'APPEND':
  140. visible_pages.extend(STAFF_METASERVICE_MENU_GLOBAL)
  141. visible_pages.extend(STAFF_METASERVICE_MENU_CUSTOMIZABLE)
  142. visible_pages.extend(STAFF_METASERVICE_MENU_OPEN)
  143. if any(x in roles for x in STAFF_PARTNER_ROLES):
  144. #if role in STAFF_PARTNER_ROLES:
  145. if MENU_ALG == 'PURE':
  146. visible_pages.extend(STAFF_MY_PARTNER_MENU_GLOBAL)
  147. visible_pages.extend(STAFF_MY_PARTNER_MENU_OPEN)
  148. visible_pages.extend(STAFF_MY_PROVIDER_MENU_OPEN)
  149. if MENU_ALG == 'REPLACE':
  150. visible_pages.extend(STAFF_MY_PARTNER_MENU_GLOBAL)
  151. visible_pages.extend(STAFF_MY_PARTNER_MENU_CUSTOMIZABLE)
  152. visible_pages.extend(STAFF_MY_PROVIDER_MENU_CUSTOMIZABLE)
  153. if MENU_ALG == 'APPEND':
  154. visible_pages.extend(STAFF_MY_PARTNER_MENU_GLOBAL)
  155. visible_pages.extend(STAFF_MY_PARTNER_MENU_CUSTOMIZABLE)
  156. visible_pages.extend(STAFF_MY_PARTNER_MENU_OPEN)
  157. visible_pages.extend(STAFF_MY_PROVIDER_MENU_CUSTOMIZABLE)
  158. visible_pages.extend(STAFF_MY_PROVIDER_MENU_OPEN)
  159. if any(x in roles for x in CLIENT_ROLES):
  160. #if role in CLIENT_ROLES:
  161. if MENU_ALG == 'PURE':
  162. visible_pages.extend(CLIENT_MY_MENU_GLOBAL)
  163. visible_pages.extend(CLIENT_MY_MENU_OPEN)
  164. if MENU_ALG == 'REPLACE':
  165. visible_pages.extend(CLIENT_MY_MENU_GLOBAL)
  166. visible_pages.extend(CLIENT_MY_MENU_CUSTOMIZABLE)
  167. visible_pages.extend(WSR_EXTENDED)
  168. visible_pages.extend(WSR_EXTENDED_MY)
  169. if MENU_ALG == 'APPEND':
  170. visible_pages.extend(CLIENT_MY_MENU_GLOBAL)
  171. visible_pages.extend(CLIENT_MY_MENU_CUSTOMIZABLE)
  172. visible_pages.extend(CLIENT_MY_MENU_OPEN)
  173. visible_pages.extend(WSR_EXTENDED)
  174. visible_pages.extend(WSR_EXTENDED_MY)
  175. #MAYBE REMOVE DUPLICATES?
  176. visible_pages = list(dict.fromkeys(visible_pages))
  177. menu_result = []
  178. if not MENU_SCHEME:
  179. MENU_SCHEME_LIST=MENU_SCHEME_LIST_OPEN
  180. for key, value in MENU_SCHEME_LIST.items():
  181. if key in visible_pages:
  182. menu_item=[]
  183. menu_item.append(value[0]+':'+key)
  184. menu_item=menu_item+value
  185. menu_result.append(menu_item)
  186. #print (roles, menu_result)
  187. return menu_result
  188. #gen_avaliable_pages('METASERVICE-ADMIN')
  189. #gen_avaliable_pages('METASERVICE-SUPERVISOR')
  190. #gen_avaliable_pages('METASERVICE-SUPPORT')
  191. #gen_avaliable_pages('PARTNER-ADMIN')
  192. #gen_avaliable_pages('PARTNER-SUPERVISOR')
  193. #gen_avaliable_pages('PARTNER-SUPPORT')
  194. #gen_avaliable_pages('PROVIDER')
  195. #gen_avaliable_pages('CLIENT')