[IMP] odex_benefit: IMP odex_benefit

This commit is contained in:
younes 2025-12-03 18:08:45 +01:00
parent 123a83b727
commit 308c128498
6 changed files with 30 additions and 232 deletions

View File

@ -198,7 +198,6 @@
- `rent_amount`: مبلغ الإيجار - `rent_amount`: مبلغ الإيجار
- `payment_type`: نوع الدفع - `payment_type`: نوع الدفع
- `estimated_rent_amount`: المبلغ المقدر للإيجار - `estimated_rent_amount`: المبلغ المقدر للإيجار
- `new_rent_contract`: عقد إيجار جديد؟
- **الحالة:** - **الحالة:**
- `state`: حالة الطلب (draft/researcher/waiting_approve/first_approve/family_services_manager/legal_department/projects_department/gm_assistant/accounting_approve/approval_of_beneficiary_services/send_request_to_supplier/family_received_device/refused) - `state`: حالة الطلب (draft/researcher/waiting_approve/first_approve/family_services_manager/legal_department/projects_department/gm_assistant/accounting_approve/approval_of_beneficiary_services/send_request_to_supplier/family_received_device/refused)

View File

@ -2309,11 +2309,6 @@ msgstr "مؤهلات المستفيد"
msgid "Benefit Reject List" msgid "Benefit Reject List"
msgstr "ملفات مرفوضة" msgstr "ملفات مرفوضة"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.services_settings_form
msgid "Benefit Rent Service Settings"
msgstr "إعدادات خدمة الإيجار للفرد"
#. module: odex_benefit #. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form #: model_terms:ir.ui.view,arch_db:odex_benefit.grant_benefit_form
msgid "Benefit Replacement Mother" msgid "Benefit Replacement Mother"
@ -5796,7 +5791,6 @@ msgstr ""
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__payment_type__2 #: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__payment_type__2
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__new_payment_type__2
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__payment_type__2 #: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__payment_type__2
msgid "Half-yearly" msgid "Half-yearly"
msgstr "نصف سنوي" msgstr "نصف سنوي"
@ -7819,11 +7813,6 @@ msgstr "الحالة الاجتماعية"
msgid "Material" msgid "Material"
msgstr "مواد" msgstr "مواد"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__max_amount_for_student
msgid "Max Amount for Student"
msgstr "الحد الاقصى لإيجار الطالب"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_education_result__max_degree #: model:ir.model.fields,field_description:odex_benefit.field_education_result__max_degree
msgid "Max Degree" msgid "Max Degree"
@ -8172,7 +8161,6 @@ msgstr "رقم الجوال"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_club__programs_type__monthly #: model:ir.model.fields.selection,name:odex_benefit.selection__benefit_club__programs_type__monthly
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__payment_type__5 #: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__payment_type__5
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__new_payment_type__5
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__payment_type__5 #: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__payment_type__5
#: model:ir.model.fields.selection,name:odex_benefit.selection__sport_line__Subtype__monthly #: model:ir.model.fields.selection,name:odex_benefit.selection__sport_line__Subtype__monthly
msgid "Monthly" msgid "Monthly"
@ -9148,7 +9136,6 @@ msgstr "رموز السداد السرية"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_loans__payment_method_id #: model:ir.model.fields,field_description:odex_benefit.field_benefit_loans__payment_method_id
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__payment_type #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__payment_type
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__new_payment_type
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__payment_type #: model:ir.model.fields,field_description:odex_benefit.field_service_request__payment_type
msgid "Payment Type" msgid "Payment Type"
msgstr "نوع السداد" msgstr "نوع السداد"
@ -9502,7 +9489,6 @@ msgstr "الكمية في اليد"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__payment_type__4 #: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__payment_type__4
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__new_payment_type__4
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__payment_type__4 #: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__payment_type__4
msgid "Quarterly" msgid "Quarterly"
msgstr "ربع سنوي" msgstr "ربع سنوي"
@ -9847,7 +9833,6 @@ msgstr "احتساب قيمة الإيجار"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__rent_attachment #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__rent_attachment
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__member_rent_attachment #: model:ir.model.fields,field_description:odex_benefit.field_service_request__member_rent_attachment
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__new_rent_attachment
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__rent_attachment #: model:ir.model.fields,field_description:odex_benefit.field_service_request__rent_attachment
msgid "Rent Attachment" msgid "Rent Attachment"
msgstr "مرفق عقد الإيجار" msgstr "مرفق عقد الإيجار"
@ -9859,7 +9844,6 @@ msgstr "معلومات عقد الإيجار"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__member_rent_contract_number #: model:ir.model.fields,field_description:odex_benefit.field_service_request__member_rent_contract_number
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__new_rent_contract_number
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__rent_contract_number #: model:ir.model.fields,field_description:odex_benefit.field_service_request__rent_contract_number
msgid "Rent Contract Number" msgid "Rent Contract Number"
msgstr "رقم العقد" msgstr "رقم العقد"
@ -9867,7 +9851,6 @@ msgstr "رقم العقد"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__rent_end_date #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__rent_end_date
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__member_rent_end_date #: model:ir.model.fields,field_description:odex_benefit.field_service_request__member_rent_end_date
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__new_rent_end_date
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__rent_end_date #: model:ir.model.fields,field_description:odex_benefit.field_service_request__rent_end_date
msgid "Rent End Date" msgid "Rent End Date"
msgstr "تاريخ نهاية العقد" msgstr "تاريخ نهاية العقد"
@ -9901,7 +9884,6 @@ msgstr "سكن مشترك إيجار"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__rent_start_date #: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__rent_start_date
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__member_rent_start_date #: model:ir.model.fields,field_description:odex_benefit.field_service_request__member_rent_start_date
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__new_rent_start_date
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__rent_start_date #: model:ir.model.fields,field_description:odex_benefit.field_service_request__rent_start_date
msgid "Rent Start Date" msgid "Rent Start Date"
msgstr "تاريخ بداية العقد" msgstr "تاريخ بداية العقد"
@ -12301,7 +12283,6 @@ msgstr "سنة"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__payment_type__1 #: model:ir.model.fields.selection,name:odex_benefit.selection__grant_benefit__payment_type__1
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__new_payment_type__1
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__payment_type__1 #: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__payment_type__1
msgid "Yearly" msgid "Yearly"
msgstr "سنوي" msgstr "سنوي"
@ -15665,7 +15646,7 @@ msgstr "مبلغ حسب الفئة وعدد الأفراد"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__max_limit_type__region #: model:ir.model.fields.selection,name:odex_benefit.selection__services_settings__max_limit_type__region
msgid "Amount by Region" msgid "Amount by Region"
msgstr "مبلغ حسب المنطقة" msgstr "مبلغ حسب الفئة + عدد الأفراد + المنطقة"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_services_settings__max_limit_type #: model:ir.model.fields,field_description:odex_benefit.field_services_settings__max_limit_type
@ -15896,7 +15877,6 @@ msgstr "بإنتظار مساعد المدير العام"
#: model:ir.model.fields,field_description:odex_benefit.field_benefit_expense_line__start_date #: model:ir.model.fields,field_description:odex_benefit.field_benefit_expense_line__start_date
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__start_date #: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__start_date
#: model:ir.model.fields,field_description:odex_benefit.field_family_bank_report_wizard__start_date #: model:ir.model.fields,field_description:odex_benefit.field_family_bank_report_wizard__start_date
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__new_start
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__start #: model:ir.model.fields,field_description:odex_benefit.field_service_request__start
msgid "Start Date" msgid "Start Date"
msgstr "تاريخ البداية" msgstr "تاريخ البداية"
@ -15906,7 +15886,6 @@ msgstr "تاريخ البداية"
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__end_date #: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__end_date
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__end #: model:ir.model.fields,field_description:odex_benefit.field_service_request__end
#: model:ir.model.fields,field_description:odex_benefit.field_family_bank_report_wizard__end_date #: model:ir.model.fields,field_description:odex_benefit.field_family_bank_report_wizard__end_date
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__new_end
msgid "End Date" msgid "End Date"
msgstr "تاريخ النهاية" msgstr "تاريخ النهاية"
@ -16331,7 +16310,6 @@ msgid "Services Attachments"
msgstr "المستندات المطلوبة" msgstr "المستندات المطلوبة"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__new_rent_payment_date_exception
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__rent_payment_date_exception #: model:ir.model.fields,field_description:odex_benefit.field_service_request__rent_payment_date_exception
msgid "Rent Payment Date Exception?" msgid "Rent Payment Date Exception?"
msgstr "استثناء في تاريخ دفع الإيجار؟" msgstr "استثناء في تاريخ دفع الإيجار؟"
@ -16341,26 +16319,11 @@ msgstr "استثناء في تاريخ دفع الإيجار؟"
msgid "Rent Amount Payment" msgid "Rent Amount Payment"
msgstr "مبلغ دفع الإيجار" msgstr "مبلغ دفع الإيجار"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__new_rent_contract
msgid "New Rent Contract?"
msgstr "عقد إيجار جديد؟"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__estimated_rent_amount_payment #: model:ir.model.fields,field_description:odex_benefit.field_service_request__estimated_rent_amount_payment
msgid "Estimated Rent Amount Payment" msgid "Estimated Rent Amount Payment"
msgstr "المبلغ التقديري لدفع الإيجار" msgstr "المبلغ التقديري لدفع الإيجار"
#. module: odex_benefit
#: model_terms:ir.ui.view,arch_db:odex_benefit.service_request_form
msgid "New Rent Contract Information"
msgstr "معلومات عقد الإيجار الجديد"
#. module: odex_benefit
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__new_rent_amount_payment
msgid "New Rent Amount Payment"
msgstr "مبلغ دفع الإيجار الجديد"
#. module: odex_benefit #. module: odex_benefit
#: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__state__gm_assistant #: model:ir.model.fields.selection,name:odex_benefit.selection__service_request__state__gm_assistant
#: model:ir.model.fields.selection,name:odex_benefit.selection__seasonal_service__state__gm_assistant #: model:ir.model.fields.selection,name:odex_benefit.selection__seasonal_service__state__gm_assistant

