Скрипт переводит в работу на пользователя, который на этапе параллельного назначения на всех, нажал кнопку “В работу”.
При этом пользователь автоматически получает роль “Ответственный”.
Дополнительно в скрипте указана проверка: в зависимости от наименования вида созданного документа Ответственному задается определенная длительность выполнения задания в днях (При проставленной галке по заданию длительности в процессе).
В скрипте заполнить: наименования выхода и блока с параллельным назначением, роль участника процесса, наименование видов документов и их длительность.
Скрипт
import com.haulmont.cuba.core.EntityManager
import com.haulmont.cuba.core.Persistence
import com.haulmont.cuba.core.Transaction
import com.haulmont.cuba.core.global.*
import com.haulmont.thesis.core.entity.SimpleDoc
import com.haulmont.workflow.core.entity.Card
import com.haulmont.workflow.core.entity.CardRole
import com.haulmont.workflow.core.entity.ProcRole
import com.haulmont.workflow.core.global.TimeUnit
import org.apache.commons.logging.Log
import org.apache.commons.logging.LogFactory
DataManager dataManager = AppBeans.get(DataManager.NAME)
UserSessionSource session = AppBeans.get(UserSessionSource.NAME)
/*List<Assignment> assignments = new ArrayList<>()
for (Assignment assignment : (((Card) card).getAssignments())) {
if (assignment.getOutcome() == "V_rabotu" && assignment.finishedByUser != null && assignment.getName() == "Na_ispolnenii___ne_nachato") {
assignments.add(assignment)
}
}*/
/* LoadContext ctx = new LoadContext(Assignment.class)
ctx.setUseSecurityConstraints(false)
.setView("browse")
.setQueryString("select a from wf\$Assignment a where a.card.id=:cardId and a.name ='Na_ispolnenii___ne_nachato' and a.outcome ='V_rabotu' order by a.finished desc ")
.setParameter("cardId", card)
assignments = dataManager.loadList(ctx)
tx.commit()*/
//проставить пользователя из finishedBy в роль по задаче.
Log log = LogFactory.getLog("123")
List<ProcRole> roles = card.proc.getRoles()
Persistence persistence = AppBeans.get(Persistence.NAME)
Transaction tx2 = persistence.createTransaction()
try {
EntityManager em = persistence.getEntityManager()
ProcRole procRole = null
for (ProcRole pr : roles) {
if ("Ответственный".equals(pr.getCode())) {
procRole = pr
break
}
}
Card reloadedCard = em.reload((Card) card, "edit") as Card
ProcRole reloadedProcRole = em.reload(procRole, "_local")
Metadata metadata = AppBeans.get(Metadata.NAME)
//ищем Ответственный среди ролей
LoadContext ctx = new LoadContext(CardRole.class)
ctx.setUseSecurityConstraints(false)
.setView("transition-form")
.setQueryString("select c from wf\$CardRole c where c.card.id=:cardId and c.code ='Ответственный'")
.setParameter("cardId", card)
CardRole registrarCardRole = dataManager.load(ctx)
CardRole cardRole
// если Ответственный уже есть, то используем его, иначе - создаем новую роль
if (registrarCardRole == null)
cardRole = metadata.create(CardRole.class)
else cardRole = registrarCardRole
cardRole.setProcRole(reloadedProcRole)
cardRole.setCode(reloadedProcRole.getCode())
cardRole.setNotifyByEmail(true)
cardRole.setNotifyByCardInfo(true)
cardRole.setCard(reloadedCard)
cardRole.setUser(session.getUserSession().currentOrSubstitutedUser)
// cardRole.setSortOrder(1)
//время "завершить к"
if (reloadedCard instanceof SimpleDoc && reloadedCard.docKind != null) {
if ("Заявка на курьера".equals(reloadedCard.docKind.name)) {
cardRole.setDuration(7)
cardRole.setTimeUnit(TimeUnit.DAY)
}
if ("Заказ материальных ценностей".equals(reloadedCard.docKind.name)) {
cardRole.setDuration(10)
cardRole.setTimeUnit(TimeUnit.DAY)
}
if ("Заявка на командирование".equals(reloadedCard.docKind.name)) {
cardRole.setDuration(10)
cardRole.setTimeUnit(TimeUnit.DAY)
}
if ("Заявка на нотариально-заверенную копию документа".equals(reloadedCard.docKind.name)) {
cardRole.setDuration(5)
cardRole.setTimeUnit(TimeUnit.DAY)
}
}
if (registrarCardRole == null) {
em.persist(cardRole)
card.getRoles().add(cardRole)
} else em.merge(cardRole)
tx2.commit()
} finally {
tx2.end()
}