diff --git a/odex25_benefit/odex_benefit/i18n/ar_001.po b/odex25_benefit/odex_benefit/i18n/ar_001.po index 49820f1f4..01c8bf847 100644 --- a/odex25_benefit/odex_benefit/i18n/ar_001.po +++ b/odex25_benefit/odex_benefit/i18n/ar_001.po @@ -16572,12 +16572,6 @@ msgid "" "service between %s and %s." msgstr "يتداخل هذا الطلب مع طلبات أخرى لنفس الخدمة [%s] خلال الفترة من %s إلى %s." -#. module: odex_benefit -#: code:addons/odex_benefit/models/service_request.py:0 -#, python-format -msgid "This service is not eligible because the son is not working." -msgstr "هذه الخدمة غير مستحقة لأن الفرد لا يعمل." - #. module: odex_benefit #: code:addons/odex_benefit/models/benefit.py:0 #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__total_father_families diff --git a/odex25_benefit/odex_benefit/models/service_request.py b/odex25_benefit/odex_benefit/models/service_request.py index 2eb81a2c3..b542fc7ec 100644 --- a/odex25_benefit/odex_benefit/models/service_request.py +++ b/odex25_benefit/odex_benefit/models/service_request.py @@ -46,6 +46,11 @@ class ServiceRequest(models.Model): compute="_get_estimated_rent_amount_payment") 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') + payment_method = fields.Selection([ + ('none', 'None'), + ('payment_order', 'Payment Order'), + ('invoice', 'Invoice'), + ], string='Payment Method', default="payment_order") # 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) @@ -95,8 +100,7 @@ class ServiceRequest(models.Model): device_account_id = fields.Many2one('account.account', string='Expenses Account', related='device_id.account_id') accountant_id = fields.Many2one('res.users', string='Accountant', related='service_cat.accountant_id', readonly=False) - service_producer_id = fields.Many2one('res.partner', string='Service Producer', - related='service_cat.service_producer_id') + service_producer_id = fields.Many2one('res.partner', string='Service Producer', ) is_service_producer = fields.Boolean(string='Is Service Producer?', related='service_cat.is_service_producer') # maintenance_items_id = fields.Many2one('home.maintenance.lines', string="Maintenance Items") maintenance_items_ids = fields.One2many('home.maintenance.items', 'service_request_id', @@ -180,6 +184,9 @@ class ServiceRequest(models.Model): car_name = fields.Char(string='Car Name') 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') 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', @@ -227,6 +234,20 @@ class ServiceRequest(models.Model): payment_order_state = "waiting" rec.payment_order_state = payment_order_state + @api.depends('car_price', 'requested_service_amount', 'service_cat.service_type') + def _compute_remaining_amount(self): + for rec in self: + if rec.service_cat and rec.service_cat.service_type == 'buy_car': + if rec.car_price and rec.requested_service_amount: + rec.car_remaining_amount = rec.car_price - rec.requested_service_amount + rec.show_car_remaining_amount = rec.car_price > rec.requested_service_amount + else: + rec.car_remaining_amount = 0.0 + rec.show_car_remaining_amount = False + else: + rec.car_remaining_amount = 0.0 + rec.show_car_remaining_amount = False + def action_return_bank(self): self.ensure_one() return { @@ -523,7 +544,15 @@ class ServiceRequest(models.Model): @api.onchange('family_id', 'service_cat') def _onchange_member(self): for rec in self: - rec.benefit_type = rec.service_cat.benefit_type + if rec.service_cat: + rec.benefit_type = rec.service_cat.benefit_type + rec.service_producer_id = rec.service_cat.service_producer_id + rec.payment_method = rec.service_cat.payment_method + else: + rec.benefit_type = False + rec.service_producer_id = False + rec.payment_method = 'payment_order' + if not rec.family_id: rec.member_id = False rec.service_cat = False @@ -610,24 +639,35 @@ class ServiceRequest(models.Model): raise ValidationError( _("You cannot request this service because you are less than %s") % rec.service_cat.min_count_member) if rec.service_cat.service_type == 'recruiting_driver': - son_members_above_age = rec.family_id.mapped('member_ids').filtered( - lambda x: x.relationn.relation_type == 'son' and x.age > 18) - daughter_members_above_age = rec.family_id.mapped('member_ids').filtered( - lambda x: x.relationn.relation_type == 'daughter' and x.age > 18) - disable_mother = rec.family_id.mapped('member_ids').filtered( - lambda x: x.relationn.relation_type == 'mother') - work_mother = rec.family_id.mapped('member_ids').filtered( - lambda x: x.relationn.relation_type == 'mother' and x.benefit_id.is_mother_work) - disable_replacement_mother = rec.family_id.mapped('member_ids').filtered( - lambda x: x.relationn.relation_type == 'replacement_mother') - work_replacement_mother = rec.family_id.mapped('member_ids').filtered( - lambda - x: x.relationn.relation_type == 'replacement_mother' and x.replacement_is_mother_work) if not rec.family_id.has_car: raise ValidationError(_("You cannot request this service because you do not have a car")) - if son_members_above_age or daughter_members_above_age: + #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( + # lambda x: x.relationn.relation_type == 'daughter' and x.age > 18) + + children_above_18_living_with_family = rec.family_id.member_ids.filtered( + lambda m: m.relationn.relation_type in ('son', 'daughter') + and m.age > 18 + and not m.member_location_conf.is_far_from_family + ) + + if children_above_18_living_with_family: raise ValidationError( - _("You cannot request this service because children above 18 years")) + _("You cannot request this service because there is at least one child over 18 years old living with the family.") + ) + + disable_mother = rec.family_id.member_ids.filtered( + lambda x: x.relationn.relation_type == 'mother' and bool(x.disabilities_attachment_ids)) + 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)) + 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: + # 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: raise ValidationError( _("You cannot request this service because mother should be worked or has disability")) @@ -807,9 +847,6 @@ class ServiceRequest(models.Model): remaining = 0 rec.service_max_amount = remaining 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.")) - if rec.marriage_contract_date and rec.date: request_date = rec.date.date() if isinstance(rec.date, datetime) else rec.date contract_date = rec.marriage_contract_date @@ -823,7 +860,7 @@ class ServiceRequest(models.Model): rec.requested_service_amount = rec.service_max_amount if rec.member_age > rec.service_cat.max_age: raise ValidationError(_("Member Age should be less than %s ") % rec.service_cat.max_age) - if rec.member_payroll > rec.service_cat.member_max_payroll: + if rec.member_id.is_work and rec.member_payroll > rec.service_cat.member_max_payroll: raise ValidationError( _("Member Payroll should be less than %s ") % rec.service_cat.member_max_payroll) if not rec.is_orphan and rec.requested_service_amount > rec.service_max_amount: @@ -908,6 +945,12 @@ class ServiceRequest(models.Model): }) elif service_cats.payment_method == "invoice": + missing_producer = self.filtered(lambda r: not r.service_producer_id) + if missing_producer: + names = ", ".join(missing_producer.mapped('name')) + raise UserError(_( + "The following service requests do not have a Service Producer defined:\n%s" + ) % names) invalid_records = self.filtered( lambda r: r.state != 'accounting_approve' or r.payment_order_state != 'none' diff --git a/odex25_benefit/odex_benefit/views/service_request.xml b/odex25_benefit/odex_benefit/views/service_request.xml index 178937f96..1ce29bc02 100644 --- a/odex25_benefit/odex_benefit/views/service_request.xml +++ b/odex25_benefit/odex_benefit/views/service_request.xml @@ -224,14 +224,15 @@ groups="odex_benefit.group_benefit_accounting_accept"/> - + + @@ -265,6 +266,9 @@ + + +