diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index 963c7dbb93..de007164d0 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -11,6 +11,7 @@ from frappe.utils import now, cint from frappe.model import no_value_fields from frappe.model.document import Document from frappe.model.db_schema import type_map +from frappe.core.doctype.property_setter.property_setter import make_property_setter class DocType(Document): def validate(self): @@ -106,6 +107,29 @@ class DocType(Document): else: frappe.db.sql("rename table `tab%s` to `tab%s`" % (old, new)) + def before_reload(self): + if not (self.issingle and self.istable): + self.preserve_naming_series_options_in_property_setter() + + def preserve_naming_series_options_in_property_setter(self): + """preserve naming_series as property setter if it does not exist""" + naming_series = self.get("fields", {"fieldname": "naming_series"}) + + if not naming_series: + return + + # check if atleast 1 record exists + if not (frappe.db.table_exists("tab" + self.name) and frappe.db.sql("select name from `tab{}` limit 1".format(self.name))): + return + + existing_property_setter = frappe.db.get_value("Property Setter", {"doc_type": self.name, + "property": "options", "field_name": "naming_series"}) + + if not existing_property_setter: + make_property_setter(self.name, "naming_series", "options", naming_series[0].options, "Text") + if naming_series[0].default: + make_property_setter(self.name, "naming_series", "default", naming_series[0].default, "Text") + def export_doc(self): from frappe.modules.export_file import export_to_files export_to_files(record_list=[['DocType', self.name]]) diff --git a/frappe/database.py b/frappe/database.py index c082aa0a74..721de5576f 100644 --- a/frappe/database.py +++ b/frappe/database.py @@ -485,6 +485,9 @@ class Database: def table_exists(self, tablename): return tablename in [d[0] for d in self.sql("show tables")] + def a_row_exists(self, doctype): + return self.sql("select name from `tab{doctype}` limit 1".format(doctype=doctype)) + def exists(self, dt, dn=None): if isinstance(dt, basestring): if dt!="DocType" and dt==dn: diff --git a/frappe/model/delete_doc.py b/frappe/model/delete_doc.py index 56c334f33a..1c1cdb8270 100644 --- a/frappe/model/delete_doc.py +++ b/frappe/model/delete_doc.py @@ -31,7 +31,16 @@ def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reloa remove_all(doctype, name) if doctype=="DocType": - if not for_reload: + if for_reload: + + try: + doc = frappe.get_doc(doctype, name) + except frappe.DoesNotExistError: + pass + else: + doc.run_method("before_reload") + + else: frappe.db.sql("delete from `tabCustom Field` where dt = %s", name) frappe.db.sql("delete from `tabCustom Script` where dt = %s", name) frappe.db.sql("delete from `tabProperty Setter` where doc_type = %s", name) diff --git a/frappe/patches.txt b/frappe/patches.txt index 5387aafbc2..8962d1404b 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -41,3 +41,4 @@ frappe.patches.v4_0.fix_attach_field_file_url execute:frappe.reset_perms("User") #2014-06-13 execute:frappe.db.sql("""delete from `tabUserRole` where ifnull(parentfield, '')=''""") #2014-06-17 frappe.patches.v4_0.remove_user_owner_custom_field +execute:frappe.db.sql("""update `tabProperty Setter` set property_type='Text' where property in ('options', 'default')""") #2014-06-20