我目前正在尝试重新创建此流程:
[到目前为止,我的流程只向一个方向前进,没有选择后退,例如,人'b'发现了人'a'键入的错误,我希望能够允许人' b'将任务发回给人'a',以便他们可以“编辑”其条目。但是,视图流中似乎没有“编辑”功能,这是有原因的吗?
class Pipeline(Flow):
process_class = PaymentVoucherProcess
lock_impl = lock.select_for_update_lock
#process starts here
start = flow.Start(
PVStartView,
task_title="Processing New Voucher"
).Permission("cash.can_start_voucher"
).Next(this.approve_by_preparer)
#preparer will approve
approve_by_preparer = flow.View(
UpdateProcessView,
form_class=PreparerApproveForm,
task_title="Approval By Preparer"
).Assign(lambda act: act.process.assign_preparer
).Permission("cash.preparer"
).Next(this.documents)
#preparer will upload supporting documents
documents = flow.View(
UploadView,
task_title="Recieving Supporting Documents"
).Assign(lambda act: act.process.assign_preparer
).Permission("cash.preparer"
).Next(this.preparer)
#preparer will sign
preparer = flow.View(
PreparerSignature,
task_title="Signature By Preparer"
).Assign(lambda act: act.process.assign_preparer
).Permission("cash.preparer"
).Next(this.approve_by_verifier)
#system check point
check_treasury = flow.If(
cond=lambda act: act.process.preparer,
task_title="Processing",
).Then(this.approve_by_verifier).Else(this.end)
#verifier will sign
approve_by_verifier = flow.View(
UpdateProcessView,
form_class=VerifierApproveForm,
task_title="Approval By Verifier"
).Assign(lambda act: act.process.assign_verifier
).Permission("cash.verifier"
).Next(this.verifier)
#there is more but not relevant
我知道有些“撤消”混合视图,但是我不确定在我的情况下它是如何实现的以及如何协调一切,请帮忙!
我仍然不知道如何正确执行此操作。但是这是我在此期间所做的:
class Pipeline(Flow):
process_class = PaymentVoucherProcess
lock_impl = lock.select_for_update_lock
#process starts here
start = flow.Start(
PVStartView,
task_title="Processing New Voucher"
).Permission("cash.can_start_voucher"
).Next(this.approve_by_preparer)
#preparer will approve
approve_by_preparer = flow.View(
UpdateProcessView,
form_class=PreparerApproveForm,
task_title="Approval By Preparer"
).Assign(lambda act: act.process.assign_preparer
).Permission("cash.preparer"
).Next(this.check_preparer)
#system check point
check_preparer = flow.If(
cond=lambda act: act.process.preparer,
task_title="Processing",
).Then(this.documents).Else(this.roll_back)
roll_back = flow.Handler(this.roll_back_call).Next(this.approve_by_preparer)
#preparer will upload supporting documents
documents = flow.View(
UploadView,
task_title="Recieving Supporting Documents"
).Assign(lambda act: act.process.assign_preparer
).Permission("cash.preparer"
).Next(this.preparer)
#preparer will sign
preparer = flow.View(
PreparerSignature,
task_title="Signature By Preparer"
).Assign(lambda act: act.process.assign_preparer
).Permission("cash.preparer"
).Next(this.approve_by_verifier)
#verifier will sign
approve_by_verifier = flow.View(
UpdateProcessView,
form_class=VerifierApproveForm,
task_title="Approval By Verifier"
).Assign(lambda act: act.process.assign_verifier
).Permission("cash.verifier"
).Next(this.check_verifier)
#system check point
check_verifier = flow.If(
cond=lambda act: act.process.verifier,
task_title="Processing"
).Then(this.verifier).Else(this.roll_back)
#bunch of code here and inbetween
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
基本上,此回滚处理程序中发生的事情是,当程序发现Person'B'不赞成时,它将运行roll_back代码,该代码搜索该过程并“刷新”该过程,将所有外部关系标记为无效并删除所有先前的批准。这确实是超级非正统和骇人听闻的,但在此同时,请让我知道你们的评论,并与我分享您的答案。
我仍然没有弄清楚一个人究竟可以'编辑','取消'或'重新分配'他的任务,文档没有太多,而且我真的感到很惊讶,因为没有足够的文档,人们没有面对这样的问题。满足在那里。无论如何,我希望看到一些建设性的反馈!