View File

@ -25,7 +25,7 @@ class ServiceRequest(models.Model):
store=True) store=True)
member_id = fields.Many2one('family.member', string='Member') member_id = fields.Many2one('family.member', string='Member')
member_domain_ids = fields.Many2many(comodel_name='family.member', compute='_compute_member_domain_and_count', member_domain_ids = fields.Many2many(comodel_name='family.member', compute='_compute_member_domain_and_count',
string="Eligible Members",store=True) string="Eligible Members", store=True)
description = fields.Char(string='Description') description = fields.Char(string='Description')
need_status = fields.Selection(string='Need Status', selection=[('urgent', 'urgent'), ('not_urgent', 'Not urgent')]) need_status = fields.Selection(string='Need Status', selection=[('urgent', 'urgent'), ('not_urgent', 'Not urgent')])
main_service_category = fields.Many2one('services.settings', domain="[('service_type','=','main_service')]", main_service_category = fields.Many2one('services.settings', domain="[('service_type','=','main_service')]",
@ -71,27 +71,6 @@ class ServiceRequest(models.Model):
rent_payment_date_exception = fields.Boolean(string='Rent Payment Date Exception?') rent_payment_date_exception = fields.Boolean(string='Rent Payment Date Exception?')
start = fields.Date(string="Start Date") start = fields.Date(string="Start Date")
end = fields.Date(string='End Date') end = fields.Date(string='End Date')
# New Rent Contract
new_rent_contract = fields.Boolean(string='New Rent Contract?')
new_start = fields.Date(string="Start Date")
new_end = fields.Date(string='End Date')
new_rent_contract_number = fields.Char(string="Rent Contract Number")
new_rent_start_date = fields.Date(string='Rent Start Date')
new_rent_end_date = fields.Date(string='Rent End Date')
new_rent_amount = fields.Float(string='Rent Amount')
new_rent_amount_payment = fields.Float(string='New Rent Amount Payment', compute='_get_new_rent_amount_payment')
new_payment_type = fields.Selection([
('1', 'Yearly'),
('2', 'Half-yearly'),
('4', 'Quarterly'),
('5', 'Monthly')
],
string='Payment Type'
)
new_rent_attachment = fields.Many2many('ir.attachment', 'rel_rent_attachment_service_request', 'service_request_id',
'attachment_id', string='Rent Attachment')
new_rent_payment_date = fields.Date(string='Rent Payment Date')
new_rent_payment_date_exception = fields.Boolean(string='Rent Payment Date Exception?')
# Rent details for member # Rent details for member
member_rent_contract_number = fields.Char(string="Rent Contract Number") member_rent_contract_number = fields.Char(string="Rent Contract Number")
member_rent_start_date = fields.Date(string='Rent Start Date') member_rent_start_date = fields.Date(string='Rent Start Date')
@ -218,7 +197,7 @@ class ServiceRequest(models.Model):
('done', 'Done Payment'), ], copy=False, compute="_compute_payment_order_state", store=True) ('done', 'Done Payment'), ], copy=False, compute="_compute_payment_order_state", store=True)
total_moves = fields.Integer(string="Total Move", compute='_get_total_move_lines') total_moves = fields.Integer(string="Total Move", compute='_get_total_move_lines')
return_reason_id = fields.Many2one("return.reason", string="Return Reason") return_reason_id = fields.Many2one("return.reason", string="Return Reason")
agree_terms = fields.Boolean(string="I agree to the Terms and Conditions",default=False,) agree_terms = fields.Boolean(string="I agree to the Terms and Conditions", default=False, )
@api.depends('payment_order_ids') @api.depends('payment_order_ids')
def _compute_payment_order(self): def _compute_payment_order(self):
@ -320,71 +299,11 @@ class ServiceRequest(models.Model):
@api.model @api.model
def create(self, vals): def create(self, vals):
# Define the list of fields to check
new_rent_fields = [
'new_rent_contract_number',
'new_rent_start_date',
'new_rent_end_date',
'new_rent_amount',
'new_payment_type',
'new_rent_attachment'
]
res = super(ServiceRequest, self).create(vals) res = super(ServiceRequest, self).create(vals)
if not res.name or res.name == _('New'): if not res.name or res.name == _('New'):
res.name = self.env['ir.sequence'].sudo().next_by_code('service.request.sequence') or _('New') res.name = self.env['ir.sequence'].sudo().next_by_code('service.request.sequence') or _('New')
# Check if any of the specified fields are present in vals
if any(field in vals for field in new_rent_fields) and vals['new_rent_contract']:
if res.family_id:
# Prepare values for family_id write
update_values = {}
if 'new_rent_contract_number' in vals:
update_values['contract_num'] = vals['new_rent_contract_number']
if 'new_rent_start_date' in vals:
update_values['rent_start_date'] = vals['new_rent_start_date']
if 'new_rent_end_date' in vals:
update_values['rent_end_date'] = vals['new_rent_end_date']
if 'new_rent_amount' in vals:
update_values['rent_amount'] = vals['new_rent_amount']
if 'new_payment_type' in vals:
update_values['payment_type'] = vals['new_payment_type']
if 'new_rent_attachment' in vals:
update_values['rent_attachment'] = vals['new_rent_attachment']
# Write updates to the related family_id
res.family_id.write(update_values)
return res return res
def write(self, vals):
# Define the list of fields you want to check
new_rent_fields = ['new_rent_contract_number', 'new_rent_start_date', 'new_rent_end_date', 'new_rent_amount',
'new_payment_type', 'new_rent_attachment']
result = super(ServiceRequest, self).write(vals)
update_values = {}
if any(field in vals for field in new_rent_fields) and self.new_rent_contract:
for record in self:
# Ensure family_id exists before proceeding
if record.family_id:
# Prepare values for family_id write
update_values = {}
# Add fields to update_values only if they exist in vals
if 'new_rent_contract_number' in vals:
update_values['contract_num'] = vals['new_rent_contract_number']
if 'new_rent_start_date' in vals:
update_values['rent_start_date'] = vals['new_rent_start_date']
if 'new_rent_end_date' in vals:
update_values['rent_end_date'] = vals['new_rent_end_date']
if 'new_rent_amount' in vals:
update_values['rent_amount'] = vals['new_rent_amount']
if 'new_payment_type' in vals:
update_values['payment_type'] = vals['new_payment_type']
if 'new_rent_attachment' in vals:
update_values['rent_attachment'] = vals['new_rent_attachment']
# Write the prepared update values to `family_id`
record.family_id.write(update_values)
return result
def unlink(self): def unlink(self):
for request in self: for request in self:
if request.state not in ['draft']: if request.state not in ['draft']:
@ -394,7 +313,6 @@ class ServiceRequest(models.Model):
@api.depends('family_id') @api.depends('family_id')
def _compute_rent_details(self): def _compute_rent_details(self):
for rec in self: for rec in self:
# Compute values only if they are not already set
if rec.family_id: if rec.family_id:
if not rec.rent_contract_number: if not rec.rent_contract_number:
rec.rent_contract_number = rec.family_id.contract_num rec.rent_contract_number = rec.family_id.contract_num
@ -453,8 +371,8 @@ class ServiceRequest(models.Model):
rec.estimated_rent_amount_payment = 0.0 rec.estimated_rent_amount_payment = 0.0
if rec.estimated_rent_amount and rec.payment_type: if rec.estimated_rent_amount and rec.payment_type:
rec.estimated_rent_amount_payment = rec.estimated_rent_amount / int(rec.payment_type) rec.estimated_rent_amount_payment = rec.estimated_rent_amount / int(rec.payment_type)
if rec.estimated_rent_amount and rec.new_payment_type: if rec.estimated_rent_amount:
rec.estimated_rent_amount_payment = rec.estimated_rent_amount / int(rec.new_payment_type) rec.estimated_rent_amount_payment = rec.estimated_rent_amount
def _get_rent_amount_payment(self): def _get_rent_amount_payment(self):
for rec in self: for rec in self:
@ -463,13 +381,6 @@ class ServiceRequest(models.Model):
else: else:
rec.rent_amount_payment = 0.0 rec.rent_amount_payment = 0.0
def _get_new_rent_amount_payment(self):
for rec in self:
if rec.new_rent_amount and rec.new_payment_type:
rec.new_rent_amount_payment = rec.new_rent_amount / int(rec.new_payment_type)
else:
rec.new_rent_amount_payment = 0.0
def _get_paid_rent_amount(self): def _get_paid_rent_amount(self):
for rec in self: for rec in self:
rec.paid_rent_amount = min(rec.estimated_rent_amount_payment, rec.requested_service_amount) rec.paid_rent_amount = min(rec.estimated_rent_amount_payment, rec.requested_service_amount)
@ -651,18 +562,14 @@ class ServiceRequest(models.Model):
'target': 'new', 'target': 'new',
} }
@api.onchange('rent_payment_date', 'new_rent_payment_date') @api.onchange('rent_payment_date')
def onchange_rent_payment_date(self): def onchange_rent_payment_date(self):
today_date = fields.Date.today() today_date = fields.Date.today()
for rec in self: for rec in self:
if rec.rent_payment_date and not rec.rent_payment_date_exception and not rec.new_rent_payment_date: if rec.rent_payment_date and not rec.rent_payment_date_exception:
month_before_rent_payment_date = rec.rent_payment_date - timedelta(days=30) month_before_rent_payment_date = rec.rent_payment_date - timedelta(days=30)
if today_date > month_before_rent_payment_date: if today_date > month_before_rent_payment_date:
raise UserError(_("You Should request At least a month ago rent payment date")) raise UserError(_("You Should request At least a month ago rent payment date"))
if rec.new_rent_payment_date and not rec.new_rent_payment_date_exception:
new_month_before_rent_payment_date = rec.new_rent_payment_date - timedelta(days=30)
if today_date > new_month_before_rent_payment_date:
raise UserError(_("You Should request At least a month ago rent payment date"))
@api.onchange('furnishing_items_ids') @api.onchange('furnishing_items_ids')
def _onchange_home_furnishing_cost(self): def _onchange_home_furnishing_cost(self):
@ -682,7 +589,8 @@ class ServiceRequest(models.Model):
@api.onchange('service_cat', 'family_id') @api.onchange('service_cat', 'family_id')
def _onchange_service_cat(self): def _onchange_service_cat(self):
if self.service_cat.service_type == 'rent' and self.family_id.property_type != 'rent' and self.family_id.property_type != 'rent_shared' and self.benefit_type == 'family': if self.service_cat.service_type == 'rent' and self.family_id.property_type not in ['rent',
'rent_shared'] and self.benefit_type == 'family':
raise UserError(_("You cannot benefit from this service (property type not rent)")) raise UserError(_("You cannot benefit from this service (property type not rent)"))
@api.onchange( @api.onchange(
@ -895,6 +803,19 @@ class ServiceRequest(models.Model):
rec.service_cat.limit_person_line_ids.filtered( rec.service_cat.limit_person_line_ids.filtered(
lambda lambda
x: x.min_count_member <= rec.benefit_member_count <= x.max_count_member)).amount or 0 x: x.min_count_member <= rec.benefit_member_count <= x.max_count_member)).amount or 0
elif max_limit_type == 'region':
if rec.branch_custom_id.branch_type == 'branches':
field_name = 'estimated_rent_branches'
else:
field_name = 'estimated_rent_governorate'
rent_lines = rec.service_cat.rent_lines.filtered(
lambda x: x.benefit_category_id.id == rec.family_category.id
and x.benefit_count == rec.benefit_member_count
)
if rent_lines:
rec.service_max_amount = min(rent_lines.mapped(field_name))
else:
rec.service_max_amount = 0.0
if rec.max_limit_period: if rec.max_limit_period:
if rec.max_limit_period == "month": if rec.max_limit_period == "month":
@ -951,26 +872,6 @@ class ServiceRequest(models.Model):
_("You cannot request more than %s") % rec.service_max_amount _("You cannot request more than %s") % rec.service_max_amount
) )
# Validation for 'member' benefit type
if rec.benefit_type == 'member' and rec.service_cat.service_type == 'rent':
max_requested_amount = rec.service_cat.max_amount_for_student
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
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
if rec.benefit_type == 'family' and rec.service_cat.service_type == 'alternative_housing' and not rec.providing_alternative_housing_based_rent: if rec.benefit_type == 'family' and rec.service_cat.service_type == 'alternative_housing' and not rec.providing_alternative_housing_based_rent:
if rec.requested_service_amount > rec.service_cat.rent_amount_for_alternative_housing: if rec.requested_service_amount > rec.service_cat.rent_amount_for_alternative_housing:
raise UserError( raise UserError(
@ -978,16 +879,6 @@ class ServiceRequest(models.Model):
elif rec.rent_period > rec.service_cat.rent_period: elif rec.rent_period > rec.service_cat.rent_period:
raise UserError( raise UserError(
_("You Cannot request this service for period more than %s") % rec.service_cat.rent_period) _("You Cannot request this service for period more than %s") % rec.service_cat.rent_period)
# Validation for 'family' benefit type with 'eid_gift' service type
# 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 because family should have members his age less than %s") % rec.service_cat.max_age)
# Validation for 'member' benefit type with 'eid_gift' service type
# if rec.benefit_type == 'member' and rec.service_cat.service_type == 'eid_gift':
# if rec.member_id.age > rec.service_cat.max_age:
# raise UserError(
# _("You cannot request this service because your age should be less than %s") % rec.service_cat.max_age)
@api.onchange('member_id') @api.onchange('member_id')
def onchange_member_id(self): def onchange_member_id(self):
@ -995,23 +886,15 @@ class ServiceRequest(models.Model):
if rec.member_id and rec.service_type == 'rent' and not rec.member_id.member_location_conf.is_far_from_family: if rec.member_id and rec.service_type == 'rent' and not rec.member_id.member_location_conf.is_far_from_family:
raise UserError(_("You Cannot request Service if you not study inside Saudi Arabia")) 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', @api.onchange('start', 'end', 'rent_start_date', 'rent_end_date')
'new_rent_end_date', 'new_rent_contract')
def _check_date_range(self): def _check_date_range(self):
for rec in self: for rec in self:
# Ensure both start and end dates are set # Ensure both start and end dates are set
if rec.start and rec.end and rec.rent_start_date and rec.rent_end_date and not rec.new_rent_contract: if rec.start and rec.end and rec.rent_start_date and rec.rent_end_date:
# Check if `start` and `end` are within `rent_start_date` and `rent_end_date`
if not (rec.rent_start_date <= rec.start <= rec.rent_end_date and if not (rec.rent_start_date <= rec.start <= rec.rent_end_date and
rec.rent_start_date <= rec.end <= rec.rent_end_date): rec.rent_start_date <= rec.end <= rec.rent_end_date):
raise UserError( raise UserError(
"The Start Date and End Date must be within the Rent Start Date and Rent End Date range.") "The Start Date and End Date must be within the Rent Start Date and Rent End Date range.")
if rec.new_start and rec.new_end and rec.new_rent_start_date and rec.new_rent_end_date and rec.new_rent_contract:
# Check if `start` and `end` are within `rent_start_date` and `rent_end_date`
if not (rec.new_rent_start_date <= rec.new_start <= rec.new_rent_end_date and
rec.new_rent_start_date <= rec.new_end <= rec.new_rent_end_date):
raise UserError(
"The Start Date and End Date must be within the Rent Start Date and Rent End Date range.")
@api.depends('family_category') @api.depends('family_category')
def _compute_available_service_cats(self): def _compute_available_service_cats(self):

View File

@ -22,7 +22,6 @@ class ServicesSettings(models.Model):
('winter_clothing','Winter clothing'),('ramadan_basket','Ramadan basket'),('natural_disasters','Natural disasters'), ('winter_clothing','Winter clothing'),('ramadan_basket','Ramadan basket'),('natural_disasters','Natural disasters'),
('legal_arguments','Legal arguments'),('buy_home','Buy Home'),('main_service','Main Service'),('normal_service', 'Normal Service')] ('legal_arguments','Legal arguments'),('buy_home','Buy Home'),('main_service','Main Service'),('normal_service', 'Normal Service')]
,string='Service Type') ,string='Service Type')
max_amount_for_student = fields.Float(string='Max Amount for Student')
raise_amount_for_orphan = fields.Float(string='Raise Amount For Orphan') raise_amount_for_orphan = fields.Float(string='Raise Amount For Orphan')
rent_lines = fields.One2many('rent.lines','services_settings_id') rent_lines = fields.One2many('rent.lines','services_settings_id')
attachment_lines = fields.One2many('service.attachments.settings','service_id') attachment_lines = fields.One2many('service.attachments.settings','service_id')

