This commit is contained in:
eman 2024-12-02 01:44:30 +02:00
parent ce7efddfce
commit 363d3a032b
6 changed files with 160 additions and 73 deletions

View File

@ -19,7 +19,6 @@ class BenefitCategory(models.Model):
benefits_total = fields.Integer(string="Benefit Total", compute="get_benefits_total")
mini_income_amount = fields.Float(string="Min Income Amount")
max_income_amount = fields.Float(string="Max Income Amount")
benefits_total = fields.Integer(string="Benefit Total", compute="get_benefits_total")
expenses_ids = fields.One2many('expenses.line', 'category_id')
state = fields.Selection([('draft', 'Draft'),
('approve', 'Approved'),
@ -679,6 +678,21 @@ class MaritalStatus(models.Model):
is_benefit = fields.Boolean(string='Is Benefit?')
is_dead = fields.Boolean(string='Is Dead?')
class AgeCategory(models.Model):
_name = 'age.category'
min_age = fields.Integer(string="From")
max_age = fields.Integer(string="To")
name = fields.Char(string="Name", compute="_compute_name", store=True)
@api.depends('min_age', 'max_age')
def _compute_name(self):
for record in self:
if record.min_age is not None and record.max_age is not None:
record.name = f"[{record.min_age}:{record.max_age}]"
else:
record.name = ""
class ServiceAttachmentsSettings(models.Model):
_name = 'service.attachments.settings'
_description = "Service Attachments Settings"

View File

@ -134,4 +134,5 @@ access_electrical_devices,access_electrical_devices,model_electrical_devices,bas
access_home_furnishing_lines,access_home_furnishing_lines,model_home_furnishing_lines,base.group_user,1,1,1,1
access_home_furnishing_items,access_home_furnishing_items,model_home_furnishing_items,base.group_user,1,1,1,1
access_electricity_bill_lines,access_electricity_bill_lines,model_electricity_bill_lines,base.group_user,1,1,1,1
access_water_bill_lines,access_water_bill_lines,model_water_bill_lines,base.group_user,1,1,1,1
access_water_bill_lines,access_water_bill_lines,model_water_bill_lines,base.group_user,1,1,1,1
access_age_category,access_age_category,model_age_category,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
134 access_home_furnishing_lines access_home_furnishing_lines model_home_furnishing_lines base.group_user 1 1 1 1
135 access_home_furnishing_items access_home_furnishing_items model_home_furnishing_items base.group_user 1 1 1 1
136 access_electricity_bill_lines access_electricity_bill_lines model_electricity_bill_lines base.group_user 1 1 1 1
137 access_water_bill_lines access_water_bill_lines model_water_bill_lines base.group_user 1 1 1 1
138 access_age_category access_age_category model_age_category base.group_user 1 1 1 1

View File

@ -269,6 +269,15 @@
</p>
</field>
</record>
<record model="ir.actions.act_window" id="age_category_action">
<field name="name">Age Category</field>
<field name="res_model">age.category</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">Create the Age Category
</p>
</field>
</record>
<record model="ir.actions.act_window" id="visits_types_action">
<field name="name">Visits Types</field>
<field name="res_model">visits.types</field>
@ -849,6 +858,9 @@
<menuitem id="marital_status_menu" name="Marital Status" parent="menu_benefits_config_organizing"
action="marital_status_action"
sequence="4"/>
<menuitem id="age_category_menu" name="Age Category" parent="menu_benefits_config_organizing"
action="age_category_action"
sequence="5"/>
<!-- <menuitem id="hobbies_settings_menu" name="Hobbies Settings" parent="menu_benefits_config_organizing"-->
<!-- action="hobbies_settings_action"-->
<!-- sequence="4"/>-->

View File

@ -1246,6 +1246,36 @@
<field name="is_benefit"/>
</tree>
</field>
</record>
<!-- Age Category Form AND tree -->
<record id="age_category_form" model="ir.ui.view">
<field name="name">Age Category Form</field>
<field name="model">age.category</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="min_age"/>
</group>
<group>
<field name="max_age"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="age_category_tree" model="ir.ui.view">
<field name="name">Age Category Tree</field>
<field name="model">age.category</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="min_age"/>
<field name="max_age"/>
</tree>
</field>
</record>
</data>
</odoo>

View File

@ -80,39 +80,17 @@ class TakafulSponsorship(models.Model):
string='Sponsorship Beneficiary Type',
tracking=True
)
branch_custom_id = fields.Many2one('branch.settings', string="Branch")
members_domain_ids = fields.Many2many(comodel_name='family.member', compute='_compute_domain_ids')
# This is if for one person, and not a group.
benefit_id = fields.Many2one(
'grant.benefit',
'family.member',
string='Beneficiary Name',
ondelete='set null'
ondelete='set null',domain = "[('id', 'in',members_domain_ids)]"
)
orphan_status = fields.Selection(
related='benefit_id.orphan_status',
string='Orphan Status',
tracking=True
)
education_status = fields.Selection(
related='benefit_id.education_status',
string='Educational Status',
tracking=True
)
education_level = fields.Selection(
related='benefit_id.education_level',
string='Educational Level',
tracking=True
)
sponsorship_duration = fields.Selection([
('temporary', 'Temporary'),
('permanent', 'Permanent')],
string='Sponsorship Duration',
required=True,
default='permanent',
tracking=True
)
education_status = fields.Selection(string='Education Status',selection=[('educated', 'educated'), ('illiterate', 'illiterate'),('under_study_age','Under Study Age')])
education_level = fields.Many2one("education.level", string='Education Levels')
sponsorship_duration = fields.Selection([('temporary', 'Temporary'),('permanent', 'Permanent')],string='Sponsorship Duration',required=True,default='permanent',tracking=True)
supporter_status = fields.Selection([
('no', 'Not Exist'),
('yes', 'Exist')],
@ -121,7 +99,7 @@ class TakafulSponsorship(models.Model):
compute='_compute_supporter_status',
)
has_needs = fields.Boolean(related='benefit_id.has_needs', store=True)
has_needs = fields.Boolean(store=True)
@api.constrains('end_date')
def check_end_date(self):
@ -136,53 +114,106 @@ class TakafulSponsorship(models.Model):
raise ValidationError(
_(u'End Date Must Be More Than Start Date in Months'))
@api.depends('benefit_id.responsible_id')
@api.depends('benefit_id.benefit_id')
@api.onchange('benefit_id')
def _compute_supporter_status(self):
for rec in self:
if rec.benefit_id:
if rec.benefit_id.responsible_id:
if rec.benefit_id.benefit_id:
rec.supporter_status = 'yes'
else:
rec.supporter_status = 'no'
else:
rec.supporter_status = ''
@api.onchange('benefit_count', 'benefit_type', 'sponsorship_type', 'min_needs_percent', 'max_needs_percent')
def onchange_benefit_type(self):
@api.depends('gender','education_status','education_level','sponsorship_type','benefit_type','age_category_id')
def _compute_domain_ids(self):
# Create a domain
if self.benefit_type and self.benefit_id and not self.benefit_id.benefit_type == self.benefit_type:
self.benefit_id = False
elif self.benefit_type and self.benefit_ids and not self.benefit_ids[0].benefit_type == self.benefit_type:
self.benefit_ids = [(6, 0, [])]
self.members_domain_ids = [(6, 0, [])]
if self.benefit_type == 'orphan' and self.sponsorship_type:
base_domain = \
[
('state', 'in', ['second_approve', 'temporarily_suspended', 'suspended_first_approve']),
('member_status', '=', 'benefit'),
'|',
('relationn.relation_type', '=', 'daughter'),
('relationn.relation_type', '=', 'son')
]
if self.gender:
if self.gender == 'female':
base_domain = [
('state', 'in', ('second_approve', 'temporarily_suspended', 'suspended_first_approve')),
('member_status', '=', 'benefit'), ('relationn.relation_type', '=', 'daughter')]
if self.gender == 'male':
base_domain = [
('state', 'in', ('second_approve', 'temporarily_suspended', 'suspended_first_approve')),
('member_status', '=', 'benefit'),('relationn.relation_type', '=', 'son')]
if self.education_status:
base_domain.append(('education_status', '=', self.education_status))
if self.education_level:
base_domain.append(('education_levels', '=', self.education_level.id))
if self.age_category_id:
base_domain.append(('age', '<=', self.age_category_id.max_age))
base_domain.append(('age', '>=', self.age_category_id.min_age))
self.members_domain_ids = self.env['family.member'].sudo().search(base_domain)
domain = {'benefit_id': [('id', 'in', self.members_domain_ids.ids)]}
return {'domain': domain}
if self.benefit_type == 'widow' and self.sponsorship_type:
self.benefit_count = 0
self.min_needs_percent = 0
self.max_needs_percent = 0
if self.benefit_type and self.sponsorship_type == 'person':
self.benefit_ids = [(6, 0, [])]
self.benefit_count = 0
self.min_needs_percent = 0
self.max_needs_percent = 0
benefit_ids = self.env['grant.benefit'].sudo().search(
[('benefit_type', '=', self.benefit_type), ('state', '=', 'approve')])
# domain = {'benefit_id': [('id', 'in', benefit_ids.filtered(lambda ben: ben.benefit_needs_percent > 0 ).mapped('id'))]}
domain = {'benefit_id': [('id', 'in', benefit_ids.mapped('id'))]}
return {'domain': domain}
elif self.benefit_type and self.sponsorship_type == 'group':
self.benefit_id = False
benefit_ids = self.env['grant.benefit'].sudo().search(
[('benefit_type', '=', self.benefit_type), ('state', '=', 'approve')], limit=self.benefit_count)
# domain = {'benefit_ids': [('id', 'in', benefit_ids.filtered(lambda ben: ben.benefit_needs_percent > 0 and ben.benefit_needs_percent >= self.min_needs_percent and ben.benefit_needs_percent <= self.max_needs_percent).mapped('id'))]}
domain = {'benefit_ids': [('id', 'in', benefit_ids.mapped('id'))]}
base_domain = [('state', 'in', ['second_approve', 'temporarily_suspended', 'suspended_first_approve']),('member_status','=','benefit'),'|',('relationn.relation_type', '=', 'mother'),('relationn.relation_type', '=', 'replacement_mother')]
if self.education_status:
base_domain.append(('education_status', '=', self.education_status))
if self.education_level:
base_domain.append(('education_levels', '=', self.education_level.id))
if self.age_category_id:
base_domain.append(('age', '<=', self.age_category_id.max_age))
base_domain.append(('age', '>=', self.age_category_id.min_age))
self.members_domain_ids = self.env['family.member'].sudo().search(base_domain)
domain = {'benefit_id': [('id', 'in', self.members_domain_ids.ids)]}
return {'domain': domain}
gender = fields.Selection(
string="Gender",
related='benefit_id.gender',
)
# @api.depends('sponsorship_type')
# def onchange_benefit_type(self):
# # Create a domain
# if self.benefit_type and self.benefit_id and not self.benefit_id.benefit_type == self.benefit_type:
# self.benefit_id = False
# elif self.benefit_type and self.benefit_ids and not self.benefit_ids[0].benefit_type == self.benefit_type:
# self.benefit_ids = [(6, 0, [])]
# self.benefit_count = 0
# self.min_needs_percent = 0
# self.max_needs_percent = 0
#
# if self.benefit_type and self.sponsorship_type == 'person':
# self.benefit_ids = [(6, 0, [])]
# self.benefit_count = 0
# self.min_needs_percent = 0
# self.max_needs_percent = 0
# base_domain = [('state', 'in', ('second_approve', 'temporarily_suspended', 'suspended_first_approve'))]
# if self.gender:
# if self.gender == 'female':
# base_domain.append(('relationn.relation_type', '=','daughter'))
# if self.gender == 'male':
# base_domain.append(('relationn.relation_type', '=', 'son'))
# if self.education_status:
# base_domain.append(('education_status', '=', self.education_status))
# if self.education_level:
# base_domain.append(('education_levels', '=', self.education_level.id))
# benefit_ids = self.env['family.member'].sudo().search(base_domain)
# domain = {'benefit_id': [('id', 'in', benefit_ids.mapped('id'))]}
# return {'domain': domain}
# elif self.benefit_type and self.sponsorship_type == 'group':
# self.benefit_id = False
# benefit_ids = self.env['grant.benefit'].sudo().search(
# [('benefit_type', '=', self.benefit_type), ('state', '=', 'approve')], limit=self.benefit_count)
# # domain = {'benefit_ids': [('id', 'in', benefit_ids.filtered(lambda ben: ben.benefit_needs_percent > 0 and ben.benefit_needs_percent >= self.min_needs_percent and ben.benefit_needs_percent <= self.max_needs_percent).mapped('id'))]}
# domain = {'benefit_ids': [('id', 'in', benefit_ids.mapped('id'))]}
# return {'domain': domain}
gender = fields.Selection(selection=[('male', 'Male'), ('female', 'Female')], string="Gender")
age_category_id = fields.Many2one('age.category',string='Age Category')
city_id = fields.Many2one(
'res.country.city', related='benefit_id.city_id', string='District')
'res.country.city',string='District')
benefit_count = fields.Integer(string='Sponsorship Beneficiaries Number')
@ -200,7 +231,7 @@ class TakafulSponsorship(models.Model):
tracking=True
)
benefit_ids = fields.Many2many(
'grant.benefit',
'family.member',
string='Beneficiaries Names',
)

