Optimisation of warehouse_account_map (#13454)

This commit is contained in:
Nabin Hait 2018-04-02 10:30:17 +05:30 committed by GitHub
parent 84fe32d05c
commit edd320e338
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 21 deletions

View File

@ -101,7 +101,7 @@ def _make_test_records(verbose):
def get_inventory_account(company, warehouse=None):
account = None
if warehouse:
account = get_warehouse_account(warehouse, company)
account = get_warehouse_account(frappe.get_doc("Warehouse", warehouse))
else:
account = get_company_default_inventory_account(company)

View File

@ -15,33 +15,39 @@ def get_warehouse_account_map():
if not frappe.flags.warehouse_account_map or frappe.flags.in_test:
warehouse_account = frappe._dict()
for d in frappe.get_all('Warehouse', filters = {"is_group": 0},
fields = ["name", "account", "parent_warehouse", "company"]):
for d in frappe.get_all('Warehouse',
fields = ["name", "account", "parent_warehouse", "company"],
order_by="lft, rgt"):
if not d.account:
d.account = get_warehouse_account(d.name, d.company)
d.account = get_warehouse_account(d, warehouse_account)
if d.account:
d.account_currency = frappe.db.get_value('Account', d.account, 'account_currency')
d.account_currency = frappe.db.get_value('Account', d.account, 'account_currency', cache=True)
warehouse_account.setdefault(d.name, d)
frappe.flags.warehouse_account_map = warehouse_account
return frappe.flags.warehouse_account_map
def get_warehouse_account(warehouse, company):
lft, rgt = frappe.db.get_value("Warehouse", warehouse, ["lft", "rgt"])
account = frappe.db.sql("""
select
account from `tabWarehouse`
where
lft <= %s and rgt >= %s and company = %s
and account is not null and ifnull(account, '') !=''
order by lft desc limit 1""", (lft, rgt, company), as_list=1)
def get_warehouse_account(warehouse, warehouse_account=None):
account = warehouse.account
if not account and warehouse.parent_warehouse:
if warehouse_account:
account = warehouse_account.get(warehouse.parent_warehouse).account
else:
account = frappe.db.sql("""
select
account from `tabWarehouse`
where
lft <= %s and rgt >= %s and company = %s
and account is not null and ifnull(account, '') !=''
order by lft desc limit 1""", (warehouse.lft, warehouse.rgt, warehouse.company), as_list=1)
account = account[0][0] if account else None
account = account[0][0] if account else None
if not account:
account = get_company_default_inventory_account(company)
account = get_company_default_inventory_account(warehouse.company)
return account
def get_company_default_inventory_account(company):

View File

@ -3,7 +3,7 @@
from __future__ import unicode_literals
import frappe, erpnext
from frappe.utils import cint, validate_email_add
from frappe.utils import cint
from frappe import throw, _
from frappe.utils.nestedset import NestedSet
from erpnext.stock import get_warehouse_account
@ -22,7 +22,7 @@ class Warehouse(NestedSet):
def onload(self):
'''load account name for General Ledger Report'''
account = self.account or get_warehouse_account(self.name, self.company)
account = self.account or get_warehouse_account(self)
if account:
self.set_onload('account', account)