Frappe里的猴子补丁新增列表状态

Author Avatar
ZhuXing
发表:2024-11-26 16:53:14
修改:2024-11-26 16:53:14

ErpNext15猴子补丁新增列表状态

一、创建app

bench new-app appname

二、创建monkey_patches模块,猴子补丁模块名称固定

新建py文件,在文件里写上新增逻辑代码

解析代码逻辑

from erpnext.controllers import website_list_for_contact

导入erpnext.controllers的website_list_for_contact文件,因为列表状态在该文件中处理

from erpnext.controllers.website_list_for_contact import post_process as original_post_process

导入erpnext.controllers.website_list_for_contact文件中的post_process方法,并且重命名为original_post_process,因为该方法是修改列表状态的方法

def custom_post_process(doctype,data):

新方法

result = original_post_process(doctype,data)

获取列表数据

for doc in result:

遍历列表数据

if doc.get('doctype') == 'Sales Order' and doc.get('per_delivered',0) <= 0:

判断单据类型是否为 'Sales Order’并且’per_delivered’小于等于0

po_list = frappe.get_all('Purchase Order Item',filters = {'sales_order': [doc.name](http://doc.name/),'docstatus':1 },fields = ['parent','qty','received_qty'] )

获取’Purchase Order Item’单据列表,并且’sales_order’为单据名称,'docstatus’为1

if not po_list:doc.status = _('To Purchase')

判断如果’Purchase Order Item’单据列表为空,那么单据状态为’To Purchase’

elif any(True for row in po_list if (row.qty - row.received_qty) > 0):doc.status = _('To Receive')

如果’Purchase Order Item’单据列表不为空,那么遍历,如果(row.qty - row.received_qty) > 0那么单据状态为’To Receive’

return result

返回结果列表

website_list_for_contact.post_process = custom_post_process

将新列表赋值给就列表

刷新数据列表页面会自动触发猴子补丁

评论