From ed4cb18cdfeb3aa5b4ebdbf13c0e750354013d1b Mon Sep 17 00:00:00 2001 From: Samir Ladoui Date: Mon, 19 May 2025 12:52:25 +0100 Subject: [PATCH] [FIX] odex_benefit --- odex25_ensan/odex_benefit/i18n/ar_001.po | 11 +++- .../odex_benefit/models/benefit_config.py | 2 + .../odex_benefit/models/service_request.py | 58 +++++++++++++++---- .../views/benefit_config_view.xml | 2 + .../odex_benefit/views/service_request.xml | 4 +- 5 files changed, 61 insertions(+), 16 deletions(-) diff --git a/odex25_ensan/odex_benefit/i18n/ar_001.po b/odex25_ensan/odex_benefit/i18n/ar_001.po index 3a55cb8a0..7864e1f3e 100644 --- a/odex25_ensan/odex_benefit/i18n/ar_001.po +++ b/odex25_ensan/odex_benefit/i18n/ar_001.po @@ -11954,8 +11954,8 @@ msgstr "" #. module: odex_benefit #: code:addons/odex_benefit/models/service_request.py:0 #, python-format -msgid "You Cannot request More than %s" -msgstr "" +msgid "You cannot request more than %s" +msgstr "لا يمكنك طلب أكثر من %s" #. module: odex_benefit #: code:addons/odex_benefit/models/service_request.py:0 @@ -11987,7 +11987,7 @@ msgstr "" #: code:addons/odex_benefit/models/service_request.py:0 #, python-format msgid "You cannot benefit from this service (property type not ownership)" -msgstr "" +msgstr "لا يمكنك الاستفادة من هذه الخدمة (نوع العقار ايجار وليس ملك)" #. module: odex_benefit #: code:addons/odex_benefit/models/service_request.py:0 @@ -13890,6 +13890,11 @@ msgstr "عدد الطلبات" msgid "Is Family member?" msgstr "هل صاحب الحساب من أفراد الأسرة؟" +#. module: odex_benefit +#: model:ir.model.fields,field_description:odex_benefit.field_location_settings__is_far_from_family +msgid "Is Far From Family?" +msgstr "هل هو بعيد عن سكن العائلة؟" + #. module: odex_benefit #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__owner_identity_attachment_ids msgid "Account holder identity" diff --git a/odex25_ensan/odex_benefit/models/benefit_config.py b/odex25_ensan/odex_benefit/models/benefit_config.py index 8029e5ca0..0f4db7923 100644 --- a/odex25_ensan/odex_benefit/models/benefit_config.py +++ b/odex25_ensan/odex_benefit/models/benefit_config.py @@ -664,6 +664,7 @@ class LocationSettings(models.Model): name = fields.Char(string='name') location_type = fields.Selection([('member', _('Member')), ('mother_location', _('Mother Location'))]) is_benefit = fields.Boolean(string='Is Benefit?') + is_far_from_family = fields.Boolean(string='Is Far From Family?') class AttachmentsSettings(models.Model): _name = 'attachments.settings' @@ -781,6 +782,7 @@ class ServiceAttachmentsSettings(models.Model): ('natural_disasters', 'Natural disasters'), ('legal_arguments', 'Legal arguments')],string='Service Type',related="service_id.service_type") service_id = fields.Many2one('services.settings',string='Service') service_request_id = fields.Many2one('service.request',string='Service Request') + previous_service_attachment_settings_id = fields.Many2one('service.attachments.settings', readonly=True) notes = fields.Text(string='Notes') class HomeMaintenanceItems(models.Model): diff --git a/odex25_ensan/odex_benefit/models/service_request.py b/odex25_ensan/odex_benefit/models/service_request.py index c75c6694a..9bb23436e 100644 --- a/odex25_ensan/odex_benefit/models/service_request.py +++ b/odex25_ensan/odex_benefit/models/service_request.py @@ -19,7 +19,7 @@ class ServiceRequest(models.Model): family_category = fields.Many2one('benefit.category',string='Family Category',related='family_id.benefit_category_id') benefit_member_count = fields.Integer(string="Benefit Member count", related='family_id.benefit_member_count') branch_custom_id = fields.Many2one('branch.settings', string="Branch",related='family_id.branch_custom_id',store=True) - member_id = fields.Many2one('family.member',domain="[('benefit_id','=',family_id)]",string='Member') + member_id = fields.Many2one('family.member',domain="[('benefit_id','=',family_id), ('member_status', '=', 'benefit')]",string='Member') description = fields.Char(string='Description') need_status = fields.Selection(string='Need Status',selection=[('urgent', 'urgent'),('not_urgent', 'Not urgent')]) main_service_category = fields.Many2one('services.settings',domain="[('is_main_service','=',True)]",string="Main Service Category") @@ -66,7 +66,14 @@ class ServiceRequest(models.Model): member_rent_attachment = fields.Many2many('ir.attachment', 'rel_member_rent_attachment_service_request', 'service_request_id', 'attachment_id', string='Rent Attachment') added_amount_if_mother_dead = fields.Float(string="Added Amount (If mother dead)",compute="_get_added_amount_if_mother_dead") - attachment_lines = fields.One2many('service.attachments.settings','service_request_id',related='service_cat.attachment_lines',readonly=False) + attachment_lines = fields.One2many( + 'service.attachments.settings', + 'service_request_id', + compute='_compute_attachment_lines', + readonly=False, + copy=False, + store=True + ) account_id = fields.Many2one( 'account.account', string='Expenses Account', @@ -165,6 +172,17 @@ class ServiceRequest(models.Model): for rec in self: if rec.service_type == 'electrical_devices': rec.requested_service_amount = rec.device_id.price_unit if rec.device_id else 0.0 + + @api.depends('service_cat') + def _compute_attachment_lines(self): + for rec in self: + rec.attachment_lines.unlink() + for attachment_line in rec.service_cat.attachment_lines: + attachment_line.copy({ + 'service_id': False, + 'service_request_id': rec.id, + 'previous_service_attachment_settings_id': attachment_line.id + }) @api.model def search(self, args, offset=0, limit=None, order=None, count=False): @@ -539,6 +557,18 @@ class ServiceRequest(models.Model): 'message': _("You cannot request more than %s") % max_requested_amount} return res + # Validation for 'family' benefit type + if rec.benefit_type == 'family' and rec.service_cat.service_type == 'rent': + rent_line_id = rec.service_cat.rent_lines.filtered(lambda r: r.benefit_category_id.id == rec.family_category.id \ + and r.benefit_count == rec.benefit_member_count + ) + max_requested_amount = rent_line_id.estimated_rent_branches if rec.branch_custom_id.branch_type == 'branches' else rent_line_id.estimated_rent_governorate + if rec.requested_service_amount > max_requested_amount: + self.benefit_type = False + res['warning'] = {'title': _('ValidationError'), + 'message': _("You cannot request more than %s") % max_requested_amount} + return res + # Validation for 'family' benefit type with 'home_maintenance' if rec.benefit_type == 'family' and rec.service_cat.service_type == 'home_maintenance': max_requested_amount = rec.service_cat.max_maintenance_amount @@ -581,6 +611,12 @@ class ServiceRequest(models.Model): if existing_request_maintenance: raise UserError( _("You cannot request this service with maintenance service in the same year.")) + if rec.has_money_to_pay_first_payment == 'no': + home_restoration_line_id = rec.service_cat.home_restoration_lines.filtered(lambda r: r.benefit_category_id.id == rec.family_category.id) + if rec.requested_service_amount > home_restoration_line_id.max_amount: + raise UserError( + _("You cannot request more than %s") % home_restoration_line_id.max_amount + ) # Validation for 'family' benefit type with 'complete_building_house' service type if rec.benefit_type == 'family' and rec.service_cat.service_type == 'complete_building_house': @@ -748,8 +784,8 @@ class ServiceRequest(models.Model): 'message': _( "You cannot request more than %s") % rec.service_cat.max_debits_amount} return res - # Validation for 'family' benefit type with 'health_care' service type - if rec.benefit_type == 'family' and rec.service_cat.service_type == 'health_care': + # Validation for 'family and member' benefit type with 'health_care' service type + if rec.service_cat.service_type == 'health_care': # Add current record conditionally domain = [ ('family_id', '=', self.family_id.id), @@ -769,8 +805,8 @@ class ServiceRequest(models.Model): 'message': _( "You cannot request more than %s within year") % rec.service_cat.max_health_care_amount} return res - # Validation for 'family' benefit type with 'health_care' service type - if rec.benefit_type == 'family' and rec.service_cat.service_type == 'recruiting_domestic_worker_or_nurse': + # Validation for 'family and member' benefit type with 'health_care' service type + if rec.service_cat.service_type == 'recruiting_domestic_worker_or_nurse': # Add current record conditionally domain = [ ('family_id', '=', self.family_id.id), @@ -808,16 +844,16 @@ class ServiceRequest(models.Model): if rec.benefit_type == 'family' and rec.service_cat.service_type == 'eid_gift': if rec.eid_gift_benefit_count == 0: raise UserError(_("You cannot request this service")) - # Validation for 'family' benefit type with 'natural_disasters' service type - if rec.benefit_type == 'family' and rec.service_cat.service_type == 'natural_disasters': + # Validation for 'family and member' benefit type with 'natural_disasters' service type + if rec.service_cat.service_type == 'natural_disasters': if rec.requested_service_amount > rec.service_cat.natural_disasters_max_amount: self.benefit_type = False res['warning'] = {'title': _('ValidationError'), 'message': _( "You cannot request more than %s") % rec.service_cat.natural_disasters_max_amount} return res - # Validation for 'family' benefit type with 'legal_arguments' service type - if rec.benefit_type == 'family' and rec.service_cat.service_type == 'legal_arguments': + # Validation for 'family and member' benefit type with 'legal_arguments' service type + if rec.service_cat.service_type == 'legal_arguments': if rec.requested_service_amount > rec.service_cat.legal_arguments_max_amount: self.benefit_type = False res['warning'] = {'title': _('ValidationError'), @@ -863,7 +899,7 @@ class ServiceRequest(models.Model): @api.onchange('member_id') def onchange_member_id(self): for rec in self: - if rec.member_id and rec.member_id.member_location != 'study_inside_saudi_arabia' and rec.service_type == 'rent': + if rec.member_id and rec.service_type == 'rent' and (rec.member_id.member_location != 'study_inside_saudi_arabia' or not rec.member_id.member_location_conf.is_far_from_family): raise UserError(_("You Cannot request Service if you not study inside Saudi Arabia")) @api.onchange('start', 'end', 'rent_start_date', 'rent_end_date','new_start', 'new_end', 'new_rent_start_date', 'new_rent_end_date', 'new_rent_contract') diff --git a/odex25_ensan/odex_benefit/views/benefit_config_view.xml b/odex25_ensan/odex_benefit/views/benefit_config_view.xml index b86248595..c293d5cda 100644 --- a/odex25_ensan/odex_benefit/views/benefit_config_view.xml +++ b/odex25_ensan/odex_benefit/views/benefit_config_view.xml @@ -995,6 +995,7 @@ + @@ -1009,6 +1010,7 @@ + diff --git a/odex25_ensan/odex_benefit/views/service_request.xml b/odex25_ensan/odex_benefit/views/service_request.xml index 3a8aa809a..819808c02 100644 --- a/odex25_ensan/odex_benefit/views/service_request.xml +++ b/odex25_ensan/odex_benefit/views/service_request.xml @@ -78,8 +78,8 @@ '|', '&', ('state', 'not in', ['draft', 'researcher', 'send_request', 'first_approve', 'second_approve', 'accounting_approve']), - ('service_type', 'in', ['home_furnishing', 'marriage', 'eid_gift', 'winter_clothing', 'ramadan_basket']), - ('service_type', '=', 'electrical_devices') + ('service_type', 'in', ['marriage', 'eid_gift', 'winter_clothing', 'ramadan_basket']), + ('service_type', 'in', ['electrical_devices', 'home_furnishing']) ]}" force_save="1" required="1" />