[IMP] odex_benefit: IMP benefit

This commit is contained in:
younes 2025-12-15 13:43:53 +01:00
parent c7afd786f1
commit ef1809aaad
2 changed files with 94 additions and 17 deletions

View File

@ -17540,4 +17540,69 @@ msgid ""
"%s"
msgstr ""
"طلبات الخدمة التالية ليس لديها جهة الدفع محددة:\n"
"%s"
"%s"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__related_information_html
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.services_settings_form
msgid "Related Information"
msgstr "المعلومات المرتبطة"
#. module: odex_benefit
#: code:addons/odex_benefit/models/service_request.py:0
#, python-format
msgid "Family Information"
msgstr "معلومات الأسرة"
#. module: odex_benefit
#: code:addons/odex_benefit/models/service_request.py:0
#, python-format
msgid "Member Information"
msgstr "معلومات الأفراد"
#. module: odex_benefit
#: code:addons/odex_benefit/models/service_request.py:0
#, python-format
msgid "Unnamed file"
msgstr "ملف بدون اسم"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__family_related_fields
msgid "Related Family Fields"
msgstr "الحقول المرتبطة بالأسرة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__member_related_fields
msgid "Related Member Fields"
msgstr "الحقول المرتبطة بالفرد"
#. module: odex_benefit
#: code:addons/odex_benefit/models/service_request.py:0
#, python-format
msgid "No service selected"
msgstr "لم يتم اختيار خدمة"
#. module: odex_benefit
#: code:addons/odex_benefit/models/service_request.py:0
#, python-format
msgid "Please select a service category to view related information."
msgstr "رجاءً اختر خدمة لعرض المعلومات المرتبطة."
#. module: odex_benefit
#: code:addons/odex_benefit/models/service_request.py:0
#, python-format
msgid "Field Name"
msgstr "اسم الحقل"
#. module: odex_benefit
#: code:addons/odex_benefit/models/service_request.py:0
#, python-format
msgid "Value"
msgstr "القيمة"
#. module: odex_benefit
#: code:addons/odex_benefit/models/service_request.py:0
#, python-format
msgid "No information available for this section."
msgstr "لا توجد معلومات متاحة."

View File

