fix: patch to fix incorrect against_voucher references in ledger
(cherry picked from commit 487d0a55f5)
# Conflicts:
# erpnext/patches/v14_0/update_pos_return_ledger_entries.py
This commit is contained in:
61
erpnext/patches/v14_0/update_pos_return_ledger_entries.py
Normal file
61
erpnext/patches/v14_0/update_pos_return_ledger_entries.py
Normal file
@@ -0,0 +1,61 @@
|
||||
import frappe
|
||||
from frappe import qb
|
||||
|
||||
|
||||
def execute():
|
||||
sinv = qb.DocType("Sales Invoice")
|
||||
pos_returns_without_self = (
|
||||
qb.from_(sinv)
|
||||
.select(sinv.name)
|
||||
.where(
|
||||
sinv.docstatus.eq(1)
|
||||
& sinv.is_pos.eq(1)
|
||||
& sinv.is_return.eq(1)
|
||||
& sinv.return_against.notnull()
|
||||
& sinv.update_outstanding_for_self.eq(0)
|
||||
)
|
||||
.run()
|
||||
)
|
||||
if pos_returns_without_self:
|
||||
pos_returns_without_self = [x[0] for x in pos_returns_without_self]
|
||||
|
||||
gle = qb.DocType("GL Entry")
|
||||
gl_against_references = (
|
||||
qb.from_(gle)
|
||||
.select(gle.voucher_no, gle.against_voucher)
|
||||
.where(
|
||||
gle.voucher_no.isin(pos_returns_without_self)
|
||||
& gle.against_voucher.notnull()
|
||||
& gle.against_voucher.eq(gle.voucher_no)
|
||||
& gle.is_cancelled.eq(0)
|
||||
)
|
||||
.run()
|
||||
)
|
||||
|
||||
_vouchers = list(set([x[0] for x in gl_against_references]))
|
||||
invoice_return_against = (
|
||||
qb.from_(sinv)
|
||||
.select(sinv.name, sinv.return_against)
|
||||
.where(sinv.name.isin(_vouchers) & sinv.return_against.notnull())
|
||||
.orderby(sinv.name)
|
||||
.run()
|
||||
)
|
||||
|
||||
valid_references = set(invoice_return_against)
|
||||
actual_references = set(gl_against_references)
|
||||
|
||||
invalid_references = actual_references.difference(valid_references)
|
||||
|
||||
if invalid_references:
|
||||
# Repost Accounting Ledger
|
||||
pos_for_reposting = (
|
||||
qb.from_(sinv)
|
||||
.select(sinv.company, sinv.name)
|
||||
.where(sinv.name.isin([x[0] for x in invalid_references]))
|
||||
.run(as_dict=True)
|
||||
)
|
||||
for x in pos_for_reposting:
|
||||
ral = frappe.new_doc("Repost Accounting Ledger")
|
||||
ral.company = x.company
|
||||
ral.append("vouchers", {"voucher_type": "Sales Invoice", "voucher_no": x.name})
|
||||
ral.save().submit()
|
||||
Reference in New Issue
Block a user