fix: correct sponsor/donor fields behavior and logic

- Fixed sponsor_donor_type: added default='registered' in Python model
- Fixed preferred_communication: removed duplicate field, unified with correct attrs
- Fixed sponsor_id: always visible, readonly when new_sponsor selected
- Fixed sponsor_phone: readonly for registered/new_sponsor, editable for unknown
- Fixed preferred_communication: hidden for unknown, readonly always, not required
- Fixed create_new_sponsor button: moved next to sponsor_id field with correct visibility logic
- Added required attribute to sponsor_or_donor_type and sponsor_donor_type fields
- Enhanced JavaScript: added _update method to reinitialize UI on form re-renders
- Enhanced CSS: unified button widths for donation mechanism options

All changes are Odoo 14 compatible and tested.
Synced with latest dev_odex25_ensan on 20251112
This commit is contained in:
Mohamed Eltayar 2025-11-12 00:46:10 +03:00
parent 0a19a0489f
commit 240b65c88d
3 changed files with 66 additions and 24 deletions

View File

@ -69,7 +69,7 @@ class TakafulSponsorship(models.Model):
sponsor_note = fields.Text(string='Sponsor Note')
sponsor_or_donor_type = fields.Selection(string='Sponsor / Donor Type',selection=[('registered', 'Registered'), ('new_sponsor', 'New Sponsor'), ('unknown', 'Unknown')], required=True, default='registered')
# ('not_registered', 'Not Registered'),
sponsor_donor_type = fields.Selection(string='Sponsor / Donor Type',selection=[('registered', 'Registered'), ('new_sponsor', 'New Sponsor')])
sponsor_donor_type = fields.Selection(string='Sponsor / Donor Type',selection=[('registered', 'Registered'), ('new_sponsor', 'New Sponsor')], default='registered')
sponsor_name = fields.Char(string="Sponsor Name")
sponsor_phone = fields.Char(string="Sponsor Phone", compute='_compute_sponsor_phone', store=True, readonly=False)
sponsor_title = fields.Many2one('res.partner.title',string='Sponsor Title')

View File

@ -127,6 +127,12 @@
font-size: 16px;
}
.mechanism_option span {
min-width: 90px;
display: inline-block;
text-align: center;
}
.mechanism_option:hover {
border-color: #ffc107;
background: #fffbf0;
@ -175,9 +181,24 @@
});
},
_update: function () {
var result = this._super.apply(this, arguments);
if (this.mode === 'edit' && this.modelName === 'takaful.sponsorship') {
var self = this;
setTimeout(function() {
self._setupSimpleUI();
}, 50);
}
return result;
},
_setupSimpleUI: function () {
var self = this;
// Remove old event handlers to prevent duplicates
this.$('.record_option').off('click');
this.$('.mechanism_option').off('click');
// Record Type Options - Odoo 14 Compatible Method
this.$('.record_option').on('click', function () {
var $option = $(this);

View File

@ -148,41 +148,62 @@
<label string="Sponsor / Donor Type" for="sponsor_or_donor_type"/>
<div class="o_row">
<field name="sponsor_or_donor_type"
attrs="{'invisible': [('record_type','!=','donation')],'readonly': [('state','!=','draft')]}"/>
attrs="{'invisible': [('record_type','!=','donation')], 'required': [('record_type','=','donation')], 'readonly': [('state','!=','draft')]}"/>
<field name="sponsor_donor_type"
attrs="{'invisible': [('record_type','!=','sponsorship')], 'readonly': [('state','!=','draft')]}"/>
attrs="{'invisible': [('record_type','!=','sponsorship')], 'required': [('record_type','=','sponsorship')], 'readonly': [('state','!=','draft')]}"/>
</div>
<label string="Sponsor Name" for="sponsor_id"/>
<div class="o_row">
<field name="sponsor_id" nolabel="1"
context="{'form_view_ref': 'odex_takaful.view_takaful_sponsor_form'}"
attrs="{
'required': ['|',
'&amp;', ('record_type','=','donation'), ('sponsor_or_donor_type','=','registered'),
'&amp;', ('record_type','=','sponsorship'), ('sponsor_donor_type','=','registered')
],
'readonly': ['|',
('state','!=','draft'),
'|',
'&amp;', ('record_type','=','donation'), ('sponsor_or_donor_type','=','new_sponsor'),
'&amp;', ('record_type','=','sponsorship'), ('sponsor_donor_type','=','new_sponsor')
]
}"
force_save="1"
options="{'no_create': True, 'no_create_edit': True}"/>
<button name="create_new_sponsor" type="object"
string="إنشاء مشترك"
class="btn-primary oe_highlight"
icon="fa-plus"
attrs="{
'invisible': [
'|','|',('sponsor_id','!=',False),
'&amp;', ('record_type', '!=', 'donation'), ('sponsor_donor_type', '!=', 'new_sponsor'),
'&amp;', ('record_type', '!=', 'sponsorship'), ('sponsor_or_donor_type', '!=', 'new_sponsor')
'invisible': ['|', '|',
('sponsor_id','!=',False),
'&amp;', ('record_type', '=', 'donation'), ('sponsor_or_donor_type', '!=', 'new_sponsor'),
'&amp;', ('record_type', '=', 'sponsorship'), ('sponsor_donor_type', '!=', 'new_sponsor')
]
}"/>
</div>
<field name="sponsor_id" string="Sponsor Name"
context="{'form_view_ref': 'odex_takaful.view_takaful_sponsor_form'}"
attrs="{'invisible': [('sponsor_id','=',False), ('sponsor_or_donor_type','!=','registered')],
'required':[('sponsor_or_donor_type','=','registered')],
'readonly':[('state','!=','draft')]}"
force_save="1" options="{'no_create': True, 'no_create_edit': True}"
help="Select registered sponsor from the list"/>
<field name="preferred_communication"
attrs="{'invisible': [('sponsor_id','=',False), ('sponsor_or_donor_type','!=','registered')]}"
force_save="1" options="{'no_create': True, 'no_create_edit': True}"/>
<field name="sponsor_phone" string="رقم الجوال" widget="phone"
attrs="{'invisible': [('sponsor_or_donor_type','=', False)], 'readonly': [('sponsor_or_donor_type', '!=', 'unknown')]}"
placeholder="05xxxxxxxx" help="Saudi mobile number format"/>
attrs="{
'readonly': ['|',
'&amp;', ('record_type','=','donation'), ('sponsor_or_donor_type','!=','unknown'),
'&amp;', ('record_type','=','sponsorship'), ('sponsor_donor_type','!=','unknown')
]
}"
placeholder="05xxxxxxxx"/>
<field name="preferred_communication"
attrs="{'invisible': ['|', ('sponsor_or_donor_type','!=','new_sponsor'), ('record_type','!=','donation')], 'required': [('sponsor_or_donor_type','=','new_sponsor')]}"
force_save="1" options="{'no_create': True, 'no_create_edit': True}"/>
<field name="preferred_communication" string="طريقة التواصل المفضلة"
attrs="{
'invisible': ['|',
'&amp;', ('record_type','=','donation'), ('sponsor_or_donor_type','=','unknown'),
'&amp;', ('record_type','=','sponsorship'), ('sponsor_donor_type','=','unknown')
],
'readonly': [True]
}"
force_save="1"
options="{'no_create': True, 'no_create_edit': True}"/>
</group>
<group name="group_right" string="Basic Information">