Benefit customization

This commit is contained in:
eman 2024-10-29 15:40:12 +03:00
parent 6951923a99
commit d3246ddb85
9 changed files with 91 additions and 37 deletions

View File

@ -42,5 +42,15 @@
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
<!-- Sequence for services requests -->
<record id="service_request_sequence" model="ir.sequence">
<field name="name">Services Requests Sequence</field>
<field name="code">service.request.sequence</field>
<field name="prefix">R/</field>
<field eval="1" name="number_next"/>
<field eval="1" name="number_increment"/>
<field eval="True" name="use_date_range"/>
<field eval="False" name="company_id"/>
<field name="padding">4</field>
</record>
</odoo>

View File

@ -117,7 +117,7 @@ class GrantBenefitProfile(models.Model):
house_number = fields.Char(string='house number')
floor = fields.Char(string='floor')
housing_number = fields.Char(string='housing number')
rent_amount = fields.Integer()
rent_amount = fields.Float(string='Rent Amount')
housing_type = fields.Selection([
('apartment', 'apartment'),
('villa', 'villa'),
@ -404,13 +404,6 @@ class GrantBenefitProfile(models.Model):
nearby_mosque = fields.Char(string='Nearby mosque')
housing_note = fields.Char(string='housing note')
note_neighborhood = fields.Char()
rent_amount = fields.Integer()
housing_type = fields.Selection([
('apartment', 'apartment'),
('villa', 'villa'),
('popular_house', 'popular house'),
('tent', 'tent'),
('Appendix', 'Appendix'), ], default='apartment')
contract_num = fields.Char(string="Contract Number")
rent_start_date = fields.Date(string='Rent Start Date')
rent_end_date = fields.Date(string='Rent End Date')
@ -426,9 +419,7 @@ class GrantBenefitProfile(models.Model):
('charitable', 'charitable'),
('ownership_shared', 'Ownership Shared'),
('rent_shared', 'Rent Shared')])
rooms_number = fields.Integer('Rooms Number', compute="get_rooms_total", required=True)
room_ids = fields.One2many('benefit.housing.rooms', inverse_name='housing_id')
domestic_labor_ids = fields.Many2many('domestic.labor')
request_producer = fields.Many2one('res.partner',string='Request Producer',default=lambda self: self.env.user.partner_id)
# Suspend
is_excluded_suspension = fields.Boolean('Excluded from suspension?')

View File

@ -678,3 +678,14 @@ class MaritalStatus(models.Model):
name = fields.Char(string="Name")
is_benefit = fields.Boolean(string='Is Benefit?')
is_dead = fields.Boolean(string='Is Dead?')
class ServiceAttachmentsSettings(models.Model):
_name = 'service.attachments.settings'
_description = "Service Attachments Settings"
name = fields.Char(string='name')
service_attach = fields.Many2many('ir.attachment','rel_service_attachments', 'service_id', 'attach_id',string="Attachment")
service_type = fields.Selection([('rent', 'Rent')],string='Service Type',related="service_id.service_type")
service_id = fields.Many2one('services.settings',string='Service')
service_request_id = fields.Many2one('service.request',string='Service Request')
notes = fields.Text(string='Notes')

View File

