diff --git a/odex25_benefit/odex_benefit/i18n/ar_001.po b/odex25_benefit/odex_benefit/i18n/ar_001.po
index 2e57c23e3..6ff7d2153 100644
--- a/odex25_benefit/odex_benefit/i18n/ar_001.po
+++ b/odex25_benefit/odex_benefit/i18n/ar_001.po
@@ -8407,6 +8407,7 @@ msgstr "نهاية الوقت المعين للنشاط"
#: model_terms:ir.ui.view,arch_db:odex_benefit.external_benefit_view_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.family_member_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form
+#: model:ir.model.fields,field_description:odex_benefit.field_property_type_settings__name
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_benefit_category_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_benefit_housing_form
#: model_terms:ir.ui.view,arch_db:odex_benefit.benefit_vehicle_model_form_view
@@ -17947,4 +17948,16 @@ msgstr "الخدمات غير المتاحة للأسر أو الأفراد ال
#. module: odex_benefit
#: model_terms:ir.actions.act_window,help:odex_benefit.action_property_type_settings
msgid "Create the Property Type"
-msgstr "إنشاء نوع العقار"
\ No newline at end of file
+msgstr "إنشاء نوع العقار"
+
+#. module: odex_benefit
+#: model:ir.model.fields,field_description:odex_benefit.field_relation_settings__grace_period_days
+msgid "Grace Period After Age Limit (Days)"
+msgstr "فترة السماح للاستفادة من الخدمات بعد وصول العمر"
+
+#. module: odex_benefit
+#: model:ir.model.fields,help:odex_benefit.field_relation_settings__grace_period_days
+msgid ""
+"Number of days the member remains eligible for benefits after reaching the "
+"configured age limit."
+msgstr "عدد الأيام التي يظل فيها الفرد مؤهلاً للاستفادة من الخدمات بعد بلوغه الحد العمري المحدد."
\ No newline at end of file
diff --git a/odex25_benefit/odex_benefit/models/benefit_config.py b/odex25_benefit/odex_benefit/models/benefit_config.py
index 8fed51eec..25b789287 100644
--- a/odex25_benefit/odex_benefit/models/benefit_config.py
+++ b/odex25_benefit/odex_benefit/models/benefit_config.py
@@ -783,6 +783,11 @@ class RelationSettings(models.Model):
relation_type = fields.Selection(
[('son', _('Son')), ('daughter', _('Daughter')),('mother', _('Mother')),('replacement_mother', _('Replacement Mother')),('other relation', _('Other Relation'))])
age_difference = fields.Integer()
+ grace_period_days = fields.Integer(
+ string="Grace Period After Age Limit (Days)",
+ default=0,
+ help="Number of days the member remains eligible for benefits after reaching the configured age limit."
+ )
class LocationSettings(models.Model):
_name = 'location.settings'
diff --git a/odex25_benefit/odex_benefit/models/family_members.py b/odex25_benefit/odex_benefit/models/family_members.py
index a7bea4e46..4f964614d 100644
--- a/odex25_benefit/odex_benefit/models/family_members.py
+++ b/odex25_benefit/odex_benefit/models/family_members.py
@@ -539,10 +539,28 @@ class FamilyMemberProfile(models.Model):
exceptional_age_has_disabilities = validation_setting.exceptional_age_has_disabilities
minor_siblings_age = validation_setting.minor_siblings_age
max_income_for_benefit = validation_setting.max_income_for_benefit
+ grace_days = rec.relationn.grace_period_days or 0
+
+ if rec.relationn.relation_type == 'daughter':
+ limit_age = female_benefit_age
+ elif rec.relationn.relation_type == 'son':
+ limit_age = male_benefit_age
+ else:
+ limit_age = 0
+
+ if limit_age > 0:
+ start_of_next_year = rec.birth_date + rd(years=limit_age + 1)
+ end_benefit_date = start_of_next_year + rd(days=grace_days)
+ age_exceeded = date.today() > end_benefit_date
+ else:
+ age_exceeded = False
+
rec.member_status = 'benefit' # Default to benefit
+
benefiting_children = rec.benefit_id.member_ids.filtered(
lambda m: m.relationn.relation_type in ['son', 'daughter'] and m.member_status == 'benefit'
)
+
if rec.relationn.relation_type == 'mother':
if not benefiting_children:
rec.write({'member_status': 'non_benefit'})
@@ -550,6 +568,7 @@ class FamilyMemberProfile(models.Model):
else:
rec.member_status, mother_reasons = rec.benefit_id.check_mother_status()
reasons.append(mother_reasons)
+
elif rec.relationn.relation_type == 'replacement_mother':
rec.member_status, repl_reasons = rec.benefit_id.check_replacement_mother_status()
reasons.append(repl_reasons)
@@ -558,9 +577,10 @@ class FamilyMemberProfile(models.Model):
reasons.append(
_("The application has been rejected due to missing required documents, lack of official proofs, or the family's ineligibility for the association's services."))
# continue # Skip further checks for mothers
+
# Gender-specific checks
elif rec.relationn.relation_type == 'son':
- if rec.age > male_benefit_age:
+ if age_exceeded:
if rec.age <= exceptional_age_has_disabilities and rec.disabilities_attachment_ids and rec.minor_siblings:
rec.member_status = 'benefit'
else:
@@ -606,6 +626,7 @@ class FamilyMemberProfile(models.Model):
rec.member_status = 'non_benefit'
reasons.append(
_("Failure to complete the required documents or official proofs, or the family’s ineligibility for the association’s services, and the application has been rejected."))
+
elif rec.relationn.relation_type == 'daughter':
if rec.age < female_benefit_age and rec.is_married:
rec.member_status = 'non_benefit'
@@ -614,7 +635,7 @@ class FamilyMemberProfile(models.Model):
'educated'] and current_education_status_id.case_study != 'continuous':
rec.member_status = 'non_benefit'
reasons.append(_("She is employed and not enrolled in an educational institution."))
- if rec.age > female_benefit_age:
+ if age_exceeded:
if rec.age > minor_siblings_age and not rec.minor_siblings:
rec.member_status = 'non_benefit'
reasons.append(
diff --git a/odex25_benefit/odex_benefit/views/benefit_config_view.xml b/odex25_benefit/odex_benefit/views/benefit_config_view.xml
index 0282e2384..cf347879c 100644
--- a/odex25_benefit/odex_benefit/views/benefit_config_view.xml
+++ b/odex25_benefit/odex_benefit/views/benefit_config_view.xml
@@ -1022,8 +1022,11 @@
+
+
+
diff --git a/odex25_benefit/odex_benefit/views/service_request.xml b/odex25_benefit/odex_benefit/views/service_request.xml
index 2cd30ef7a..08f3d0daf 100644
--- a/odex25_benefit/odex_benefit/views/service_request.xml
+++ b/odex25_benefit/odex_benefit/views/service_request.xml
@@ -435,9 +435,9 @@
+ attrs="{'invisible': [('is_driver_family_member', '=', True)], 'required': [('service_type', '=', 'buy_car'),('is_driver_family_member', '=', False)]}"/>
+ attrs="{'invisible': [('is_driver_family_member', '=', False)], 'required': [('service_type', '=', 'buy_car'),('is_driver_family_member', '=', True)]}"/>