Files
schuetz3-erpnext/erpnext/patches/v15_0/update_invoice_remarks.py
Varun Verma b7ad525960 fix: bulk update invoice remarks during site upgrade
fixes issue #43634

(cherry picked from commit cc07402b5e)
2024-11-14 07:19:17 +00:00

150 lines
4.9 KiB
Python

import frappe
from frappe import _
def execute():
update_sales_invoice_remarks()
update_purchase_invoice_remarks()
def update_sales_invoice_remarks():
"""
Update remarks in Sales Invoice.
Some sites may have very large volume of sales invoices.
In such cases, updating documents one by one won't be successful, especially during site migration step.
Refer to the bug report: https://github.com/frappe/erpnext/issues/43634
In this case, a bulk update must be done.
Step 1: Update remarks in GL Entries
Step 2: Update remarks in Payment Ledger Entries
Step 3: Update remarks in Sales Invoice - Should be last step
"""
### Step 1: Update remarks in GL Entries
update_sales_invoice_gle_remarks()
### Step 2: Update remarks in Payment Ledger Entries
update_sales_invoice_ple_remarks()
### Step 3: Update remarks in Sales Invoice
update_query = """
UPDATE `tabSales Invoice`
SET remarks = concat('Against Customer Order ', po_no)
WHERE po_no <> '' AND docstatus = %(docstatus)s and remarks = %(remarks)s
"""
# Data for update query
values = {"remarks": "No Remarks", "docstatus": 1}
# Execute query
frappe.db.sql(update_query, values=values, as_dict=0)
def update_purchase_invoice_remarks():
"""
Update remarks in Purchase Invoice.
Some sites may have very large volume of purchase invoices.
In such cases, updating documents one by one wont be successful, especially during site migration step.
Refer to the bug report: https://github.com/frappe/erpnext/issues/43634
In this case, a bulk update must be done.
Step 1: Update remarks in GL Entries
Step 2: Update remarks in Payment Ledger Entries
Step 3: Update remarks in Purchase Invoice - Should be last step
"""
### Step 1: Update remarks in GL Entries
update_purchase_invoice_gle_remarks()
### Step 2: Update remarks in Payment Ledger Entries
update_purchase_invoice_ple_remarks()
### Step 3: Update remarks in Purchase Invoice
update_query = """
UPDATE `tabPurchase Invoice`
SET remarks = concat('Against Supplier Invoice ', bill_no)
WHERE bill_no <> '' AND docstatus = %(docstatus)s and remarks = %(remarks)s
"""
# Data for update query
values = {"remarks": "No Remarks", "docstatus": 1}
# Execute query
frappe.db.sql(update_query, values=values, as_dict=0)
def update_sales_invoice_gle_remarks():
## Update query to update GL Entry - Updates all entries which are for Sales Invoice with No Remarks
update_query = """
UPDATE
`tabGL Entry` as gle
INNER JOIN `tabSales Invoice` as si
ON gle.voucher_type = 'Sales Invoice' AND gle.voucher_no = si.name AND gle.remarks = %(remarks)s
SET
gle.remarks = concat('Against Customer Order ', si.po_no)
WHERE si.po_no <> '' AND si.docstatus = %(docstatus)s and si.remarks = %(remarks)s
"""
# Data for update query
values = {"remarks": "No Remarks", "docstatus": 1}
# Execute query
frappe.db.sql(update_query, values=values, as_dict=0)
def update_sales_invoice_ple_remarks():
## Update query to update Payment Ledger Entry - Updates all entries which are for Sales Invoice with No Remarks
update_query = """
UPDATE
`tabPayment Ledger Entry` as ple
INNER JOIN `tabSales Invoice` as si
ON ple.voucher_type = 'Sales Invoice' AND ple.voucher_no = si.name AND ple.remarks = %(remarks)s
SET
ple.remarks = concat('Against Customer Order ', si.po_no)
WHERE si.po_no <> '' AND si.docstatus = %(docstatus)s and si.remarks = %(remarks)s
"""
### Data for update query
values = {"remarks": "No Remarks", "docstatus": 1}
### Execute query
frappe.db.sql(update_query, values=values, as_dict=0)
def update_purchase_invoice_gle_remarks():
### Query to update GL Entry - Updates all entries which are for Purchase Invoice with No Remarks
update_query = """
UPDATE
`tabGL Entry` as gle
INNER JOIN `tabPurchase Invoice` as pi
ON gle.voucher_type = 'Purchase Invoice' AND gle.voucher_no = pi.name AND gle.remarks = %(remarks)s
SET
gle.remarks = concat('Against Supplier Invoice ', pi.bill_no)
WHERE pi.bill_no <> '' AND pi.docstatus = %(docstatus)s and pi.remarks = %(remarks)s
"""
### Data for update query
values = {"remarks": "No Remarks", "docstatus": 1}
### Execute query
frappe.db.sql(update_query, values=values, as_dict=0)
def update_purchase_invoice_ple_remarks():
### Query to update Payment Ledger Entry - Updates all entries which are for Purchase Invoice with No Remarks
update_query = """
UPDATE
`tabPayment Ledger Entry` as ple
INNER JOIN `tabPurchase Invoice` as pi
ON ple.voucher_type = 'Purchase Invoice' AND ple.voucher_no = pi.name AND ple.remarks = %(remarks)s
SET
ple.remarks = concat('Against Supplier Invoice ', pi.bill_no)
WHERE pi.bill_no <> '' AND pi.docstatus = %(docstatus)s and pi.remarks = %(remarks)s
"""
### Data for update query
values = {"remarks": "No Remarks", "docstatus": 1}
### Execute query
frappe.db.sql(update_query, values=values, as_dict=0)