@ -6,7 +6,7 @@ class ServiceRequest(models.Model):
_name = 'service.request'
_inherit = ['mail.thread', 'mail.activity.mixin']
name = fields.Char(string='Name')
name = fields.Char(string='Reference', required=True, copy=False, readonly=True, index=True,default=lambda self: _('New'))
# family_id = fields.Many2one('grant.benefit',string='Family')
# is_main_service = fields.Boolean(string='Is Main Service?')
# max_amount_for_student = fields.Float(string='Max Amount for Student')
@ -18,7 +18,7 @@ class ServiceRequest(models.Model):
family_category = fields.Many2one('benefit.category',string='Family Category',related='family_id.benefit_category_id')
benefit_member_count = fields.Integer(string="Benefit Member count", related='family_id.benefit_member_count')
branch_custom_id = fields.Many2one('branch.settings', string="Branch",related='family_id.branch_custom_id',store=True)
member_id = fields.Many2one('family.member',string='Member')
member_id = fields.Many2one('family.member',domain="[('benefit_id','=',family_id)]",string='Member')
description = fields.Char(string='Description')
need_status = fields.Selection(string='Need Status',selection=[('urgent', 'urgent'),('not_urgent', 'Not urgent')])
main_service_category = fields.Many2one('services.settings',domain="[('is_main_service','=',True)]",string="Main Service Category")
@ -32,6 +32,7 @@ class ServiceRequest(models.Model):
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_amount = fields.Float(string='Rent Amount',related ="family_id.rent_amount")
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')
# Rent details for member
@ -41,6 +42,7 @@ class ServiceRequest(models.Model):
member_rent_attachment = fields.Many2many('ir.attachment', 'rel_member_rent_attachment_service_request', 'service_request_id',
'attachment_id', string='Rent Attachment')
added_amount_if_mother_dead = fields.Float(string="Added Amount (If mother dead)",compute="_get_added_amount_if_mother_dead")
attachment_lines = fields.One2many('service.attachments.settings','service_request_id',related='service_cat.attachment_lines',readonly=False)
state = fields.Selection([
('draft', 'Draft'),
('send_request', 'Send Request'),
@ -49,6 +51,13 @@ class ServiceRequest(models.Model):
('refused', 'Refused'),
], string='state', default="draft", tracking=True)
@api.model
def create(self, vals):
res = super(ServiceRequest, self).create(vals)
if not res.name or res.name == _('New'):
res.name = self.env['ir.sequence'].sudo().next_by_code('service.request.sequence') or _('New')
return res
def unlink(self):
for request in self:
if request.state not in ['draft']:
@ -123,22 +132,29 @@ class ServiceRequest(models.Model):
max_requested_amount = rec.service_cat.max_amount_for_student
if rec.requested_service_amount > max_requested_amount:
raise UserError(_("You Cannot request More than %s") % max_requested_amount)
@api.onchange('family_id')
def _onchange_family_id(self):
domain = []
# Check if family_id is set
if self.benefit_type:
# Example condition: check if the family is eligible for benefits
if self.benefit_type == 'family': # Replace with your actual condition
domain = [('benefit_id', '=', self.family_id.id)]
else:
domain = []
return {
'domain': {
'member_id': domain
}
}
@api.onchange('member_id')
def onchange_member_id(self):
for rec in self:
if rec.member_id and rec.member_id.member_location != 'study_inside_saudi_arabia':
raise UserError(_("You Cannot request Service if you not study inside Saudi Arabia"))
# @api.onchange('family_id')
# def _onchange_family_id(self):
# domain = []
# # Check if family_id is set
# if self.benefit_type:
# # Example condition: check if the family is eligible for benefits
# if self.benefit_type == 'family': # Replace with your actual condition
# domain = [('benefit_id', '=', self.family_id.id)]
# else:
# domain = []
#
# return {
# 'domain': {
# 'member_id': domain
# }
# }
def action_set_to_draft(self):
for rec in self:
rec.state= 'draft'

View File

@ -12,6 +12,7 @@ class ServicesSettings(models.Model):
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')
attachment_lines = fields.One2many('service.attachments.settings','service_id')
class RentLines(models.Model):
_name = 'rent.lines'

View File

@ -123,4 +123,5 @@ access_diseases_settings,access_diseases_settings,model_diseases_settings,base.g
access_exception_wizard,access_exception_wizard,model_exception_wizard,base.group_user,1,1,1,1
access_exception_reason,access_exception_reason,model_exception_reason,base.group_user,1,1,1,1
access_service_request,access_service_request,model_service_request,base.group_user,1,1,1,1
access_marital_status,access_marital_status,model_marital_status,base.group_user,1,1,1,1
access_marital_status,access_marital_status,model_marital_status,base.group_user,1,1,1,1
access_service_attachments_settings,access_service_attachments_settings,model_service_attachments_settings,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
123 access_exception_wizard access_exception_wizard model_exception_wizard base.group_user 1 1 1 1
124 access_exception_reason access_exception_reason model_exception_reason base.group_user 1 1 1 1
125 access_service_request access_service_request model_service_request base.group_user 1 1 1 1
126 access_marital_status access_marital_status model_marital_status base.group_user 1 1 1 1
127 access_service_attachments_settings access_service_attachments_settings model_service_attachments_settings base.group_user 1 1 1 1

