如何在视图流中启动具有编辑功能的后退

问题描述 投票:0回答:1

我目前正在尝试重新创建此流程:

enter image description here

[到目前为止,我的流程只向一个方向前进,没有选择后退,例如,人'b'发现了人'a'键入的错误,我希望能够允许人' b'将任务发回给人'a',以便他们可以“编辑”其条目。但是,视图流中似乎没有“编辑”功能,这是有原因的吗?

flows.py

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 

我知道有些“撤消”混合视图,但是我不确定在我的情况下它是如何实现的以及如何协调一切,请帮忙!

viewflow
1个回答
0
投票

我仍然不知道如何正确执行此操作。但是这是我在此期间所做的:

flows.py

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代码,该代码搜索该过程并“刷新”该过程,将所有外部关系标记为无效并删除所有先前的批准。这确实是超级非正统和骇人听闻的,但在此同时,请让我知道你们的评论,并与我分享您的答案。

我仍然没有弄清楚一个人究竟可以'编辑','取消'或'重新分配'他的任务,文档没有太多,而且我真的感到很惊讶,因为没有足够的文档,人们没有面对这样的问题。满足在那里。无论如何,我希望看到一些建设性的反馈!

© www.soinside.com 2019 - 2024. All rights reserved.