fix: partial cancel of gle and ple (backport #35609)
This commit is contained in:
@@ -556,7 +556,12 @@ def get_round_off_account_and_cost_center(
|
|||||||
|
|
||||||
|
|
||||||
def make_reverse_gl_entries(
|
def make_reverse_gl_entries(
|
||||||
gl_entries=None, voucher_type=None, voucher_no=None, adv_adj=False, update_outstanding="Yes"
|
gl_entries=None,
|
||||||
|
voucher_type=None,
|
||||||
|
voucher_no=None,
|
||||||
|
adv_adj=False,
|
||||||
|
update_outstanding="Yes",
|
||||||
|
partial_cancel=False,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Get original gl entries of the voucher
|
Get original gl entries of the voucher
|
||||||
@@ -576,13 +581,18 @@ def make_reverse_gl_entries(
|
|||||||
|
|
||||||
if gl_entries:
|
if gl_entries:
|
||||||
create_payment_ledger_entry(
|
create_payment_ledger_entry(
|
||||||
gl_entries, cancel=1, adv_adj=adv_adj, update_outstanding=update_outstanding
|
gl_entries,
|
||||||
|
cancel=1,
|
||||||
|
adv_adj=adv_adj,
|
||||||
|
update_outstanding=update_outstanding,
|
||||||
|
partial_cancel=partial_cancel,
|
||||||
)
|
)
|
||||||
validate_accounting_period(gl_entries)
|
validate_accounting_period(gl_entries)
|
||||||
check_freezing_date(gl_entries[0]["posting_date"], adv_adj)
|
check_freezing_date(gl_entries[0]["posting_date"], adv_adj)
|
||||||
|
|
||||||
is_opening = any(d.get("is_opening") == "Yes" for d in gl_entries)
|
is_opening = any(d.get("is_opening") == "Yes" for d in gl_entries)
|
||||||
validate_against_pcv(is_opening, gl_entries[0]["posting_date"], gl_entries[0]["company"])
|
validate_against_pcv(is_opening, gl_entries[0]["posting_date"], gl_entries[0]["company"])
|
||||||
|
if not partial_cancel:
|
||||||
set_as_cancel(gl_entries[0]["voucher_type"], gl_entries[0]["voucher_no"])
|
set_as_cancel(gl_entries[0]["voucher_type"], gl_entries[0]["voucher_no"])
|
||||||
|
|
||||||
for entry in gl_entries:
|
for entry in gl_entries:
|
||||||
|
|||||||
@@ -1617,6 +1617,7 @@ def get_payment_ledger_entries(gl_entries, cancel=0):
|
|||||||
due_date=gle.due_date,
|
due_date=gle.due_date,
|
||||||
voucher_type=gle.voucher_type,
|
voucher_type=gle.voucher_type,
|
||||||
voucher_no=gle.voucher_no,
|
voucher_no=gle.voucher_no,
|
||||||
|
voucher_detail_no=gle.voucher_detail_no,
|
||||||
against_voucher_type=gle.against_voucher_type
|
against_voucher_type=gle.against_voucher_type
|
||||||
if gle.against_voucher_type
|
if gle.against_voucher_type
|
||||||
else gle.voucher_type,
|
else gle.voucher_type,
|
||||||
@@ -1638,7 +1639,7 @@ def get_payment_ledger_entries(gl_entries, cancel=0):
|
|||||||
|
|
||||||
|
|
||||||
def create_payment_ledger_entry(
|
def create_payment_ledger_entry(
|
||||||
gl_entries, cancel=0, adv_adj=0, update_outstanding="Yes", from_repost=0
|
gl_entries, cancel=0, adv_adj=0, update_outstanding="Yes", from_repost=0, partial_cancel=False
|
||||||
):
|
):
|
||||||
if gl_entries:
|
if gl_entries:
|
||||||
ple_map = get_payment_ledger_entries(gl_entries, cancel=cancel)
|
ple_map = get_payment_ledger_entries(gl_entries, cancel=cancel)
|
||||||
@@ -1648,7 +1649,7 @@ def create_payment_ledger_entry(
|
|||||||
ple = frappe.get_doc(entry)
|
ple = frappe.get_doc(entry)
|
||||||
|
|
||||||
if cancel:
|
if cancel:
|
||||||
delink_original_entry(ple)
|
delink_original_entry(ple, partial_cancel=partial_cancel)
|
||||||
|
|
||||||
ple.flags.ignore_permissions = 1
|
ple.flags.ignore_permissions = 1
|
||||||
ple.flags.adv_adj = adv_adj
|
ple.flags.adv_adj = adv_adj
|
||||||
@@ -1695,7 +1696,7 @@ def update_voucher_outstanding(voucher_type, voucher_no, account, party_type, pa
|
|||||||
ref_doc.set_status(update=True)
|
ref_doc.set_status(update=True)
|
||||||
|
|
||||||
|
|
||||||
def delink_original_entry(pl_entry):
|
def delink_original_entry(pl_entry, partial_cancel=False):
|
||||||
if pl_entry:
|
if pl_entry:
|
||||||
ple = qb.DocType("Payment Ledger Entry")
|
ple = qb.DocType("Payment Ledger Entry")
|
||||||
query = (
|
query = (
|
||||||
@@ -1715,6 +1716,10 @@ def delink_original_entry(pl_entry):
|
|||||||
& (ple.against_voucher_no == pl_entry.against_voucher_no)
|
& (ple.against_voucher_no == pl_entry.against_voucher_no)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if partial_cancel:
|
||||||
|
query = query.where(ple.voucher_detail_no == pl_entry.voucher_detail_no)
|
||||||
|
|
||||||
query.run()
|
query.run()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user