odex25_standard/odex25_takaful/odex_takaful/models/family_member.py

134 lines
5.8 KiB
Python

from odoo import models, fields, api, _
from dateutil.relativedelta import relativedelta
from datetime import datetime, timedelta
class GrantBenefit(models.Model):
_inherit = 'grant.benefit'
def action_second_accepted(self):
super(GrantBenefit, self).action_second_accepted()
for member in self.member_ids:
if not member.is_new and member.member_status == 'benefit':
member.is_restricted = True
member.is_new = True
sponsorships_main = self.env['donations.details.lines'].search([
('benefit_id', '=', member.id,),('state', '=', 'active')
])
sponsorships_multi = self.env['donations.details.lines'].search([
('benefit_ids', 'in', member.id),('state', '=', 'active')
])
sponsorships = sponsorships_main | sponsorships_multi
if sponsorships:
for sponsorship in sponsorships:
if member.member_status and member.member_status == 'non_benefit' and sponsorship.record_type == 'sponsorship':
sponsorship.sudo().write({'state': 'replace'})
class FamilyMember(models.Model):
_inherit = 'family.member'
donation_details_count = fields.Integer(
string='Donation Details',
compute='_compute_donation_details_count'
)
sponsor_id = fields.Many2one('res.partner', string='Sponsor Partner', domain="[('is_sponsor_portal', '=', True)]")
sponsor_related_id = fields.Many2one('res.partner', string='Sponsor')
sponsorship_id = fields.Many2one('takaful.sponsorship', string='Sponsorship')
sponsorship_end_date = fields.Date(string='Sponsorship End Date')
is_restricted = fields.Boolean(string="Is Restricted ?", default=False, readonly=True)
is_new = fields.Boolean(string="Is new ?", default=False, readonly=True)
general_restriction = fields.Boolean(string="General Restriction", default=False, readonly=True)
kafala_status = fields.Selection(
[('have_kafala', 'Have Kafala'), ('have_not_kafala', 'Have not Kafala')],
string='Kafala Status', compute='_compute_kafala_status', store=True, readonly=True)
education_levels = fields.Many2one("education.level", string='Education Levels', compute='_compute_education_levels', store=True)
number_of_family_member = fields.Integer(compute='_compute_number_of_family_member' , store=True, string='Number Of Family Member')
benefit_group = fields.Selection(
[
('orphan', 'Orphans'),
('widow', 'Widows'),
('other', 'Other'),
],
compute='_compute_benefit_group',
store=True
)
@api.depends('relationn_type')
def _compute_benefit_group(self):
for rec in self:
if rec.relationn_type in ('son', 'daughter'):
rec.benefit_group = 'orphan'
elif rec.relationn_type in ('mother', 'replacement_mother'):
rec.benefit_group = 'widow'
else:
rec.benefit_group = 'other'
@api.depends('benefit_id','relationn','member_status')
def _compute_number_of_family_member(self):
for rec in self:
if rec.relationn.relation_type in ('mother', 'replacement_mother'):
family_members = rec.benefit_id.member_ids.filtered(
lambda m: m.relationn.relation_type in ('daughter', 'son') and m.member_status == 'benefit'
)
rec.number_of_family_member = len(family_members)
@api.depends('member_education_status_ids', 'education_status', 'member_education_status_ids.case_study')
def _compute_education_levels(self):
for record in self:
record.education_levels = (
record.member_education_status_ids.search(
[('case_study', '=', 'continuous')],
order='create_date desc',
limit=1
).education_levels if record.education_status == 'educated' else False)
@api.depends('sponsor_related_id')
def _compute_kafala_status(self):
for rec in self:
rec.kafala_status = 'have_kafala' if rec.sponsor_related_id else 'have_not_kafala'
def _compute_donation_details_count(self):
for rec in self:
rec.donation_details_count = self.env['donations.details.lines'].search_count([
'|',
('benefit_id', '=', rec.id),
('benefit_ids', 'in', rec.ids)
])
def action_open_donation_detail(self):
self.ensure_one()
return {
'name': _('Donation Details Lines'),
'type': 'ir.actions.act_window',
'res_model': 'donations.details.lines',
'view_mode': 'tree,form',
'domain': ['|', ('benefit_id', '=', self.id), ('benefit_ids', 'in', self.ids)],
'context': {'create': False, 'delete': False},
}
def action_not_available_for_sponsorship(self):
for rec in self:
rec.general_restriction = True
def action_available_for_sponsorship(self):
for rec in self:
rec.general_restriction = False
@api.model
def _cron_family_member_restriction(self):
benefit_ids = self.env["family.member"].sudo().search([("is_restricted", "=", True)])
today = fields.Date.today()
restriction_period = self.env['ir.config_parameter'].sudo().get_param('odex_takaful.restriction_period')
for benefit in benefit_ids:
create_date = benefit.benefit_id.approve_date
benefit_date = create_date + timedelta(days=int(restriction_period) or 0)
benefit_date_to = today - timedelta(days=int(restriction_period) or 0)
if benefit_date >= today or benefit_date <= benefit_date_to:
benefit.is_restricted = False