@ -4,6 +4,7 @@ from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
from odoo.tools import html_escape
class ServiceRequest(models.Model):
_name = 'service.request'
_inherit = ['mail.thread', 'mail.activity.mixin']
@ -185,8 +186,8 @@ class ServiceRequest(models.Model):
car_owner_id = fields.Many2one('family.member', domain="[('benefit_id','=',family_id)]", string="Car Owner")
car_model_id = fields.Many2one('benefit.vehicle.model', string='Car model')
car_price = fields.Float(string='Car Price')
car_remaining_amount = fields.Float(string='Remaining Amount',compute='_compute_remaining_amount',store=True,)
show_car_remaining_amount = fields.Boolean(string='Show Car Remaining Amount',compute='_compute_remaining_amount')
car_remaining_amount = fields.Float(string='Remaining Amount', compute='_compute_remaining_amount', store=True, )
show_car_remaining_amount = fields.Boolean(string='Show Car Remaining Amount', compute='_compute_remaining_amount')
application_form = fields.Many2many('ir.attachment', 'request_application_form_rel', 'request_id', 'attachment_id',
string="Application Form")
driving_license = fields.Many2many('ir.attachment', 'request_driving_license_rel', 'request_id', 'attachment_id',
@ -205,23 +206,27 @@ class ServiceRequest(models.Model):
return_reason_id = fields.Many2one("return.reason", string="Return Reason")
agree_terms = fields.Boolean(string="I agree to the Terms and Conditions", default=False, )
related_information_html = fields.Html(string="Related Information",
compute='_compute_related_information_html',store=True,)
compute='_compute_related_information_html', store=True, )
@api.depends('service_cat', 'family_id', 'member_id', 'benefit_type')
def _compute_related_information_html(self):
for rec in self:
if not rec.service_cat:
no_service_title = _("No service selected")
no_service_desc = _("Please select a service category to view related information.")
rec.related_information_html = f"""
<div class="o_form_sheet_not_found">
<div class="o_form_sheet_not_found_icon">📋</div>
<h4>{_("No service selected")}</h4>
<p>{_("Please select a service category to view related information.")}</p>
<h4>{no_service_title}</h4>
<p>{no_service_desc}</p>
</div>
"""
continue
family_rows = []
member_rows = []
family_title = _("Family Information")
member_title = _("Member Information")
for ir_field in rec.service_cat.family_related_fields:
row = rec._get_field_display_value(rec.family_id, ir_field)
@ -232,8 +237,8 @@ class ServiceRequest(models.Model):
row = rec._get_field_display_value(rec.member_id, ir_field)
if row:
member_rows.append(row)
family_table = rec._build_info_table(_("Family Information"), family_rows)
member_table = rec._build_info_table(_("Member Information"), member_rows) if member_rows else ""
family_table = rec._build_info_table(family_title, family_rows)
member_table = rec._build_info_table(member_title, member_rows) if member_rows else ""
rec.related_information_html = f"""
<div class="info-container">
@ -243,11 +248,14 @@ class ServiceRequest(models.Model):
"""
def _build_info_table(self, title, rows):
field_name_label = _("Field Name")
value_label = _("Value")
no_info_text = _("No information available for this section.")
if not rows:
return f"""
<div class="info-section">
<h3>{title}</h3>
<div class="info-empty">{_("No information available for this section.")}</div>
<div class="info-empty">{no_info_text}</div>
</div>
"""
return f"""
@ -256,8 +264,8 @@ class ServiceRequest(models.Model):
<table class="table info-table">
<thead>
<tr>
<th>{_("Field Name")}</th>
<th>{_("Value")}</th>
<th>{field_name_label}</th>
<th>{value_label}</th>
</tr>
</thead>
<tbody>
@ -304,8 +312,11 @@ class ServiceRequest(models.Model):
badges = [f'<span class="badge badge-secondary">{html_escape(r.name or "-")}</span>' for r in value]
display = ' '.join(badges) or '<span class="info-empty">—</span>'
elif field.type == 'one2many':
items = [f'<div style="margin:8px 0; padding:6px 0; border-bottom:1px dotted #ddd;">• {html_escape(r.display_name or r.name or "-")}</div>' for r in value[:20]]
more = f'<div style="color:#875A92; font-weight:600; margin-top:10px;">... {_("and")} {len(value)-20} {_("more records")}</div>' if len(value) > 20 else ""
items = [
f'<div style="margin:8px 0; padding:6px 0; border-bottom:1px dotted #ddd;">• {html_escape(r.display_name or r.name or "-")}</div>'
for r in value[:20]]
more = f'<div style="color:#875A92; font-weight:600; margin-top:10px;">... {_("and")} {len(value) - 20} {_("more records")}</div>' if len(
value) > 20 else ""
display = ''.join(items) + more or '<span class="info-empty">—</span>'
elif field.type == 'binary':
if value:
@ -760,9 +771,9 @@ class ServiceRequest(models.Model):
if rec.service_cat.service_type == 'recruiting_driver':
if not rec.family_id.has_car:
raise ValidationError(_("You cannot request this service because you do not have a car"))
#son_members_above_age = rec.family_id.member_ids.filtered(
# son_members_above_age = rec.family_id.member_ids.filtered(
# lambda x: x.relationn.relation_type == 'son' and x.age > 18)
#daughter_members_above_age = rec.family_id.member_ids.filtered(
# daughter_members_above_age = rec.family_id.member_ids.filtered(
# lambda x: x.relationn.relation_type == 'daughter' and x.age > 18)
children_above_18_living_with_family = rec.family_id.member_ids.filtered(
@ -781,10 +792,11 @@ class ServiceRequest(models.Model):
work_mother = rec.family_id.member_ids.filtered(
lambda x: x.relationn.relation_type == 'mother' and x.is_work)
disable_replacement_mother = rec.family_id.member_ids.filtered(
lambda x: x.relationn.relation_type == 'replacement_mother' and bool(x.disabilities_attachment_ids))
lambda x: x.relationn.relation_type == 'replacement_mother' and bool(
x.disabilities_attachment_ids))
work_replacement_mother = rec.family_id.member_ids.filtered(
lambda x: x.relationn.relation_type == 'replacement_mother' and x.is_work)
#if son_members_above_age or daughter_members_above_age:
# if son_members_above_age or daughter_members_above_age:
# raise ValidationError(
# _("You cannot request this service because children above 18 years"))
if rec.family_id.add_replacement_mother and not disable_replacement_mother and not work_replacement_mother: