diff --git a/erpnext/__init__.py b/erpnext/__init__.py index f026b6adc9c..4479bf9af73 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -38,10 +38,7 @@ def get_company_currency(company): def set_perpetual_inventory(enable=1, company=None): if not company: - company = get_default_company() - - if frappe.flags.in_test: - company = "_Test Company" + company = "_Test Company" if frappe.flags.in_test else get_default_company() company = frappe.get_doc("Company", company) company.enable_perpetual_inventory = enable @@ -57,4 +54,23 @@ def encode_company_abbr(name, company): return " - ".join(parts) +def is_perpetual_inventory_enabled(company): + if not company: + company = "_Test Company" if frappe.flags.in_test else get_default_company() + if not hasattr(frappe.local, 'enable_perpetual_inventory'): + perpetual_inventory = get_company_wise_perptual_inventory() + frappe.local.enable_perpetual_inventory = perpetual_inventory + + if not frappe.local.enable_perpetual_inventory.get(company): + is_enabled = frappe.db.get_value("Company", company, "enable_perpetual_inventory") or 0 + frappe.local.enable_perpetual_inventory.setdefault(company, is_enabled) + + return frappe.local.enable_perpetual_inventory.get(company) + +def get_company_wise_perptual_inventory(): + company_dict = {} + for data in frappe.get_all('Company', fields = ["name", "enable_perpetual_inventory"]): + company_dict[data.name] = data.enable_perpetual_inventory + + return company_dict diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.js b/erpnext/accounts/doctype/pos_profile/pos_profile.js index 0927e81d6cc..03d84e9ad6f 100755 --- a/erpnext/accounts/doctype/pos_profile/pos_profile.js +++ b/erpnext/accounts/doctype/pos_profile/pos_profile.js @@ -39,7 +39,7 @@ frappe.ui.form.on('POS Profile', { toggle_display_account_head: function(frm) { frm.toggle_display('expense_account', - frappe.get_doc(":Company", frm.doc.company).enable_perpetual_inventory); + erpnext.is_perpetual_inventory_enabled(frm.doc.company)); } }) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index b391127f89a..00d5249a38a 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -164,7 +164,7 @@ class PurchaseInvoice(BuyingController): frappe.msgprint(_("Item Code required at Row No {0}").format(d.idx), raise_exception=True) def set_expense_account(self, for_validate=False): - auto_accounting_for_stock = frappe.db.get_value('Company', self.company, 'enable_perpetual_inventory') + auto_accounting_for_stock = erpnext.is_perpetual_inventory_enabled(self.company) if auto_accounting_for_stock: stock_not_billed_account = self.get_company_default("stock_received_but_not_billed") @@ -335,7 +335,7 @@ class PurchaseInvoice(BuyingController): delete_gl_entries(voucher_type=self.doctype, voucher_no=self.name) def get_gl_entries(self, warehouse_account=None): - self.auto_accounting_for_stock = frappe.db.get_value('Company', self.company, 'enable_perpetual_inventory') + self.auto_accounting_for_stock = erpnext.is_perpetual_inventory_enabled(self.company) self.stock_received_but_not_billed = self.get_company_default("stock_received_but_not_billed") self.expenses_included_in_valuation = self.get_company_default("expenses_included_in_valuation") self.negative_expense_to_be_booked = 0.0 diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index 8094e996001..8bbd6c5f055 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import unittest -import frappe +import frappe, erpnext import frappe.model from frappe.utils import cint, flt, today, nowdate import frappe.defaults @@ -28,7 +28,7 @@ class TestPurchaseInvoice(unittest.TestCase): def test_gl_entries_without_perpetual_inventory(self): wrapper = frappe.copy_doc(test_records[0]) set_perpetual_inventory(0, wrapper.company) - self.assertTrue(not cint(frappe.db.get_value('Company', wrapper.company, 'enable_perpetual_inventory'))) + self.assertTrue(not cint(erpnext.is_perpetual_inventory_enabled(wrapper.company))) wrapper.insert() wrapper.submit() wrapper.load_from_db() @@ -53,7 +53,7 @@ class TestPurchaseInvoice(unittest.TestCase): def test_gl_entries_with_perpetual_inventory(self): pi = frappe.copy_doc(test_records[1]) set_perpetual_inventory(1, pi.company) - self.assertTrue(cint(frappe.db.get_value('Company', pi.company, 'enable_perpetual_inventory')), 1) + self.assertTrue(cint(erpnext.is_perpetual_inventory_enabled(pi.company)), 1) pi.insert() pi.submit() @@ -85,7 +85,7 @@ class TestPurchaseInvoice(unittest.TestCase): def test_gl_entries_with_perpetual_inventory_against_pr(self): pr = frappe.copy_doc(pr_test_records[0]) set_perpetual_inventory(1, pr.company) - self.assertTrue(cint(frappe.db.get_value('Company', pr.company, 'enable_perpetual_inventory')), 1) + self.assertTrue(cint(erpnext.is_perpetual_inventory_enabled(pr.company)), 1) pr.submit() pi = frappe.copy_doc(test_records[1]) @@ -132,7 +132,7 @@ class TestPurchaseInvoice(unittest.TestCase): def test_gl_entries_with_aia_for_non_stock_items(self): pi = frappe.copy_doc(test_records[1]) set_perpetual_inventory(1, pi.company) - self.assertTrue(cint(frappe.db.get_value('Company', pi.company, 'enable_perpetual_inventory')), 1) + self.assertTrue(cint(erpnext.is_perpetual_inventory_enabled(pi.company)), 1) pi.get("items")[0].item_code = "_Test Non Stock Item" pi.get("items")[0].expense_account = "_Test Account Cost for Goods Sold - _TC" pi.get("taxes").pop(0) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index 595b7bf8d1c..10bd3a0b4ea 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -492,7 +492,7 @@ frappe.ui.form.on('Sales Invoice', { // expense account frm.fields_dict['items'].grid.get_field('expense_account').get_query = function(doc) { - if (frappe.get_doc(":Company", doc.company).enable_perpetual_inventory) { + if (erpnext.is_perpetual_inventory_enabled(doc.company)) { return { filters: { 'report_type': 'Profit and Loss', diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index b7aca8f1880..85c50790fbb 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -2,7 +2,7 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals -import frappe +import frappe, erpnext import frappe.defaults from frappe.utils import cint, flt from frappe import _, msgprint, throw @@ -559,7 +559,7 @@ class SalesInvoice(SellingController): throw(_("Delivery Note {0} is not submitted").format(d.delivery_note)) def make_gl_entries(self, gl_entries=None, repost_future_gle=True, from_repost=False): - auto_accounting_for_stock = frappe.db.get_value('Company', self.company, 'enable_perpetual_inventory') + auto_accounting_for_stock = erpnext.is_perpetual_inventory_enabled(self.company) if not self.grand_total: return @@ -675,7 +675,7 @@ class SalesInvoice(SellingController): # expense account gl entries if cint(self.update_stock) and \ - frappe.db.get_value('Company', self.company, 'enable_perpetual_inventory'): + erpnext.is_perpetual_inventory_enabled(self.company): gl_entries += super(SalesInvoice, self).get_gl_entries() def make_pos_gl_entries(self, gl_entries): diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index a5f7ad2472d..ceae61cd869 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -2,7 +2,7 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals -import frappe +import frappe, erpnext from frappe.utils import flt, cstr, cint from frappe import _ from frappe.model.meta import get_field_precision @@ -101,7 +101,7 @@ def make_entry(args, adv_adj, update_outstanding, from_repost=False): gle.submit() def validate_account_for_perpetual_inventory(gl_map): - if cint(frappe.db.get_value("Company", gl_map[0].company, 'enable_perpetual_inventory')) \ + if cint(erpnext.is_perpetual_inventory_enabled(gl_map[0].company)) \ and gl_map[0].voucher_type=="Journal Entry": aii_accounts = [d[0] for d in frappe.db.sql("""select name from tabAccount where account_type = 'Stock' and is_group=0""")] diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index b3c2f8c10ab..605881c8392 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -2,7 +2,7 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals -import frappe +import frappe, erpnext from frappe.utils import cint, flt, cstr from frappe import msgprint, _ import frappe.defaults @@ -21,7 +21,7 @@ class StockController(AccountsController): if self.docstatus == 2: delete_gl_entries(voucher_type=self.doctype, voucher_no=self.name) - if cint(frappe.db.get_value('Company', self.company, 'enable_perpetual_inventory')): + if cint(erpnext.is_perpetual_inventory_enabled(self.company)): warehouse_account = get_warehouse_account_map() if self.docstatus==1: diff --git a/erpnext/patches/v7_0/create_warehouse_nestedset.py b/erpnext/patches/v7_0/create_warehouse_nestedset.py index 964df1f18de..06766b9f696 100644 --- a/erpnext/patches/v7_0/create_warehouse_nestedset.py +++ b/erpnext/patches/v7_0/create_warehouse_nestedset.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -import frappe +import frappe, erpnext from frappe import _ from frappe.utils import cint from frappe.utils.nestedset import rebuild_tree @@ -51,7 +51,7 @@ def check_is_warehouse_associated_with_company(): def make_warehouse_nestedset(company=None): validate_parent_account_for_warehouse(company) stock_account_group = get_stock_account_group(company.name) - enable_perpetual_inventory = cint(frappe.db.get_value("Company", company, 'enable_perpetual_inventory')) or 0 + enable_perpetual_inventory = cint(erpnext.is_perpetual_inventory_enabled(company)) or 0 if not stock_account_group and enable_perpetual_inventory: return @@ -73,7 +73,7 @@ def validate_parent_account_for_warehouse(company=None): if not company: return - if cint(frappe.db.get_value("Company", company, 'enable_perpetual_inventory')): + if cint(erpnext.is_perpetual_inventory_enabled(company)): parent_account = frappe.db.sql("""select name from tabAccount where account_type='Stock' and company=%s and is_group=1 and (warehouse is null or warehouse = '')""", company.name) diff --git a/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py b/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py index 5a98ab17043..d0e816a1a27 100644 --- a/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py +++ b/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py @@ -2,7 +2,7 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals -import frappe +import frappe, erpnext def execute(): frappe.reload_doctype("Account") @@ -10,7 +10,7 @@ def execute(): warehouses = frappe.db.sql_list("""select name, company from tabAccount where account_type = 'Stock' and is_group = 0 and (warehouse is null or warehouse = '')""", as_dict) - warehouses = [d.name for d in warehouses if frappe.db.get_value('Company', d.company, 'enable_perpetual_inventory')] + warehouses = [d.name for d in warehouses if erpnext.is_perpetual_inventory_enabled(d.company)] if len(warehouses) > 0: warehouses = set_warehouse_for_stock_account(warehouses) if not warehouses: diff --git a/erpnext/patches/v8_0/move_perpetual_inventory_setting.py b/erpnext/patches/v8_0/move_perpetual_inventory_setting.py index 3010b4dec29..594a15c5000 100644 --- a/erpnext/patches/v8_0/move_perpetual_inventory_setting.py +++ b/erpnext/patches/v8_0/move_perpetual_inventory_setting.py @@ -7,4 +7,7 @@ import frappe def execute(): frappe.reload_doctype('Company') enabled = frappe.db.get_single_value("Accounts Settings", "auto_accounting_for_stock") or 0 - frappe.db.sql("""update tabCompany set enable_perpetual_inventory = {0}""".format(enabled)) \ No newline at end of file + for data in frappe.get_all('Company', fields = ["name"]): + doc = frappe.get_doc('Company', data.name) + doc.enable_perpetual_inventory = enabled + doc.save(ignore_permissions=True) \ No newline at end of file diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js index 965086235f5..eaf064b26c8 100644 --- a/erpnext/public/js/utils.js +++ b/erpnext/public/js/utils.js @@ -31,6 +31,12 @@ $.extend(erpnext, { } }, + is_perpetual_inventory_enabled: function(company) { + if(company) { + return frappe.get_doc(":Company", company).enable_perpetual_inventory + } + }, + setup_serial_no: function() { var grid_row = cur_frm.open_grid_row(); if(!grid_row || !grid_row.grid_form.fields_dict.serial_no || diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index a1799595423..b333e87e846 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -33,6 +33,7 @@ class Company(Document): self.validate_default_accounts() self.validate_currency() self.validate_coa_input() + self.validate_perpetual_inventory() def validate_abbr(self): if not self.abbr: @@ -139,6 +140,17 @@ class Company(Document): if not self.chart_of_accounts: self.chart_of_accounts = "Standard" + def validate_perpetual_inventory(self): + if not self.get("__islocal"): + if cint(self.enable_perpetual_inventory) == 1 and not self.default_inventory_account: + frappe.msgprint(_("Warning: Set default inventory account for perpetual inventory"), alert=True) + + enable_perpetual_inventory = frappe.db.get_value('Company', self.name, 'enable_perpetual_inventory') + if enable_perpetual_inventory != self.enable_perpetual_inventory: + if hasattr(frappe.local, 'enable_perpetual_inventory') and \ + self.name in frappe.local.enable_perpetual_inventory: + del frappe.local.enable_perpetual_inventory[self.name] + def set_default_accounts(self): self._set_default_account("default_cash_account", "Cash") self._set_default_account("default_bank_account", "Bank") diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js index 35658c63d8a..de47fde1f2f 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.js +++ b/erpnext/stock/doctype/delivery_note/delivery_note.js @@ -40,7 +40,7 @@ frappe.ui.form.on("Delivery Note", { frm.set_query('expense_account', 'items', function(doc, cdt, cdn) { - if (frappe.get_doc(":Company", doc.company).enable_perpetual_inventory) { + if (erpnext.is_perpetual_inventory_enabled(doc.company)) { return { filters: { "report_type": "Profit and Loss", @@ -52,7 +52,7 @@ frappe.ui.form.on("Delivery Note", { }); frm.set_query('cost_center', 'items', function(doc, cdt, cdn) { - if (frappe.get_doc(":Company", doc.company).enable_perpetual_inventory) { + if (erpnext.is_perpetual_inventory_enabled(doc.company)) { return { filters: { 'company': doc.company, @@ -141,7 +141,7 @@ erpnext.stock.DeliveryNoteController = erpnext.selling.SellingController.extend( if (doc.docstatus==1) { this.show_stock_ledger(); - if (frappe.get_doc(":Company", doc.company).enable_perpetual_inventory) { + if (erpnext.is_perpetual_inventory_enabled(doc.company)) { this.show_general_ledger(); } if (this.frm.has_perm("submit") && doc.status !== "Closed") { @@ -238,7 +238,7 @@ frappe.ui.form.on('Delivery Note', { unhide_account_head: function(frm) { // unhide expense_account and cost_center if perpetual inventory is enabled in the company - var aii_enabled = frappe.get_doc(":Company", frm.doc.company).enable_perpetual_inventory + var aii_enabled = erpnext.is_perpetual_inventory_enabled(frm.doc.company) frm.fields_dict["items"].grid.set_column_disp(["expense_account", "cost_center"], aii_enabled); } }) diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js index fc92486c3bb..a38b222d89b 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js @@ -46,7 +46,7 @@ frappe.ui.form.on("Purchase Receipt", { }, toggle_display_account_head: function(frm) { - var enabled = frappe.get_doc(":Company", frm.doc.company).enable_perpetual_inventory + var enabled = erpnext.is_perpetual_inventory_enabled(frm.doc.company) frm.fields_dict["items"].grid.set_column_disp(["cost_center"], enabled); } }); @@ -62,7 +62,7 @@ erpnext.stock.PurchaseReceiptController = erpnext.buying.BuyingController.extend this._super(); if(this.frm.doc.docstatus===1) { this.show_stock_ledger(); - if (frappe.get_doc(":Company", doc.company).enable_perpetual_inventory) { + if (erpnext.is_perpetual_inventory_enabled(doc.company)) { this.show_general_ledger(); } } diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py index fe157e087d4..d8cd27174dc 100644 --- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import unittest -import frappe +import frappe, erpnext import frappe.defaults from frappe.utils import cint, flt, cstr, today from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice @@ -53,7 +53,7 @@ class TestPurchaseReceipt(unittest.TestCase): def test_purchase_receipt_gl_entry(self): pr = frappe.copy_doc(test_records[0]) set_perpetual_inventory(1, pr.company) - self.assertEqual(cint(frappe.db.get_value("Company", pr.company, 'enable_perpetual_inventory')), 1) + self.assertEqual(cint(erpnext.is_perpetual_inventory_enabled(pr.company)), 1) pr.insert() pr.submit() diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js index f1dbeeac739..74ac58966fe 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.js +++ b/erpnext/stock/doctype/stock_entry/stock_entry.js @@ -104,7 +104,7 @@ frappe.ui.form.on('Stock Entry', { }); }, toggle_display_account_head: function(frm) { - var enabled = frappe.get_doc(":Company", frm.doc.company).enable_perpetual_inventory; + var enabled = erpnext.is_perpetual_inventory_enabled(frm.doc.company); frm.fields_dict["items"].grid.set_column_disp(["cost_center", "expense_account"], enabled); } }) @@ -222,12 +222,12 @@ erpnext.stock.StockEntry = erpnext.stock.StockController.extend({ }; }); - if(me.frm.doc.company && frappe.get_doc(":Company", me.frm.doc.company).enable_perpetual_inventory) { + if(me.frm.doc.company && erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) { this.frm.add_fetch("company", "stock_adjustment_account", "expense_account"); } this.frm.fields_dict.items.grid.get_field('expense_account').get_query = function() { - if (frappe.get_doc(":Company", me.frm.doc.company).enable_perpetual_inventory) { + if (erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) { return { filters: { "company": me.frm.doc.company, @@ -265,7 +265,7 @@ erpnext.stock.StockEntry = erpnext.stock.StockController.extend({ this.toggle_related_fields(this.frm.doc); this.toggle_enable_bom(); this.show_stock_ledger(); - if (this.frm.doc.docstatus===1 && frappe.get_doc(":Company", this.frm.doc.company).enable_perpetual_inventory) { + if (this.frm.doc.docstatus===1 && erpnext.is_perpetual_inventory_enabled(this.frm.doc.company)) { this.show_general_ledger(); } erpnext.hide_company(); @@ -283,7 +283,7 @@ erpnext.stock.StockEntry = erpnext.stock.StockController.extend({ set_default_account: function(callback) { var me = this; - if(this.frm.doc.company && frappe.get_doc(":Company", this.frm.doc.company).enable_perpetual_inventory) { + if(this.frm.doc.company && erpnext.is_perpetual_inventory_enabled(this.frm.doc.company)) { return this.frm.call({ method: "erpnext.accounts.utils.get_company_default", args: { diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js index 2a6ef7be611..a86dea76839 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js @@ -113,7 +113,7 @@ frappe.ui.form.on("Stock Reconciliation", { }, toggle_display_account_head: function(frm) { frm.toggle_display(['expense_account', 'cost_center'], - frappe.get_doc(":Company", frm.doc.company).enable_perpetual_inventory); + erpnext.is_perpetual_inventory_enabled(frm.doc.company)); } }); @@ -144,7 +144,7 @@ erpnext.stock.StockReconciliation = erpnext.stock.StockController.extend({ set_default_expense_account: function() { var me = this; if(this.frm.doc.company) { - if (frappe.get_doc(":Company", this.frm.doc.company).enable_perpetual_inventory && !this.frm.doc.expense_account) { + if (erpnext.is_perpetual_inventory_enabled(this.frm.doc.company) && !this.frm.doc.expense_account) { return this.frm.call({ method: "erpnext.accounts.utils.get_company_default", args: { @@ -166,12 +166,12 @@ erpnext.stock.StockReconciliation = erpnext.stock.StockController.extend({ this.setup_posting_date_time_check(); - if (me.frm.doc.company && frappe.get_doc(":Company", me.frm.doc.company).enable_perpetual_inventory) { + if (me.frm.doc.company && erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) { this.frm.add_fetch("company", "stock_adjustment_account", "expense_account"); this.frm.add_fetch("company", "cost_center", "cost_center"); } this.frm.fields_dict["expense_account"].get_query = function() { - if(frappe.get_doc(":Company", me.frm.doc.company).enable_perpetual_inventory) { + if(erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) { return { "filters": { 'company': me.frm.doc.company, @@ -181,7 +181,7 @@ erpnext.stock.StockReconciliation = erpnext.stock.StockController.extend({ } } this.frm.fields_dict["cost_center"].get_query = function() { - if(frappe.get_doc(":Company", me.frm.doc.company).enable_perpetual_inventory) { + if(erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) { return { "filters": { 'company': me.frm.doc.company, @@ -195,7 +195,7 @@ erpnext.stock.StockReconciliation = erpnext.stock.StockController.extend({ refresh: function() { if(this.frm.doc.docstatus==1) { this.show_stock_ledger(); - if (frappe.get_doc(":Company", this.frm.doc.company).enable_perpetual_inventory) { + if (erpnext.is_perpetual_inventory_enabled(this.frm.doc.company)) { this.show_general_ledger(); } } diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index 093bd3bda5e..9c425295c56 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -2,7 +2,7 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals -import frappe +import frappe, erpnext import frappe.defaults from frappe import msgprint, _ from frappe.utils import cstr, flt, cint @@ -231,7 +231,7 @@ class StockReconciliation(StockController): self.expense_account, self.cost_center) def validate_expense_account(self): - if not cint(frappe.db.get_value("Company", self.company, 'enable_perpetual_inventory')): + if not cint(erpnext.is_perpetual_inventory_enabled(self.company)): return if not self.expense_account: diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index 07be6588ada..711f0649222 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -454,7 +454,7 @@ def get_valuation_rate(item_code, warehouse, voucher_type, voucher_no, dict(item_code=item_code, buying=1, currency=currency), 'price_list_rate') if not allow_zero_rate and not valuation_rate \ - and cint(frappe.db.get_value("Company", company, "enable_perpetual_inventory")): + and cint(erpnext.is_perpetual_inventory_enabled(company)): frappe.local.message_log = [] frappe.throw(_("Valuation rate not found for the Item {0}, which is required to do accounting entries for {1} {2}. If the item is transacting as a sample item in the {1}, please mention that in the {1} Item table. Otherwise, please create an incoming stock transaction for the item or mention valuation rate in the Item record, and then try submiting/cancelling this entry").format(item_code, voucher_type, voucher_no))