Привет всем, я использую viewflow в качестве движка рабочего процесса в моем django проекте. Я хотел знать, можно ли разрешить пользователям «выбирать», к какому потоку они будут sh откатываться, если, скажем, утверждение было отклонено.
Здесь директор выбирает «Отклонить», однако заканчивать поток здесь не имеет смысла, вместо этого он должен быть можно выбрать «откат», чтобы пользователям не нужно было перезапускать весь процесс снова.
Вот что я сделал до сих пор:
flows.py
#director will approve or dont approve
approve_by_director = flow.View(
UpdateProcessView,
form_class=DirectorApproveForm,
task_title="Approval By Director"
).Permission("cash.director"
).Next(this.check_director)
check_director = flow.If(
cond=lambda act: act.process.director,
task_title="Processing"
).Then(this.send).Else(this.justification)
#justifications for the roll back.
justification = flow.View(
JustificationView,
task_title="Justifications for Roll Back"
).Assign(lambda act: self.request.user
).Permission(auto_create=True
).Next(this.roll_back)
roll_back = flow.Handler(this.roll_back_call).Next(this.approve_by_preparer) ##<---- here , i am just sending it back to the 'preparer' , however it would be great if this could be dynamic!
end = flow.End()
def roll_back_call(self, activation):
esig = ESignatures.objects.filter(paymentVoucherProcess = activation.process).filter(voided = False)
docu = Attachment.objects.filter(paymentVoucherProcess = activation.process).filter(voided = False)
if len(esig) > 0 :
for sig in esig:
sig.voided = True
sig.save()
if len(docu) > 0 :
for doc in docu:
doc.voided = True
doc.save()
activation.process.preparer = False
activation.process.verifier = False
activation.process.treasury = False
activation.process.director = False
Проблема здесь в том, что с узла .next () я жестко закодировал фазу в котором я должен выполнить откат sh, однако это не идеально, поскольку для пользователя было бы оптимальным иметь возможность «выбрать», на какую фазу он должен был отправить его обратно ...
Поэтому У меня есть два вопроса: 1. Является ли мой метод отката правильным? (может быть, есть лучший способ сделать откат вместо вызова процесса и жесткого кода, обновляющего поля) 2. Есть ли способ выбрать, к какой части потока пользователь будет sh откатываться?
Спасибо, и я был бы очень признателен за любые советы