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

閱讀時間約 6 分鐘
raw-image

流程與節點

公司裡面每一張需要簽核的表單可能會有不一樣的簽核流程(work flow)。而流程中每個節點(work flow node)的簽核對象有可能是特定的使用者或是符合某個部門、某個職位的使用者皆可簽核。

請假表單: 代理人 -> 直屬主管 -> 人資部門

採購表單: 直屬主管 -> 採購部門主管 -> 會計部門

考慮到簽核時需要的各種資料依據,我們在data model的設計上讓各個流程節點設定簽核類型,再根據簽核類型逐一自由設定預定的簽核人員或是簽核部門、簽核組織等等。

流程與節點(db schema)

流程與節點(db schema)

class WorkFlow(Model):
name = CharField()

class WorkFlowNode(Model):
work_flow = ForeignKey()
category = CharField()
organization = ForeignKey()
department = ForeignKey()
position = ForeignKey()
user = ForeignKey()
name = CharField()
order = PositiveIntegerField()

簽核表單與簽核節點

raw-image

當一張請假表單被創建時,我們需要找出對應的簽核流程設定,同時為他創建簽核表單(sign form)與多個簽核節點(sign node),每一個簽核節點都會關聯回流程節點,才能在簽核時正確判端下一層要送給誰簽、使用者能不能簽核這張表單並同時紀錄簽核結果以及備註資訊。

簽核表單與簽核節點(db schema)

簽核表單與簽核節點(db schema)

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

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

如何動態產生簽核表單

假設我們建了兩個簽核流程(work flow): 請假表單簽核流程、採購表單簽核流程,並各自設定一至多個流程節點(work flow node)。

那當我們建立請假表單(leave form)、採購表單(purchase order)後,如何識別對應的簽核流程來建立簽核表單(sign form)與簽核節點(sign node)? 只好請出我們強大的繼承。

class WorkFlowBaseModel(Model):
sign_form = OneToOneField()
class Meta:
abstract = True

@property
def work_flow_name(self):
raise NotImplementedError("Subclasses must implement this method")

@transaction.atomic
def save(self, *args, **kwargs):
is_new = not self.pk
super(WorkFlowBaseModel, self).save(*args, **kwargs)

if is_new and not self.sign_form:
self.init_work_flow()

def init_work_flow(self):
work_flow_name = self.work_flow_name
work_flow, created = WorkFlow.objects.get_or_create(name=work_flow_name)
work_flow_nodes = work_flow.work_flow_nodes.all()

//建立sign form and sign nodes

先建立一個抽象WorkFlowBaseModel,並且規定所有繼承的子類都必須實作work_flow_name

再來讓請假表單、採購表單繼承並且實作各自的work_flow_name

class LeaveForm(WorkFlowBaseModel):
@property
def work_flow_name(self):
return WorkFlowName.leave

class PurchaseOrder(WorkFlowBaseModel):
@property
def work_flow_name(self):
return WorkFlowName.purchase

再回頭看一下WorkFlowBaseModel定義的save、init_work_flow,會發現已經能夠自動根據子類的work_flow_name找出對應的work_flow、work_flow_nodes囉。

最後只要建立sign form以及sign nodes,並將sign form關聯回請假表單、採購表單,完整的簽核表單就建立完成了。

下一篇我們再來介紹怎麼集中由簽核表單(sign form)處理簽核相關的操作。
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