menu.py 8.0 KB

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