Merge pull request #5356 from expsa/fix/ui-improvements-complete-20251111-2200

🚀 Complete UI Improvements - Odoo 14 Compatible
This commit is contained in:
Mohamed Eltayar 2025-11-11 22:27:44 +03:00 committed by GitHub
commit cfa48a9e33
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 55 additions and 132 deletions

View File

@ -29,12 +29,12 @@
direction: ltr;
}
/* Record Type Simple & Genius Design */
/* Record Type Simple & Clean Design */
.o_record_type_simple {
background: #f8f9fa;
padding: 20px;
padding: 10px;
border-radius: 8px;
margin: 15px 0;
margin: 10px 0;
text-align: center;
}
@ -42,7 +42,7 @@
display: flex;
justify-content: center;
gap: 20px;
margin-top: 15px;
margin-top: 5px;
}
.record_option {
@ -86,17 +86,19 @@
/* Donation Mechanism Simple Design */
.o_donation_mechanism_simple {
margin: 15px 0;
padding: 15px;
margin: 10px 0;
padding: 10px;
background: #fff8e1;
border-radius: 6px;
border-left: 4px solid #ffc107;
text-align: center;
}
.mechanism_options {
display: flex;
justify-content: center;
gap: 15px;
margin-top: 10px;
margin-top: 5px;
}
.mechanism_option {
@ -122,64 +124,6 @@
background: #fff3e0;
color: #e65100;
}
/* Progress Indicator */
.o_progress_section {
background: #f1f3f4;
padding: 15px;
border-radius: 6px;
margin: 15px 0;
}
.o_progress_indicator {
display: flex;
justify-content: center;
gap: 30px;
margin-bottom: 15px;
}
.step {
display: flex;
flex-direction: column;
align-items: center;
gap: 5px;
opacity: 0.5;
transition: opacity 0.3s ease;
}
.step.active {
opacity: 1;
}
.step i {
font-size: 20px;
color: #28a745;
}
.step span {
font-size: 12px;
font-weight: 500;
}
/* Help Messages */
.o_help_messages {
text-align: center;
}
.o_help_message {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 8px 15px;
background: white;
border-radius: 4px;
font-size: 14px;
}
.o_help_message i {
font-size: 16px;
}
</style>
<script type="text/javascript">
@ -201,37 +145,53 @@
_setupSimpleUI: function () {
var self = this;
// Record Type Options
// Record Type Options - Odoo 14 Compatible Method
this.$('.record_option').on('click', function () {
var $option = $(this);
var recordType = $option.data('value');
// Update field value
var recordTypeField = self.renderer.allFieldWidgets.record_type;
if (recordTypeField &amp;&amp; recordTypeField.length > 0) {
recordTypeField[0]._setValue(recordType);
}
// Update field value using Odoo 14 method
self.trigger_up('field_changed', {
dataPointID: self.handle,
changes: {record_type: recordType}
});
// Update visual selection
self.$('.record_option').removeClass('selected');
$option.addClass('selected');
});
// Donation Mechanism Options
// Donation Mechanism Options - Odoo 14 Compatible Method
this.$('.mechanism_option').on('click', function () {
var $option = $(this);
var mechanism = $option.data('value');
// Update field value
var mechanismField = self.renderer.allFieldWidgets.donation_mechanism;
if (mechanismField &amp;&amp; mechanismField.length > 0) {
mechanismField[0]._setValue(mechanism);
}
// Update field value using Odoo 14 method
self.trigger_up('field_changed', {
dataPointID: self.handle,
changes: {donation_mechanism: mechanism}
});
// Update visual selection
self.$('.mechanism_option').removeClass('selected');
$option.addClass('selected');
});
// Set default selection on load
setTimeout(function() {
var currentRecordType = self.model.localData[self.handle].data.record_type;
if (currentRecordType) {
self.$('.record_option[data-value="' + currentRecordType + '"]').addClass('selected');
} else {
// Default to donation as requested
self.$('.record_option[data-value="donation"]').addClass('selected');
}
var currentMechanism = self.model.localData[self.handle].data.donation_mechanism;
if (currentMechanism) {
self.$('.mechanism_option[data-value="' + currentMechanism + '"]').addClass('selected');
}
}, 100);
}
});
});

View File

