|
@@ -3,6 +3,8 @@ |
|
|
import hashlib |
|
|
import hashlib |
|
|
import json |
|
|
import json |
|
|
import time |
|
|
import time |
|
|
|
|
|
from typing import List |
|
|
|
|
|
|
|
|
from werkzeug.exceptions import NotFound |
|
|
from werkzeug.exceptions import NotFound |
|
|
|
|
|
|
|
|
import frappe |
|
|
import frappe |
|
@@ -21,8 +23,6 @@ from frappe.core.doctype.server_script.server_script_utils import run_server_scr |
|
|
from frappe.utils.data import get_absolute_url |
|
|
from frappe.utils.data import get_absolute_url |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# once_only validation |
|
|
|
|
|
# methods |
|
|
|
|
|
|
|
|
|
|
|
def get_doc(*args, **kwargs): |
|
|
def get_doc(*args, **kwargs): |
|
|
"""returns a frappe.model.Document object. |
|
|
"""returns a frappe.model.Document object. |
|
@@ -179,7 +179,7 @@ class Document(BaseDocument): |
|
|
if not self.has_permission(permtype): |
|
|
if not self.has_permission(permtype): |
|
|
self.raise_no_permission_to(permlevel or permtype) |
|
|
self.raise_no_permission_to(permlevel or permtype) |
|
|
|
|
|
|
|
|
def has_permission(self, permtype="read", verbose=False): |
|
|
|
|
|
|
|
|
def has_permission(self, permtype="read", verbose=False) -> bool: |
|
|
"""Call `frappe.has_permission` if `self.flags.ignore_permissions` |
|
|
"""Call `frappe.has_permission` if `self.flags.ignore_permissions` |
|
|
is not set. |
|
|
is not set. |
|
|
|
|
|
|
|
@@ -195,8 +195,15 @@ class Document(BaseDocument): |
|
|
frappe.flags.error_message = _('Insufficient Permission for {0}').format(self.doctype) |
|
|
frappe.flags.error_message = _('Insufficient Permission for {0}').format(self.doctype) |
|
|
raise frappe.PermissionError |
|
|
raise frappe.PermissionError |
|
|
|
|
|
|
|
|
def insert(self, ignore_permissions=None, ignore_links=None, ignore_if_duplicate=False, |
|
|
|
|
|
ignore_mandatory=None, set_name=None, set_child_names=True): |
|
|
|
|
|
|
|
|
def insert( |
|
|
|
|
|
self, |
|
|
|
|
|
ignore_permissions=None, |
|
|
|
|
|
ignore_links=None, |
|
|
|
|
|
ignore_if_duplicate=False, |
|
|
|
|
|
ignore_mandatory=None, |
|
|
|
|
|
set_name=None, |
|
|
|
|
|
set_child_names=True, |
|
|
|
|
|
) -> "Document": |
|
|
"""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. |
|
@@ -276,7 +283,7 @@ class Document(BaseDocument): |
|
|
"""Wrapper for _save""" |
|
|
"""Wrapper for _save""" |
|
|
return self._save(*args, **kwargs) |
|
|
return self._save(*args, **kwargs) |
|
|
|
|
|
|
|
|
def _save(self, ignore_permissions=None, ignore_version=None): |
|
|
|
|
|
|
|
|
def _save(self, ignore_permissions=None, ignore_version=None) -> "Document": |
|
|
"""Save the current document in the database in the **DocType**'s table or |
|
|
"""Save the current document in the database in the **DocType**'s table or |
|
|
`tabSingles` (for single types). |
|
|
`tabSingles` (for single types). |
|
|
|
|
|
|
|
@@ -498,8 +505,7 @@ class Document(BaseDocument): |
|
|
self._save_passwords() |
|
|
self._save_passwords() |
|
|
self.validate_workflow() |
|
|
self.validate_workflow() |
|
|
|
|
|
|
|
|
children = self.get_all_children() |
|
|
|
|
|
for d in children: |
|
|
|
|
|
|
|
|
for d in self.get_all_children(): |
|
|
d._validate_data_fields() |
|
|
d._validate_data_fields() |
|
|
d._validate_selects() |
|
|
d._validate_selects() |
|
|
d._validate_non_negative() |
|
|
d._validate_non_negative() |
|
@@ -840,7 +846,7 @@ class Document(BaseDocument): |
|
|
frappe.throw(_("Cannot link cancelled document: {0}").format(msg), |
|
|
frappe.throw(_("Cannot link cancelled document: {0}").format(msg), |
|
|
frappe.CancelledLinkError) |
|
|
frappe.CancelledLinkError) |
|
|
|
|
|
|
|
|
def get_all_children(self, parenttype=None): |
|
|
|
|
|
|
|
|
def get_all_children(self, parenttype=None) -> List["Document"]: |
|
|
"""Returns all children documents from **Table** type fields in a list.""" |
|
|
"""Returns all children documents from **Table** type fields in a list.""" |
|
|
|
|
|
|
|
|
children = [] |
|
|
children = [] |
|
@@ -1399,6 +1405,3 @@ def execute_action(doctype, name, action, **kwargs): |
|
|
|
|
|
|
|
|
doc.add_comment('Comment', _('Action Failed') + '<br><br>' + msg) |
|
|
doc.add_comment('Comment', _('Action Failed') + '<br><br>' + msg) |
|
|
doc.notify_update() |
|
|
doc.notify_update() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|