Привет всем, я использую viewflow в качестве механизма рабочего процесса в моем проекте django. Я хотел знать, можно ли разрешить пользователям «выбирать», к какому потоку они хотят вернуться, если, скажем, одобрение было отклонено.
Здесь директор выбирает «Отклонить», однако не имеет смысла заканчивать поток здесь, вместо этого должен быть выбираемый «откат», чтобы людям в очереди не нужно было перезапускать весь процесс. снова обработать.
Вот что я сделал до сих пор:
потоки.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(), я жестко закодировал фазу, к которой я хочу вернуться, однако это не идеально, поскольку было бы оптимально, чтобы пользователь мог «выбрать», какую фазу он пришлось отправить обратно...
Поэтому у меня два вопроса: 1. Верен ли мой способ отката? (возможно, есть лучший способ отката вместо вызова процесса и жесткого кода, обновляющего поля) 2. Есть ли способ выбрать, к какой части потока пользователь хочет откатиться?
Спасибо, и я был бы очень признателен любому совету