Merge pull request #31515 from marination/lcv-future-stock-update

fix: LCV updates wrong future qty/Bin qty
This commit is contained in:
Marica 2022-07-19 13:39:39 +05:30 committed by GitHub
commit a8179220be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 79 additions and 25 deletions

View File

@ -4,7 +4,7 @@
import frappe
from frappe.tests.utils import FrappeTestCase
from frappe.utils import add_to_date, flt, now
from frappe.utils import add_days, add_to_date, flt, now
from erpnext.accounts.doctype.account.test_account import create_account, get_inventory_account
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
@ -120,6 +120,61 @@ class TestLandedCostVoucher(FrappeTestCase):
expected_values[gle.account][1], gle.credit, msg=f"incorrect credit for {gle.account}"
)
def test_landed_cost_voucher_stock_impact(self):
"Test impact of LCV on future stock balances."
from erpnext.stock.doctype.item.test_item import make_item
item = make_item("LCV Stock Item", {"is_stock_item": 1})
warehouse = "Stores - _TC"
pr1 = make_purchase_receipt(
item_code=item.name,
warehouse=warehouse,
qty=500,
rate=80,
posting_date=add_days(frappe.utils.nowdate(), -2),
)
pr2 = make_purchase_receipt(
item_code=item.name,
warehouse=warehouse,
qty=100,
rate=80,
posting_date=frappe.utils.nowdate(),
)
last_sle = frappe.db.get_value( # SLE of second PR
"Stock Ledger Entry",
{
"voucher_type": pr2.doctype,
"voucher_no": pr2.name,
"item_code": item.name,
"warehouse": warehouse,
"is_cancelled": 0,
},
fieldname=["qty_after_transaction", "stock_value"],
as_dict=1,
)
create_landed_cost_voucher("Purchase Receipt", pr1.name, pr1.company)
last_sle_after_landed_cost = frappe.db.get_value( # SLE of second PR after LCV's effect
"Stock Ledger Entry",
{
"voucher_type": pr2.doctype,
"voucher_no": pr2.name,
"item_code": item.name,
"warehouse": warehouse,
"is_cancelled": 0,
},
fieldname=["qty_after_transaction", "stock_value"],
as_dict=1,
)
self.assertEqual(
last_sle.qty_after_transaction, last_sle_after_landed_cost.qty_after_transaction
)
self.assertEqual(last_sle_after_landed_cost.stock_value - last_sle.stock_value, 50.0)
def test_landed_cost_voucher_against_purchase_invoice(self):
pi = make_purchase_invoice(

View File

@ -95,9 +95,7 @@ def repost_current_voucher(args, allow_negative_stock=False, via_landed_cost_vou
if not args.get("posting_date"):
args["posting_date"] = nowdate()
if args.get("is_cancelled") and via_landed_cost_voucher:
return
if not (args.get("is_cancelled") and via_landed_cost_voucher):
# Reposts only current voucher SL Entries
# Updates valuation rate, stock value, stock queue for current transaction
update_entries_after(
@ -116,6 +114,7 @@ def repost_current_voucher(args, allow_negative_stock=False, via_landed_cost_vou
)
# update qty in future sle and Validate negative qty
# For LCV: update future balances with -ve LCV SLE, which will be balanced by +ve LCV SLE
update_qty_in_future_sle(args, allow_negative_stock)