fix: timeout error while loading warehouse tree
This commit is contained in:
parent
0612300631
commit
27f50d5852
@ -3,8 +3,9 @@
|
|||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import frappe, erpnext
|
import frappe, erpnext
|
||||||
from frappe.utils import cint, nowdate
|
from frappe.utils import cint, flt
|
||||||
from frappe import throw, _
|
from frappe import throw, _
|
||||||
|
from collections import defaultdict
|
||||||
from frappe.utils.nestedset import NestedSet
|
from frappe.utils.nestedset import NestedSet
|
||||||
from erpnext.stock import get_warehouse_account
|
from erpnext.stock import get_warehouse_account
|
||||||
from frappe.contacts.address_and_contact import load_address_and_contact
|
from frappe.contacts.address_and_contact import load_address_and_contact
|
||||||
@ -139,8 +140,6 @@ class Warehouse(NestedSet):
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_children(doctype, parent=None, company=None, is_root=False):
|
def get_children(doctype, parent=None, company=None, is_root=False):
|
||||||
from erpnext.stock.utils import get_stock_value_from_bin
|
|
||||||
|
|
||||||
if is_root:
|
if is_root:
|
||||||
parent = ""
|
parent = ""
|
||||||
|
|
||||||
@ -153,13 +152,48 @@ def get_children(doctype, parent=None, company=None, is_root=False):
|
|||||||
|
|
||||||
warehouses = frappe.get_list(doctype, fields=fields, filters=filters, order_by='name')
|
warehouses = frappe.get_list(doctype, fields=fields, filters=filters, order_by='name')
|
||||||
|
|
||||||
|
company_currency = ''
|
||||||
|
if company:
|
||||||
|
company_currency = frappe.get_cached_value('Company', company, 'default_currency')
|
||||||
|
|
||||||
|
warehouse_wise_value = get_warehouse_wise_stock_value(company)
|
||||||
|
|
||||||
# return warehouses
|
# return warehouses
|
||||||
for wh in warehouses:
|
for wh in warehouses:
|
||||||
wh["balance"] = get_stock_value_from_bin(warehouse=wh.value)
|
wh["balance"] = warehouse_wise_value.get(wh.value)
|
||||||
if company:
|
if company_currency:
|
||||||
wh["company_currency"] = frappe.db.get_value('Company', company, 'default_currency')
|
wh["company_currency"] = company_currency
|
||||||
return warehouses
|
return warehouses
|
||||||
|
|
||||||
|
def get_warehouse_wise_stock_value(company):
|
||||||
|
warehouses = frappe.get_all('Warehouse',
|
||||||
|
fields = ['name', 'parent_warehouse'], filters = {'company': company})
|
||||||
|
parent_warehouse = {d.name : d.parent_warehouse for d in warehouses}
|
||||||
|
|
||||||
|
filters = {'warehouse': ('in', [data.name for data in warehouses])}
|
||||||
|
bin_data = frappe.get_all('Bin', fields = ['sum(stock_value) as stock_value', 'warehouse'],
|
||||||
|
filters = filters, group_by = 'warehouse')
|
||||||
|
|
||||||
|
warehouse_wise_stock_value = defaultdict(float)
|
||||||
|
for row in bin_data:
|
||||||
|
if not row.stock_value:
|
||||||
|
continue
|
||||||
|
|
||||||
|
warehouse_wise_stock_value[row.warehouse] = row.stock_value
|
||||||
|
update_value_in_parent_warehouse(warehouse_wise_stock_value,
|
||||||
|
parent_warehouse, row.warehouse, row.stock_value)
|
||||||
|
|
||||||
|
return warehouse_wise_stock_value
|
||||||
|
|
||||||
|
def update_value_in_parent_warehouse(warehouse_wise_stock_value, parent_warehouse_dict, warehouse, stock_value):
|
||||||
|
parent_warehouse = parent_warehouse_dict.get(warehouse)
|
||||||
|
if not parent_warehouse:
|
||||||
|
return
|
||||||
|
|
||||||
|
warehouse_wise_stock_value[parent_warehouse] += flt(stock_value)
|
||||||
|
update_value_in_parent_warehouse(warehouse_wise_stock_value, parent_warehouse_dict,
|
||||||
|
parent_warehouse, stock_value)
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def add_node():
|
def add_node():
|
||||||
from frappe.desk.treeview import make_tree_args
|
from frappe.desk.treeview import make_tree_args
|
||||||
|
|||||||
@ -20,7 +20,7 @@ frappe.treeview_settings['Warehouse'] = {
|
|||||||
onrender: function(node) {
|
onrender: function(node) {
|
||||||
if (node.data && node.data.balance!==undefined) {
|
if (node.data && node.data.balance!==undefined) {
|
||||||
$('<span class="balance-area pull-right">'
|
$('<span class="balance-area pull-right">'
|
||||||
+ format_currency(Math.abs(node.data.balance), node.data.company_currency)
|
+ format_currency((node.data.balance), node.data.company_currency)
|
||||||
+ '</span>').insertBefore(node.$ul);
|
+ '</span>').insertBefore(node.$ul);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user