fix: used expected closed date & deal value for forecasting
This commit is contained in:
parent
dcb1e47564
commit
7fc26a5202
@ -615,23 +615,24 @@ def get_forecasted_revenue(user="", deal_conds=""):
|
|||||||
result = frappe.db.sql(
|
result = frappe.db.sql(
|
||||||
f"""
|
f"""
|
||||||
SELECT
|
SELECT
|
||||||
DATE_FORMAT(d.close_date, '%Y-%m') AS month,
|
DATE_FORMAT(d.expected_closure_date, '%Y-%m') AS month,
|
||||||
SUM(
|
SUM(
|
||||||
CASE
|
CASE
|
||||||
WHEN d.status = 'Lost' THEN d.deal_value * IFNULL(d.exchange_rate, 1)
|
WHEN s.type = 'Lost' THEN d.expected_deal_value * IFNULL(d.exchange_rate, 1)
|
||||||
ELSE d.deal_value * IFNULL(d.probability, 0) / 100 * IFNULL(d.exchange_rate, 1) -- forecasted
|
ELSE d.expected_deal_value * IFNULL(d.probability, 0) / 100 * IFNULL(d.exchange_rate, 1) -- forecasted
|
||||||
END
|
END
|
||||||
) AS forecasted,
|
) AS forecasted,
|
||||||
SUM(
|
SUM(
|
||||||
CASE
|
CASE
|
||||||
WHEN d.status = 'Won' THEN d.deal_value * IFNULL(d.exchange_rate, 1) -- actual
|
WHEN s.type = 'Won' THEN d.deal_value * IFNULL(d.exchange_rate, 1) -- actual
|
||||||
ELSE 0
|
ELSE 0
|
||||||
END
|
END
|
||||||
) AS actual
|
) AS actual
|
||||||
FROM `tabCRM Deal` AS d
|
FROM `tabCRM Deal` AS d
|
||||||
WHERE d.close_date >= DATE_SUB(CURDATE(), INTERVAL 12 MONTH)
|
JOIN `tabCRM Deal Status` s ON d.status = s.name
|
||||||
|
WHERE d.expected_closure_date >= DATE_SUB(CURDATE(), INTERVAL 12 MONTH)
|
||||||
{deal_conds}
|
{deal_conds}
|
||||||
GROUP BY DATE_FORMAT(d.close_date, '%Y-%m')
|
GROUP BY DATE_FORMAT(d.expected_closure_date, '%Y-%m')
|
||||||
ORDER BY month
|
ORDER BY month
|
||||||
""",
|
""",
|
||||||
as_dict=True,
|
as_dict=True,
|
||||||
|
|||||||
@ -160,7 +160,7 @@ def add_forecasting_section(layout, doctype):
|
|||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
"name": "column_" + str(random_string(4)),
|
"name": "column_" + str(random_string(4)),
|
||||||
"fields": ["close_date", "probability", "deal_value"],
|
"fields": ["expected_closure_date", "probability", "expected_deal_value"],
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
@ -61,7 +61,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"default": "0",
|
"default": "0",
|
||||||
"description": "It will make deal's \"Close Date\" & \"Deal Value\" mandatory to get accurate forecasting insights",
|
"description": "It will make deal's \"Expected Closure Date\" & \"Expected Deal Value\" mandatory to get accurate forecasting insights",
|
||||||
"fieldname": "enable_forecasting",
|
"fieldname": "enable_forecasting",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Enable Forecasting"
|
"label": "Enable Forecasting"
|
||||||
@ -77,7 +77,7 @@
|
|||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"issingle": 1,
|
"issingle": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2025-07-10 16:35:25.030011",
|
"modified": "2025-07-13 11:58:34.857638",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "FCRM",
|
"module": "FCRM",
|
||||||
"name": "FCRM Settings",
|
"name": "FCRM Settings",
|
||||||
|
|||||||
@ -38,24 +38,24 @@ class FCRMSettings(Document):
|
|||||||
delete_property_setter(
|
delete_property_setter(
|
||||||
"CRM Deal",
|
"CRM Deal",
|
||||||
"reqd",
|
"reqd",
|
||||||
"close_date",
|
"expected_closure_date",
|
||||||
)
|
)
|
||||||
delete_property_setter(
|
delete_property_setter(
|
||||||
"CRM Deal",
|
"CRM Deal",
|
||||||
"reqd",
|
"reqd",
|
||||||
"deal_value",
|
"expected_deal_value",
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
make_property_setter(
|
make_property_setter(
|
||||||
"CRM Deal",
|
"CRM Deal",
|
||||||
"close_date",
|
"expected_closure_date",
|
||||||
"reqd",
|
"reqd",
|
||||||
1 if self.enable_forecasting else 0,
|
1 if self.enable_forecasting else 0,
|
||||||
"Check",
|
"Check",
|
||||||
)
|
)
|
||||||
make_property_setter(
|
make_property_setter(
|
||||||
"CRM Deal",
|
"CRM Deal",
|
||||||
"deal_value",
|
"expected_deal_value",
|
||||||
"reqd",
|
"reqd",
|
||||||
1 if self.enable_forecasting else 0,
|
1 if self.enable_forecasting else 0,
|
||||||
"Check",
|
"Check",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user