View File

@ -764,7 +764,7 @@
<group>
<field name="housing_type" attrs="{'readonly':[('state','not in',['draft','complete_info','edit_info'])]}"/>
<field name="property_type"
attrs="{'readonly':[('state','not in',['draft','complete_info','edit_info'])]}"/>
attrs="{'required':[('state','!=','draft')],'readonly':[('state','not in',['draft','complete_info','edit_info'])]}"/>
<field name="rent_amount" attrs="{'readonly':[('state','not in',['draft','complete_info','edit_info'])],'invisible':[('property_type','!=','rent'),('property_type','!=','rent_shared')]}"/>
<field name="contract_num" attrs="{'readonly':[('state','not in',['draft','complete_info','edit_info'])],'invisible':[('property_type','!=','rent'),('property_type','!=','rent_shared')]}"/>
<field name="rent_start_date" attrs="{'readonly':[('state','not in',['draft','complete_info','edit_info'])],'invisible':[('property_type','!=','rent'),('property_type','!=','rent_shared')]}"/>

View File

@ -26,14 +26,18 @@
<sheet>
<group>
<group>
<field name="name" attrs="{'readonly':[('state','not in',['draft','send_request'])]}"/>
<div class="oe_title">
<h1>
<field name="name" readonly="1"/>
</h1>
</div>
<field name="benefit_type" attrs="{'readonly':[('state','not in',['draft','send_request'])]}" required="1"/>
<field name="family_id" attrs="{'readonly':['|',('state','not in',['draft','send_request']),('benefit_type','=','member')]}"/>
<field name="family_id"/>
<field name="family_category" force_save="1"/>
<field name="benefit_member_count" force_save="1"/>
<field name="branch_custom_id" force_save="1"/>
<field name="member_id" attrs="{'invisible':[('benefit_type','!=','member')],'readonly':[('state','not in',['draft','send_request'])],'required':[('benefit_type','=','member')]}"/>
<field name="requested_service_amount" attrs="{'readonly':[('state','not in',['draft','send_request'])]}"/>
<field name="requested_service_amount" attrs="{'readonly':[('state','not in',['draft','send_request'])]}" required="1"/>
</group>
<group>
<field name="need_status" attrs="{'readonly':[('state','not in',['draft','send_request'])]}"/>
@ -54,10 +58,11 @@
<group>
<separator string="Rent Contract Information" colspan="2"/>
<br/>
<field name="rent_payment_date"/>
<field name="rent_payment_date" required="1"/>
<field name="rent_contract_number" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="rent_start_date" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="rent_end_date" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="rent_amount" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="rent_attachment" widget="many2many_attachment_preview" attrs="{'invisible':[('benefit_type','!=','family')]}"/>
<field name="member_rent_contract_number" attrs="{'invisible':[('benefit_type','!=','member')]}"/>
<field name="member_rent_start_date" attrs="{'invisible':[('benefit_type','!=','member')]}"/>
@ -75,6 +80,16 @@
</sheet>
</form>
</page>
<page string="Services Attachments Settings">
<field name="attachment_lines" widget="one2many_list">
<tree editable="bottom" delete="0">
<field name="name"/>
<field name="service_attach" widget="many2many_binary"/>
<field name="notes"/>
<field name="service_type"/>
</tree>
</field>
</page>
</notebook>
</sheet>
<div class="oe_chatter">

View File

@ -16,8 +16,8 @@
<field name="service_type"/>
</group>
</group>
<notebook attrs="{'invisible':[('service_type','!=','rent')]}">
<page string="Family Rent Service Settings">
<notebook>
<page string="Family Rent Service Settings" attrs="{'invisible':[('service_type','!=','rent')]}">
<field name="rent_lines" widget="one2many_list">
<tree editable="bottom">
<field name="benefit_category_id"/>
@ -29,12 +29,21 @@
</tree>
</field>
</page>
<page string="Benefit Rent Service Settings">
<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="Services Attachments Settings">
<field name="attachment_lines" widget="one2many_list">
<tree editable="bottom">
<field name="name"/>
<field name="notes"/>
<field name="service_type"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>