View File

@ -325,7 +325,8 @@
<br/> <br/>
<field name="rent_payment_date_exception" widget="boolean_toggle"/> <field name="rent_payment_date_exception" widget="boolean_toggle"/>
<field name="rent_payment_date" <field name="rent_payment_date"
attrs="{'required':[('service_type','=','rent'),('new_rent_contract','=',False)]}"/> attrs="{'required':[('service_type','=','rent')]}"/>
<!--Family Rent-->
<field name="rent_contract_number" <field name="rent_contract_number"
attrs="{'invisible':[('benefit_type','!=','family')]}" attrs="{'invisible':[('benefit_type','!=','family')]}"
force_save="1"/> force_save="1"/>
@ -348,6 +349,7 @@
<field name="rent_attachment" widget="many2many_attachment_preview" <field name="rent_attachment" widget="many2many_attachment_preview"
attrs="{'invisible':[('benefit_type','!=','family')]}" attrs="{'invisible':[('benefit_type','!=','family')]}"
force_save="1"/> force_save="1"/>
<!--Member Rent-->
<field name="member_rent_contract_number" <field name="member_rent_contract_number"
attrs="{'invisible':[('benefit_type','!=','member')]}" attrs="{'invisible':[('benefit_type','!=','member')]}"
force_save="1"/> force_save="1"/>
@ -361,9 +363,6 @@
widget="many2many_attachment_preview" widget="many2many_attachment_preview"
attrs="{'invisible':[('benefit_type','!=','member')]}" attrs="{'invisible':[('benefit_type','!=','member')]}"
force_save="1"/> force_save="1"/>
<field name="new_rent_contract" widget="boolean_toggle"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<!-- <field name="is_alternative_housing" widget="boolean_toggle"/>-->
</group> </group>
<group attrs="{'invisible':[('benefit_type','!=','family')]}"> <group attrs="{'invisible':[('benefit_type','!=','family')]}">
<separator string="Rent Amounts" colspan="2"/> <separator string="Rent Amounts" colspan="2"/>
@ -375,45 +374,6 @@
attrs="{'invisible':[('service_type','=','alternative_housing')]}"/> attrs="{'invisible':[('service_type','=','alternative_housing')]}"/>
</group> </group>
</group> </group>
<group attrs="{'invisible':[('new_rent_contract','=',False),'|',('service_type', '!=', 'alternative_housing'),('providing_alternative_housing_based_rent','=',False)]}">
<group>
<separator string="New Rent Contract Information" colspan="2"/>
<br/>
<field name="new_rent_payment_date_exception" widget="boolean_toggle"/>
<field name="new_rent_payment_date"
attrs="{'required':[('service_type','=','rent'),('new_rent_contract','=',True)]}"/>
<field name="new_rent_contract_number"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_rent_start_date"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_rent_end_date"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<label for="new_start" string="Period"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<div name="dates" class="o_row"
attrs="{'invisible':[('benefit_type','!=','family')]}">
<field name="new_start"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"/>
<i class="fa fa-long-arrow-right mx-2 oe_edit_only"
aria-label="Arrow icon" title="Arrow"/>
<i class="fa fa-long-arrow-right mx-2 oe_read_only"
aria-label="Arrow icon" title="Arrow"
attrs="{'invisible': [('new_start', '=', False), ('new_end', '=', False)]}"/>
<field name="new_end"
attrs="{'readonly':[('state','not in',['draft','researcher','waiting_approve'])]}"/>
</div>
<field name="new_rent_amount"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_rent_amount_payment"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_payment_type"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="new_rent_attachment" widget="many2many_attachment_preview"
attrs="{'invisible':[('benefit_type','!=','family')]}"/>
</group>
<group>
</group>
</group>
</sheet> </sheet>
</form> </form>
</page> </page>

