fix: partial cancel of gle and ple (backport #35609)

This commit is contained in:
Smit Vora
2023-11-20 10:56:56 +05:30
parent 5afb8b59c9
commit 80bc235d6e
2 changed files with 21 additions and 6 deletions

View File

@@ -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,14 +581,19 @@ 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"])
set_as_cancel(gl_entries[0]["voucher_type"], gl_entries[0]["voucher_no"]) if not partial_cancel:
set_as_cancel(gl_entries[0]["voucher_type"], gl_entries[0]["voucher_no"])
for entry in gl_entries: for entry in gl_entries:
new_gle = copy.deepcopy(entry) new_gle = copy.deepcopy(entry)

View File

@@ -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()