from webservice_running.lib.menu import * #Same idea as vvv, maybe some custom pages for example for reports later METASERVICE_ADMIN_ALL = ['partners', 'orders', 'access_control', 'resources', 'providers'] #note: delete 'delete' operation from urlpatterns! Question - should be edit and change status apart or not? METASERVICE_ADMIN_OPERATIONS = ['service_category/add', 'service_category/edit', 'service_category/change_status'] #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. #Add pages similar to platform's for payment reports for manual payments. METASERVICE_SUPERVISOR_ALL = ['partners', 'resources', 'providers', 'orders', 'access_control'] METASERVICE_SUPPORT_ALL = ['partners', 'resources', 'providers', 'orders', 'orders/edit'] METASERVICE_TECHSUPPORT_ALL = ['partners', 'resources', 'providers'] #LOCAL - same idea except access_control that is only in open by default PARTNER_ADMIN_MY = ['resources', 'providers', 'access_control'] PARTNER_ADMIN_OPERATIONS = ['service_tariff/add', 'service_tariff/edit', 'service_tariff/change_status'] PARTNER_SUPERVISOR_MY = ['resources', 'providers', 'access_control'] PARTNER_SUPPORT_MY = ['resources', 'providers', 'orders', 'orders/edit'] PARTNER_TECHSUPPORT_MY = ['resources', 'providers'] #LOCAL - same idea +local #CHECK Documentation - it seems provider should be able to add service_tariffs that he want to appy to himself based on partner's restrictions #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 PROVIDER_MY_OPERATIONS = ['resource/add', 'resource/edit', 'resource', 'order/change_status'] PROVIDER_MY = ['resources', 'orders'] #on partners page provider might make a connection with another partner - does that mean PARTNERS list should be in ALL category? CLIENT_MY = ['order', 'orders'] CLIENT_MY_OPERATIONS = ['order/edit', 'order/add'] #TODO should be something for transactions #READ MENU DESCRIPTION STARTS HERE!!! vvv #Idea - Menu categories #GLOBAL_MENU - same for all users, info on forms may vary according to roles, but view is one for all #MENU_GLOBAL = ['service_categories', 'support_chat', 'job_request_metaservice'] MENU_GLOBAL = ['tickets_list_list', 'service_categories', 'support_chat', 'job_request_metaservice'] MENU_OPEN = ['main', 'service_tariffs'] #Thus menu points for all staff roles is the same STAFF_METASERVICE_MENU_GLOBAL = ['access_control', 'partners'] STAFF_METASERVICE_MENU_OPEN = ['resources', 'providers', 'orders'] #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 STAFF_MY_PARTNER_MENU_GLOBAL = ['access_control', 'partners'] STAFF_MY_PARTNER_MENU_OPEN = ['resources', 'providers', 'orders'] STAFF_MY_PROVIDER_MENU_OPEN = ['resources', 'orders'] CLIENT_MY_MENU_GLOBAL = ['transactions'] CLIENT_MY_MENU_OPEN = ['orders'] #3 variants to show customizable pages, it depends on settings of a project ALL (PURE), ALL + CUSTOMIZABLE (REPLACE) replaced, ALL + CUSTOMIZABLE added (APPEND) #function to check if menu should be visible: # function that get roles by userid STAFF_METASERVICE_ROLES = ['METASERVICE_ADMIN', 'METASERVICE_SUPERVISOR', 'METASERVICE_SUPPORT', 'METASERVICE_TECHSUPPORT'] STAFF_PARTNER_ROLES = ['PARTNER_ADMIN', 'PARTNER_SUPERVISOR', 'PARTNER_SUPPORT', 'PARTNER_TECHSUPPORT', 'PROVIDER'] CLIENT_ROLES = ['CLIENT'] #if user role in list provided and page name in a connected list then menu item is visible #so we have to know user_id and page type and MENU_ALG algorythm MENU_ALG = 'APPEND' global menu_visible_pages visible_pages = [] if MENU_ALG == 'PURE': visible_pages.extend(MENU_GLOBAL) visible_pages.extend(MENU_OPEN) if MENU_ALG == 'REPLACE': visible_pages.extend(MENU_GLOBAL) visible_pages.extend(MENU_GLOBAL_CUSTOMIZABLE) if MENU_ALG == 'APPEND': visible_pages.extend(MENU_GLOBAL) visible_pages.extend(MENU_GLOBAL_CUSTOMIZABLE) visible_pages.extend(MENU_OPEN) #TODO - change menu template to FOR loop with parameters - name, link, icon # menu structure should base on config file with menu structure as settings MENU_SCHEME = True MENU_SCHEME_LIST_OPEN = { 'main': ['sharix_admin', 'house', 'Главная'], 'service_categories': ['sharix_admin', 'briefcase', 'Категории услуг'], 'service_tariffs': ['sharix_admin', 'briefcase', 'Тарифы'], 'partners': ['sharix_admin', 'handshake', 'Партнеры'], 'resources': ['sharix_admin', 'hdd-network', 'Ресурсы'], 'providers': ['sharix_admin', 'person', 'Исполнители'], 'orders': ['sharix_admin', 'clock-history', 'Заказы'], 'access_control': ['sharix_admin', 'hdd-network', 'Права доступа'], 'tickets': ['tickets_list_list', 'tickets', 'Заявки'], 'support_chat': ['sharix_admin', 'tickets', 'Чат техподдержки'], 'job_request_metaservice': ['sharix_admin', 'credit-card', 'Вакансии'], } def gen_avaliable_pages(roles): #any(x in role for x in STAFF_METASERVICE_ROLES): global visible_pages global MENU_SCHEME_LIST if any(x in roles for x in STAFF_METASERVICE_ROLES): if MENU_ALG == 'PURE': visible_pages.extend(STAFF_METASERVICE_MENU_GLOBAL) visible_pages.extend(STAFF_METASERVICE_MENU_OPEN) if MENU_ALG == 'REPLACE': visible_pages.extend(STAFF_METASERVICE_MENU_GLOBAL) visible_pages.extend(STAFF_METASERVICE_MENU_CUSTOMIZABLE) if MENU_ALG == 'APPEND': visible_pages.extend(STAFF_METASERVICE_MENU_GLOBAL) visible_pages.extend(STAFF_METASERVICE_MENU_CUSTOMIZABLE) visible_pages.extend(STAFF_METASERVICE_MENU_OPEN) if any(x in roles for x in STAFF_PARTNER_ROLES): #if role in STAFF_PARTNER_ROLES: if MENU_ALG == 'PURE': visible_pages.extend(STAFF_MY_PARTNER_MENU_GLOBAL) visible_pages.extend(STAFF_MY_PARTNER_MENU_OPEN) visible_pages.extend(STAFF_MY_PROVIDER_MENU_OPEN) if MENU_ALG == 'REPLACE': visible_pages.extend(STAFF_MY_PARTNER_MENU_GLOBAL) visible_pages.extend(STAFF_MY_PARTNER_MENU_CUSTOMIZABLE) visible_pages.extend(STAFF_MY_PROVIDER_MENU_CUSTOMIZABLE) if MENU_ALG == 'APPEND': visible_pages.extend(STAFF_MY_PARTNER_MENU_GLOBAL) visible_pages.extend(STAFF_MY_PARTNER_MENU_CUSTOMIZABLE) visible_pages.extend(STAFF_MY_PARTNER_MENU_OPEN) visible_pages.extend(STAFF_MY_PROVIDER_MENU_CUSTOMIZABLE) visible_pages.extend(STAFF_MY_PROVIDER_MENU_OPEN) if any(x in roles for x in CLIENT_ROLES): #if role in CLIENT_ROLES: if MENU_ALG == 'PURE': visible_pages.extend(CLIENT_MY_MENU_GLOBAL) visible_pages.extend(CLIENT_MY_MENU_OPEN) if MENU_ALG == 'REPLACE': visible_pages.extend(CLIENT_MY_MENU_GLOBAL) visible_pages.extend(CLIENT_MY_MENU_CUSTOMIZABLE) visible_pages.extend(WSR_EXTENDED) visible_pages.extend(WSR_EXTENDED_MY) if MENU_ALG == 'APPEND': visible_pages.extend(CLIENT_MY_MENU_GLOBAL) visible_pages.extend(CLIENT_MY_MENU_CUSTOMIZABLE) visible_pages.extend(CLIENT_MY_MENU_OPEN) visible_pages.extend(WSR_EXTENDED) visible_pages.extend(WSR_EXTENDED_MY) #MAYBE REMOVE DUPLICATES? visible_pages = list(dict.fromkeys(visible_pages)) menu_result = [] if not MENU_SCHEME: MENU_SCHEME_LIST=MENU_SCHEME_LIST_OPEN for key, value in MENU_SCHEME_LIST.items(): if key in visible_pages: menu_item=[] menu_item.append(value[0]+':'+key) menu_item=menu_item+value menu_result.append(menu_item) print (menu_result) return menu_result gen_avaliable_pages('METASERVICE-ADMIN')