diff --git a/odex25_benefit/odex_benefit/i18n/ar_001.po b/odex25_benefit/odex_benefit/i18n/ar_001.po
index 49820f1f4..01210a718 100644
--- a/odex25_benefit/odex_benefit/i18n/ar_001.po
+++ b/odex25_benefit/odex_benefit/i18n/ar_001.po
@@ -6681,6 +6681,7 @@ msgstr "تاريخ الانقطاع"
#: model:ir.model.fields,field_description:odex_benefit.field_external_benefits__invoice_warn
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__invoice_warn
#: model:ir.model.fields,field_description:odex_benefit.field_needs_payment_line__invoice_id
+#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__payment_method__invoice
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__payment_method__invoice
msgid "Invoice"
msgstr "فاتورة"
@@ -9792,6 +9793,7 @@ msgstr "صلة القرابة"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_needs__remaining_amount
+#: model:ir.model.fields,field_description:odex_benefit.field_service_request__car_remaining_amount
msgid "Remaining Amount"
msgstr "المبلغ المتبقي"
@@ -10493,7 +10495,7 @@ msgstr "اسم الخدمة"
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__service_producer_id
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__service_producer_id
msgid "Service Producer"
-msgstr ""
+msgstr "جهة الدفع"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_home_furnishing_items__service_request_id
@@ -14331,6 +14333,7 @@ msgstr "حساب المصروف"
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__payment_order_id
#: model:ir.model.fields,field_description:odex_benefit.field_seasonal_service__payment_order_id
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__payment_order_id
+#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__payment_method__payment_order
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__payment_method__payment_order
msgid "Payment Order"
msgstr "أمر الصرف"
@@ -16150,12 +16153,6 @@ msgstr "لا يمكنك طلب هذه الخدمة لأنك أقل من الحد
msgid "You cannot request this service because you do not have a car"
msgstr "لا يمكنك طلب هذه الخدمة لأنك لا تملك سيارة"
-#. module: odex_benefit
-#: code:addons/odex_benefit/models/service_request.py:0
-#, python-format
-msgid "You cannot request this service because children above 18 years"
-msgstr "لا يمكنك طلب هذه الخدمة لأن الأطفال أكبر من 18 عامًا"
-
#. module: odex_benefit
#: code:addons/odex_benefit/models/service_request.py:0
#: code:addons/odex_benefit/models/service_request.py:0
@@ -16572,12 +16569,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
@@ -16783,6 +16774,7 @@ msgstr "حالة أمر الدفع"
#: model:ir.model.fields.selection,name:odex_benefit.selection__confirm_benefit_expense__move_state__none
#: model:ir.model.fields.selection,name:odex_benefit.selection__confirm_benefit_expense__payment_state__none
#: model:ir.model.fields.selection,name:odex_benefit.selection__seasonal_service__payment_order_state__none
+#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__payment_method__none
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__payment_order_state__none
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__payment_method__none
msgid "None"
@@ -16918,6 +16910,7 @@ msgid "Waiting for Deposit"
msgstr "بانتظار الايداع"
#. module: odex_benefit
+#: model:ir.model.fields,field_description:odex_benefit.field_service_request__payment_method
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__payment_method
msgid "Payment Method"
msgstr "طريقة الدفع"
@@ -17521,3 +17514,30 @@ msgstr "الجهة الداعمة"
msgid "Supporter Entities"
msgstr "الجهات الداعمة"
+#. module: odex_benefit
+#: model:ir.model.fields,field_description:odex_benefit.field_service_request__car_price
+msgid "Car Price"
+msgstr "قيمة السيارة"
+
+#. module: odex_benefit
+#: model:ir.model.fields,field_description:odex_benefit.field_service_request__show_car_remaining_amount
+msgid "Show Car Remaining Amount"
+msgstr "إظهار المبلغ المتبقي للسيارة"
+
+#. module: odex_benefit
+#: code:addons/odex_benefit/models/service_request.py:0
+#, python-format
+msgid ""
+"You cannot request this service because there is at least one child over 18 "
+"years old living with the family."
+msgstr "لا يمكنك طلب هذه الخدمة لأنه يوجد طفل واحد على الأقل يزيد عمره عن 18 عامًا يعيش مع الأسرة."
+
+#. module: odex_benefit
+#: code:addons/odex_benefit/models/service_request.py:0
+#, python-format
+msgid ""
+"The following service requests do not have a Service Producer defined:\n"
+"%s"
+msgstr ""
+"طلبات الخدمة التالية ليس لديها جهة الدفع محددة:\n"
+"%s"
\ No newline at end of file
diff --git a/odex25_benefit/odex_benefit/models/service_request.py b/odex25_benefit/odex_benefit/models/service_request.py
index 2eb81a2c3..7692988b8 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')
+ 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 @@
+
+
+