# coding: utf-8 import json import os from security.functions import userHasPermission try: from workflow.processUtils import ActivitiObject, getLinkPermisson, parse_json except: print "Activiti not initialized" from workflow._workflow_orm import formCursor def testNavigator(context, session): myNavigator = {"group":{"@id": "journals", "@name": u"Тестовый пример", "@icon": "journals.png", "level1":[{"@id": "j1", "@name": u"Тест", "action":{"#sorted":[{"main_context": "current"}, {"datapanel":{"@type": "test.xml", "@tab": "firstOrCurrent"} }]} }] } } return myNavigator def manageProcessesNav(context, session): session = json.loads(session)["sessioncontext"] sid = session["sid"] if 'urlparams' in session and 'urlparam' in session['urlparams']: drawProcess = False startProcess = False documentTask = False drawTable = False processKey = None processId = None taskId = None if isinstance(session['urlparams']['urlparam'], list): for params in session['urlparams']['urlparam']: if params['@name'] == 'mode': if params['@value'][0] == 'image': drawProcess = True elif params['@value'][0] == 'process': startProcess = True elif params['@value'][0] == 'task': documentTask = True elif params['@value'][0] == 'table': drawTable = True if params['@name'] == 'processKey': processKey = params['@value'][0] if params['@name'] == 'processId': processId = params['@value'][0] if params['@name'] == 'taskId': taskId = params['@value'][0] # if params['@name'] == 'procInstId': # procInstId = params['@name'][1:-1] if drawProcess: if processId is not None: if not getLinkPermisson(context, sid, 'instanceImage', processKey, processId, taskId): return context.message(u'У вас нет разрешения на просмотр данной страницы') if processKey is not None: if not getLinkPermisson(context, sid, 'processImage', processKey, processId, taskId): return context.message(u'У вас нет разрешения на просмотр данной страницы') myNavigator = {"group": {"@id": "workflow", "@name": u"Организация рабочего процесса", "@icon": "flowblock.png", "level1": [{"@id": "drawProcesses", "@selectOnLoad": "true", "@name": u"Схема процесса", "action": {"#sorted":[{"main_context": "current"}, {"datapanel": {"@type": "workflow.datapanel.processes.drawProcesses.celesta", "@tab": "schemaProcess"} }]} }] } } return myNavigator elif drawTable: if not getLinkPermisson(context, sid, 'table', processKey, processId, taskId): return context.message(u'У вас нет разрешения на просмотр данной страницы') myNavigator = {"group": {"@id": "workflow", "@name": u"Организация рабочего процесса", "@icon": "flowblock.png", "level1": [{"@id": "drawTable", "@selectOnLoad": "true", "@name": u"Активные задачи", "action": {"#sorted":[{"main_context": "current"}, {"datapanel": {"@type": "workflow.datapanel.tasks.drawTasksByProcId.celesta", "@tab": "firstOrCurrent"}}]}}]}} return myNavigator elif documentTask or startProcess: if startProcess: if not getLinkPermisson(context, sid, 'process', processKey, processId, taskId): return context.message(u'У вас нет разрешения на просмотр данной страницы') if documentTask: if not getLinkPermisson(context, sid, 'task', processKey, processId, taskId): return context.message(u'У вас нет разрешения на просмотр данной страницы') formType = 'startingProcess' if startProcess else 'documentTask' myNavigator = {"group": {"@id": "workflow", "@name": u"Организация рабочего процесса", "@icon": "flowblock.png", "level1": [{"@id": "startProcess", "@selectOnLoad": "true", "@name": u"Схема процесса", "action": {"#sorted":[{"main_context": "current"}, {"datapanel": {"@type": datapanelSetup(context, formType, session)}}]}}]}} return myNavigator # elif documentTask: # filePath = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'datapanelSettings.json') # datapanelSettings = parse_json(filePath) # myNavigator = {"group": # {"@id": "workflow", # "@name": u"Организация рабочего процесса", # "@icon": "flowblock.png", # "level1": # [{"@id": "startProcess", # "@selectOnLoad": "true", # "@name": u"Завершение задачи", # "action": # {"main_context": "current", # "datapanel":{"@type": datapanelSettings["documentTask"]}} # }]}} return myNavigator sid = session["sid"] # Пункт меню управление процессами emptyNavigatorFlag = True myNavigator = { "group":{ "@id": "workflow", "@name": u"Организация рабочего процесса", "@icon": "flowblock.png", "level1":[ ] } } if userHasPermission(context, sid, 'processManagement'): emptyNavigatorFlag = False myNavigator["group"]["level1"].append({ "@id": "w1", "@name": u"Управление процессами", "action":{"#sorted":[{"main_context": "current"}, {"datapanel":{"@type": "workflow.datapanel.processes.manageProcesses.celesta", "@tab": "firstOrCurrent"} }]} }) # Пункт меню редактирования процессов if userHasPermission(context, sid, 'processDesigner'): emptyNavigatorFlag = False myNavigator["group"]["level1"].append({"@id": "editingProcesses", "@name": u"Конструктор процессов", "action": {"#sorted":[{"main_context": "current"}, {"datapanel": {"@type": "workflow.datapanel.processes.editingProcesses.celesta", "@tab": "firstOrCurrent" } }]} }) if userHasPermission(context,sid,'userGroups'): emptyNavigatorFlag = False myNavigator["group"]["level1"].append({ "@id": "userGroups", "@name": u"Группы пользователей", "action":{"#sorted":[{"main_context": "current"}, {"datapanel":{"@type": "workflow.datapanel.processes.userGroups.celesta", "@tab": "firstOrCurrent"} }]} }) if userHasPermission(context, sid, 'activeTasks'): emptyNavigatorFlag = False myNavigator["group"]["level1"].append({"@id": "activeTasks", "@name": u"Текущие задачи", "@selectOnLoad": "true", "action": {"#sorted":[{"main_context": "current"}, {"datapanel": {"@type": "workflow.datapanel.tasks.activeTasks.celesta", "@tab": "firstOrCurrent" } }]} }) if userHasPermission(context, sid, 'archiveTasks'): emptyNavigatorFlag = False myNavigator["group"]["level1"].append({"@id": "archiveTasks", "@name": u"Выполненные задачи", "action": {"#sorted":[{"main_context": "current"}, {"datapanel": {"@type": "workflow.datapanel.tasks.archiveTasks.celesta", "@tab": "firstOrCurrent" } }]} }) if userHasPermission(context, sid, 'allActiveTasks'): emptyNavigatorFlag = False myNavigator["group"]["level1"].append({"@id": "allActiveTasks", "@name": u"Все задачи", "action": {"#sorted":[{"main_context": "current"}, {"datapanel": {"@type": "workflow.datapanel.tasks.allActiveTasks.celesta", "@tab": "firstOrCurrent" } }]} }) if emptyNavigatorFlag: return {"group":None} else: return myNavigator def navSettings(context, session): myNavigator = { "@width": "250px", "@hideOnLoad": "false" } session = json.loads(session)["sessioncontext"] if 'urlparams' in session and 'urlparam' in session['urlparams']: if isinstance(session['urlparams']['urlparam'], list): for params in session['urlparams']['urlparam']: if params['@name'] == 'mode': if params['@value'][0] in ('image', 'process', 'task', 'table'): myNavigator["@hideOnLoad"] = "true" return myNavigator def datapanelSetup(context, formType, session): activiti = ActivitiObject() processId = None processKey = None for params in session['urlparams']['urlparam']: if params['@name'] == 'taskId': taskId = params['@value'][0] elif params['@name'] == 'processId': processId = params['@value'][0] elif params['@name'] == 'processKey': processKey = params['@value'][0] filePath = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'datapanelSettings.json') datapanelSettings = parse_json(context) try: if 'Task' in formType: task = activiti.taskService.createTaskQuery().taskId(taskId).singleResult() formKey = task.getFormKey() elif not processKey: processInstance = activiti.runtimeService.createProcessInstanceQuery()\ .processInstanceId(processId).singleResult() formKey = activiti.formService.getStartFormData(processInstance.getProcessDefinitionId()).getFormKey() else: # processDefinitions = activiti.repositoryService.createProcessDefinitionQuery()\ # .processDefinitionKey(processKey).list() # for processDefinition in processDefinitions: # formKey = activiti.formService.getStartFormData(processDefinition.getProcessDefinitionId()).getFormKey() # if formKey is not None: # break form = formCursor(context) form.setRange('processKey', processKey) form.setRange('isStartForm', True) form.first() formKey = form.id return datapanelSettings['manual'][formKey] except: return datapanelSettings["default"][formType]