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甚至會導入更進階的多方會簽逐層退回等等功能,非常考驗開發者的實作經驗。
66會員
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。
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
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