From 345d25bdf1c33a8ad45a372c474ee2f3e645f747 Mon Sep 17 00:00:00 2001 From: Navin-S-R Date: Thu, 29 Jan 2026 00:50:32 +0530 Subject: [PATCH] test: validate sales person wise gross profit (cherry picked from commit 3ab978ab469f01934c888aa197db24075fd3ed96) --- .../report/gross_profit/test_gross_profit.py | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/erpnext/accounts/report/gross_profit/test_gross_profit.py b/erpnext/accounts/report/gross_profit/test_gross_profit.py index 4b22617607d..cb4b3306137 100644 --- a/erpnext/accounts/report/gross_profit/test_gross_profit.py +++ b/erpnext/accounts/report/gross_profit/test_gross_profit.py @@ -697,3 +697,53 @@ class TestGrossProfit(IntegrationTestCase): self.assertEqual(total.buying_amount, 0.0) self.assertEqual(total.gross_profit, -100.0) self.assertEqual(total.get("gross_profit_%"), -100.0) + + def test_sales_person_wise_gross_profit(self): + sales_person = make_sales_person("_Test Sales Person") + + posting_date = get_first_day(nowdate()) + qty = 10 + rate = 100 + + sinv = self.create_sales_invoice(qty=qty, rate=rate, do_not_save=True, do_not_submit=True) + sinv.set_posting_time = 1 + sinv.posting_date = posting_date + sinv.append( + "sales_team", + { + "sales_person": sales_person.name, + "allocated_percentage": 100, + "allocated_amount": 1000.0, + "commission_rate": 5, + "incentives": 5, + }, + ) + sinv.save().submit() + + filters = frappe._dict( + company=self.company, from_date=posting_date, to_date=posting_date, group_by="Sales Person" + ) + + _, data = execute(filters=filters) + total = data[-1] + + self.assertEqual(total.selling_amount, 1000.0) + self.assertEqual(total.buying_amount, 0.0) + self.assertEqual(total.gross_profit, 1000.0) + self.assertEqual(total.get("gross_profit_%"), 100.0) + + +def make_sales_person(sales_person_name="_Test Sales Person"): + if not frappe.db.exists("Sales Person", {"sales_person_name": sales_person_name}): + sales_person_doc = frappe.get_doc( + { + "doctype": "Sales Person", + "is_group": 0, + "parent_sales_person": "Sales Team", + "sales_person_name": sales_person_name, + } + ).insert(ignore_permissions=True) + else: + sales_person_doc = frappe.get_doc("Sales Person", {"sales_person_name": sales_person_name}) + + return sales_person_doc