mirror of
https://github.com/frappe/erpnext.git
synced 2026-04-14 04:15:10 +00:00
fix: update advance paid amount on unreconcile
(cherry picked from commit 99f7eb38d3)
This commit is contained in:
@@ -9,6 +9,7 @@ from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_pay
|
|||||||
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
|
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
|
||||||
from erpnext.accounts.party import get_party_account
|
from erpnext.accounts.party import get_party_account
|
||||||
from erpnext.accounts.test.accounts_mixin import AccountsTestMixin
|
from erpnext.accounts.test.accounts_mixin import AccountsTestMixin
|
||||||
|
from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order
|
||||||
from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice
|
from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice
|
||||||
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
|
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
|
||||||
|
|
||||||
@@ -17,6 +18,7 @@ class TestUnreconcilePayment(AccountsTestMixin, FrappeTestCase):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.create_company()
|
self.create_company()
|
||||||
self.create_customer()
|
self.create_customer()
|
||||||
|
self.create_supplier()
|
||||||
self.create_usd_receivable_account()
|
self.create_usd_receivable_account()
|
||||||
self.create_item()
|
self.create_item()
|
||||||
self.clear_old_entries()
|
self.clear_old_entries()
|
||||||
@@ -364,13 +366,13 @@ class TestUnreconcilePayment(AccountsTestMixin, FrappeTestCase):
|
|||||||
# Assert 'Advance Paid'
|
# Assert 'Advance Paid'
|
||||||
so.reload()
|
so.reload()
|
||||||
pe.reload()
|
pe.reload()
|
||||||
self.assertEqual(so.advance_paid, 100)
|
self.assertEqual(so.advance_paid, 0)
|
||||||
self.assertEqual(len(pe.references), 0)
|
self.assertEqual(len(pe.references), 0)
|
||||||
self.assertEqual(pe.unallocated_amount, 100)
|
self.assertEqual(pe.unallocated_amount, 100)
|
||||||
|
|
||||||
pe.cancel()
|
pe.cancel()
|
||||||
so.reload()
|
so.reload()
|
||||||
self.assertEqual(so.advance_paid, 100)
|
self.assertEqual(so.advance_paid, 0)
|
||||||
|
|
||||||
def test_06_unreconcile_advance_from_payment_entry(self):
|
def test_06_unreconcile_advance_from_payment_entry(self):
|
||||||
self.enable_advance_as_liability()
|
self.enable_advance_as_liability()
|
||||||
@@ -417,7 +419,7 @@ class TestUnreconcilePayment(AccountsTestMixin, FrappeTestCase):
|
|||||||
so2.reload()
|
so2.reload()
|
||||||
pe.reload()
|
pe.reload()
|
||||||
self.assertEqual(so1.advance_paid, 150)
|
self.assertEqual(so1.advance_paid, 150)
|
||||||
self.assertEqual(so2.advance_paid, 110)
|
self.assertEqual(so2.advance_paid, 0)
|
||||||
self.assertEqual(len(pe.references), 1)
|
self.assertEqual(len(pe.references), 1)
|
||||||
self.assertEqual(pe.unallocated_amount, 110)
|
self.assertEqual(pe.unallocated_amount, 110)
|
||||||
|
|
||||||
@@ -468,3 +470,56 @@ class TestUnreconcilePayment(AccountsTestMixin, FrappeTestCase):
|
|||||||
self.assertEqual(so.advance_paid, 1000)
|
self.assertEqual(so.advance_paid, 1000)
|
||||||
|
|
||||||
self.disable_advance_as_liability()
|
self.disable_advance_as_liability()
|
||||||
|
|
||||||
|
def test_unreconcile_advance_from_journal_entry(self):
|
||||||
|
po = create_purchase_order(
|
||||||
|
company=self.company,
|
||||||
|
supplier=self.supplier,
|
||||||
|
item=self.item,
|
||||||
|
qty=1,
|
||||||
|
rate=100,
|
||||||
|
transaction_date=today(),
|
||||||
|
do_not_submit=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
je = frappe.get_doc(
|
||||||
|
{
|
||||||
|
"doctype": "Journal Entry",
|
||||||
|
"company": self.company,
|
||||||
|
"voucher_type": "Journal Entry",
|
||||||
|
"posting_date": po.transaction_date,
|
||||||
|
"multi_currency": True,
|
||||||
|
"accounts": [
|
||||||
|
{
|
||||||
|
"account": "Creditors - _TC",
|
||||||
|
"party_type": "Supplier",
|
||||||
|
"party": po.supplier,
|
||||||
|
"debit_in_account_currency": 100,
|
||||||
|
"is_advance": "Yes",
|
||||||
|
"reference_type": po.doctype,
|
||||||
|
"reference_name": po.name,
|
||||||
|
},
|
||||||
|
{"account": "Cash - _TC", "credit_in_account_currency": 100},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
je.save().submit()
|
||||||
|
po.reload()
|
||||||
|
self.assertEqual(po.advance_paid, 100)
|
||||||
|
|
||||||
|
unreconcile = frappe.get_doc(
|
||||||
|
{
|
||||||
|
"doctype": "Unreconcile Payment",
|
||||||
|
"company": self.company,
|
||||||
|
"voucher_type": je.doctype,
|
||||||
|
"voucher_no": je.name,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
unreconcile.add_references()
|
||||||
|
self.assertEqual(len(unreconcile.allocations), 1)
|
||||||
|
allocations = [x.reference_name for x in unreconcile.allocations]
|
||||||
|
self.assertEqual([po.name], allocations)
|
||||||
|
unreconcile.save().submit()
|
||||||
|
|
||||||
|
po.reload()
|
||||||
|
self.assertEqual(po.advance_paid, 0)
|
||||||
|
|||||||
@@ -86,10 +86,25 @@ class UnreconcilePayment(Document):
|
|||||||
alloc.reference_doctype, alloc.reference_name, alloc.account, alloc.party_type, alloc.party
|
alloc.reference_doctype, alloc.reference_name, alloc.account, alloc.party_type, alloc.party
|
||||||
)
|
)
|
||||||
if doc.doctype in get_advance_payment_doctypes():
|
if doc.doctype in get_advance_payment_doctypes():
|
||||||
|
self.make_advance_payment_ledger(alloc)
|
||||||
doc.set_total_advance_paid()
|
doc.set_total_advance_paid()
|
||||||
|
|
||||||
frappe.db.set_value("Unreconcile Payment Entries", alloc.name, "unlinked", True)
|
frappe.db.set_value("Unreconcile Payment Entries", alloc.name, "unlinked", True)
|
||||||
|
|
||||||
|
def make_advance_payment_ledger(self, alloc):
|
||||||
|
if alloc.allocated_amount > 0:
|
||||||
|
doc = frappe.new_doc("Advance Payment Ledger Entry")
|
||||||
|
doc.company = self.company
|
||||||
|
doc.voucher_type = self.voucher_type
|
||||||
|
doc.voucher_no = self.voucher_no
|
||||||
|
doc.against_voucher_type = alloc.reference_doctype
|
||||||
|
doc.against_voucher_no = alloc.reference_name
|
||||||
|
doc.amount = -1 * alloc.allocated_amount
|
||||||
|
doc.event = "Unreconcile"
|
||||||
|
doc.currency = alloc.account_currency
|
||||||
|
doc.flags.ignore_permissions = 1
|
||||||
|
doc.save()
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def doc_has_references(doctype: str | None = None, docname: str | None = None):
|
def doc_has_references(doctype: str | None = None, docname: str | None = None):
|
||||||
|
|||||||
Reference in New Issue
Block a user