ERP後端 | Django如何快速實作靈活的動態簽核表單(2)

閱讀時間約 5 分鐘
在前一篇我們已經成功地建立簽核表單及簽核節點並關聯回請假表單,而本篇會接著介紹如何管理簽核節點狀態並同步更新簽核表單狀態。
raw-image

簽核節點狀態

我們來回顧一下data model,簽核表單(sign form)與簽核節點(sign node)是一對多關係,每個節點的狀態是獨立的,節點本身無法得知自己是不是下一個要被簽核的對象。

raw-image

但是從簽核表單(sign form)的視角來看,只要加上next_sign_node、last_sign_node兩個欄位,當節點狀態改變時同步更新這兩個欄位,就可以快速查找簽核進行到哪一關啦。

class SignForm(Model):
objects = Manager()
status = FSMField()
user = ForeignKey()
next_sign_node = ForeignKey()
last_sign_node = ForeignKey()

def update_sign_nodes(self):
nodes = self.sign_nodes.order_by('order')
last_sign_node = None
next_sign_node = None

for node in nodes:
if node.result in [SignResult.APPROVED, SignResult.REJECTED]:
last_sign_node = node
elif node.result == SignResult.NONE and not next_sign_node:
if last_sign_node or not last_sign_node:
next_sign_node = node

if self.last_sign_node != last_sign_node or self.next_sign_node != next_sign_node:
self.last_sign_node = last_sign_node
self.next_sign_node = next_sign_node
self.save(update_fields=['last_sign_node', 'next_sign_node'])

if all(node.result == SignResult.APPROVED for node in nodes):
self.approve()
elif any(node.result == SignResult.REJECTED for node in nodes):
self.reject()

在簽核表單(sign form)加上update_sign_nodes的函式當簽核節點(sign node)被簽核人員同意或是退回時呼叫,這樣一來就可以非常方便的紀錄目前簽核到哪一個節點或是整張表單已經完成簽核了。

class SignNode(Model):
sign_form = ForeignKey()
work_flow_node = ForeignKey()
agent = ForeignKey()
signer = ForeignKey()
result = FSMField()
date = DateTimeField()
note = TextField()
order = PositiveIntegerField()

class Meta:
ordering = ['order']

@transition()
def approve(self, signer, note):
self.result = SignResult.APPROVED
self.save(update_fields=['result'])
self.sign_form.update_sign_nodes()

@transition()
def reject(self, signer, note):
self.result = SignResult.REJECTED
self.save(update_fields=['result'])
self.sign_form.update_sign_nodes()

搜尋使用者待簽核的表單

使用簽核表單(sign form)紀錄next_sign_node額外的好處是,在搜尋時可以讓query減少一層。

