blob: 06f424e5b2f121e3ce457041fb5b89e041a8bc9c [file] [log] [blame]
Anand Doshi486f9df2012-07-19 13:40:31 +05301from __future__ import unicode_literals
Nabin Hait6d7b0ce2017-06-15 11:09:27 +05302import frappe
Nabin Haitd2c5b502018-10-08 18:19:53 +05303from frappe import _
Nabin Hait6d7b0ce2017-06-15 11:09:27 +05304
Anand Doshi7e0479b2012-04-05 18:27:56 +05305install_docs = [
Rushabh Mehta94157332015-07-13 15:06:12 +05306 {"doctype":"Role", "role_name":"Stock Manager", "name":"Stock Manager"},
7 {"doctype":"Role", "role_name":"Item Manager", "name":"Item Manager"},
8 {"doctype":"Role", "role_name":"Stock User", "name":"Stock User"},
Anand Doshi24e18562012-04-17 11:45:35 +05309 {"doctype":"Role", "role_name":"Quality Manager", "name":"Quality Manager"},
Saurabh6bc7b892016-07-14 14:03:19 +053010 {"doctype":"Item Group", "item_group_name":"All Item Groups", "is_group": 1},
Rushabh Mehta6f9915c2013-01-16 17:48:17 +053011 {"doctype":"Item Group", "item_group_name":"Default",
Saurabh6bc7b892016-07-14 14:03:19 +053012 "parent_item_group":"All Item Groups", "is_group": 0},
Anand Doshi7e0479b2012-04-05 18:27:56 +053013]
Nabin Hait6d7b0ce2017-06-15 11:09:27 +053014
15def get_warehouse_account_map():
16 if not frappe.flags.warehouse_account_map or frappe.flags.in_test:
17 warehouse_account = frappe._dict()
18
Nabin Haitedd320e2018-04-02 10:30:17 +053019 for d in frappe.get_all('Warehouse',
20 fields = ["name", "account", "parent_warehouse", "company"],
21 order_by="lft, rgt"):
Nabin Hait6d7b0ce2017-06-15 11:09:27 +053022 if not d.account:
Nabin Haitedd320e2018-04-02 10:30:17 +053023 d.account = get_warehouse_account(d, warehouse_account)
Nabin Hait6d7b0ce2017-06-15 11:09:27 +053024
25 if d.account:
Nabin Haitedd320e2018-04-02 10:30:17 +053026 d.account_currency = frappe.db.get_value('Account', d.account, 'account_currency', cache=True)
Nabin Hait6d7b0ce2017-06-15 11:09:27 +053027 warehouse_account.setdefault(d.name, d)
Nabin Haitedd320e2018-04-02 10:30:17 +053028
Nabin Hait6d7b0ce2017-06-15 11:09:27 +053029 frappe.flags.warehouse_account_map = warehouse_account
Nabin Haitedd320e2018-04-02 10:30:17 +053030
Nabin Hait6d7b0ce2017-06-15 11:09:27 +053031 return frappe.flags.warehouse_account_map
32
Nabin Haitedd320e2018-04-02 10:30:17 +053033def get_warehouse_account(warehouse, warehouse_account=None):
34 account = warehouse.account
35 if not account and warehouse.parent_warehouse:
36 if warehouse_account:
Nabin Haitd2c5b502018-10-08 18:19:53 +053037 if warehouse_account.get(warehouse.parent_warehouse):
38 account = warehouse_account.get(warehouse.parent_warehouse).account
39 else:
40 from frappe.utils.nestedset import rebuild_tree
41 rebuild_tree("Warehouse", "parent_warehouse")
Nabin Haitedd320e2018-04-02 10:30:17 +053042 else:
43 account = frappe.db.sql("""
44 select
45 account from `tabWarehouse`
46 where
47 lft <= %s and rgt >= %s and company = %s
48 and account is not null and ifnull(account, '') !=''
49 order by lft desc limit 1""", (warehouse.lft, warehouse.rgt, warehouse.company), as_list=1)
Nabin Hait6d7b0ce2017-06-15 11:09:27 +053050
Nabin Haitedd320e2018-04-02 10:30:17 +053051 account = account[0][0] if account else None
52
Nabin Hait9409edd2018-08-16 13:58:44 +053053 if not account and warehouse.company:
Nabin Haitedd320e2018-04-02 10:30:17 +053054 account = get_company_default_inventory_account(warehouse.company)
55
Nabin Haitd2c5b502018-10-08 18:19:53 +053056 if not account:
57 frappe.throw(_("Please set Account in Warehouse {0} or Default Inventory Account in Company {1}")
58 .format(warehouse, warehouse.company))
Nabin Hait6d7b0ce2017-06-15 11:09:27 +053059 return account
60
61def get_company_default_inventory_account(company):
Nabin Hait9409edd2018-08-16 13:58:44 +053062 return frappe.get_cached_value('Company', company, 'default_inventory_account')