# coding: utf-8 ''' Created on 07.11.2014 @author: tr0glo)|(I╠╣ ''' import json from java.util import ArrayList try: from ru.curs.showcase.core.selector import ResultSelectorData from ru.beta2.extra.gwt.ui.selector.api import DataRecord except: from ru.curs.celesta.showcase import ResultSelectorData, DataRecord from workflow.processUtils import ActivitiObject try: from ru.curs.showcase.core.jython import JythonDTO except: from ru.curs.celesta.showcase import JythonDTO try: from ru.curs.showcase.core.selector import ResultSelectorData from ru.beta2.extra.gwt.ui.selector.api import DataRecord except: pass from workflow._workflow_orm import statusModelCursor,processStatusModelCursor, matchingCircuitCursor, processesCursor from ru.curs.celesta.showcase.utils import XMLJSONConverter def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None): u'''Карточка выбора процесса''' xformsdata = {"schema": {"@xmlns":"", "data": { "@newProcess":"false", "@processName": "", "@processKey": "", "@modelId": "", "@modelName": "", "@existing": "false" } } } xformssettings = {"properties": {"event": [{"@name": "single_click", "@linkId": "1", "action": {"#sorted":[{"main_context": "current"}, {"datapanel": {"@type": "current", "@tab": "current", "element": [ {"@id": 'matchingCircuitGrid', "add_context": 'current' }, {"@id": 'generateProcessDefinition', "add_context": 'current' }, {"@id": 'generateProcessImage', "add_context":'current'} ] } }]} }, {"@name": "single_click", "@linkId": "2", "action": {"#sorted":[{"main_context": "current"}, {"datapanel": {"@type": "current", "@tab": "current", "element": [ {"@id": 'matchingCircuitGrid', "add_context": "hide" }, {"@id": 'generateProcessDefinition', "add_context": "hide" }, {"@id": 'generateProcessImage', "add_context":'hide'} ] } }]} }] } } jsonData = XMLJSONConverter.jsonToXml(json.dumps(xformsdata)) jsonSettings = XMLJSONConverter.jsonToXml(json.dumps(xformssettings)) return JythonDTO(jsonData, jsonSettings) def cardSave(context, main, add, filterinfo, session, elementId, data): u'''Действия после нажатия на кнопку 'Редактировать' или 'Создать процесс' в конструкторе процессов''' session = json.loads(session) data = json.loads(data) #processStatusModel = processStatusModelCursor(context) matchingCircuit = matchingCircuitCursor(context) isNew = True if data["schema"]["data"]["@newProcess"] == 'true' else False processKey = data["schema"]["data"]["@processKey"] processName = data["schema"]["data"]["@processName"] #modelId = data["schema"]["data"]["@modelId"] #processStatusModel.setRange('processKey',processKey) deleteFlag = True # if processStatusModel.count() == 0: # processStatusModel.processKey = processKey # processStatusModel.modelId = modelId # processStatusModel.insert() # else: # processStatusModel.first() # if processStatusModel.modelId == modelId: # deleteFlag = False # processStatusModel.modelId = modelId # processStatusModel.update() # if deleteFlag: # matchingCircuit.setRange('processKey',processKey) # for matchingCircuit in matchingCircuit.iterate(): # matchingCircuit.statusId = None # matchingCircuit.modelId = None # matchingCircuit.update() if isNew: activiti = ActivitiObject() #Указанный ключ для нового процесса уже занят id = activiti.repositoryService.createProcessDefinitionQuery().processDefinitionKey(processKey).latestVersion().singleResult() processes = processesCursor(context) if processes.tryGet(processKey): return context.error(u'Процесс с таким ключом уже существует.') if id is not None: processes.processKey = processKey processes.processName = processName processes.insert() return context.message(u'Процесс с таким ключом развёрнут. При редактировании процесса описание процесса будет сформировано по схеме согласования, а старое описание процесса будет удалено.') processes.processKey = processKey processes.processName = processName processes.insert() def processListAndCount(context, main=None, add=None, filterinfo=None, session=None, params=None, curvalue="", startswith=None, firstrecord=None, recordcount=None): u'''Селектор развернутых процессов. ''' processes = processesCursor(context) #Получение списка развернутых процессов recordList = ArrayList() processes.limit(firstrecord,recordcount) filterString = curvalue.replace("'", "''") + "'%" if not startswith: filterString = "@%'" + filterString else: filterString = "@'" + filterString processes.setFilter('processName', filterString) for process in processes.iterate(): rec = DataRecord() rec.setId(process.processKey) rec.setName(process.processName) rec.addParameter('existing', 'true') recordList.add(rec) return ResultSelectorData(recordList, processes.count()) def modelListAndCount(context, main=None, add=None, filterinfo=None, session=None, params=None, curvalue="", startswith=None, firstrecord=None, recordcount=None): u'''Селектор статусных моделей. ''' statusModel = statusModelCursor(context) filterString = curvalue.replace("'", "''") + "'%" if not startswith: filterString = "@%'" + filterString else: filterString = "@'" + filterString recCount = statusModel.count() statusModel.setFilter('name',filterString) statusModel.limit(firstrecord,recordcount) recordList = ArrayList() for statusModel in statusModel.iterate(): rec = DataRecord() rec.setId(statusModel.id) rec.setName(statusModel.name) recordList.add(rec) return ResultSelectorData(recordList, recCount)