mirror of
https://github.com/frappe/erpnext.git
synced 2026-10-29 22:57:42 +00:00
fix(selling): respect company in target variance actuals
Filter permitted sales documents by the selected company before collecting achievement. Keep transaction permissions and callers without a company filter unchanged.
Issue: frappe/erpnext-bug-reviews#395 (bug 1)
(cherry picked from commit 7d493a6678)
# Conflicts:
# erpnext/selling/report/sales_partner_target_variance_based_on_item_group/item_group_wise_sales_target_variance.py
This commit is contained in:
committed by
Mergify
parent
c5ec3e6563
commit
7550e0570f
+15
@@ -233,6 +233,7 @@ def get_actual_data(filters, sales_users_or_territory_data, date_field, sales_fi
|
||||
fiscal_year = get_fiscal_year(fiscal_year=filters.get("fiscal_year"), as_dict=1)
|
||||
doctype = filters.get("doctype")
|
||||
|
||||
<<<<<<< HEAD
|
||||
permitted_names = frappe.get_list(
|
||||
doctype,
|
||||
filters={
|
||||
@@ -240,6 +241,20 @@ def get_actual_data(filters, sales_users_or_territory_data, date_field, sales_fi
|
||||
date_field: ["between", [fiscal_year.year_start_date, fiscal_year.year_end_date]],
|
||||
},
|
||||
pluck="name",
|
||||
=======
|
||||
doc_filters = {
|
||||
"docstatus": 1,
|
||||
date_field: ["between", [fiscal_year.year_start_date, fiscal_year.year_end_date]],
|
||||
}
|
||||
if filters.get("company"):
|
||||
doc_filters["company"] = filters.company
|
||||
|
||||
permitted_docs = frappe.qb.get_query(
|
||||
table=doctype,
|
||||
fields=["name"],
|
||||
filters=doc_filters,
|
||||
ignore_permissions=False,
|
||||
>>>>>>> 7d493a6 (fix(selling): respect company in target variance actuals)
|
||||
)
|
||||
|
||||
if not permitted_names:
|
||||
|
||||
+7
@@ -55,3 +55,10 @@ class TestSalesPartnerTargetVarianceBasedOnItemGroup(FrappeTestCase):
|
||||
[flt(value, 2) for value in (row.total_target, row.total_achieved, row.total_variance)],
|
||||
[50, 20, -30],
|
||||
)
|
||||
|
||||
def test_company_filter_excludes_other_company_sales(self):
|
||||
from erpnext.selling.report.territory_target_variance_based_on_item_group.test_territory_target_variance_based_on_item_group import (
|
||||
check_company_filter,
|
||||
)
|
||||
|
||||
check_company_filter(self, "Sales Partner", "partner_name", execute)
|
||||
|
||||
+7
@@ -113,6 +113,13 @@ class TestSalesPersonTargetVarianceBasedOnItemGroup(FrappeTestCase):
|
||||
self.assertEqual(flt(rows[person_on_order.name].total_achieved, 2), 20)
|
||||
self.assertEqual(flt(rows[person_on_invoice.name].total_achieved, 2), 0)
|
||||
|
||||
def test_company_filter_excludes_other_company_sales(self):
|
||||
from erpnext.selling.report.territory_target_variance_based_on_item_group.test_territory_target_variance_based_on_item_group import (
|
||||
check_company_filter,
|
||||
)
|
||||
|
||||
check_company_filter(self, "Sales Person", "sales_person_name", execute)
|
||||
|
||||
|
||||
def create_target_distribution(fiscal_year):
|
||||
if frappe.db.exists("Monthly Distribution", "Target Report Distribution"):
|
||||
|
||||
+45
@@ -150,6 +150,13 @@ class TestTerritoryTargetVarianceBasedOnItemGroup(FrappeTestCase):
|
||||
remove_user_permission("Customer", "_Test Customer 2", user)
|
||||
self.assertEqual(flt(restricted, 2), 3)
|
||||
|
||||
def test_company_filter_excludes_other_company_sales(self):
|
||||
from erpnext.selling.report.territory_target_variance_based_on_item_group.test_territory_target_variance_based_on_item_group import (
|
||||
check_company_filter,
|
||||
)
|
||||
|
||||
check_company_filter(self, "Territory", "territory_name", execute)
|
||||
|
||||
|
||||
def create_territory_with_target(name, fiscal_year, distribution_id, target_qty=50):
|
||||
doc = frappe.new_doc("Territory")
|
||||
@@ -166,3 +173,41 @@ def create_territory_with_target(name, fiscal_year, distribution_id, target_qty=
|
||||
},
|
||||
)
|
||||
return doc.insert()
|
||||
|
||||
|
||||
def check_company_filter(test, doctype, name_field, execute_report):
|
||||
from erpnext.selling.report.sales_person_target_variance_based_on_item_group.test_sales_person_target_variance_based_on_item_group import (
|
||||
create_sales_target_doc,
|
||||
)
|
||||
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
|
||||
|
||||
distribution = create_target_distribution(test.fiscal_year)
|
||||
holder = create_sales_target_doc(
|
||||
doctype, name_field, frappe.generate_hash(length=10), test.fiscal_year, distribution.name
|
||||
)
|
||||
order = make_sales_order(
|
||||
company="_Test Company 2",
|
||||
currency=frappe.get_cached_value("Company", "_Test Company 2", "default_currency"),
|
||||
warehouse=create_warehouse("_Test Target Report Warehouse", company="_Test Company 2"),
|
||||
rate=800,
|
||||
qty=1,
|
||||
do_not_submit=True,
|
||||
)
|
||||
field = frappe.scrub(doctype)
|
||||
if doctype == "Sales Person":
|
||||
order.set("sales_team", [{"sales_person": holder.name, "allocated_percentage": 100}])
|
||||
else:
|
||||
order.set(field, holder.name)
|
||||
if doctype == "Sales Partner":
|
||||
order.commission_rate = 5
|
||||
order.submit()
|
||||
filters = frappe._dict(
|
||||
fiscal_year=test.fiscal_year, doctype="Sales Order", period="Yearly", target_on="Amount"
|
||||
)
|
||||
|
||||
def achieved():
|
||||
return next(r["total_achieved"] for r in execute_report(filters)[1] if r[field] == holder.name)
|
||||
|
||||
test.assertEqual(flt(achieved(), 2), flt(order.base_net_total, 2))
|
||||
filters.company = "_Test Company"
|
||||
test.assertEqual(flt(achieved(), 2), 0)
|
||||
|
||||
Reference in New Issue
Block a user