Frappe里的猴子补丁新增列表状态
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
将新列表赋值给就列表
刷新数据列表页面会自动触发猴子补丁