mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-03 21:48:27 +00:00
[fix] DuplicateEntryError for Warehouse Account Creation
This commit is contained in:
@@ -9,7 +9,7 @@ from frappe.utils.nestedset import NestedSet
|
|||||||
|
|
||||||
class Warehouse(NestedSet):
|
class Warehouse(NestedSet):
|
||||||
nsm_parent_field = 'parent_warehouse'
|
nsm_parent_field = 'parent_warehouse'
|
||||||
|
|
||||||
def autoname(self):
|
def autoname(self):
|
||||||
suffix = " - " + frappe.db.get_value("Company", self.company, "abbr")
|
suffix = " - " + frappe.db.get_value("Company", self.company, "abbr")
|
||||||
if not self.warehouse_name.endswith(suffix):
|
if not self.warehouse_name.endswith(suffix):
|
||||||
@@ -53,6 +53,7 @@ class Warehouse(NestedSet):
|
|||||||
if not self.get_account(self.name):
|
if not self.get_account(self.name):
|
||||||
if self.get("__islocal") or not frappe.db.get_value(
|
if self.get("__islocal") or not frappe.db.get_value(
|
||||||
"Stock Ledger Entry", {"warehouse": self.name}):
|
"Stock Ledger Entry", {"warehouse": self.name}):
|
||||||
|
|
||||||
self.validate_parent_account()
|
self.validate_parent_account()
|
||||||
ac_doc = frappe.get_doc({
|
ac_doc = frappe.get_doc({
|
||||||
"doctype": "Account",
|
"doctype": "Account",
|
||||||
@@ -66,16 +67,23 @@ class Warehouse(NestedSet):
|
|||||||
"freeze_account": "No"
|
"freeze_account": "No"
|
||||||
})
|
})
|
||||||
ac_doc.flags.ignore_permissions = True
|
ac_doc.flags.ignore_permissions = True
|
||||||
ac_doc.insert()
|
|
||||||
msgprint(_("Account head {0} created").format(ac_doc.name))
|
try:
|
||||||
|
ac_doc.insert()
|
||||||
|
msgprint(_("Account head {0} created").format(ac_doc.name))
|
||||||
|
|
||||||
|
except frappe.DuplicateEntryError, e:
|
||||||
|
if not (e.args and e.args[0]=='Account'):
|
||||||
|
# if this is not due to creation of Account
|
||||||
|
raise
|
||||||
|
|
||||||
def validate_parent_account(self):
|
def validate_parent_account(self):
|
||||||
if not self.company:
|
if not self.company:
|
||||||
frappe.throw(_("Warehouse {0}: Company is mandatory").format(self.name))
|
frappe.throw(_("Warehouse {0}: Company is mandatory").format(self.name))
|
||||||
|
|
||||||
if not self.create_account_under:
|
if not self.create_account_under:
|
||||||
parent_account = frappe.db.sql("""select name from tabAccount
|
parent_account = frappe.db.sql("""select name from tabAccount
|
||||||
where account_type='Stock' and company=%s and is_group=1
|
where account_type='Stock' and company=%s and is_group=1
|
||||||
and (warehouse is null or warehouse = '')""", self.company)
|
and (warehouse is null or warehouse = '')""", self.company)
|
||||||
|
|
||||||
if parent_account:
|
if parent_account:
|
||||||
@@ -86,7 +94,7 @@ class Warehouse(NestedSet):
|
|||||||
elif frappe.db.get_value("Account", self.create_account_under, "company") != self.company:
|
elif frappe.db.get_value("Account", self.create_account_under, "company") != self.company:
|
||||||
frappe.throw(_("Warehouse {0}: Parent account {1} does not bolong to the company {2}")
|
frappe.throw(_("Warehouse {0}: Parent account {1} does not bolong to the company {2}")
|
||||||
.format(self.name, self.create_account_under, self.company))
|
.format(self.name, self.create_account_under, self.company))
|
||||||
|
|
||||||
def update_nsm_model(self):
|
def update_nsm_model(self):
|
||||||
frappe.utils.nestedset.update_nsm(self)
|
frappe.utils.nestedset.update_nsm(self)
|
||||||
|
|
||||||
@@ -108,10 +116,10 @@ class Warehouse(NestedSet):
|
|||||||
if frappe.db.sql("""select name from `tabStock Ledger Entry`
|
if frappe.db.sql("""select name from `tabStock Ledger Entry`
|
||||||
where warehouse = %s""", self.name):
|
where warehouse = %s""", self.name):
|
||||||
throw(_("Warehouse can not be deleted as stock ledger entry exists for this warehouse."))
|
throw(_("Warehouse can not be deleted as stock ledger entry exists for this warehouse."))
|
||||||
|
|
||||||
if frappe.db.sql("""select name from `tabWarehouse` where parent_warehouse = %s""", self.name):
|
if frappe.db.sql("""select name from `tabWarehouse` where parent_warehouse = %s""", self.name):
|
||||||
throw(_("Child warehouse exists for this warehouse. You can not delete this warehouse."))
|
throw(_("Child warehouse exists for this warehouse. You can not delete this warehouse."))
|
||||||
|
|
||||||
self.update_nsm_model()
|
self.update_nsm_model()
|
||||||
|
|
||||||
def before_rename(self, olddn, newdn, merge=False):
|
def before_rename(self, olddn, newdn, merge=False):
|
||||||
@@ -179,10 +187,10 @@ def get_children():
|
|||||||
from erpnext.stock.utils import get_stock_value_on
|
from erpnext.stock.utils import get_stock_value_on
|
||||||
doctype = frappe.local.form_dict.get('doctype')
|
doctype = frappe.local.form_dict.get('doctype')
|
||||||
company = frappe.local.form_dict.get('company')
|
company = frappe.local.form_dict.get('company')
|
||||||
|
|
||||||
parent_field = 'parent_' + doctype.lower().replace(' ', '_')
|
parent_field = 'parent_' + doctype.lower().replace(' ', '_')
|
||||||
parent = frappe.form_dict.get("parent") or ""
|
parent = frappe.form_dict.get("parent") or ""
|
||||||
|
|
||||||
if parent == "Warehouses":
|
if parent == "Warehouses":
|
||||||
parent = ""
|
parent = ""
|
||||||
|
|
||||||
@@ -193,23 +201,23 @@ def get_children():
|
|||||||
and ifnull(`{parent_field}`,'') = %s and `company` = %s
|
and ifnull(`{parent_field}`,'') = %s and `company` = %s
|
||||||
order by name""".format(doctype=frappe.db.escape(doctype), parent_field=frappe.db.escape(parent_field)),
|
order by name""".format(doctype=frappe.db.escape(doctype), parent_field=frappe.db.escape(parent_field)),
|
||||||
(parent, company), as_dict=1)
|
(parent, company), as_dict=1)
|
||||||
|
|
||||||
# return warehouses
|
# return warehouses
|
||||||
for wh in warehouses:
|
for wh in warehouses:
|
||||||
wh["balance"] = get_stock_value_on(warehouse=wh.value)
|
wh["balance"] = get_stock_value_on(warehouse=wh.value)
|
||||||
return warehouses
|
return warehouses
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def add_node():
|
def add_node():
|
||||||
doctype = frappe.form_dict.get('doctype')
|
doctype = frappe.form_dict.get('doctype')
|
||||||
company = frappe.form_dict.get('company')
|
company = frappe.form_dict.get('company')
|
||||||
parent_field = 'parent_' + doctype.lower().replace(' ', '_')
|
parent_field = 'parent_' + doctype.lower().replace(' ', '_')
|
||||||
name_field = doctype.lower().replace(' ', '_') + '_name'
|
name_field = doctype.lower().replace(' ', '_') + '_name'
|
||||||
|
|
||||||
doc = frappe.new_doc(doctype)
|
doc = frappe.new_doc(doctype)
|
||||||
|
|
||||||
parent = frappe.form_dict['parent']
|
parent = frappe.form_dict['parent']
|
||||||
|
|
||||||
if cint(frappe.form_dict['is_root']):
|
if cint(frappe.form_dict['is_root']):
|
||||||
parent = None
|
parent = None
|
||||||
|
|
||||||
@@ -219,5 +227,5 @@ def add_node():
|
|||||||
"is_group": frappe.form_dict['is_group'],
|
"is_group": frappe.form_dict['is_group'],
|
||||||
"company": company
|
"company": company
|
||||||
})
|
})
|
||||||
|
|
||||||
doc.save()
|
doc.save()
|
||||||
|
|||||||
Reference in New Issue
Block a user