@@ -658,10 +658,10 @@ def reload_doc(module, dt=None, dn=None, force=False, reset_permissions=False): | |||||
import frappe.modules | import frappe.modules | ||||
return frappe.modules.reload_doc(module, dt, dn, force=force, reset_permissions=reset_permissions) | return frappe.modules.reload_doc(module, dt, dn, force=force, reset_permissions=reset_permissions) | ||||
def rename_doc(doctype, old, new, debug=0, force=False, merge=False, ignore_permissions=False): | |||||
def rename_doc(*args, **kwargs): | |||||
"""Rename a document. Calls `frappe.model.rename_doc.rename_doc`""" | """Rename a document. Calls `frappe.model.rename_doc.rename_doc`""" | ||||
from frappe.model.rename_doc import rename_doc | from frappe.model.rename_doc import rename_doc | ||||
return rename_doc(doctype, old, new, force=force, merge=merge, ignore_permissions=ignore_permissions) | |||||
return rename_doc(*args, **kwargs) | |||||
def get_module(modulename): | def get_module(modulename): | ||||
"""Returns a module object for given Python module name using `importlib.import_module`.""" | """Returns a module object for given Python module name using `importlib.import_module`.""" | ||||
@@ -13,7 +13,7 @@ | |||||
frappe.ui.form.on('DocType', { | frappe.ui.form.on('DocType', { | ||||
refresh: function(frm) { | refresh: function(frm) { | ||||
if(frm.doc.__islocal && (user !== "Administrator" || !frappe.boot.developer_mode)) { | |||||
if(frm.is_new() && (user !== "Administrator" || !frappe.boot.developer_mode)) { | |||||
frm.set_value("custom", 1); | frm.set_value("custom", 1); | ||||
frm.toggle_enable("custom", 0); | frm.toggle_enable("custom", 0); | ||||
} | } | ||||
@@ -23,7 +23,11 @@ frappe.ui.form.on('DocType', { | |||||
frm.set_read_only(); | frm.set_read_only(); | ||||
} | } | ||||
if(!frm.doc.__islocal) { | |||||
if(frm.is_new()) { | |||||
if (!(frm.doc.permissions && frm.doc.permissions.length)) { | |||||
frm.add_child('permissions', {role: 'System Manager'}); | |||||
} | |||||
} else { | |||||
frm.toggle_enable("engine", 0); | frm.toggle_enable("engine", 0); | ||||
} | } | ||||
@@ -45,6 +45,7 @@ class DocType(Document): | |||||
elif self.istable: | elif self.istable: | ||||
self.allow_import = 0 | self.allow_import = 0 | ||||
self.permissions = [] | |||||
self.scrub_field_names() | self.scrub_field_names() | ||||
self.validate_series() | self.validate_series() | ||||
@@ -60,10 +61,8 @@ class DocType(Document): | |||||
self.make_amendable() | self.make_amendable() | ||||
self.validate_website() | self.validate_website() | ||||
try: | |||||
if not self.is_new(): | |||||
self.before_update = frappe.get_doc('DocType', self.name) | self.before_update = frappe.get_doc('DocType', self.name) | ||||
except frappe.DoesNotExistError: | |||||
pass | |||||
if not self.is_new(): | if not self.is_new(): | ||||
self.setup_fields_to_fetch() | self.setup_fields_to_fetch() | ||||
@@ -224,8 +223,9 @@ class DocType(Document): | |||||
global_search_fields_after_update.append('name') | global_search_fields_after_update.append('name') | ||||
if set(global_search_fields_before_update) != set(global_search_fields_after_update): | if set(global_search_fields_before_update) != set(global_search_fields_after_update): | ||||
now = (not frappe.request) or frappe.flags.in_test or frappe.flags.in_install | |||||
frappe.enqueue('frappe.utils.global_search.rebuild_for_doctype', | frappe.enqueue('frappe.utils.global_search.rebuild_for_doctype', | ||||
now=frappe.flags.in_test or frappe.flags.in_install, doctype=self.name) | |||||
now=now, doctype=self.name) | |||||
def run_module_method(self, method): | def run_module_method(self, method): | ||||
from frappe.modules import load_doctype_module | from frappe.modules import load_doctype_module | ||||
@@ -1432,7 +1432,7 @@ | |||||
"currency_name": "Pataca", | "currency_name": "Pataca", | ||||
"number_format": "#,###.##" | "number_format": "#,###.##" | ||||
}, | }, | ||||
"Macedonia, Republic of": { | |||||
"Macedonia": { | |||||
"code": "mk", | "code": "mk", | ||||
"currency": "MKD", | "currency": "MKD", | ||||
"currency_fraction": "Deni", | "currency_fraction": "Deni", | ||||
@@ -14,10 +14,6 @@ default_fields = ('doctype','name','owner','creation','modified','modified_by', | |||||
'parent','parentfield','parenttype','idx','docstatus') | 'parent','parentfield','parenttype','idx','docstatus') | ||||
optional_fields = ("_user_tags", "_comments", "_assign", "_liked_by", "_seen") | optional_fields = ("_user_tags", "_comments", "_assign", "_liked_by", "_seen") | ||||
def rename(doctype, old, new, debug=False): | |||||
import frappe.model.rename_doc | |||||
frappe.model.rename_doc.rename_doc(doctype, old, new, debug) | |||||
def copytables(srctype, src, srcfield, tartype, tar, tarfield, srcfields, tarfields=[]): | def copytables(srctype, src, srcfield, tartype, tar, tarfield, srcfields, tarfields=[]): | ||||
if not tarfields: | if not tarfields: | ||||
tarfields = srcfields | tarfields = srcfields | ||||
@@ -160,7 +160,7 @@ class Document(BaseDocument): | |||||
frappe.msgprint(msg) | frappe.msgprint(msg) | ||||
raise frappe.PermissionError(msg) | raise frappe.PermissionError(msg) | ||||
def insert(self, ignore_permissions=None): | |||||
def insert(self, ignore_permissions=None, ignore_if_duplicate=False, ignore_mandatory=None): | |||||
"""Insert the document in the database (as a new document). | """Insert the document in the database (as a new document). | ||||
This will check for user permissions and execute `before_insert`, | This will check for user permissions and execute `before_insert`, | ||||
`validate`, `on_update`, `after_insert` methods if they are written. | `validate`, `on_update`, `after_insert` methods if they are written. | ||||
@@ -174,6 +174,9 @@ class Document(BaseDocument): | |||||
if ignore_permissions!=None: | if ignore_permissions!=None: | ||||
self.flags.ignore_permissions = ignore_permissions | self.flags.ignore_permissions = ignore_permissions | ||||
if ignore_mandatory!=None: | |||||
self.flags.ignore_mandatory = ignore_mandatory | |||||
self.set("__islocal", True) | self.set("__islocal", True) | ||||
self.check_permission("create") | self.check_permission("create") | ||||
@@ -198,7 +201,11 @@ class Document(BaseDocument): | |||||
if getattr(self.meta, "issingle", 0): | if getattr(self.meta, "issingle", 0): | ||||
self.update_single(self.get_valid_dict()) | self.update_single(self.get_valid_dict()) | ||||
else: | else: | ||||
self.db_insert() | |||||
try: | |||||
self.db_insert() | |||||
except frappe.DuplicateEntryError, e: | |||||
if not ignore_if_duplicate: | |||||
raise e | |||||
# children | # children | ||||
for d in self.get_all_children(): | for d in self.get_all_children(): | ||||
@@ -10,7 +10,7 @@ from frappe.model.dynamic_links import get_dynamic_link_map | |||||
from frappe.utils.password import rename_password | from frappe.utils.password import rename_password | ||||
@frappe.whitelist() | @frappe.whitelist() | ||||
def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=False): | |||||
def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=False, ignore_if_exists=False): | |||||
""" | """ | ||||
Renames a doc(dt, old) to doc(dt, new) and | Renames a doc(dt, old) to doc(dt, new) and | ||||
updates all linked fields of type "Link" | updates all linked fields of type "Link" | ||||
@@ -18,6 +18,9 @@ def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=F | |||||
if not frappe.db.exists(doctype, old): | if not frappe.db.exists(doctype, old): | ||||
return | return | ||||
if ignore_if_exists and frappe.db.exists(doctype, new): | |||||
return | |||||
force = cint(force) | force = cint(force) | ||||
merge = cint(merge) | merge = cint(merge) | ||||
@@ -159,3 +159,4 @@ frappe.patches.v7_2.set_in_standard_filter_property #1 | |||||
execute:frappe.db.sql("update tabCommunication set communication_date = creation where time(communication_date) = 0") | execute:frappe.db.sql("update tabCommunication set communication_date = creation where time(communication_date) = 0") | ||||
frappe.patches.v7_2.fix_email_queue_recipient | frappe.patches.v7_2.fix_email_queue_recipient | ||||
frappe.patches.v7_2.update_feedback_request | frappe.patches.v7_2.update_feedback_request | ||||
execute:frappe.rename_doc('Country', 'Macedonia, Republic of', 'Macedonia', ignore_if_exists=True) |
@@ -1,6 +1,7 @@ | |||||
frappe.socket = { | frappe.socket = { | ||||
open_tasks: {}, | open_tasks: {}, | ||||
open_docs: [], | open_docs: [], | ||||
emit_queue: [], | |||||
init: function() { | init: function() { | ||||
if (frappe.boot.disable_async) { | if (frappe.boot.disable_async) { | ||||
return; | return; | ||||
@@ -135,8 +136,11 @@ frappe.socket = { | |||||
}) | }) | ||||
}, | }, | ||||
doc_open: function(doctype, docname) { | doc_open: function(doctype, docname) { | ||||
// notify that the user has opened this doc | |||||
frappe.socket.socket.emit('doc_open', doctype, docname); | |||||
// notify that the user has opened this doc, if not already notified | |||||
if(frappe.socket.last_doc[0]!=doctype && frappe.socket.last_doc[0]!=docname) { | |||||
frappe.socket.socket.emit('doc_open', doctype, docname); | |||||
} | |||||
frappe.socket.last_doc = [doctype, docname]; | |||||
}, | }, | ||||
doc_close: function(doctype, docname) { | doc_close: function(doctype, docname) { | ||||
// notify that the user has closed this doc | // notify that the user has closed this doc | ||||