Ver código fonte

Fix the customization (#4704)

* keep the json file for parent and child table different

* skip the child table customization if its file exists

* update the json of the child tables also
version-14
Manas Solanki 7 anos atrás
committed by Nabin Hait
pai
commit
93885ec8a5
1 arquivos alterados com 26 adições e 17 exclusões
  1. +26
    -17
      frappe/modules/utils.py

+ 26
- 17
frappe/modules/utils.py Ver arquivo

@@ -57,19 +57,20 @@ def export_customizations(module, doctype, sync_on_migrate=0, with_permissions=0
custom['custom_perms'] = frappe.get_all('Custom DocPerm',
fields='*', filters={'parent': doctype})

# add custom fields and property setters for all child tables
# also update the custom fields and property setters for all child tables
for d in frappe.get_meta(doctype).get_table_fields():
add(d.options)
export_customizations(module, d.options, sync_on_migrate, with_permissions)

folder_path = os.path.join(get_module_path(module), 'custom')
if not os.path.exists(folder_path):
os.makedirs(folder_path)
if custom["custom_fields"] or custom["property_setters"] or custom["custom_perms"]:
folder_path = os.path.join(get_module_path(module), 'custom')
if not os.path.exists(folder_path):
os.makedirs(folder_path)

path = os.path.join(folder_path, scrub(doctype)+ '.json')
with open(path, 'w') as f:
f.write(frappe.as_json(custom))
path = os.path.join(folder_path, scrub(doctype)+ '.json')
with open(path, 'w') as f:
f.write(frappe.as_json(custom))

frappe.msgprint(_('Customizations exported to {0}').format(path))
frappe.msgprint(_('Customizations for <b>{0}</b> exported to:<br>{1}').format(doctype,path))

def sync_customizations(app=None):
'''Sync custom fields and property setters from custom folder in each app module'''
@@ -89,10 +90,10 @@ def sync_customizations(app=None):
data = json.loads(f.read())

if data.get('sync_on_migrate'):
sync_customizations_for_doctype(data)
sync_customizations_for_doctype(data, folder)


def sync_customizations_for_doctype(data):
def sync_customizations_for_doctype(data, folder):
'''Sync doctype customzations for a particular data set'''
from frappe.core.doctype.doctype.doctype import validate_fields_for_doctype

@@ -101,13 +102,21 @@ def sync_customizations_for_doctype(data):

def sync(key, custom_doctype, doctype_fieldname):
doctypes = list(set(map(lambda row: row.get(doctype_fieldname), data[key])))
frappe.db.sql('delete from `tab{0}` where `{1}` in ({2})'.format(
custom_doctype, doctype_fieldname, ",".join(["'%s'" % dt for dt in doctypes])))

for d in data[key]:
d['doctype'] = custom_doctype
doc = frappe.get_doc(d)
doc.db_insert()
# sync single doctype exculding the child doctype
def sync_single_doctype(doc_type):
frappe.db.sql('delete from `tab{0}` where `{1}` =%s'.format(
custom_doctype, doctype_fieldname), doc_type)
for d in data[key]:
if d.get(doctype_fieldname) == doc_type:
d['doctype'] = custom_doctype
doc = frappe.get_doc(d)
doc.db_insert()

for doc_type in doctypes:
# only sync the parent doctype and child doctype if there isn't any other child table json file
if doc_type == doctype or not os.path.exists(os.path.join(folder, frappe.scrub(doc_type)+".json")):
sync_single_doctype(doc_type)

if data['custom_fields']:
sync('custom_fields', 'Custom Field', 'dt')


Carregando…
Cancelar
Salvar