View File

@ -69,17 +69,15 @@
<field name="is_widow_orphan" invisible="1"/>
<field name="gender" attrs="{'invisible': [('sponsorship_type', '!=', 'person')]}"/>
<field name="orphan_status" attrs="{'invisible': ['|',('benefit_type', '!=', 'orphan'), ('sponsorship_type', '!=', 'person')]}"/>
<field name="education_status" attrs="{'invisible': [('sponsorship_type', '!=', 'person')]}"/>
<field name="education_level" attrs="{'invisible': [('sponsorship_type', '!=', 'person')]}"/>
<field name="gender"/>
<field name="age_category_id"/>
<field name="education_status"/>
<field name="education_level"/>
<field name="payment_option"/>
<field name="payment_journal_id" required="1" />
<field name="payment_method"/>
<field name="has_delay" invisible="1"/>
<field name="members_domain_ids" invisible="1"/>
</group>
<group name="group_right">
@ -121,6 +119,7 @@
<field name="start_date" />
<field name="end_date" />
<field name="supporter_status" attrs="{'invisible': [('sponsorship_type', '!=', 'person')]}"/>
<field name="branch_custom_id"/>
</group>
</group>
@ -155,13 +154,13 @@
<group string="Orphans List" attrs="{'invisible': ['|', ('sponsorship_type', '!=', 'group'), ('benefit_type', '!=', 'orphan')]}">
<field name="benefit_ids" nolabel="1" context="{'tree_view_ref':'odex_takaful.grant_benefit_kafala_needs_tree'}"/>
<field name="benefit_ids" nolabel="1" domain="[('id', 'in', members_domain_ids)]"/>
</group>
<group string="Widows List" attrs="{'invisible': ['|', ('sponsorship_type', '!=', 'group'), ('benefit_type', '!=', 'widow')]}">
<field name="benefit_ids" nolabel="1" context="{'tree_view_ref':'odex_takaful.grant_benefit_kafala_needs_tree'}"/>
<field name="benefit_ids" nolabel="1" domain="[('id', 'in', members_domain_ids)]"/>
</group>