[fix] DuplicateEntryError for Warehouse Account Creation

This commit is contained in:
Anand Doshi
2016-06-26 17:43:14 +05:30
parent 110855e572
commit d6b734e2e3

View File

@@ -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()