raw-image
ORM雖然效能不佳,但在實作中低流量的ERP系統時,開發效率還是蠻不錯的。
簽核表單真的是蠻複雜的功能,基本的順簽流程都已經如此費工,更大型的ERP甚至會導入更進階的多方會簽逐層退回等等功能,非常考驗開發者的實作經驗。
65會員
19內容數
探索自我實現的小角落。沒有高高在上的教條,只有真實的分享和心得。
留言0
查看全部
發表第一個留言支持創作者!
再寫5分鐘 的其他內容
本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
《Future GPX Cyber Formula》閃電霹靂車是一部關於AI賽車的動漫作品,講述了主角與AI合作的故事。文章引述了動漫中的情節與角色,突出了AI協助駕駛者的功能。全文帶有熱血激情、深度思考和特殊概念。
EAFP(Easier to Ask for Forgiveness than Permission)是Python提倡的防禦性程式碼風格,鼓勵工程師直接撰寫主要業務邏輯,不需要多做檢查,真的出現異常再處理就好。這種風格的程式碼可讀性優於LBYL風格,並且在多進程/多線程場景下表現更好。
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
你知道IG是用Django開發的嗎? 正在學習或使用Django、Flask框架開發後端的你,是否也常在享受Python語法的舒適之餘,仍然煩惱著是否該學習效率更好的GO或Laravel。
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
《Future GPX Cyber Formula》閃電霹靂車是一部關於AI賽車的動漫作品,講述了主角與AI合作的故事。文章引述了動漫中的情節與角色,突出了AI協助駕駛者的功能。全文帶有熱血激情、深度思考和特殊概念。
EAFP(Easier to Ask for Forgiveness than Permission)是Python提倡的防禦性程式碼風格,鼓勵工程師直接撰寫主要業務邏輯,不需要多做檢查,真的出現異常再處理就好。這種風格的程式碼可讀性優於LBYL風格,並且在多進程/多線程場景下表現更好。
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
你知道IG是用Django開發的嗎? 正在學習或使用Django、Flask框架開發後端的你,是否也常在享受Python語法的舒適之餘,仍然煩惱著是否該學習效率更好的GO或Laravel。
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
你可能也想看
Thumbnail
「設計不僅僅是外觀和感覺。設計是其運作的方式。」 — Steve Jobs 身為一個獨立文案,許多人會以為我們的生活只需要面對電腦,從無到有,用精巧的文字填滿空白的螢幕,呈現心目中獨具風格的作品。 ——有的時候可以如此,但其實這是我們夢寐以求的偶發日常。 更多的時候,白天的工作時間總被各種繁雜
Thumbnail
台股、美股近期明顯回檔,市場敘事發生改變,壞消息一樁接一樁出現,下一步該怎麼走呢?本文將探討近期的宏觀經濟事件,並分享個人的操作思考。
Thumbnail
ERP證照是一種台灣特有的認證標準,旨在提升專業人才水準和保障企業資料安全。但在全球競爭市場中,是否成為技術創新的障礙呢?在選擇ERP系統時,企業是否應該依賴於證照?本文將解答這些問題,並探討自主選擇ERP系統的關鍵因素。
Thumbnail
在當今快節奏的商業環境中,選擇合適的企業資源計劃(ERP)系統對公司的運作效率和靈活性有著顯著的影響。
Thumbnail
由前文「ERP系統的源起」,我們可以瞭解ERP系統是由MRP(Material Requirement Plan)系統,演進為MRP-II(MAnufacture Resource Plan)系統再進化為ERP(Enteprise Resource Plan)系統。
Thumbnail
在中文裏,描述初始有兩句話可用:「天地玄黃,宇宙洪荒」、「混沌初開,乾坤始奠」,這兩句話和我要說的ERP沒有關聯,只是想這麼起個頭而己。:-)
Thumbnail
企業資源規劃(ERP系統)是一種整合企業各部門資源與業務流程的管理軟體。本文將從優點和缺點兩方面探討ERP系統的利弊,以幫助您了解這一工具的價值和潛在風險。
Thumbnail
網上有人表示公司茶水間對工作效率佔了重要位置,亦是挽留人才的其中一個重點。因為一般上班族每星期5日都在辦公室度過,每天更長達8小時。因此Pantry成為了員工走一走動,舒緩壓力的地方。 其實除了茶水間可提升工作效率,ERP都可以。 M18 ERP 支援 No Code Approach,無需軟件
管理層都明白數據對決策的重要性,但為何仍有很多決策是基於經驗或直覺而定製呢?極有可能是因為收集數據過於煩瑣,以致大家捨難取易,直接用經驗或直覺做出決策。 但現今數字化的世代,決策要含有說服力,數據已經是必不可少。M18 ERP 是完善的一體化系統,一個ERP 助你管理會計、物流、倉存、生產、CRM
Thumbnail
企業營運風險多不勝數, Multiable M18 ERP支援商業預警 (Business Alert) 功能, 有效助企業規避風險。 M18 ERP 商業預警,涵蓋範圍極廣,不能盡錄,其中包括: 📷 客人信用額預警 📷 倉存補貨預警 📷 採購訂單預警 📷 生產線產能預警 馬上聯絡Multi
Thumbnail
企業每天也有海量文件需要處理,部分傳統企業更是人手將紙上的資訊輸入不同的電腦系統,不但費時失事,當人手重複輸入數據時,降低員工工作價值的同時,還難免會增加人為錯誤的機會。 有了ERP系統,只需輸入一次資訊到系統,系統會自動更新到各個模組。除了減少員工重複性工作,增加員工工作價值外,還能自動檢查各個模
Thumbnail
管理層都明白數據對決策的重要性,但為何仍有很多決策是基於經驗或直覺而定製呢?極有可能是因為收集數據過於煩瑣,以致大家捨難取易,直接用經驗或直覺做出決策。 但現今數字化的世代,決策要含有說服力,數據已經是必不可少。M18 ERP 是完善的一體化系統,一個ERP 助你管理會計、物流、倉存、生產、CRM
Thumbnail
「設計不僅僅是外觀和感覺。設計是其運作的方式。」 — Steve Jobs 身為一個獨立文案,許多人會以為我們的生活只需要面對電腦,從無到有,用精巧的文字填滿空白的螢幕,呈現心目中獨具風格的作品。 ——有的時候可以如此,但其實這是我們夢寐以求的偶發日常。 更多的時候,白天的工作時間總被各種繁雜
Thumbnail
台股、美股近期明顯回檔,市場敘事發生改變,壞消息一樁接一樁出現,下一步該怎麼走呢?本文將探討近期的宏觀經濟事件,並分享個人的操作思考。
Thumbnail
ERP證照是一種台灣特有的認證標準,旨在提升專業人才水準和保障企業資料安全。但在全球競爭市場中,是否成為技術創新的障礙呢?在選擇ERP系統時,企業是否應該依賴於證照?本文將解答這些問題,並探討自主選擇ERP系統的關鍵因素。
Thumbnail
在當今快節奏的商業環境中,選擇合適的企業資源計劃(ERP)系統對公司的運作效率和靈活性有著顯著的影響。
Thumbnail
由前文「ERP系統的源起」,我們可以瞭解ERP系統是由MRP(Material Requirement Plan)系統,演進為MRP-II(MAnufacture Resource Plan)系統再進化為ERP(Enteprise Resource Plan)系統。
Thumbnail
在中文裏,描述初始有兩句話可用:「天地玄黃,宇宙洪荒」、「混沌初開,乾坤始奠」,這兩句話和我要說的ERP沒有關聯,只是想這麼起個頭而己。:-)
Thumbnail
企業資源規劃(ERP系統)是一種整合企業各部門資源與業務流程的管理軟體。本文將從優點和缺點兩方面探討ERP系統的利弊,以幫助您了解這一工具的價值和潛在風險。
Thumbnail
網上有人表示公司茶水間對工作效率佔了重要位置,亦是挽留人才的其中一個重點。因為一般上班族每星期5日都在辦公室度過,每天更長達8小時。因此Pantry成為了員工走一走動,舒緩壓力的地方。 其實除了茶水間可提升工作效率,ERP都可以。 M18 ERP 支援 No Code Approach,無需軟件
管理層都明白數據對決策的重要性,但為何仍有很多決策是基於經驗或直覺而定製呢?極有可能是因為收集數據過於煩瑣,以致大家捨難取易,直接用經驗或直覺做出決策。 但現今數字化的世代,決策要含有說服力,數據已經是必不可少。M18 ERP 是完善的一體化系統,一個ERP 助你管理會計、物流、倉存、生產、CRM
Thumbnail
企業營運風險多不勝數, Multiable M18 ERP支援商業預警 (Business Alert) 功能, 有效助企業規避風險。 M18 ERP 商業預警,涵蓋範圍極廣,不能盡錄,其中包括: 📷 客人信用額預警 📷 倉存補貨預警 📷 採購訂單預警 📷 生產線產能預警 馬上聯絡Multi
Thumbnail
企業每天也有海量文件需要處理,部分傳統企業更是人手將紙上的資訊輸入不同的電腦系統,不但費時失事,當人手重複輸入數據時,降低員工工作價值的同時,還難免會增加人為錯誤的機會。 有了ERP系統,只需輸入一次資訊到系統,系統會自動更新到各個模組。除了減少員工重複性工作,增加員工工作價值外,還能自動檢查各個模
Thumbnail
管理層都明白數據對決策的重要性,但為何仍有很多決策是基於經驗或直覺而定製呢?極有可能是因為收集數據過於煩瑣,以致大家捨難取易,直接用經驗或直覺做出決策。 但現今數字化的世代,決策要含有說服力,數據已經是必不可少。M18 ERP 是完善的一體化系統,一個ERP 助你管理會計、物流、倉存、生產、CRM