View File

@ -36,6 +36,8 @@
<field name="max_limit_type"/> <field name="max_limit_type"/>
<field name="max_amount" <field name="max_amount"
attrs="{'invisible': [('max_limit_type', '!=', 'fixed')]}"/> attrs="{'invisible': [('max_limit_type', '!=', 'fixed')]}"/>
<field name="raise_amount_for_orphan"
attrs="{'invisible':['|',('service_type','!=','rent'),('benefit_type','!=','member')]}"/>
<field name="min_count_member" <field name="min_count_member"
attrs="{'invisible':[('service_type','!=','buy_car')]}"/> attrs="{'invisible':[('service_type','!=','buy_car')]}"/>
<field name="buy_home_max_total_amount" <field name="buy_home_max_total_amount"
@ -123,25 +125,17 @@
</field> </field>
</page> </page>
<page string="Family Rent Service Settings" <page string="Family Rent Service Settings"
attrs="{'invisible':[('service_type','!=','rent')]}"> attrs="{'invisible':['|',('service_type','!=','rent'),('benefit_type','!=','family')]}">
<field name="rent_lines" widget="one2many_list"> <field name="rent_lines" widget="one2many_list">
<tree editable="bottom"> <tree editable="bottom">
<field name="benefit_category_id"/> <field name="benefit_category_id"/>
<field name="benefit_count"/> <field name="benefit_count"/>
<field name="estimated_rent_branches"/> <field name="estimated_rent_branches"/>
<field name="estimated_rent_governorate"/> <field name="estimated_rent_governorate"/>
<!-- <field name="is_shared_housing"/>-->
<field name="discount_rate_shared_housing"/> <field name="discount_rate_shared_housing"/>
</tree> </tree>
</field> </field>
</page> </page>
<page string="Benefit Rent Service Settings"
attrs="{'invisible':[('service_type','!=','rent')]}">
<group>
<field name="max_amount_for_student"/>
<field name="raise_amount_for_orphan"/>
</group>
</page>
<page string="Amounts by Categories" <page string="Amounts by Categories"
attrs="{'invisible':[('max_limit_type', '!=', 'category')]}"> attrs="{'invisible':[('max_limit_type', '!=', 'category')]}">
<field name="category_amount_lines" widget="one2many_list"> <field name="category_amount_lines" widget="one2many_list">