Merge pull request #32567 from ruthra-kumar/remove_duplicate_ple_on_item_value_repost
fix: deduplicate Payment Ledger on Item value repost
This commit is contained in:
commit
2d0217abd5
@ -1171,6 +1171,10 @@ def _delete_gl_entries(voucher_type, voucher_no):
|
|||||||
where voucher_type=%s and voucher_no=%s""",
|
where voucher_type=%s and voucher_no=%s""",
|
||||||
(voucher_type, voucher_no),
|
(voucher_type, voucher_no),
|
||||||
)
|
)
|
||||||
|
ple = qb.DocType("Payment Ledger Entry")
|
||||||
|
qb.from_(ple).delete().where(
|
||||||
|
(ple.voucher_type == voucher_type) & (ple.voucher_no == voucher_no)
|
||||||
|
).run()
|
||||||
|
|
||||||
|
|
||||||
def sort_stock_vouchers_by_posting_date(
|
def sort_stock_vouchers_by_posting_date(
|
||||||
|
@ -9,6 +9,7 @@ from frappe.tests.utils import FrappeTestCase
|
|||||||
from frappe.utils import nowdate
|
from frappe.utils import nowdate
|
||||||
from frappe.utils.data import add_to_date, today
|
from frappe.utils.data import add_to_date, today
|
||||||
|
|
||||||
|
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
|
||||||
from erpnext.accounts.utils import repost_gle_for_stock_vouchers
|
from erpnext.accounts.utils import repost_gle_for_stock_vouchers
|
||||||
from erpnext.controllers.stock_controller import create_item_wise_repost_entries
|
from erpnext.controllers.stock_controller import create_item_wise_repost_entries
|
||||||
from erpnext.stock.doctype.item.test_item import make_item
|
from erpnext.stock.doctype.item.test_item import make_item
|
||||||
@ -272,3 +273,57 @@ class TestRepostItemValuation(FrappeTestCase, StockTestMixin):
|
|||||||
[{"credit": 50, "debit": 0}],
|
[{"credit": 50, "debit": 0}],
|
||||||
gle_filters={"account": "Stock In Hand - TCP1"},
|
gle_filters={"account": "Stock In Hand - TCP1"},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_duplicate_ple_on_repost(self):
|
||||||
|
from erpnext.accounts import utils
|
||||||
|
|
||||||
|
# lower numbers to simplify test
|
||||||
|
orig_chunk_size = utils.GL_REPOSTING_CHUNK
|
||||||
|
utils.GL_REPOSTING_CHUNK = 2
|
||||||
|
self.addCleanup(setattr, utils, "GL_REPOSTING_CHUNK", orig_chunk_size)
|
||||||
|
|
||||||
|
rate = 100
|
||||||
|
item = self.make_item()
|
||||||
|
item.valuation_rate = 90
|
||||||
|
item.allow_negative_stock = 1
|
||||||
|
item.save()
|
||||||
|
|
||||||
|
company = "_Test Company with perpetual inventory"
|
||||||
|
|
||||||
|
# consume non-existing stock
|
||||||
|
sinv = create_sales_invoice(
|
||||||
|
company=company,
|
||||||
|
posting_date=today(),
|
||||||
|
debit_to="Debtors - TCP1",
|
||||||
|
income_account="Sales - TCP1",
|
||||||
|
expense_account="Cost of Goods Sold - TCP1",
|
||||||
|
warehouse="Stores - TCP1",
|
||||||
|
update_stock=1,
|
||||||
|
currency="INR",
|
||||||
|
item_code=item.name,
|
||||||
|
cost_center="Main - TCP1",
|
||||||
|
qty=1,
|
||||||
|
rate=rate,
|
||||||
|
)
|
||||||
|
|
||||||
|
# backdated receipt triggers repost
|
||||||
|
make_stock_entry(
|
||||||
|
item=item.name,
|
||||||
|
company=company,
|
||||||
|
qty=5,
|
||||||
|
rate=rate,
|
||||||
|
target="Stores - TCP1",
|
||||||
|
posting_date=add_to_date(today(), days=-1),
|
||||||
|
)
|
||||||
|
|
||||||
|
ple_entries = frappe.db.get_list(
|
||||||
|
"Payment Ledger Entry",
|
||||||
|
filters={"voucher_type": sinv.doctype, "voucher_no": sinv.name, "delinked": 0},
|
||||||
|
)
|
||||||
|
|
||||||
|
# assert successful deduplication on PLE
|
||||||
|
self.assertEqual(len(ple_entries), 1)
|
||||||
|
|
||||||
|
# outstanding should not be affected
|
||||||
|
sinv.reload()
|
||||||
|
self.assertEqual(sinv.outstanding_amount, 100)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user