From 4f58aa110a39b431e58d1fd86c2dfe8e41d0034c Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Tue, 1 Jul 2025 15:05:37 +0530 Subject: [PATCH] fix: made deal value mandatory if forecasting is enabled --- crm/fcrm/doctype/crm_deal/crm_deal.py | 10 +++++++++- crm/fcrm/doctype/fcrm_settings/fcrm_settings.json | 4 ++-- crm/fcrm/doctype/fcrm_settings/fcrm_settings.py | 12 ++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/crm/fcrm/doctype/crm_deal/crm_deal.py b/crm/fcrm/doctype/crm_deal/crm_deal.py index b7e4ec83..9afab159 100644 --- a/crm/fcrm/doctype/crm_deal/crm_deal.py +++ b/crm/fcrm/doctype/crm_deal/crm_deal.py @@ -24,7 +24,7 @@ class CRMDeal(Document): self.assign_agent(self.deal_owner) if self.has_value_changed("status"): add_status_change_log(self) - self.update_close_date() + self.validate_forcasting_fields() def after_insert(self): if self.deal_owner: @@ -141,6 +141,14 @@ class CRMDeal(Document): if self.status == "Won" and not self.close_date: self.close_date = frappe.utils.nowdate() + def validate_forcasting_fields(self): + self.update_close_date() + if frappe.db.get_single_value("FCRM Settings", "enable_forecasting"): + if not self.deal_value or self.deal_value == 0: + frappe.throw(_("Deal Value is required."), frappe.MandatoryError) + if not self.close_date: + frappe.throw(_("Close Date is required."), frappe.MandatoryError) + @staticmethod def default_list_data(): columns = [ diff --git a/crm/fcrm/doctype/fcrm_settings/fcrm_settings.json b/crm/fcrm/doctype/fcrm_settings/fcrm_settings.json index de27e245..e679b023 100644 --- a/crm/fcrm/doctype/fcrm_settings/fcrm_settings.json +++ b/crm/fcrm/doctype/fcrm_settings/fcrm_settings.json @@ -60,7 +60,7 @@ }, { "default": "0", - "description": "It will make deal's \"Expected Closure Date\" mandatory to get accurate forecasting insights", + "description": "It will make deal's \"Close Date\" & \"Deal Value\" mandatory to get accurate forecasting insights", "fieldname": "enable_forecasting", "fieldtype": "Check", "label": "Enable Forecasting" @@ -69,7 +69,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2025-06-11 19:12:16.762499", + "modified": "2025-07-01 13:20:48.757603", "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 f22114f1..1460c265 100644 --- a/crm/fcrm/doctype/fcrm_settings/fcrm_settings.py +++ b/crm/fcrm/doctype/fcrm_settings/fcrm_settings.py @@ -39,6 +39,11 @@ class FCRMSettings(Document): "reqd", "close_date", ) + delete_property_setter( + "CRM Deal", + "reqd", + "deal_value", + ) else: make_property_setter( "CRM Deal", @@ -47,6 +52,13 @@ class FCRMSettings(Document): 1 if self.enable_forecasting else 0, "Check", ) + make_property_setter( + "CRM Deal", + "deal_value", + "reqd", + 1 if self.enable_forecasting else 0, + "Check", + ) def get_standard_dropdown_items():