From c46395e42dfcc024a4bee571f8b1b59e29057a4d Mon Sep 17 00:00:00 2001 From: Mohamed Eltayar Date: Wed, 12 Nov 2025 02:51:27 +0300 Subject: [PATCH] fix: sponsor form issues - footer buttons + required name + constraint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Fixed Issues:** 1. Save & Close Button - Moved to Footer - Removed button from header - Added footer with 'حفظ وإغلاق' button (replaces default Save) - Added 'تجاهل' button (Cancel) - Now matches Odoo wizard standard pattern 2. Required First Name - Made 'first_name' field required (required="1") - Title and suffix remain optional - Ensures sponsor name is always filled 3. New Sponsor Constraint - Added @api.constrains to prevent saving when 'new_sponsor' selected but no sponsor created - Clear Arabic error messages guide user to create sponsor first - Only enforced in draft state - Works for both donation and sponsorship types 4. Form Create Disabled - Added create="false" to form to prevent accidental inline creation - Users must use proper workflow All changes Odoo 14 compatible. Tested validation. Synced with latest dev_odex25_ensan on Wed Nov 12 02:51:27 +03 2025 --- .../models/takaful_sponorship_model.py | 16 ++++++++++++++++ .../odex_takaful/views/takaful_sponsor_view.xml | 11 ++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/odex25_ensan/odex_takaful/models/takaful_sponorship_model.py b/odex25_ensan/odex_takaful/models/takaful_sponorship_model.py index e3aeb864a..e149be9d6 100644 --- a/odex25_ensan/odex_takaful/models/takaful_sponorship_model.py +++ b/odex25_ensan/odex_takaful/models/takaful_sponorship_model.py @@ -801,6 +801,22 @@ class TakafulSponsorship(models.Model): rec.sponsor_phone = rec.sponsor_id.mobile rec.preferred_communication = rec.sponsor_id.preferred_communication + @api.constrains('sponsor_id', 'sponsor_or_donor_type', 'sponsor_donor_type', 'state') + def _check_new_sponsor_created(self): + """ + Constraint: If user selects 'new_sponsor', they must create a sponsor before saving + """ + for rec in self: + if rec.state == 'draft': # Only check in draft state + # Check for donation + if rec.record_type == 'donation' and rec.sponsor_or_donor_type == 'new_sponsor': + if not rec.sponsor_id: + raise ValidationError(_('يجب إنشاء مشترك جديد أولاً قبل الحفظ. اضغط على زر "إنشاء مشترك" لإضافة مشترك جديد.')) + # Check for sponsorship + elif rec.record_type == 'sponsorship' and rec.sponsor_donor_type == 'new_sponsor': + if not rec.sponsor_id: + raise ValidationError(_('يجب إنشاء كافل جديد أولاً قبل الحفظ. اضغط على زر "إنشاء مشترك" لإضافة كافل جديد.')) + def _get_default_record_type(self): if self.env.user.has_group("odex_takaful.donation_officer_group"): return "donation" diff --git a/odex25_ensan/odex_takaful/views/takaful_sponsor_view.xml b/odex25_ensan/odex_takaful/views/takaful_sponsor_view.xml index 260b1fc08..123d1e8ab 100644 --- a/odex25_ensan/odex_takaful/views/takaful_sponsor_view.xml +++ b/odex25_ensan/odex_takaful/views/takaful_sponsor_view.xml @@ -29,11 +29,8 @@ partner.sponsor.form res.partner -
+
-
@@ -86,7 +83,7 @@ - + @@ -188,6 +185,10 @@ +
+