From 49befc1dfd8be8738145f49acb6b16289c9eab96 Mon Sep 17 00:00:00 2001 From: mithili Date: Tue, 8 Jul 2025 19:19:59 +0530 Subject: [PATCH 1/4] fix: set company as mandatory (cherry picked from commit 2de2ea9f58e7709b3cc40e609ee6b7c7db71c3bd) --- .../sales_partner_commission_summary.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.js b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.js index 1150de86b80..97680bce435 100644 --- a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.js +++ b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.js @@ -3,6 +3,14 @@ frappe.query_reports["Sales Partner Commission Summary"] = { filters: [ + { + fieldname: "company", + label: __("Company"), + fieldtype: "Link", + options: "Company", + default: frappe.defaults.get_user_default("Company"), + reqd: 1, + }, { fieldname: "sales_partner", label: __("Sales Partner"), @@ -28,13 +36,6 @@ frappe.query_reports["Sales Partner Commission Summary"] = { fieldtype: "Date", default: frappe.datetime.get_today(), }, - { - fieldname: "company", - label: __("Company"), - fieldtype: "Link", - options: "Company", - default: frappe.defaults.get_user_default("Company"), - }, { fieldname: "customer", label: __("Customer"), From 622052b950e045a8c98c1030e5da85c17c6f7154 Mon Sep 17 00:00:00 2001 From: mithili Date: Tue, 8 Jul 2025 19:22:23 +0530 Subject: [PATCH 2/4] fix: get default company currency (cherry picked from commit 984947f333511922b9ca34e96986adec2dd9b37d) --- .../sales_partner_commission_summary.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py index 844aa86b52e..940f7db7dd8 100644 --- a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py +++ b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py @@ -35,6 +35,12 @@ def get_columns(filters): "fieldtype": "Link", "width": 140, }, + { + "label": _("Currency"), + "fieldname": "currency", + "fieldtype": "Data", + "width": 80, + }, { "label": _("Territory"), "options": "Territory", @@ -43,7 +49,7 @@ def get_columns(filters): "width": 100, }, {"label": _("Posting Date"), "fieldname": "posting_date", "fieldtype": "Date", "width": 100}, - {"label": _("Amount"), "fieldname": "amount", "fieldtype": "Currency", "width": 120}, + {"label": _("Amount"), "fieldname": "amount", "fieldtype": "Currency", "options": "currency", "width": 120}, { "label": _("Sales Partner"), "options": "Sales Partner", @@ -61,6 +67,7 @@ def get_columns(filters): "label": _("Total Commission"), "fieldname": "total_commission", "fieldtype": "Currency", + "options": "currency", "width": 120, }, ] @@ -86,6 +93,9 @@ def get_entries(filters): filters, as_dict=1, ) + currency_company = frappe.get_cached_value("Company", filters.get("company"), "default_currency") + for row in entries: + row["currency"] = currency_company return entries From 8314059bf7051f21b463d4df984ec66ddaa467bb Mon Sep 17 00:00:00 2001 From: mithili Date: Wed, 9 Jul 2025 13:31:48 +0530 Subject: [PATCH 3/4] chore: update query to fetch company currency (cherry picked from commit 998617879caa2b6a4ad5433a986db8dee23fe52c) --- .../sales_partner_commission_summary.py | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py index 940f7db7dd8..e92b865fccd 100644 --- a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py +++ b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py @@ -36,10 +36,10 @@ def get_columns(filters): "width": 140, }, { - "label": _("Currency"), - "fieldname": "currency", - "fieldtype": "Data", - "width": 80, + "label": _("Currency"), + "fieldname": "currency", + "fieldtype": "Data", + "width": 80, }, { "label": _("Territory"), @@ -49,7 +49,13 @@ def get_columns(filters): "width": 100, }, {"label": _("Posting Date"), "fieldname": "posting_date", "fieldtype": "Date", "width": 100}, - {"label": _("Amount"), "fieldname": "amount", "fieldtype": "Currency", "options": "currency", "width": 120}, + { + "label": _("Amount"), + "fieldname": "amount", + "fieldtype": "Currency", + "options": "currency", + "width": 120, + }, { "label": _("Sales Partner"), "options": "Sales Partner", @@ -82,20 +88,19 @@ def get_entries(filters): entries = frappe.db.sql( """ SELECT - name, customer, territory, {} as posting_date, base_net_total as amount, - sales_partner, commission_rate, total_commission + doc.name, doc.customer, doc.territory, doc.{} as posting_date, doc.base_net_total as amount, + doc.sales_partner, doc.commission_rate, doc.total_commission, company.default_currency as currency FROM - `tab{}` + `tab{}` as doc + JOIN + `tabCompany` as company ON company.name = doc.company WHERE - {} and docstatus = 1 and sales_partner is not null - and sales_partner != '' order by name desc, sales_partner + {} and doc.docstatus = 1 and doc.sales_partner is not null + and doc.sales_partner != '' order by doc.name desc, doc.sales_partner """.format(date_field, filters.get("doctype"), conditions), filters, as_dict=1, ) - currency_company = frappe.get_cached_value("Company", filters.get("company"), "default_currency") - for row in entries: - row["currency"] = currency_company return entries @@ -105,15 +110,15 @@ def get_conditions(filters, date_field): for field in ["company", "customer", "territory"]: if filters.get(field): - conditions += f" and {field} = %({field})s" + conditions += f" and doc.{field} = %({field})s" if filters.get("sales_partner"): - conditions += " and sales_partner = %(sales_partner)s" + conditions += " and doc.sales_partner = %(sales_partner)s" if filters.get("from_date"): - conditions += f" and {date_field} >= %(from_date)s" + conditions += f" and doc.{date_field} >= %(from_date)s" if filters.get("to_date"): - conditions += f" and {date_field} <= %(to_date)s" + conditions += f" and doc.{date_field} <= %(to_date)s" return conditions From 8d25269de6a2b15aacab96886dc3ba798e8e7b27 Mon Sep 17 00:00:00 2001 From: mithili Date: Thu, 24 Jul 2025 18:40:34 +0530 Subject: [PATCH 4/4] refactor: remove join in sql (cherry picked from commit 9638151f9d1ef1e46e801d634d9080fc4021611c) --- .../sales_partner_commission_summary.py | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py index e92b865fccd..5e07eb5d8a8 100644 --- a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py +++ b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.py @@ -83,21 +83,19 @@ def get_columns(filters): def get_entries(filters): date_field = "transaction_date" if filters.get("doctype") == "Sales Order" else "posting_date" - + company_currency = frappe.db.get_value("Company", filters.get("company"), "default_currency") conditions = get_conditions(filters, date_field) entries = frappe.db.sql( """ SELECT - doc.name, doc.customer, doc.territory, doc.{} as posting_date, doc.base_net_total as amount, - doc.sales_partner, doc.commission_rate, doc.total_commission, company.default_currency as currency + name, customer, territory, {} as posting_date, base_net_total as amount, + sales_partner, commission_rate, total_commission, '{}' as currency FROM - `tab{}` as doc - JOIN - `tabCompany` as company ON company.name = doc.company + `tab{}` WHERE - {} and doc.docstatus = 1 and doc.sales_partner is not null - and doc.sales_partner != '' order by doc.name desc, doc.sales_partner - """.format(date_field, filters.get("doctype"), conditions), + {} and docstatus = 1 and sales_partner is not null + and sales_partner != '' order by name desc, sales_partner + """.format(date_field, company_currency, filters.get("doctype"), conditions), filters, as_dict=1, ) @@ -110,15 +108,15 @@ def get_conditions(filters, date_field): for field in ["company", "customer", "territory"]: if filters.get(field): - conditions += f" and doc.{field} = %({field})s" + conditions += f" and {field} = %({field})s" if filters.get("sales_partner"): - conditions += " and doc.sales_partner = %(sales_partner)s" + conditions += " and sales_partner = %(sales_partner)s" if filters.get("from_date"): - conditions += f" and doc.{date_field} >= %(from_date)s" + conditions += f" and {date_field} >= %(from_date)s" if filters.get("to_date"): - conditions += f" and doc.{date_field} <= %(to_date)s" + conditions += f" and {date_field} <= %(to_date)s" return conditions