Merge pull request #37669 from s-aga-r/FIX-37664
refactor: rename field `Over Order Allowance` to `Blanket Order Allowance`
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index 231b3bf..21cc253 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -2539,6 +2539,37 @@
frappe.local.enable_perpetual_inventory["_Test Company 1"] = old_perpetual_inventory
frappe.db.set_single_value("Stock Settings", "allow_negative_stock", old_negative_stock)
+ def test_sle_for_target_warehouse(self):
+ se = make_stock_entry(
+ item_code="138-CMS Shoe",
+ target="Finished Goods - _TC",
+ company="_Test Company",
+ qty=1,
+ basic_rate=500,
+ )
+
+ si = frappe.copy_doc(test_records[0])
+ si.customer = "_Test Internal Customer 3"
+ si.update_stock = 1
+ si.set_warehouse = "Finished Goods - _TC"
+ si.set_target_warehouse = "Stores - _TC"
+ si.get("items")[0].warehouse = "Finished Goods - _TC"
+ si.get("items")[0].target_warehouse = "Stores - _TC"
+ si.insert()
+ si.submit()
+
+ sles = frappe.get_all(
+ "Stock Ledger Entry", filters={"voucher_no": si.name}, fields=["name", "actual_qty"]
+ )
+
+ # check if both SLEs are created
+ self.assertEqual(len(sles), 2)
+ self.assertEqual(sum(d.actual_qty for d in sles), 0.0)
+
+ # tear down
+ si.cancel()
+ se.cancel()
+
def test_internal_transfer_gl_entry(self):
si = create_sales_invoice(
company="_Test Company with perpetual inventory",
@@ -3662,6 +3693,20 @@
allowed_to_interact_with="_Test Company with perpetual inventory",
)
+ create_internal_customer(
+ customer_name="_Test Internal Customer 3",
+ represents_company="_Test Company",
+ allowed_to_interact_with="_Test Company",
+ )
+
+ account = create_account(
+ account_name="Unrealized Profit",
+ parent_account="Current Liabilities - _TC",
+ company="_Test Company",
+ )
+
+ frappe.db.set_value("Company", "_Test Company", "unrealized_profit_loss_account", account)
+
create_internal_supplier(
supplier_name="_Test Internal Supplier",
represents_company="Wind Power LLC",
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 4c574bf..b05ec4e 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -316,7 +316,7 @@
execute:frappe.db.set_single_value("Accounts Settings", "merge_similar_account_heads", 0)
erpnext.patches.v14_0.update_reference_type_in_journal_entry_accounts
erpnext.patches.v14_0.update_subscription_details
-execute:frappe.delete_doc_if_exists("Report", "Tax Detail")
+execute:frappe.delete_doc("Report", "Tax Detail", force=True)
erpnext.patches.v15_0.enable_all_leads
erpnext.patches.v14_0.update_company_in_ldc
erpnext.patches.v14_0.set_packed_qty_in_draft_delivery_notes
@@ -343,4 +343,4 @@
erpnext.patches.v15_0.update_sre_from_voucher_details
erpnext.patches.v14_0.rename_over_order_allowance_field
# below migration patch should always run last
-erpnext.patches.v14_0.migrate_gl_to_payment_ledger
\ No newline at end of file
+erpnext.patches.v14_0.migrate_gl_to_payment_ledger
diff --git a/erpnext/stock/doctype/delivery_note/test_delivery_note.py b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
index d068192..1eecf6d 100644
--- a/erpnext/stock/doctype/delivery_note/test_delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
@@ -1230,16 +1230,16 @@
frappe.db.rollback()
frappe.db.set_single_value("Selling Settings", "dont_reserve_sales_order_qty_on_sales_return", 0)
- def non_internal_transfer_delivery_note(self):
+ def test_non_internal_transfer_delivery_note(self):
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
dn = create_delivery_note(do_not_submit=True)
- warehouse = create_warehouse("Internal Transfer Warehouse", dn.company)
- dn.items[0].db_set("target_warehouse", "warehouse")
+ warehouse = create_warehouse("Internal Transfer Warehouse", company=dn.company)
+ dn.items[0].db_set("target_warehouse", warehouse)
dn.reload()
- self.assertEqual(dn.items[0].target_warehouse, warehouse.name)
+ self.assertEqual(dn.items[0].target_warehouse, warehouse)
dn.save()
dn.reload()
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index e998b84..146cbff 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -957,6 +957,119 @@
pr1.reload()
pr1.cancel()
+ def test_stock_transfer_from_purchase_receipt(self):
+ from erpnext.stock.doctype.delivery_note.delivery_note import make_inter_company_purchase_receipt
+ from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
+
+ prepare_data_for_internal_transfer()
+
+ customer = "_Test Internal Customer 2"
+ company = "_Test Company with perpetual inventory"
+
+ pr1 = make_purchase_receipt(
+ warehouse="Stores - TCP1", company="_Test Company with perpetual inventory"
+ )
+
+ dn1 = create_delivery_note(
+ item_code=pr1.items[0].item_code,
+ company=company,
+ customer=customer,
+ cost_center="Main - TCP1",
+ expense_account="Cost of Goods Sold - TCP1",
+ qty=5,
+ rate=500,
+ warehouse="Stores - TCP1",
+ target_warehouse="Work In Progress - TCP1",
+ )
+
+ pr = make_inter_company_purchase_receipt(dn1.name)
+ pr.items[0].from_warehouse = "Work In Progress - TCP1"
+ pr.items[0].warehouse = "Stores - TCP1"
+ pr.submit()
+
+ gl_entries = get_gl_entries("Purchase Receipt", pr.name)
+ sl_entries = get_sl_entries("Purchase Receipt", pr.name)
+
+ self.assertFalse(gl_entries)
+
+ expected_sle = {"Work In Progress - TCP1": -5, "Stores - TCP1": 5}
+
+ for sle in sl_entries:
+ self.assertEqual(expected_sle[sle.warehouse], sle.actual_qty)
+
+ pr.cancel()
+
+ def test_stock_transfer_from_purchase_receipt_with_valuation(self):
+ from erpnext.stock.doctype.delivery_note.delivery_note import make_inter_company_purchase_receipt
+ from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
+
+ prepare_data_for_internal_transfer()
+
+ create_warehouse(
+ "_Test Warehouse for Valuation",
+ company="_Test Company with perpetual inventory",
+ properties={"account": "_Test Account Stock In Hand - TCP1"},
+ )
+
+ pr1 = make_purchase_receipt(
+ warehouse="Stores - TCP1",
+ company="_Test Company with perpetual inventory",
+ )
+
+ customer = "_Test Internal Customer 2"
+ company = "_Test Company with perpetual inventory"
+
+ dn1 = create_delivery_note(
+ item_code=pr1.items[0].item_code,
+ company=company,
+ customer=customer,
+ cost_center="Main - TCP1",
+ expense_account="Cost of Goods Sold - TCP1",
+ qty=5,
+ rate=50,
+ warehouse="Stores - TCP1",
+ target_warehouse="_Test Warehouse for Valuation - TCP1",
+ )
+
+ pr = make_inter_company_purchase_receipt(dn1.name)
+ pr.items[0].from_warehouse = "_Test Warehouse for Valuation - TCP1"
+ pr.items[0].warehouse = "Stores - TCP1"
+
+ pr.append(
+ "taxes",
+ {
+ "charge_type": "On Net Total",
+ "account_head": "_Test Account Shipping Charges - TCP1",
+ "category": "Valuation and Total",
+ "cost_center": "Main - TCP1",
+ "description": "Test",
+ "rate": 9,
+ },
+ )
+
+ pr.submit()
+
+ gl_entries = get_gl_entries("Purchase Receipt", pr.name)
+ sl_entries = get_sl_entries("Purchase Receipt", pr.name)
+
+ expected_gle = [
+ ["Stock In Hand - TCP1", 272.5, 0.0],
+ ["_Test Account Stock In Hand - TCP1", 0.0, 250.0],
+ ["_Test Account Shipping Charges - TCP1", 0.0, 22.5],
+ ]
+
+ expected_sle = {"_Test Warehouse for Valuation - TCP1": -5, "Stores - TCP1": 5}
+
+ for sle in sl_entries:
+ self.assertEqual(expected_sle[sle.warehouse], sle.actual_qty)
+
+ for i, gle in enumerate(gl_entries):
+ self.assertEqual(gle.account, expected_gle[i][0])
+ self.assertEqual(gle.debit, expected_gle[i][1])
+ self.assertEqual(gle.credit, expected_gle[i][2])
+
+ pr.cancel()
+
def test_po_to_pi_and_po_to_pr_worflow_full(self):
"""Test following behaviour:
- Create PO