From afb9e17ef9f0196adf609c495f004073b139592a Mon Sep 17 00:00:00 2001 From: younes Date: Tue, 23 Dec 2025 08:06:25 +0100 Subject: [PATCH] [IMP] odex_benefit: Add grace period for benefiting from services after reaching the age --- odex25_benefit/odex_benefit/i18n/ar_001.po | 15 ++++++++++- .../odex_benefit/models/benefit_config.py | 5 ++++ .../odex_benefit/models/family_members.py | 25 +++++++++++++++++-- .../views/benefit_config_view.xml | 3 +++ .../odex_benefit/views/service_request.xml | 4 +-- 5 files changed, 47 insertions(+), 5 deletions(-) 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)]}"/>