From 249bbbc56f96decddc88a92809fd392ccfd2b524 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 26 Nov 2014 15:35:08 +0530 Subject: [PATCH] fixes during testing version 5 --- .../chart_of_accounts/chart_of_accounts.py | 21 +++++++++++++++---- .../standard_chart_of_accounts.py | 16 +++++++++----- .../journal_voucher/journal_voucher.py | 2 +- .../journal_voucher/test_journal_voucher.py | 17 +++++++++++---- erpnext/accounts/utils.py | 4 ++-- .../purchase_order/test_purchase_order.py | 3 +-- erpnext/patches.txt | 2 ++ .../v4_2/repost_stock_reconciliation.py | 6 +++--- .../doctype/sales_order/test_sales_order.py | 10 ++++----- .../setup/doctype/company/test_records.json | 9 +++++--- erpnext/setup/utils.py | 3 ++- erpnext/stock/doctype/item/item.json | 19 +++++++++++++---- erpnext/stock/doctype/item/item.py | 19 ++++++++++------- erpnext/stock/doctype/item/test_item.py | 4 ++-- .../material_request/test_material_request.py | 6 +++--- .../stock/doctype/stock_entry/stock_entry.py | 3 ++- .../doctype/stock_entry/test_stock_entry.py | 16 +++++++------- .../test_stock_reconciliation.py | 2 +- erpnext/stock/doctype/warehouse/warehouse.py | 6 +++--- erpnext/stock/reorder_item.py | 4 +--- erpnext/utilities/repost_stock.py | 6 +++--- 21 files changed, 113 insertions(+), 65 deletions(-) diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py b/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py index b3105f5392..790ba1df3e 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py +++ b/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py @@ -17,22 +17,25 @@ def create_charts(chart_name, company): if root_account: root_type = children.get("root_type") - if account_name not in ["account_type", "root_type"]: + if account_name not in ["account_type", "root_type", "group_or_ledger"]: account_name_in_db = unidecode(account_name.strip().lower()) if account_name_in_db in accounts: count = accounts.count(account_name_in_db) account_name = account_name + " " + cstr(count) + group_or_ledger = identify_group_or_ledger(children) + report_type = "Balance Sheet" if root_type in ["Asset", "Liability", "Equity"] \ + else "Profit and Loss" + account = frappe.get_doc({ "doctype": "Account", "account_name": account_name, "company": company, "parent_account": parent, - "group_or_ledger": "Group" if len(children) else "Ledger", + "group_or_ledger": group_or_ledger, "root_type": root_type, - "report_type": "Balance Sheet" \ - if root_type in ["Asset", "Liability", "Equity"] else "Profit and Loss", + "report_type": report_type, "account_type": children.get("account_type") }) @@ -47,6 +50,16 @@ def create_charts(chart_name, company): _import_accounts(chart, None, None, root_account=True) +def identify_group_or_ledger(children): + if children.get("group_or_ledger"): + group_or_ledger = children.get("group_or_ledger") + elif len(set(children.keys()) - set(["account_type", "root_type", "group_or_ledger"])): + group_or_ledger = "Group" + else: + group_or_ledger = "Ledger" + + return group_or_ledger + def get_chart(chart_name): chart = {} if chart_name == "Standard": diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/standard_chart_of_accounts.py b/erpnext/accounts/doctype/account/chart_of_accounts/standard_chart_of_accounts.py index 07cf3d9b8a..640c663861 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/standard_chart_of_accounts.py +++ b/erpnext/accounts/doctype/account/chart_of_accounts/standard_chart_of_accounts.py @@ -13,7 +13,8 @@ coa = { } }, _("Bank Accounts"): { - "account_type": "Bank" + "account_type": "Bank", + "group_or_ledger": "Group" }, _("Cash In Hand"): { _("Cash"): { @@ -26,7 +27,8 @@ coa = { _("Earnest Money"): {} }, _("Stock Assets"): { - "account_type": "Stock" + "account_type": "Stock", + "group_or_ledger": "Group" }, _("Tax Assets"): {} }, @@ -47,7 +49,9 @@ coa = { "account_type": "Fixed Asset" } }, - _("Investments"): {}, + _("Investments"): { + "group_or_ledger": "Group" + }, _("Temporary Accounts (Assets)"): { _("Temporary Assets"): {} }, @@ -139,7 +143,8 @@ coa = { "account_type": "Income Account" }, _("Indirect Income"): { - "account_type": "Income Account" + "account_type": "Income Account", + "group_or_ledger": "Group" }, "root_type": "Income" }, @@ -160,7 +165,8 @@ coa = { }, }, _("Duties and Taxes"): { - "account_type": "Tax" + "account_type": "Tax", + "group_or_ledger": "Group" }, _("Loans (Liabilities)"): { _("Secured Loans"): {}, diff --git a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py index db870f582e..0c9e800828 100644 --- a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py +++ b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py @@ -70,7 +70,7 @@ class JournalVoucher(AccountsController): if not (d.party_type and d.party): frappe.throw(_("Row{0}: Party Type and Party is required for Receivable / Payable account {1}").format(d.idx, d.account)) elif d.party_type and d.party: - frappe.throw(_("Row{0}: Party Type and Party is only applicable against Receivable / Payable account {1}").format(d.idx, d.account)) + frappe.throw(_("Row{0}: Party Type and Party is only applicable against Receivable / Payable account").format(d.idx)) def check_credit_limit(self): customers = list(set([d.party for d in self.get("entries") if d.party_type=="Customer" and flt(d.debit) > 0])) diff --git a/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py b/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py index 3e6545abc0..32113464d7 100644 --- a/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py +++ b/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py @@ -89,7 +89,12 @@ class TestJournalVoucher(unittest.TestCase): set_perpetual_inventory() jv = frappe.copy_doc(test_records[0]) - jv.get("entries")[0].account = "_Test Warehouse - _TC" + jv.get("entries")[0].update({ + "account": "_Test Warehouse - _TC", + "party_type": None, + "party": None + }) + jv.insert() from erpnext.accounts.general_ledger import StockAccountInvalidTransaction @@ -152,9 +157,13 @@ class TestJournalVoucher(unittest.TestCase): self.clear_account_balance() jv = frappe.copy_doc(test_records[0]) - jv.get("entries")[0].account = "_Test Account Cost for Goods Sold - _TC" - jv.get("entries")[0].cost_center = "_Test Cost Center - _TC" - jv.get("entries")[0].credit = 30000.0 + jv.get("entries")[0].update({ + "account": "_Test Account Cost for Goods Sold - _TC", + "cost_center": "_Test Cost Center - _TC", + "party_type": None, + "party": None, + "credit": 30000.0 + }) jv.get("entries")[1].debit = 30000.0 jv.submit() diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index e9de5518aa..5e0d9c3caa 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -23,7 +23,7 @@ def get_fiscal_years(date=None, fiscal_year=None, label="Date", verbose=1, compa cond = "name = '%s'" % fiscal_year.replace("'", "\'") elif company: cond = """('%s' in (select company from `tabFiscal Year Company` - where `tabFiscal Year Company`.parent = `tabFiscal Year`.name)) + where `tabFiscal Year Company`.parent = `tabFiscal Year`.name)) and '%s' >= year_start_date and '%s' <= year_end_date """ %(company.replace("'", "\'"), date, date) else: cond = "'%s' >= year_start_date and '%s' <= year_end_date" %(date, date) @@ -233,7 +233,7 @@ def get_company_default(company, fieldname): value = frappe.db.get_value("Company", company, fieldname) if not value: - throw(_("Please set default value {0} in Company {0}").format(frappe.get_meta("Company").get_label(fieldname), company)) + throw(_("Please set default value {0} in Company {1}").format(frappe.get_meta("Company").get_label(fieldname), company)) return value diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py index 4d7564d71c..e67d320e74 100644 --- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py @@ -34,8 +34,7 @@ class TestPurchaseOrder(unittest.TestCase): po = frappe.copy_doc(test_records[0]).insert() - self.assertRaises(frappe.ValidationError, make_purchase_receipt, - po.name) + self.assertRaises(frappe.ValidationError, make_purchase_receipt, po.name) po = frappe.get_doc("Purchase Order", po.name) po.is_subcontracted = "No" diff --git a/erpnext/patches.txt b/erpnext/patches.txt index c03a5456ac..5bcd3c21aa 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -93,3 +93,5 @@ erpnext.patches.v4_4.make_email_accounts erpnext.patches.v5_0.update_frozen_accounts_permission_role erpnext.patches.v5_0.update_dn_against_doc_fields execute:frappe.db.sql("update `tabMaterial Request` set material_request_type = 'Material Transfer' where material_request_type = 'Transfer'") +execute:frappe.reload_doc('stock', 'doctype', 'item') +execute:frappe.db.sql("update `tabItem` i set apply_warehouse_wise_reorder_level=1, re_order_level=0, re_order_qty=0 where exists(select name from `tabItem Reorder` where parent=i.name)") diff --git a/erpnext/patches/v4_2/repost_stock_reconciliation.py b/erpnext/patches/v4_2/repost_stock_reconciliation.py index eb4de53a01..73cb36d487 100644 --- a/erpnext/patches/v4_2/repost_stock_reconciliation.py +++ b/erpnext/patches/v4_2/repost_stock_reconciliation.py @@ -6,8 +6,8 @@ import frappe import json def execute(): - existing_allow_negative_stock = frappe.db.get_default("allow_negative_stock") - frappe.db.set_default("allow_negative_stock", 1) + existing_allow_negative_stock = frappe.db.get_value("Stock Settings", None, "allow_negative_stock") + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1) head_row = ["Item Code", "Warehouse", "Quantity", "Valuation Rate"] stock_reco_to_be_reposted = [] @@ -28,4 +28,4 @@ def execute(): reco.validate() reco.on_submit() - frappe.db.set_default("allow_negative_stock", existing_allow_negative_stock) + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", existing_allow_negative_stock) diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index f8722924cd..775495ac5f 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -116,7 +116,7 @@ class TestSalesOrder(unittest.TestCase): if next_doc == "Sales Invoice": from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice next_doc = make_sales_invoice(so.name) - + return next_doc def create_so(self, so_doc = None): @@ -182,7 +182,7 @@ class TestSalesOrder(unittest.TestCase): so = self.create_so() # allow negative stock - frappe.db.set_default("allow_negative_stock", 1) + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1) # submit dn dn = self.create_dn_against_so(so) @@ -212,7 +212,7 @@ class TestSalesOrder(unittest.TestCase): so = self.create_so() # allow negative stock - frappe.db.set_default("allow_negative_stock", 1) + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1) # set over-delivery tolerance frappe.db.set_value('Item', so.get("sales_order_details")[0].item_code, 'tolerance', 50) @@ -268,7 +268,7 @@ class TestSalesOrder(unittest.TestCase): so = self.create_so(test_record) # allow negative stock - frappe.db.set_default("allow_negative_stock", 1) + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1) # submit dn dn = self.create_dn_against_so(so) @@ -317,7 +317,7 @@ class TestSalesOrder(unittest.TestCase): so = self.create_so(test_record) # allow negative stock - frappe.db.set_default("allow_negative_stock", 1) + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1) # set over-delivery tolerance frappe.db.set_value('Item', so.get("sales_order_details")[0].item_code, 'tolerance', 50) diff --git a/erpnext/setup/doctype/company/test_records.json b/erpnext/setup/doctype/company/test_records.json index 34566e8ecd..13cb03e081 100644 --- a/erpnext/setup/doctype/company/test_records.json +++ b/erpnext/setup/doctype/company/test_records.json @@ -5,7 +5,8 @@ "country": "India", "default_currency": "INR", "doctype": "Company", - "domain": "Manufacturing" + "domain": "Manufacturing", + "chart_of_accounts": "Standard" }, { "abbr": "_TC1", @@ -13,7 +14,8 @@ "country": "United States", "default_currency": "USD", "doctype": "Company", - "domain": "Retail" + "domain": "Retail", + "chart_of_accounts": "Standard" }, { "abbr": "_TC2", @@ -21,6 +23,7 @@ "default_currency": "EUR", "country": "Germany", "doctype": "Company", - "domain": "Retail" + "domain": "Retail", + "chart_of_accounts": "Standard" } ] diff --git a/erpnext/setup/utils.py b/erpnext/setup/utils.py index e7d78abb42..86d73fbb6e 100644 --- a/erpnext/setup/utils.py +++ b/erpnext/setup/utils.py @@ -47,7 +47,8 @@ def before_tests(): "language" :"english", "company_tagline" :"Testing", "email" :"test@erpnext.com", - "password" :"test" + "password" :"test", + "chart_of_accounts" : "Standard" }) frappe.db.sql("delete from `tabLeave Allocation`") diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index 98aae3aa63..5145f48bcf 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -357,7 +357,8 @@ "read_only": 0 }, { - "description": "Auto-raise Material Request if quantity goes below re-order level in a warehouse", + "depends_on": "eval:doc.is_stock_item==\"Yes\"", + "description": "Auto-raise Material Request if quantity goes below re-order level in default warehouse", "fieldname": "reorder_section", "fieldtype": "Section Break", "label": "Re-order", @@ -366,7 +367,7 @@ "read_only": 0 }, { - "depends_on": "eval:doc.is_stock_item==\"Yes\"", + "depends_on": "eval:(doc.is_stock_item==\"Yes\" && !doc.apply_warehouse_wise_reorder_level)", "fieldname": "re_order_level", "fieldtype": "Float", "label": "Re-Order Level", @@ -376,7 +377,7 @@ "read_only": 0 }, { - "depends_on": "eval:doc.is_stock_item==\"Yes\"", + "depends_on": "eval:(doc.is_stock_item==\"Yes\" && !doc.apply_warehouse_wise_reorder_level)", "fieldname": "re_order_qty", "fieldtype": "Float", "label": "Re-Order Qty", @@ -384,12 +385,22 @@ "read_only": 0 }, { + "depends_on": "eval:doc.is_stock_item==\"Yes\"", + "fieldname": "apply_warehouse_wise_reorder_level", + "fieldtype": "Check", + "label": "Apply Warehouse-wise Reorder Level", + "permlevel": 0, + "precision": "" + }, + { + "depends_on": "eval:(doc.is_stock_item==\"Yes\" && doc.apply_warehouse_wise_reorder_level)", "fieldname": "section_break_31", "fieldtype": "Section Break", "permlevel": 0, "read_only": 0 }, { + "depends_on": "eval:(doc.is_stock_item==\"Yes\" && doc.apply_warehouse_wise_reorder_level)", "description": "Will also apply for variants unless overrridden", "fieldname": "item_reorder", "fieldtype": "Table", @@ -865,7 +876,7 @@ "icon": "icon-tag", "idx": 1, "max_attachments": 1, - "modified": "2014-11-25 18:39:56.226084", + "modified": "2014-11-26 15:05:38.116026", "modified_by": "Administrator", "module": "Stock", "name": "Item", diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 8bccf07687..34d54284ba 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import frappe from frappe import msgprint, _ -from frappe.utils import cstr, flt, getdate, now_datetime, formatdate +from frappe.utils import cstr, flt, cint, getdate, now_datetime, formatdate from frappe.website.website_generator import WebsiteGenerator from erpnext.setup.doctype.item_group.item_group import invalidate_cache_for, get_parent_item_groups from frappe.website.render import clear_cache @@ -54,7 +54,7 @@ class Item(WebsiteGenerator): self.check_item_tax() self.validate_barcode() self.cant_change() - self.validate_item_type_for_reorder() + self.validate_reorder_level() self.validate_warehouse_for_reorder() self.validate_variants() @@ -340,10 +340,15 @@ class Item(WebsiteGenerator): if self.check_if_sle_exists() == "exists": frappe.throw(_("As there are existing stock transactions for this item, you can not change the values of 'Has Serial No', 'Has Batch No', 'Is Stock Item' and 'Valuation Method'")) - def validate_item_type_for_reorder(self): + def validate_reorder_level(self): + if cint(self.apply_warehouse_wise_reorder_level): + self.re_order_level, self.re_order_qty = 0, 0 + else: + self.set("item_reorder", []) + if self.re_order_level or len(self.get("item_reorder", {"material_request_type": "Purchase"})): if not self.is_purchase_item: - frappe.throw(_("""To set reorder level, item must be Purchase Item""")) + frappe.throw(_("""To set reorder level, item must be a Purchase Item""")) def validate_warehouse_for_reorder(self): warehouse = [] @@ -411,13 +416,13 @@ class Item(WebsiteGenerator): def recalculate_bin_qty(self, newdn): from erpnext.utilities.repost_stock import repost_stock frappe.db.auto_commit_on_many_writes = 1 - frappe.db.set_default("allow_negative_stock", 1) + existing_allow_negative_stock = frappe.db.get_value("Stock Settings", None, "allow_negative_stock") + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1) for warehouse in frappe.db.sql("select name from `tabWarehouse`"): repost_stock(newdn, warehouse[0]) - frappe.db.set_default("allow_negative_stock", - frappe.db.get_value("Stock Settings", None, "allow_negative_stock")) + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", existing_allow_negative_stock) frappe.db.auto_commit_on_many_writes = 0 def copy_specification_from_item_group(self): diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py index 2807ca8aab..55cd12f4a9 100644 --- a/erpnext/stock/doctype/item/test_item.py +++ b/erpnext/stock/doctype/item/test_item.py @@ -34,7 +34,7 @@ class TestItem(unittest.TestCase): se.purpose = "Material Receipt" se.append("mtn_details", { "item_code": item.name, - "t_warehouse": "Stores - WP", + "t_warehouse": "Stores - _TC", "qty": 1, "incoming_rate": 1 }) @@ -73,7 +73,7 @@ class TestItem(unittest.TestCase): se.purpose = "Material Receipt" se.append("mtn_details", { "item_code": item.name, - "t_warehouse": "Stores - WP", + "t_warehouse": "Stores - _TC", "qty": 1, "incoming_rate": 1 }) diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py index 0b23af057c..48eed27d82 100644 --- a/erpnext/stock/doctype/material_request/test_material_request.py +++ b/erpnext/stock/doctype/material_request/test_material_request.py @@ -399,7 +399,7 @@ class TestMaterialRequest(unittest.TestCase): self.assertEquals(se.doctype, "Stock Entry") self.assertEquals(len(se.get("mtn_details")), len(mr.get("indent_details"))) - def test_compleated_qty_for_issue(self): + def test_completed_qty_for_issue(self): def _get_requested_qty(): return flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 100", "warehouse": "_Test Warehouse - _TC"}, "indented_qty")) @@ -412,7 +412,7 @@ class TestMaterialRequest(unittest.TestCase): mr.material_request_type = "Material Issue" mr.submit() - #testing bin value after material request is submitted + #testing bin value after material request is submitted self.assertEquals(_get_requested_qty(), existing_requested_qty + 54.0) # receive items to allow issue @@ -431,7 +431,7 @@ class TestMaterialRequest(unittest.TestCase): self.assertEquals(mr.get("indent_details")[0].ordered_qty, 60.0) self.assertEquals(mr.get("indent_details")[1].ordered_qty, 3.0) - #testing bin requested qty after issuing stock against material request + #testing bin requested qty after issuing stock against material request self.assertEquals(_get_requested_qty(), existing_requested_qty) test_dependencies = ["Currency Exchange"] diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index f0af283d99..36a10958f8 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -103,7 +103,8 @@ class StockEntry(StockController): for f in ("uom", "stock_uom", "description", "item_name", "expense_account", "cost_center", "conversion_factor"): - item.set(f, item_details.get(f)) + if not item.get(f): + item.set(f, item_details.get(f)) if not item.transfer_qty: item.transfer_qty = item.qty * item.conversion_factor diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py index fd878bc662..7caf0627bf 100644 --- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py @@ -24,9 +24,9 @@ def make_zero(item_code, warehouse): sle = get_sle(item_code = item_code, warehouse = warehouse) qty = sle[0].qty_after_transaction if sle else 0 if qty < 0: - make_stock_entry(item_code, None, warehouse, abs(qty), incoming_rate=10) + make_stock_entry(item_code=item_code, target=warehouse, qty=abs(qty), incoming_rate=10) elif qty > 0: - make_stock_entry(item_code, warehouse, None, qty, incoming_rate=10) + make_stock_entry(item_code=item_code, source=warehouse, qty=qty, incoming_rate=10) class TestStockEntry(unittest.TestCase): def tearDown(self): @@ -36,31 +36,31 @@ class TestStockEntry(unittest.TestCase): frappe.db.set_default("company", self.old_default_company) def test_fifo(self): - frappe.db.set_default("allow_negative_stock", 1) + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1) item_code = "_Test Item 2" warehouse = "_Test Warehouse - _TC" make_zero(item_code, warehouse) - make_stock_entry(item_code, None, warehouse, 1, incoming_rate=10) + make_stock_entry(item_code=item_code, target=warehouse, qty=1, incoming_rate=10) sle = get_sle(item_code = item_code, warehouse = warehouse)[0] self.assertEqual([[1, 10]], eval(sle.stock_queue)) # negative qty make_zero(item_code, warehouse) - make_stock_entry(item_code, warehouse, None, 1, incoming_rate=10) + make_stock_entry(item_code=item_code, source=warehouse, qty=1, incoming_rate=10) sle = get_sle(item_code = item_code, warehouse = warehouse)[0] self.assertEqual([[-1, 10]], eval(sle.stock_queue)) # further negative - make_stock_entry(item_code, warehouse, None, 1) + make_stock_entry(item_code=item_code, source=warehouse, qty=1) sle = get_sle(item_code = item_code, warehouse = warehouse)[0] self.assertEqual([[-2, 10]], eval(sle.stock_queue)) # move stock to positive - make_stock_entry(item_code, None, warehouse, 3, incoming_rate=10) + make_stock_entry(item_code=item_code, target=warehouse, qty=3, incoming_rate=10) sle = get_sle(item_code = item_code, warehouse = warehouse)[0] self.assertEqual([[1, 10]], eval(sle.stock_queue)) @@ -84,7 +84,7 @@ class TestStockEntry(unittest.TestCase): warehouse = "_Test Warehouse - _TC" # stock entry reqd for auto-reorder - make_stock_entry(item_code=item_code, target="_Test Warehouse 1 - _TC", qty=1, incoming_rate=1) + make_stock_entry(item_code=item_code, target="_Test Warehouse - _TC", qty=1, incoming_rate=1) frappe.db.set_value("Stock Settings", None, "auto_indent", 1) projected_qty = frappe.db.get_value("Bin", {"item_code": item_code, diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py index 91775d9087..ed62d2fea7 100644 --- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py @@ -195,7 +195,7 @@ class TestStockReconciliation(unittest.TestCase): def insert_existing_sle(self, valuation_method): frappe.db.set_value("Item", "_Test Item", "valuation_method", valuation_method) - frappe.db.set_default("allow_negative_stock", 1) + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1) stock_entry = { "company": "_Test Company", diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py index 3939b8911c..2c81c4c98b 100644 --- a/erpnext/stock/doctype/warehouse/warehouse.py +++ b/erpnext/stock/doctype/warehouse/warehouse.py @@ -142,7 +142,8 @@ class Warehouse(Document): def recalculate_bin_qty(self, newdn): from erpnext.utilities.repost_stock import repost_stock frappe.db.auto_commit_on_many_writes = 1 - frappe.db.set_default("allow_negative_stock", 1) + existing_allow_negative_stock = frappe.db.get_value("Stock Settings", None, "allow_negative_stock") + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1) for item in frappe.db.sql("""select distinct item_code from ( select name as item_code from `tabItem` where ifnull(is_stock_item, 'Yes')='Yes' @@ -150,6 +151,5 @@ class Warehouse(Document): select distinct item_code from tabBin) a"""): repost_stock(item[0], newdn) - frappe.db.set_default("allow_negative_stock", - frappe.db.get_value("Stock Settings", None, "allow_negative_stock")) + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", existing_allow_negative_stock) frappe.db.auto_commit_on_many_writes = 0 diff --git a/erpnext/stock/reorder_item.py b/erpnext/stock/reorder_item.py index 3afbb4b6dc..e9294f8dc5 100644 --- a/erpnext/stock/reorder_item.py +++ b/erpnext/stock/reorder_item.py @@ -2,7 +2,6 @@ # License: GNU General Public License v3. See license.txt import frappe -from frappe import _ from frappe.utils import flt, cstr, nowdate, add_days, cint from erpnext.accounts.utils import get_fiscal_year, FiscalYearError @@ -23,8 +22,7 @@ def _reorder_item(): item_warehouse_projected_qty = get_item_warehouse_projected_qty() - warehouse_company = frappe._dict(frappe.db.sql("""select name, company - from `tabWarehouse`""")) + warehouse_company = frappe._dict(frappe.db.sql("""select name, company from `tabWarehouse`""")) default_company = (frappe.defaults.get_defaults().get("company") or frappe.db.sql("""select name from tabCompany limit 1""")[0][0]) diff --git a/erpnext/utilities/repost_stock.py b/erpnext/utilities/repost_stock.py index b63493e130..3a58d2b0a2 100644 --- a/erpnext/utilities/repost_stock.py +++ b/erpnext/utilities/repost_stock.py @@ -16,7 +16,8 @@ def repost(only_actual=False, allow_negative_stock=False, allow_zero_rate=False) frappe.db.auto_commit_on_many_writes = 1 if allow_negative_stock: - frappe.db.set_default("allow_negative_stock", 1) + existing_allow_negative_stock = frappe.db.get_value("Stock Settings", None, "allow_negative_stock") + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1) for d in frappe.db.sql("""select distinct item_code, warehouse from (select item_code, warehouse from tabBin @@ -29,8 +30,7 @@ def repost(only_actual=False, allow_negative_stock=False, allow_zero_rate=False) frappe.db.rollback() if allow_negative_stock: - frappe.db.set_default("allow_negative_stock", - frappe.db.get_value("Stock Settings", None, "allow_negative_stock")) + frappe.db.set_value("Stock Settings", None, "allow_negative_stock", existing_allow_negative_stock) frappe.db.auto_commit_on_many_writes = 0 def repost_stock(item_code, warehouse, allow_zero_rate=False, only_actual=False):