mirror of
https://gitee.com/yuzelin/erpnext_china.git
synced 2026-03-02 05:14:04 +08:00
add base_document monkey patches
This commit is contained in:
63
erpnext_china/monkey_patches/base_document.py
Normal file
63
erpnext_china/monkey_patches/base_document.py
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
import frappe
|
||||||
|
from frappe import _, _dict
|
||||||
|
from frappe.utils import cstr
|
||||||
|
from frappe.model.base_document import BaseDocument
|
||||||
|
import json
|
||||||
|
|
||||||
|
def get_owner_username(self):
|
||||||
|
return frappe.db.get_value('User', self.owner, 'full_name')
|
||||||
|
|
||||||
|
def get_submit_username(self):
|
||||||
|
"""变更记录data字段数据格式
|
||||||
|
changed:[[其它字段,旧值,新值]
|
||||||
|
['docstatus', 0, 1]
|
||||||
|
]"""
|
||||||
|
try:
|
||||||
|
if not self.meta.is_submittable:
|
||||||
|
return
|
||||||
|
filters={'ref_doctype': self.doctype, 'docname': self.name, 'data': ('like', '%docstatus%')}
|
||||||
|
version_list = frappe.get_all('Version', filters = filters, fields=['owner','data'], order_by="creation desc")
|
||||||
|
for version in version_list:
|
||||||
|
data = json.loads(version.data)
|
||||||
|
found = [f for f in data.get('changed') if f[0] =='docstatus' and f[-1] ==1]
|
||||||
|
if found:
|
||||||
|
return frappe.db.get_value('User', version.owner, 'full_name')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _validate_selects(self):
|
||||||
|
if frappe.flags.in_import:
|
||||||
|
return
|
||||||
|
|
||||||
|
for df in self.meta.get_select_fields():
|
||||||
|
if df.fieldname=="naming_series" or not (self.get(df.fieldname) and df.options):
|
||||||
|
continue
|
||||||
|
|
||||||
|
options = (df.options or "").split("\n")
|
||||||
|
|
||||||
|
#支持分号(;)分隔的值与标签,以解决下拉值一词多义问题
|
||||||
|
options = [o.split(";")[0] for o in options if o]
|
||||||
|
# if only empty options
|
||||||
|
if not filter(None, options):
|
||||||
|
continue
|
||||||
|
|
||||||
|
# strip and set
|
||||||
|
self.set(df.fieldname, cstr(self.get(df.fieldname)).strip())
|
||||||
|
value = self.get(df.fieldname)
|
||||||
|
|
||||||
|
if value not in options and not (frappe.flags.in_test and value.startswith("_T-")):
|
||||||
|
# show an elaborate message
|
||||||
|
prefix = _("Row #{0}:").format(self.idx) if self.get("parentfield") else ""
|
||||||
|
label = _(self.meta.get_label(df.fieldname))
|
||||||
|
comma_options = '", "'.join(_(each) for each in options)
|
||||||
|
|
||||||
|
frappe.throw(_('{0} {1} cannot be "{2}". It should be one of "{3}"').format(prefix, label,
|
||||||
|
value, comma_options))
|
||||||
|
|
||||||
|
def money_in_words(self, amount):
|
||||||
|
return frappe.utils.money_in_words(amount)
|
||||||
|
|
||||||
|
BaseDocument.get_owner_username = get_owner_username
|
||||||
|
BaseDocument.get_submit_username = get_submit_username
|
||||||
|
BaseDocument._validate_selects = _validate_selects
|
||||||
|
BaseDocument.money_in_words = money_in_words
|
||||||
Reference in New Issue
Block a user