From 7fc26a5202b89476ec5e277601243cf8299ed10f Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Sun, 13 Jul 2025 12:03:17 +0530 Subject: [PATCH] fix: used expected closed date & deal value for forecasting --- crm/api/dashboard.py | 13 +++++++------ .../doctype/crm_fields_layout/crm_fields_layout.py | 2 +- crm/fcrm/doctype/fcrm_settings/fcrm_settings.json | 4 ++-- crm/fcrm/doctype/fcrm_settings/fcrm_settings.py | 8 ++++---- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/crm/api/dashboard.py b/crm/api/dashboard.py index c8984e1c..d94172c7 100644 --- a/crm/api/dashboard.py +++ b/crm/api/dashboard.py @@ -615,23 +615,24 @@ def get_forecasted_revenue(user="", deal_conds=""): result = frappe.db.sql( f""" SELECT - DATE_FORMAT(d.close_date, '%Y-%m') AS month, + DATE_FORMAT(d.expected_closure_date, '%Y-%m') AS month, SUM( CASE - WHEN d.status = 'Lost' THEN d.deal_value * IFNULL(d.exchange_rate, 1) - ELSE d.deal_value * IFNULL(d.probability, 0) / 100 * IFNULL(d.exchange_rate, 1) -- forecasted + WHEN s.type = 'Lost' THEN d.expected_deal_value * IFNULL(d.exchange_rate, 1) + ELSE d.expected_deal_value * IFNULL(d.probability, 0) / 100 * IFNULL(d.exchange_rate, 1) -- forecasted END ) AS forecasted, SUM( 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 END ) AS actual 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} - GROUP BY DATE_FORMAT(d.close_date, '%Y-%m') + GROUP BY DATE_FORMAT(d.expected_closure_date, '%Y-%m') ORDER BY month """, as_dict=True, diff --git a/crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.py b/crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.py index 34a361e9..8a714d38 100644 --- a/crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.py +++ b/crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.py @@ -160,7 +160,7 @@ def add_forecasting_section(layout, doctype): "columns": [ { "name": "column_" + str(random_string(4)), - "fields": ["close_date", "probability", "deal_value"], + "fields": ["expected_closure_date", "probability", "expected_deal_value"], } ], }, diff --git a/crm/fcrm/doctype/fcrm_settings/fcrm_settings.json b/crm/fcrm/doctype/fcrm_settings/fcrm_settings.json index 00907793..635c02d3 100644 --- a/crm/fcrm/doctype/fcrm_settings/fcrm_settings.json +++ b/crm/fcrm/doctype/fcrm_settings/fcrm_settings.json @@ -61,7 +61,7 @@ }, { "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", "fieldtype": "Check", "label": "Enable Forecasting" @@ -77,7 +77,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2025-07-10 16:35:25.030011", + "modified": "2025-07-13 11:58:34.857638", "modified_by": "Administrator", "module": "FCRM", "name": "FCRM Settings", diff --git a/crm/fcrm/doctype/fcrm_settings/fcrm_settings.py b/crm/fcrm/doctype/fcrm_settings/fcrm_settings.py index 0b4e2932..7897bb1a 100644 --- a/crm/fcrm/doctype/fcrm_settings/fcrm_settings.py +++ b/crm/fcrm/doctype/fcrm_settings/fcrm_settings.py @@ -38,24 +38,24 @@ class FCRMSettings(Document): delete_property_setter( "CRM Deal", "reqd", - "close_date", + "expected_closure_date", ) delete_property_setter( "CRM Deal", "reqd", - "deal_value", + "expected_deal_value", ) else: make_property_setter( "CRM Deal", - "close_date", + "expected_closure_date", "reqd", 1 if self.enable_forecasting else 0, "Check", ) make_property_setter( "CRM Deal", - "deal_value", + "expected_deal_value", "reqd", 1 if self.enable_forecasting else 0, "Check",