From 5e80198d691d54c1c67968ab81cb6bcef4536215 Mon Sep 17 00:00:00 2001 From: younes Date: Mon, 27 Oct 2025 13:30:06 +0100 Subject: [PATCH] [IMP] odex_benefit: Updates to Service Configuration and Request --- odex25_ensan/odex_benefit/i18n/ar_001.po | 61 +++++++++++++++++-- .../odex_benefit/models/service_request.py | 44 +++++++++++-- .../odex_benefit/models/services_settings.py | 13 +++- .../odex_benefit/views/service_request.xml | 31 ++++++---- .../odex_benefit/views/services_settings.xml | 8 ++- 5 files changed, 128 insertions(+), 29 deletions(-) diff --git a/odex25_ensan/odex_benefit/i18n/ar_001.po b/odex25_ensan/odex_benefit/i18n/ar_001.po index a5c515043..b36fd5779 100644 --- a/odex25_ensan/odex_benefit/i18n/ar_001.po +++ b/odex25_ensan/odex_benefit/i18n/ar_001.po @@ -16340,11 +16340,6 @@ msgstr "الحد الأقصى لعدد الأفراد" msgid "Amount For Buy Home for member count" msgstr "القيمة الإجمالية للمنزل" -#. module: odex_benefit -#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__max_health_care_amount -msgid "Max Health Care Amount In Year" -msgstr "حقل الحد الأقصى للخدمة في العام" - #. module: odex_benefit #: model:ir.model.fields,field_description:odex_benefit.field_services_settings__member_max_payroll msgid "Member Max Payroll" @@ -16631,6 +16626,62 @@ msgid "" "one year." msgstr "لا يمكنك طلب هذه الخدمة لأن تاريخ عقد الزواج يتجاوز سنة واحدة." +#. module: odex_benefit +#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__max_limit_period__request +msgid "Per Request" +msgstr "للطلب" + +#. module: odex_benefit +#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__max_limit_period__individual +msgid "Per Individual" +msgstr "للفرد" + +#. module: odex_benefit +#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__max_limit_period__month +msgid "Per Month" +msgstr "للشهر" + +#. module: odex_benefit +#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__max_limit_period__year +msgid "Per Year" +msgstr "للسنة" + +#. module: odex_benefit +#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__max_limit_period__recurrence_period +msgid "For Allowed Recurrence Period" +msgstr "لفترة التكرار المسموح" + +#. module: odex_benefit +#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__max_months_limit +msgid "Maximum Number of Months" +msgstr "أقصى عدد للشهور" + +#. module: odex_benefit +#: model:ir.model.fields,field_description:odex_benefit.field_service_request__max_limit_period +#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__max_limit_period +msgid "Maximum Limit Period" +msgstr "فترة الحد الأقصى" + +#. module: odex_benefit +#: code:addons/odex_benefit/models/service_request.py:0 +#, python-format +msgid "Start date must be before end date." +msgstr "يجب أن يكون تاريخ البداية قبل تاريخ النهاية." + +#. module: odex_benefit +#: code:addons/odex_benefit/models/service_request.py:0 +#, python-format +msgid "You cannot request this service for more than %s months." +msgstr "لا يمكنك طلب هذه الخدمة لأكثر من %s شهرًا." + +#. module: odex_benefit +#: code:addons/odex_benefit/models/service_request.py:0 +#, python-format +msgid "" +"This service request overlaps with an existing requests [%s] for the same " +"service between %s and %s." +msgstr "يتداخل هذا الطلب مع طلبات أخرى لنفس الخدمة [%s] خلال الفترة من %s إلى %s." + #. module: odex_benefit #: code:addons/odex_benefit/models/service_request.py:0 #, python-format diff --git a/odex25_ensan/odex_benefit/models/service_request.py b/odex25_ensan/odex_benefit/models/service_request.py index 448d0bda7..56f0c96d8 100644 --- a/odex25_ensan/odex_benefit/models/service_request.py +++ b/odex25_ensan/odex_benefit/models/service_request.py @@ -31,6 +31,7 @@ class ServiceRequest(models.Model): estimated_rent_amount_payment = fields.Float(string="Estimated Rent Amount Payment",compute="_get_estimated_rent_amount_payment") paid_rent_amount = fields.Float(string="Paid Rent Amount",compute="_get_paid_rent_amount") service_type = fields.Selection([('rent', 'Rent')],string='Service Type',related='service_cat.service_type') + max_limit_period = fields.Selection(string='Maximum Limit Period',related='service_cat.max_limit_period') # is_alternative_housing = fields.Boolean(string='Is Alternative Housing?') rent_contract_number = fields.Char(string="Rent Contract Number",compute='_compute_rent_details',store=True) rent_start_date = fields.Date(string='Rent Start Date',compute='_compute_rent_details',store=True) @@ -571,7 +572,8 @@ class ServiceRequest(models.Model): 'device_id', 'requested_quantity', 'amount_for_buy_home_for_member_count', - 'marriage_contract_date' + 'marriage_contract_date', + 'start','end' ) def onchange_requested_service_amount(self): res = {} @@ -660,6 +662,22 @@ class ServiceRequest(models.Model): raise ValidationError( _("You cannot request this service Again Because the home Age More than %s") % rec.service_cat.home_age) + if rec.start and rec.end: + if rec.start > rec.end: + raise ValidationError(_("Start date must be before end date.")) + overlap_domain = base_domain + [ + ('start', '!=', False), + ('end', '!=', False), + ('start', '<=', rec.end), + ('end', '>=', rec.start) + ] + overlap_requests = Service.search(overlap_domain) + if overlap_requests: + raise ValidationError( + _("This service request overlaps with an existing requests [%s] for the same service " + "between %s and %s.") % (", ".join(overlap_requests.mapped('name')),rec.start, rec.end) + ) + if allowed: if allowed == 'unlimited': pass @@ -743,16 +761,30 @@ class ServiceRequest(models.Model): rec.service_max_amount = rec.service_cat.limit_person_line_ids and max(rec.service_cat.limit_person_line_ids.filtered( lambda x: x.min_count_member <= rec.benefit_member_count <= x.max_count_member)).amount or 0 + if rec.max_limit_period: + if rec.max_limit_period == "month": + num_months = (rec.end.year - rec.start.year) * 12 + (rec.end.month - rec.start.month) + 1 + if num_months > rec.service_cat.max_months_limit: + raise ValidationError( + _("You cannot request this service for more than %s months.") % rec.service_cat.max_months_limit + ) + rec.service_max_amount *= num_months + elif rec.max_limit_period == "year": + before_year_domain = base_domain + [('date', '>', date_before_year)] + existing_requests_within_year = Service.search(before_year_domain) + total_spent = sum(existing_requests_within_year.mapped('requested_service_amount')) + rec.service_max_amount = rec.service_cat.max_amount - total_spent + elif rec.max_limit_period == "individual": + if rec.benefit_type == "family": + rec.service_max_amount *= rec.benefit_member_count + elif rec.max_limit_period == "recurrence_period": + pass + if service_type == 'transportation_insurance': if rec.service_reason_id and rec.requested_service_amount > rec.max_amount: raise ValidationError(_("You cannot request more than %s")) continue - if rec.service_cat.service_type == 'health_care': - domain = base_domain + [('date', '>', date_before_year)] - existing_requests_within_year = Service.search(domain) - rec.service_max_amount = rec.service_cat.max_health_care_amount - sum(existing_requests_within_year.mapped('requested_service_amount')) - if rec.service_cat.service_type == 'marriage': if rec.member_id.relationn.relation_type == 'son' and not rec.member_id.is_work: raise ValidationError(_("This service is not eligible because the son is not working.")) diff --git a/odex25_ensan/odex_benefit/models/services_settings.py b/odex25_ensan/odex_benefit/models/services_settings.py index 391ec98d4..1efa2b375 100644 --- a/odex25_ensan/odex_benefit/models/services_settings.py +++ b/odex25_ensan/odex_benefit/models/services_settings.py @@ -43,8 +43,6 @@ class ServicesSettings(models.Model): min_count_member = fields.Integer(string='Mini Count Member') #Transportation insurance transportation_insurance_ids = fields.One2many('transportation.insurance', 'services_settings_id') - #Health_care - max_health_care_amount = fields.Float(string='Max Health Care Amount In Year') member_max_payroll = fields.Float(string='Member Max Payroll') fatherless_member_amount = fields.Float(string='Fatherless Member Amount') orphan_member_amount = fields.Float(string='Orphan Member Amount') @@ -107,6 +105,17 @@ class ServicesSettings(models.Model): needs_legal_approval = fields.Boolean(string="Needs Legal Approval") needs_project_management_approval = fields.Boolean(string="Needs Project Management Approval") allow_non_beneficiary = fields.Boolean(string="Allow Non Beneficiary") + max_limit_period = fields.Selection([ + ('request', 'Per Request'), + ('individual', 'Per Individual'), + ('month', 'Per Month'), + ('year', 'Per Year'), + ('recurrence_period', 'For Allowed Recurrence Period'), + ], string='Maximum Limit Period') + max_months_limit = fields.Integer( + string='Maximum Number of Months', + help='Specify the maximum allowed number of months when the period type is monthly.' + ) diff --git a/odex25_ensan/odex_benefit/views/service_request.xml b/odex25_ensan/odex_benefit/views/service_request.xml index 49721784a..cad2a5956 100644 --- a/odex25_ensan/odex_benefit/views/service_request.xml +++ b/odex25_ensan/odex_benefit/views/service_request.xml @@ -201,10 +201,26 @@ + - + @@ -100,7 +101,8 @@ - +