From c9b6151e081699e8810789f32cf7fe5e386693c9 Mon Sep 17 00:00:00 2001 From: robperezit Date: Fri, 17 Apr 2026 10:37:19 -0400 Subject: [PATCH] [FIX] crm_date_deadline_required: fix usability issue on Kanban quick create --- crm_date_deadline_required/__init__.py | 1 + crm_date_deadline_required/models/__init__.py | 1 + crm_date_deadline_required/models/crm_lead.py | 23 +++++++++++++++ .../tests/test_crm_date_deadline_required.py | 29 +++++++++++-------- .../views/crm_lead_view.xml | 13 --------- 5 files changed, 42 insertions(+), 25 deletions(-) create mode 100644 crm_date_deadline_required/models/__init__.py create mode 100644 crm_date_deadline_required/models/crm_lead.py diff --git a/crm_date_deadline_required/__init__.py b/crm_date_deadline_required/__init__.py index e69de29bb2d..0650744f6bc 100644 --- a/crm_date_deadline_required/__init__.py +++ b/crm_date_deadline_required/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/crm_date_deadline_required/models/__init__.py b/crm_date_deadline_required/models/__init__.py new file mode 100644 index 00000000000..e66f0d6cf4e --- /dev/null +++ b/crm_date_deadline_required/models/__init__.py @@ -0,0 +1 @@ +from . import crm_lead diff --git a/crm_date_deadline_required/models/crm_lead.py b/crm_date_deadline_required/models/crm_lead.py new file mode 100644 index 00000000000..d2f084aeff9 --- /dev/null +++ b/crm_date_deadline_required/models/crm_lead.py @@ -0,0 +1,23 @@ +from odoo import _, api, models +from odoo.exceptions import ValidationError + + +class CrmLead(models.Model): + _inherit = "crm.lead" + + @api.constrains("date_deadline", "type") + def _check_date_deadline_required(self): + for record in self: + if record.type == "opportunity" and not record.date_deadline: + raise ValidationError( + _("The expected closing date is required for opportunities.") + ) + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + if vals.get("type") == "opportunity" and not vals.get("date_deadline"): + raise ValidationError( + _("The expected closing date is required for opportunities.") + ) + return super().create(vals_list) diff --git a/crm_date_deadline_required/tests/test_crm_date_deadline_required.py b/crm_date_deadline_required/tests/test_crm_date_deadline_required.py index 7f2ed42d8ba..6fe605ce0d1 100644 --- a/crm_date_deadline_required/tests/test_crm_date_deadline_required.py +++ b/crm_date_deadline_required/tests/test_crm_date_deadline_required.py @@ -1,6 +1,7 @@ # Copyright 2025 Moduon Team S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) +from odoo.exceptions import ValidationError from odoo.tests import Form from odoo.tests.common import TransactionCase @@ -11,30 +12,34 @@ def setUpClass(cls): super().setUpClass() def test_crm_date_deadline_required_opportunity(self): - """Check date_deadline required in opportunity in default form""" + """Check date_deadline is required in opportunity default form.""" opportunity_form = Form( self.env["crm.lead"].with_context(default_type="opportunity") ) opportunity_form.name = "Test Opportunity" + # The Form object raises AssertionError for XML required fields + # before the server-side ValidationError can be triggered. with self.assertRaises(AssertionError): opportunity_form.save() opportunity_form.date_deadline = "2025-01-01" opportunity_form.save() def test_crm_date_deadline_required_opportunity_quick_create(self): - """Check date_deadline required in opportunity in quick create form""" - opportunity_quick_create_form = Form( - self.env["crm.lead"].with_context(default_type="opportunity"), - "crm.quick_create_opportunity_form", - ) - opportunity_quick_create_form.name = "Test Opportunity Quick Create" - with self.assertRaises(AssertionError): - opportunity_quick_create_form.save() - opportunity_quick_create_form.date_deadline = "2025-01-01" - opportunity_quick_create_form.save() + """Check date_deadline is required via server validation for quick create.""" + # We test the server constraint directly because the field + # was removed from the quick create view to fix the OWL UI bug. + with self.assertRaises(ValidationError): + self.env["crm.lead"].with_context(default_type="opportunity").create( + { + "name": "Test Opportunity Quick Create", + "type": "opportunity", + # We omit date_deadline to trigger the Python ValidationError + } + ) def test_crm_date_deadline_required_lead(self): - """Check date_deadline not required in lead in default form""" + """Check date_deadline is not required for lead types.""" lead_form = Form(self.env["crm.lead"].with_context(default_type="lead")) lead_form.name = "Test Lead" + # Should save without errors as it's not an opportunity lead_form.save() diff --git a/crm_date_deadline_required/views/crm_lead_view.xml b/crm_date_deadline_required/views/crm_lead_view.xml index 410f0ed0906..7ca046a14dc 100644 --- a/crm_date_deadline_required/views/crm_lead_view.xml +++ b/crm_date_deadline_required/views/crm_lead_view.xml @@ -14,17 +14,4 @@ - - Date deadline required quick create form - crm.lead - - - - - - -