@ -87,61 +87,44 @@
<field name="code" nolabel="1"/>
</h1>
<!-- Record Type Selection - Simple & Genius Design -->
<!-- Record Type Selection - Simple & Clean Design -->
<div class="o_record_type_simple">
<h4 class="text-center mb-3">Choose Record Type</h4>
<div class="record_type_options">
<div class="record_option donation_option" data-value="donation">
<i class="fa fa-heart"></i>
<span>Donation</span>
<span t-esc="'Donation'"/>
</div>
<div class="record_option sponsorship_option" data-value="sponsorship">
<i class="fa fa-users"></i>
<span>Sponsorship</span>
<span t-esc="'Sponsorship'"/>
</div>
</div>
<!-- Hidden field for actual value -->
<field name="record_type" readonly="0" widget="radio"
options="{'horizontal': true}" nolabel="1" invisible="1"
<field name="record_type" readonly="0" nolabel="1" invisible="1"
groups="!odex_takaful.branch_manager_group,!odex_takaful.sponsorship_system_manager_group,odex_takaful.donation_officer_group,odex_takaful.sponsorship_officer_group"/>
<field name="record_type" widget="radio"
options="{'horizontal': true}" nolabel="1" invisible="1"
<field name="record_type" nolabel="1" invisible="1"
groups="odex_takaful.branch_manager_group,odex_takaful.sponsorship_system_manager_group"
attrs="{'readonly': [('state','!=','draft')]}"/>
</div>
<!-- Progress Indicator & Help Messages -->
<div class="o_progress_section">
<div class="o_progress_indicator">
<div class="step step-1 active">
<i class="fa fa-check-circle"></i>
<span>Record Type</span>
<!-- Donation Type Selection - Only for Donations -->
<div class="o_donation_mechanism_simple"
attrs="{'invisible': [('record_type','!=','donation')]}">
<div class="mechanism_options">
<div class="mechanism_option without_conditions" data-value="without_conditions">
<i class="fa fa-gift"></i>
<span t-esc="'Unconditional'"/>
</div>
<div class="step step-2">
<i class="fa fa-user"></i>
<span>Donor Information</span>
</div>
<div class="step step-3">
<i class="fa fa-list"></i>
<span>Details</span>
<div class="mechanism_option with_conditions" data-value="with_conditions">
<i class="fa fa-list-check"></i>
<span t-esc="'Conditional'"/>
</div>
</div>
<!-- Dynamic Help Messages -->
<div class="o_help_messages">
<div class="o_help_message donation_help"
attrs="{'invisible': [('record_type','!=','donation')]}">
<i class="fa fa-info-circle text-info"></i>
<span>Choose donation type then enter donor information</span>
</div>
<div class="o_help_message sponsorship_help"
attrs="{'invisible': [('record_type','!=','sponsorship')]}">
<i class="fa fa-info-circle text-primary"></i>
<span>Enter sponsor information then select beneficiary</span>
</div>
</div>
<!-- Hidden field for actual value -->
<field name="donation_mechanism" invisible="1" nolabel="1"
attrs="{'required': [('record_type','=','donation')], 'readonly': [('state','!=','draft')]}"/>
</div>
<group name="group_top">
@ -151,26 +134,6 @@
<field name="is_sponsorship_coordinator" invisible="1"/>
<field name="registered_type" invisible="1" attrs="{'readonly': [('state','!=','draft')]}"/>
<!-- Donation Mechanism Selection - Simple & Genius Design -->
<div class="o_donation_mechanism_simple"
attrs="{'invisible': [('record_type','!=','donation')]}">
<h5 class="mb-2">Donation Type</h5>
<div class="mechanism_options">
<div class="mechanism_option without_conditions" data-value="without_conditions">
<i class="fa fa-gift"></i>
<span>Unconditional</span>
</div>
<div class="mechanism_option with_conditions" data-value="with_conditions">
<i class="fa fa-list-check"></i>
<span>Conditional</span>
</div>
</div>
<!-- Hidden field for actual value -->
<field name="donation_mechanism" invisible="1" nolabel="1"
attrs="{'required': [('record_type','=','donation')], 'readonly': [('state','!=','draft')]}"/>
</div>
<label string="Sponsor / Donor Type" for="sponsor_or_donor_type"/>
<div class="o_row">
<field name="sponsor_or_donor_type"