From 24ff27cc3e891faa12b39ef876ab0daaa1ad188e Mon Sep 17 00:00:00 2001 From: eman Date: Mon, 28 Oct 2024 02:48:03 +0300 Subject: [PATCH] Benefit customization --- odex25_ensan/odex_benefit/models/benefit.py | 8 +++ .../odex_benefit/models/benefit_config.py | 1 + .../odex_benefit/models/service_request.py | 68 ++++++++++++++++++- .../views/benefit_config_view.xml | 1 + .../odex_benefit/views/service_request.xml | 28 ++++++++ 5 files changed, 103 insertions(+), 3 deletions(-) diff --git a/odex25_ensan/odex_benefit/models/benefit.py b/odex25_ensan/odex_benefit/models/benefit.py index ea15e7785..08c7251f3 100644 --- a/odex25_ensan/odex_benefit/models/benefit.py +++ b/odex25_ensan/odex_benefit/models/benefit.py @@ -636,6 +636,14 @@ class GrantBenefitProfile(models.Model): if self.image_url: self.img_attach = '' % self.url + def get_researchers_email(self): + email_ids = '' + for rec in self.researcher_id.employee_id: + if email_ids: + email_ids = email_ids + ',' + str(rec.work_email) + else: + email_ids = str(rec.work_email) + return email_ids @api.depends('room_ids') def get_rooms_total(self): diff --git a/odex25_ensan/odex_benefit/models/benefit_config.py b/odex25_ensan/odex_benefit/models/benefit_config.py index 2b5f2cb3c..583de4be1 100644 --- a/odex25_ensan/odex_benefit/models/benefit_config.py +++ b/odex25_ensan/odex_benefit/models/benefit_config.py @@ -677,3 +677,4 @@ class MaritalStatus(models.Model): name = fields.Char(string="Name") is_benefit = fields.Boolean(string='Is Benefit?') + is_dead = fields.Boolean(string='Is Dead?') diff --git a/odex25_ensan/odex_benefit/models/service_request.py b/odex25_ensan/odex_benefit/models/service_request.py index 7be981411..d68470748 100644 --- a/odex25_ensan/odex_benefit/models/service_request.py +++ b/odex25_ensan/odex_benefit/models/service_request.py @@ -1,6 +1,6 @@ from odoo import fields, models, api, _ from odoo.exceptions import UserError, ValidationError - +from datetime import timedelta class ServiceRequest(models.Model): _name = 'service.request' @@ -9,7 +9,6 @@ class ServiceRequest(models.Model): name = fields.Char(string='Name') # family_id = fields.Many2one('grant.benefit',string='Family') # is_main_service = fields.Boolean(string='Is Main Service?') - # service_type = fields.Selection([('rent', 'Rent')],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') # rent_lines = fields.One2many('rent.lines','services_settings_id') @@ -26,6 +25,16 @@ class ServiceRequest(models.Model): sub_service_category = fields.Many2one('services.settings',domain="[('is_main_service','=',False),('service_type','=',False),('parent_service','=',main_service_category)]",string='Sub Service Category') service_cat = fields.Many2one('services.settings',domain="[('is_main_service','=',False),('service_type','!=',False),('parent_service','=',sub_service_category)]",string='Service Cat.') service_attach = fields.Binary(string="Service Attach") + requested_service_amount = fields.Float(string="Requested Service Amount") + estimated_rent_amount = fields.Float(string="Estimated Rent Amount",compute="_get_estimated_rent_amount") + 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') + rent_contract_number = fields.Char(string="Rent Contract Number",related ="family_id.contract_num") + rent_start_date = fields.Date(string='Rent Start Date',related ="family_id.rent_start_date") + rent_end_date = fields.Date(string='Rent End Date' ,related ="family_id.rent_end_date") + rent_attachment = fields.Many2many('ir.attachment', 'rel_rent_attachment_service_request', 'service_request_id', 'attachment_id',string='Rent Attachment',related ="family_id.rent_attachment") + rent_payment_date = fields.Date(string='Rent Payment Date') + added_amount_if_mother_dead = fields.Float(string="Added Amount (If mother dead)",compute="_get_added_amount_if_mother_dead") state = fields.Selection([ ('draft', 'Draft'), ('send_request', 'Send Request'), @@ -40,6 +49,38 @@ class ServiceRequest(models.Model): raise UserError(_('You cannot delete this record')) return super(ServiceRequest, self).unlink() + def _get_estimated_rent_amount(self): + for rec in self: + rec.estimated_rent_amount = 0.0 # Default value + + if not rec.family_id: + continue + + for item in rec.service_cat.rent_lines: + # Check if benefit category and member count match + if rec.family_id.benefit_category_id != item.benefit_category_id or rec.family_id.benefit_member_count != item.benefit_count: + continue + + # Determine rent amount based on branch type and property type + branch_type = rec.family_id.branch_custom_id.branch_type + is_shared_rent = rec.family_id.property_type == 'rent_shared' + + if branch_type == 'branches': + rec.estimated_rent_amount = item.estimated_rent_branches * ( + item.discount_rate_shared_housing if is_shared_rent else 1) + elif branch_type == 'governorates': + rec.estimated_rent_amount = item.estimated_rent_governorate * ( + item.discount_rate_shared_housing if is_shared_rent else 1) + + def _get_paid_rent_amount(self): + for rec in self: + rec.paid_rent_amount = min(rec.estimated_rent_amount, rec.requested_service_amount) + + def _get_added_amount_if_mother_dead(self): + for rec in self: + rec.added_amount_if_mother_dead = 0.0 + if rec.family_id.mother_marital_conf.is_dead: + rec.added_amount_if_mother_dead = rec.service_cat.raise_amount_for_orphan def action_send_request(self): for rec in self: rec.state = 'send_request' @@ -53,4 +94,25 @@ class ServiceRequest(models.Model): rec.state = 'second_approve' def action_refuse(self): for rec in self: - rec.state = 'refused' \ No newline at end of file + rec.state = 'refused' + + @api.onchange('service_cat','family_id') + def onchange_service_cat(self): + for rec in self: + if rec.service_cat.service_type == 'rent' and rec.family_id.property_type == 'ownership' or rec.family_id.property_type == 'ownership_shared': + raise UserError(_("You cannot benefit from this service")) + + @api.onchange('rent_payment_date') + def onchange_rent_payment_date(self): + today_date = fields.Date.today() + for rec in self: + if rec.rent_payment_date : + month_before_rent_payment_date = rec.rent_payment_date - timedelta(days=30) + if today_date > month_before_rent_payment_date: + raise UserError(_("You Should request At least a month ago rent payment date")) + + def action_set_to_draft(self): + for rec in self: + rec.state= 'draft' + + diff --git a/odex25_ensan/odex_benefit/views/benefit_config_view.xml b/odex25_ensan/odex_benefit/views/benefit_config_view.xml index a7971e6e6..5829be105 100644 --- a/odex25_ensan/odex_benefit/views/benefit_config_view.xml +++ b/odex25_ensan/odex_benefit/views/benefit_config_view.xml @@ -1230,6 +1230,7 @@ + diff --git a/odex25_ensan/odex_benefit/views/service_request.xml b/odex25_ensan/odex_benefit/views/service_request.xml index 71e4752e0..3c515e6b7 100644 --- a/odex25_ensan/odex_benefit/views/service_request.xml +++ b/odex25_ensan/odex_benefit/views/service_request.xml @@ -33,6 +33,7 @@ + @@ -42,8 +43,35 @@ + + + +
+ + + + +
+ + + + + +
+ + +
+ + + +
+
+
+
+
+