From d68cdb4f5e7d91db9d37c5f107b5595344468fdb Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Sun, 18 Sep 2022 16:16:38 +0530 Subject: [PATCH 1/4] fix: difference amount calculation on payment reconciliation (cherry picked from commit 122d5f2729b28105272fd9c714d0a0ca3a8125e5) --- .../payment_reconciliation.py | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py index e5b942fb6ef..d6e07ab31e0 100644 --- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py @@ -8,7 +8,11 @@ from frappe.model.document import Document from frappe.utils import flt, getdate, nowdate, today import erpnext -from erpnext.accounts.utils import get_outstanding_invoices, reconcile_against_document +from erpnext.accounts.utils import ( + get_outstanding_invoices, + reconcile_against_document, + update_reference_in_payment_entry, +) from erpnext.controllers.accounts_controller import get_advance_payment_entries @@ -190,6 +194,23 @@ class PaymentReconciliation(Document): inv.currency = entry.get("currency") inv.outstanding_amount = flt(entry.get("outstanding_amount")) + def get_difference_amount(self, allocated_entry): + if allocated_entry.get("reference_type") != "Payment Entry": + return + + dr_or_cr = ( + "credit_in_account_currency" + if erpnext.get_party_account_type(self.party_type) == "Receivable" + else "debit_in_account_currency" + ) + + row = self.get_payment_details(allocated_entry, dr_or_cr) + + doc = frappe.get_doc(allocated_entry.reference_type, allocated_entry.reference_name) + update_reference_in_payment_entry(row, doc, do_not_save=True) + + return doc.difference_amount + @frappe.whitelist() def allocate_entries(self, args): self.validate_entries() @@ -205,12 +226,16 @@ class PaymentReconciliation(Document): res = self.get_allocated_entry(pay, inv, pay["amount"]) inv["outstanding_amount"] = flt(inv.get("outstanding_amount")) - flt(pay.get("amount")) pay["amount"] = 0 + + res.difference_amount = self.get_difference_amount(res) + if pay.get("amount") == 0: entries.append(res) break elif inv.get("outstanding_amount") == 0: entries.append(res) continue + else: break From 80d046a38ca3ab9a0be0aa9a398fa39c095ee30a Mon Sep 17 00:00:00 2001 From: nishibakabeer <59765279+nishibakabeer@users.noreply.github.com> Date: Wed, 21 Sep 2022 13:40:03 +0400 Subject: [PATCH 2/4] fix: total value in all keys Gross and net profit report showing wrong values in monthly quarterly and half yearly filters which is the total value @ruthra-kumar added in develop branch as suggested ( https://github.com/frappe/erpnext/pull/32020) (cherry picked from commit 6919f389aa704f21a83d6a4e8cb6e8a754582663) --- .../gross_and_net_profit_report/gross_and_net_profit_report.py | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.py b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.py index 9d566785416..cd5f3667071 100644 --- a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.py +++ b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.py @@ -155,7 +155,6 @@ def adjust_account(data, period_list, consolidated=False): for d in data: for period in period_list: key = period if consolidated else period.key - d[key] = totals[d["account"]] d["total"] = totals[d["account"]] return data From d6a335e59fcb249f7e7bcf379347768d1a862495 Mon Sep 17 00:00:00 2001 From: Sagar Sharma Date: Mon, 26 Sep 2022 09:44:29 +0530 Subject: [PATCH 3/4] refactor: rewrite `Incorrect Stock Value Report` queries in `QB` (cherry picked from commit b93331e844376fb5207acb41b4e7795ea6e1f059) --- .../incorrect_stock_value_report.py | 41 +++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/erpnext/stock/report/incorrect_stock_value_report/incorrect_stock_value_report.py b/erpnext/stock/report/incorrect_stock_value_report/incorrect_stock_value_report.py index 15f211127d7..46bcd94e278 100644 --- a/erpnext/stock/report/incorrect_stock_value_report/incorrect_stock_value_report.py +++ b/erpnext/stock/report/incorrect_stock_value_report/incorrect_stock_value_report.py @@ -4,6 +4,8 @@ import frappe from frappe import _ +from frappe.query_builder import Field +from frappe.query_builder.functions import Min, Timestamp from frappe.utils import add_days, getdate, today from six import iteritems @@ -29,7 +31,7 @@ def execute(filters=None): def get_unsync_date(filters): date = filters.from_date if not date: - date = frappe.db.sql(""" SELECT min(posting_date) from `tabStock Ledger Entry`""") + date = (frappe.qb.from_("Stock Ledger Entry").select(Min(Field("posting_date")))).run() date = date[0][0] if not date: @@ -55,22 +57,27 @@ def get_data(report_filters): result = [] voucher_wise_dict = {} - data = frappe.db.sql( - """ - SELECT - name, posting_date, posting_time, voucher_type, voucher_no, - stock_value_difference, stock_value, warehouse, item_code - FROM - `tabStock Ledger Entry` - WHERE - posting_date - = %s and company = %s - and is_cancelled = 0 - ORDER BY timestamp(posting_date, posting_time) asc, creation asc - """, - (from_date, report_filters.company), - as_dict=1, - ) + sle = frappe.qb.DocType("Stock Ledger Entry") + data = ( + frappe.qb.from_(sle) + .select( + sle.name, + sle.posting_date, + sle.posting_time, + sle.voucher_type, + sle.voucher_no, + sle.stock_value_difference, + sle.stock_value, + sle.warehouse, + sle.item_code, + ) + .where( + (sle.posting_date == from_date) + & (sle.company == report_filters.company) + & (sle.is_cancelled == 0) + ) + .orderby(Timestamp(sle.posting_date, sle.posting_time), sle.creation) + ).run(as_dict=True) for d in data: voucher_wise_dict.setdefault((d.item_code, d.warehouse), []).append(d) From 8f961abe8bf3e82f1b522ff01321c1dfc9506c3d Mon Sep 17 00:00:00 2001 From: Saqib Ansari Date: Mon, 26 Sep 2022 22:42:07 +0530 Subject: [PATCH 4/4] fix(e-invoicing): local variable 'res' referenced before assignment (#32352) --- erpnext/regional/india/e_invoice/utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/regional/india/e_invoice/utils.py b/erpnext/regional/india/e_invoice/utils.py index 9292fc1cfec..45ceb1566c6 100644 --- a/erpnext/regional/india/e_invoice/utils.py +++ b/erpnext/regional/india/e_invoice/utils.py @@ -894,6 +894,7 @@ class GSPConnector: return self.e_invoice_settings.auth_token def make_request(self, request_type, url, headers=None, data=None): + res = None try: if request_type == "post": res = make_post_request(url, headers=headers, data=data)