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)處理簽核相關的操作。
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
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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