@@ -102,7 +102,7 @@ class CustomizeForm(Document): | |||||
meta = frappe.get_meta(self.doc_type) | meta = frappe.get_meta(self.doc_type) | ||||
# doctype property setters | # doctype property setters | ||||
for property in self.doctype_properties: | for property in self.doctype_properties: | ||||
if property != "idx" and self.get(property) != meta.get(property): | |||||
if self.get(property) != meta.get(property): | |||||
self.make_property_setter(property=property, value=self.get(property), | self.make_property_setter(property=property, value=self.get(property), | ||||
property_type=self.doctype_properties[property]) | property_type=self.doctype_properties[property]) | ||||
@@ -117,7 +117,7 @@ class CustomizeForm(Document): | |||||
continue | continue | ||||
for property in self.docfield_properties: | for property in self.docfield_properties: | ||||
if df.get(property) != meta_df[0].get(property): | |||||
if property != "idx" and df.get(property) != meta_df[0].get(property): | |||||
if property == "fieldtype": | if property == "fieldtype": | ||||
self.validate_fieldtype_change(df, meta_df[0].get(property), df.get(property)) | self.validate_fieldtype_change(df, meta_df[0].get(property), df.get(property)) | ||||
@@ -260,4 +260,3 @@ class CustomizeForm(Document): | |||||
and ifnull(field_name, '')!='naming_series'""", self.doc_type) | and ifnull(field_name, '')!='naming_series'""", self.doc_type) | ||||
frappe.clear_cache(doctype=self.doc_type) | frappe.clear_cache(doctype=self.doc_type) | ||||
self.fetch_to_customize() | self.fetch_to_customize() | ||||
@@ -72,111 +72,3 @@ def delete_fields(args_dict, delete=0): | |||||
", ".join(["DROP COLUMN `%s`" % f for f in fields if f in existing_fields]) | ", ".join(["DROP COLUMN `%s`" % f for f in fields if f in existing_fields]) | ||||
frappe.db.commit() | frappe.db.commit() | ||||
frappe.db.sql(query) | frappe.db.sql(query) | ||||
def rename_field(doctype, old_fieldname, new_fieldname): | |||||
"""This functions assumes that doctype is already synced""" | |||||
meta = frappe.get_meta(doctype, cached=False) | |||||
new_field = meta.get_field(new_fieldname) | |||||
if not new_field: | |||||
print "rename_field: " + (new_fieldname) + " not found in " + doctype | |||||
return | |||||
if new_field.fieldtype == "Table": | |||||
# change parentfield of table mentioned in options | |||||
frappe.db.sql("""update `tab%s` set parentfield=%s | |||||
where parentfield=%s""" % (new_field.options.split("\n")[0], "%s", "%s"), | |||||
(new_fieldname, old_fieldname)) | |||||
elif new_field.fieldtype not in no_value_fields: | |||||
if meta.issingle: | |||||
frappe.db.sql("""update `tabSingles` set field=%s | |||||
where doctype=%s and field=%s""", | |||||
(new_fieldname, doctype, old_fieldname)) | |||||
else: | |||||
# copy field value | |||||
frappe.db.sql("""update `tab%s` set `%s`=`%s`""" % \ | |||||
(doctype, new_fieldname, old_fieldname)) | |||||
update_reports(doctype, old_fieldname, new_fieldname) | |||||
update_users_report_view_settings(doctype, old_fieldname, new_fieldname) | |||||
# update in property setter | |||||
frappe.db.sql("""update `tabProperty Setter` set field_name = %s | |||||
where doc_type=%s and field_name=%s""", (new_fieldname, doctype, old_fieldname)) | |||||
def update_reports(doctype, old_fieldname, new_fieldname): | |||||
def _get_new_sort_by(report_dict, report, key): | |||||
sort_by = report_dict.get(key) or "" | |||||
if sort_by: | |||||
sort_by = sort_by.split(".") | |||||
if len(sort_by) > 1: | |||||
if sort_by[0]==doctype and sort_by[1]==old_fieldname: | |||||
sort_by = doctype + "." + new_fieldname | |||||
report_dict["updated"] = True | |||||
elif report.ref_doctype == doctype and sort_by[0]==old_fieldname: | |||||
sort_by = doctype + "." + new_fieldname | |||||
report_dict["updated"] = True | |||||
if isinstance(sort_by, list): | |||||
sort_by = '.'.join(sort_by) | |||||
return sort_by | |||||
reports = frappe.db.sql("""select name, ref_doctype, json from tabReport | |||||
where report_type = 'Report Builder' and ifnull(is_standard, 'No') = 'No' | |||||
and json like %s and json like %s""", | |||||
('%%%s%%' % old_fieldname , '%%%s%%' % doctype), as_dict=True) | |||||
for r in reports: | |||||
report_dict = json.loads(r.json) | |||||
# update filters | |||||
new_filters = [] | |||||
for f in report_dict.get("filters"): | |||||
if f and len(f) > 1 and f[0] == doctype and f[1] == old_fieldname: | |||||
new_filters.append([doctype, new_fieldname, f[2], f[3]]) | |||||
report_dict["updated"] = True | |||||
else: | |||||
new_filters.append(f) | |||||
# update columns | |||||
new_columns = [] | |||||
for c in report_dict.get("columns"): | |||||
if c and len(c) > 1 and c[0] == old_fieldname and c[1] == doctype: | |||||
new_columns.append([new_fieldname, doctype]) | |||||
report_dict["updated"] = True | |||||
else: | |||||
new_columns.append(c) | |||||
# update sort by | |||||
new_sort_by = _get_new_sort_by(report_dict, r, "sort_by") | |||||
new_sort_by_next = _get_new_sort_by(report_dict, r, "sort_by_next") | |||||
if report_dict.get("updated"): | |||||
new_val = json.dumps({ | |||||
"filters": new_filters, | |||||
"columns": new_columns, | |||||
"sort_by": new_sort_by, | |||||
"sort_order": report_dict.get("sort_order"), | |||||
"sort_by_next": new_sort_by_next, | |||||
"sort_order_next": report_dict.get("sort_order_next") | |||||
}) | |||||
frappe.db.sql("""update `tabReport` set `json`=%s where name=%s""", (new_val, r.name)) | |||||
def update_users_report_view_settings(doctype, ref_fieldname, new_fieldname): | |||||
user_report_cols = frappe.db.sql("""select defkey, defvalue from `tabDefaultValue` where | |||||
defkey like '_list_settings:%'""") | |||||
for key, value in user_report_cols: | |||||
new_columns = [] | |||||
columns_modified = False | |||||
for field, field_doctype in json.loads(value): | |||||
if field == ref_fieldname and field_doctype == doctype: | |||||
new_columns.append([new_fieldname, field_doctype]) | |||||
columns_modified=True | |||||
else: | |||||
new_columns.append([field, field_doctype]) | |||||
if columns_modified: | |||||
frappe.db.sql("""update `tabDefaultValue` set defvalue=%s | |||||
where defkey=%s""" % ('%s', '%s'), (json.dumps(new_columns), key)) |
@@ -0,0 +1,18 @@ | |||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | |||||
# MIT License. See license.txt | |||||
from __future__ import unicode_literals | |||||
import frappe, json | |||||
from frappe import _ | |||||
""" | |||||
Model utilities, unclassified functions | |||||
""" | |||||
def set_default(doc, key): | |||||
"""Set is_default property of given doc and unset all others filtered by given key.""" | |||||
if not doc.is_default: | |||||
frappe.db.set(doc, "is_default", 1) | |||||
frappe.db.sql("""update `tab%s` set `is_default`=0 | |||||
where `%s`=%s and name!=%s""" % (doc.doctype, key, "%s", "%s"), | |||||
(doc.get(key), doc.name)) |
@@ -0,0 +1,107 @@ | |||||
def rename_field(doctype, old_fieldname, new_fieldname): | |||||
"""This functions assumes that doctype is already synced""" | |||||
meta = frappe.get_meta(doctype, cached=False) | |||||
new_field = meta.get_field(new_fieldname) | |||||
if not new_field: | |||||
print "rename_field: " + (new_fieldname) + " not found in " + doctype | |||||
return | |||||
if new_field.fieldtype == "Table": | |||||
# change parentfield of table mentioned in options | |||||
frappe.db.sql("""update `tab%s` set parentfield=%s | |||||
where parentfield=%s""" % (new_field.options.split("\n")[0], "%s", "%s"), | |||||
(new_fieldname, old_fieldname)) | |||||
elif new_field.fieldtype not in no_value_fields: | |||||
if meta.issingle: | |||||
frappe.db.sql("""update `tabSingles` set field=%s | |||||
where doctype=%s and field=%s""", | |||||
(new_fieldname, doctype, old_fieldname)) | |||||
else: | |||||
# copy field value | |||||
frappe.db.sql("""update `tab%s` set `%s`=`%s`""" % \ | |||||
(doctype, new_fieldname, old_fieldname)) | |||||
update_reports(doctype, old_fieldname, new_fieldname) | |||||
update_users_report_view_settings(doctype, old_fieldname, new_fieldname) | |||||
# update in property setter | |||||
frappe.db.sql("""update `tabProperty Setter` set field_name = %s | |||||
where doc_type=%s and field_name=%s""", (new_fieldname, doctype, old_fieldname)) | |||||
def update_reports(doctype, old_fieldname, new_fieldname): | |||||
def _get_new_sort_by(report_dict, report, key): | |||||
sort_by = report_dict.get(key) or "" | |||||
if sort_by: | |||||
sort_by = sort_by.split(".") | |||||
if len(sort_by) > 1: | |||||
if sort_by[0]==doctype and sort_by[1]==old_fieldname: | |||||
sort_by = doctype + "." + new_fieldname | |||||
report_dict["updated"] = True | |||||
elif report.ref_doctype == doctype and sort_by[0]==old_fieldname: | |||||
sort_by = doctype + "." + new_fieldname | |||||
report_dict["updated"] = True | |||||
if isinstance(sort_by, list): | |||||
sort_by = '.'.join(sort_by) | |||||
return sort_by | |||||
reports = frappe.db.sql("""select name, ref_doctype, json from tabReport | |||||
where report_type = 'Report Builder' and ifnull(is_standard, 'No') = 'No' | |||||
and json like %s and json like %s""", | |||||
('%%%s%%' % old_fieldname , '%%%s%%' % doctype), as_dict=True) | |||||
for r in reports: | |||||
report_dict = json.loads(r.json) | |||||
# update filters | |||||
new_filters = [] | |||||
for f in report_dict.get("filters"): | |||||
if f and len(f) > 1 and f[0] == doctype and f[1] == old_fieldname: | |||||
new_filters.append([doctype, new_fieldname, f[2], f[3]]) | |||||
report_dict["updated"] = True | |||||
else: | |||||
new_filters.append(f) | |||||
# update columns | |||||
new_columns = [] | |||||
for c in report_dict.get("columns"): | |||||
if c and len(c) > 1 and c[0] == old_fieldname and c[1] == doctype: | |||||
new_columns.append([new_fieldname, doctype]) | |||||
report_dict["updated"] = True | |||||
else: | |||||
new_columns.append(c) | |||||
# update sort by | |||||
new_sort_by = _get_new_sort_by(report_dict, r, "sort_by") | |||||
new_sort_by_next = _get_new_sort_by(report_dict, r, "sort_by_next") | |||||
if report_dict.get("updated"): | |||||
new_val = json.dumps({ | |||||
"filters": new_filters, | |||||
"columns": new_columns, | |||||
"sort_by": new_sort_by, | |||||
"sort_order": report_dict.get("sort_order"), | |||||
"sort_by_next": new_sort_by_next, | |||||
"sort_order_next": report_dict.get("sort_order_next") | |||||
}) | |||||
frappe.db.sql("""update `tabReport` set `json`=%s where name=%s""", (new_val, r.name)) | |||||
def update_users_report_view_settings(doctype, ref_fieldname, new_fieldname): | |||||
user_report_cols = frappe.db.sql("""select defkey, defvalue from `tabDefaultValue` where | |||||
defkey like '_list_settings:%'""") | |||||
for key, value in user_report_cols: | |||||
new_columns = [] | |||||
columns_modified = False | |||||
for field, field_doctype in json.loads(value): | |||||
if field == ref_fieldname and field_doctype == doctype: | |||||
new_columns.append([new_fieldname, field_doctype]) | |||||
columns_modified=True | |||||
else: | |||||
new_columns.append([field, field_doctype]) | |||||
if columns_modified: | |||||
frappe.db.sql("""update `tabDefaultValue` set defvalue=%s | |||||
where defkey=%s""" % ('%s', '%s'), (json.dumps(new_columns), key)) |
@@ -80,4 +80,5 @@ frappe.patches.v5_0.fix_text_editor_file_urls | |||||
execute:frappe.db.sql("update `tabComment` set comment_type='Comment' where comment_doctype='Blog Post' and ifnull(comment_type, '')=''") | execute:frappe.db.sql("update `tabComment` set comment_type='Comment' where comment_doctype='Blog Post' and ifnull(comment_type, '')=''") | ||||
frappe.patches.v5_0.modify_session | frappe.patches.v5_0.modify_session | ||||
frappe.patches.v5_0.expire_old_scheduler_logs | frappe.patches.v5_0.expire_old_scheduler_logs | ||||
execute:frappe.permissions.reset_perms("DocType") | |||||
execute:frappe.permissions.reset_perms("DocType") | |||||
execute:frappe.db.sql("delete from `tabProperty Setter` where `property` = 'idx'") |
@@ -1,7 +1,7 @@ | |||||
from __future__ import unicode_literals | from __future__ import unicode_literals | ||||
import frappe | import frappe | ||||
from frappe.model import rename_field | |||||
from frappe.model.utils import rename_field | |||||
from frappe.model.meta import get_table_columns | from frappe.model.meta import get_table_columns | ||||
def execute(): | def execute(): | ||||
@@ -1,7 +1,7 @@ | |||||
from __future__ import unicode_literals | from __future__ import unicode_literals | ||||
import frappe | import frappe | ||||
from frappe.model import rename_field | |||||
from frappe.model.utils import rename_field | |||||
def execute(): | def execute(): | ||||
tables = frappe.db.sql_list("show tables") | tables = frappe.db.sql_list("show tables") | ||||
@@ -2,7 +2,7 @@ | |||||
# License: GNU General Public License v3. See license.txt | # License: GNU General Public License v3. See license.txt | ||||
import frappe | import frappe | ||||
from frappe.model import rename_field | |||||
from frappe.model.utils import rename_field | |||||
from frappe.modules import scrub, get_doctype_module | from frappe.modules import scrub, get_doctype_module | ||||
rename_map = { | rename_map = { | ||||
@@ -11,7 +11,6 @@ from frappe import _ | |||||
import frappe.model.document | import frappe.model.document | ||||
import frappe.utils | import frappe.utils | ||||
import frappe.sessions | import frappe.sessions | ||||
import frappe.model.utils | |||||
import werkzeug.utils | import werkzeug.utils | ||||
from werkzeug.local import LocalProxy | from werkzeug.local import LocalProxy | ||||
from werkzeug.wsgi import wrap_file | from werkzeug.wsgi import wrap_file | ||||