Skip to content

Commit

Permalink
Merge pull request #43096 from frappe/mergify/bp/version-14-hotfix/pr…
Browse files Browse the repository at this point in the history
…-43077

fix: cancel common party advance jv while canceling the invoice (backport #43077)
  • Loading branch information
ruthra-kumar authored Sep 6, 2024
2 parents f4032b6 + e7b17e0 commit 4bd7ce3
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 0 deletions.
44 changes: 44 additions & 0 deletions erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
Original file line number Diff line number Diff line change
Expand Up @@ -3113,6 +3113,50 @@ def test_sales_invoice_against_supplier_usd_with_dimensions(self):
party_link.delete()
frappe.db.set_single_value("Accounts Settings", "enable_common_party_accounting", 0)

def test_sales_invoice_cancel_with_common_party_advance_jv(self):
from erpnext.accounts.doctype.opening_invoice_creation_tool.test_opening_invoice_creation_tool import (
make_customer,
)
from erpnext.accounts.doctype.party_link.party_link import create_party_link
from erpnext.buying.doctype.supplier.test_supplier import create_supplier

# create a customer
customer = make_customer(customer="_Test Common Supplier")
# create a supplier
supplier = create_supplier(supplier_name="_Test Common Supplier").name

# create a party link between customer & supplier
party_link = create_party_link("Supplier", supplier, customer)

# enable common party accounting
frappe.db.set_single_value("Accounts Settings", "enable_common_party_accounting", 1)

# create a sales invoice
si = create_sales_invoice(customer=customer)

# check creation of journal entry
jv = frappe.db.get_value(
"Journal Entry Account",
filters={
"reference_type": si.doctype,
"reference_name": si.name,
"docstatus": 1,
},
fieldname="parent",
)

self.assertTrue(jv)

# cancel sales invoice
si.cancel()

# check cancellation of journal entry
jv_status = frappe.db.get_value("Journal Entry", jv, "docstatus")
self.assertEqual(jv_status, 2)

party_link.delete()
frappe.db.set_single_value("Accounts Settings", "enable_common_party_accounting", 0)

def test_payment_statuses(self):
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry

Expand Down
40 changes: 40 additions & 0 deletions erpnext/accounts/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -739,6 +739,46 @@ def cancel_exchange_gain_loss_journal(
gain_loss_je.cancel()


def cancel_common_party_journal(self):
if self.doctype not in ["Sales Invoice", "Purchase Invoice"]:
return

if not frappe.db.get_single_value("Accounts Settings", "enable_common_party_accounting"):
return

party_link = self.get_common_party_link()
if not party_link:
return

journal_entry = frappe.db.get_value(
"Journal Entry Account",
filters={
"reference_type": self.doctype,
"reference_name": self.name,
"docstatus": 1,
},
fieldname="parent",
)

if not journal_entry:
return

common_party_journal = frappe.db.get_value(
"Journal Entry",
filters={
"name": journal_entry,
"is_system_generated": True,
"docstatus": 1,
},
)

if not common_party_journal:
return

common_party_je = frappe.get_doc("Journal Entry", common_party_journal)
common_party_je.cancel()


def update_accounting_ledgers_after_reference_removal(
ref_type: str | None = None, ref_no: str | None = None, payment_name: str | None = None
):
Expand Down
3 changes: 3 additions & 0 deletions erpnext/controllers/accounts_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -1463,6 +1463,7 @@ def on_cancel(self):
remove_from_bank_transaction,
)
from erpnext.accounts.utils import (
cancel_common_party_journal,
cancel_exchange_gain_loss_journal,
unlink_ref_doc_from_payment_entries,
)
Expand All @@ -1474,6 +1475,7 @@ def on_cancel(self):

# Cancel Exchange Gain/Loss Journal before unlinking
cancel_exchange_gain_loss_journal(self)
cancel_common_party_journal(self)

if frappe.db.get_single_value("Accounts Settings", "unlink_payment_on_cancellation_of_invoice"):
unlink_ref_doc_from_payment_entries(self)
Expand Down Expand Up @@ -2302,6 +2304,7 @@ def create_advance_and_reconcile(self, party_link):
jv.posting_date = self.posting_date
jv.company = self.company
jv.remark = f"Adjustment for {self.doctype} {self.name}"
jv.is_system_generated = True

reconcilation_entry = frappe._dict()
advance_entry = frappe._dict()
Expand Down

0 comments on commit 4bd7ce3

Please sign in to comment.