menu.py 8.8 KB

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