Benefit customization
This commit is contained in:
parent
ea37855ba8
commit
788597decf
File diff suppressed because it is too large
Load Diff
|
|
@ -643,15 +643,6 @@ class GrantBenefitProfile(models.Model):
|
|||
rooms = rec.env['benefit.housing.rooms'].sudo().search([('housing_id', '=', rec.id)])
|
||||
rec.rooms_number = len(rooms)
|
||||
|
||||
# @api.onchange('block', 'city_id', 'housing_number', 'house_number')
|
||||
# def _compute_get_name(self):
|
||||
# for rec in self:
|
||||
# if rec.block and rec.city_id and rec.housing_number and rec.house_number:
|
||||
# rec.housing_name = str(rec.housing_number + "-" + rec.house_number + "-" + rec.block + "-" + str(
|
||||
# rec.city_id.code) + "-" + rec.street)
|
||||
# else:
|
||||
# rec.housing_name = ""
|
||||
|
||||
@api.onchange('room_ids')
|
||||
def onchange_room_ids(self):
|
||||
res = {}
|
||||
|
|
@ -661,7 +652,6 @@ class GrantBenefitProfile(models.Model):
|
|||
res['domain'] = {'items': [('room_id', 'in', items_ids)]}
|
||||
return res
|
||||
|
||||
|
||||
@api.onchange("father_country_id", 'mother_country_id')
|
||||
def onchange_father_mother_country_id(self):
|
||||
res = {}
|
||||
|
|
@ -676,9 +666,9 @@ class GrantBenefitProfile(models.Model):
|
|||
@api.onchange('father_id_number', 'mother_id_number', 'replacement_mother_id_number')
|
||||
def _onchange_id_numbers(self):
|
||||
id_numbers = {
|
||||
'Father ID Number': self.father_id_number,
|
||||
'Mother ID Number': self.mother_id_number,
|
||||
'Replacement Mother ID Number': self.replacement_mother_id_number,
|
||||
'رقم هوية الأب': self.father_id_number,
|
||||
'رقم هوية الأم': self.mother_id_number,
|
||||
'رقم هوية الأم البديلة': self.replacement_mother_id_number,
|
||||
}
|
||||
|
||||
# Check each ID number for 10-digit format and uniqueness within the parent model
|
||||
|
|
@ -686,17 +676,15 @@ class GrantBenefitProfile(models.Model):
|
|||
for label, id_number in id_numbers.items():
|
||||
if id_number:
|
||||
if not re.match(r'^\d{10}$', id_number):
|
||||
raise ValidationError(f"{label} must contain exactly 10 digits.")
|
||||
raise ValidationError(_("%s must contain exactly 10 digits.")%label)
|
||||
if id_number in unique_ids:
|
||||
raise ValidationError(f"{label} must be unique within the same record.")
|
||||
raise ValidationError(_("%s must be unique within the same record.") % label)
|
||||
unique_ids.add(id_number)
|
||||
|
||||
# Check for uniqueness against `member_id_number` in child records and across database records
|
||||
for member in self.member_ids:
|
||||
if member.member_id_number and member.member_id_number in unique_ids:
|
||||
raise ValidationError(
|
||||
f"The ID number '{member.member_id_number}' in the Family Members list must be unique across the record.")
|
||||
|
||||
raise ValidationError(_("The ID number %s in the Family Members list must be unique across the record.")%member.member_id_number)
|
||||
# Check for duplicate IDs across records in the database
|
||||
for id_number in unique_ids:
|
||||
duplicate_record_family = self.env['grant.benefit'].search([
|
||||
|
|
@ -705,16 +693,9 @@ class GrantBenefitProfile(models.Model):
|
|||
], limit=1)
|
||||
duplicate_record_member = self.env['family.member'].search([('member_id_number', '=', id_number)], limit=1)
|
||||
if duplicate_record_family :
|
||||
raise ValidationError(
|
||||
f"The ID number '{id_number}' already exists in Family"
|
||||
f"with code '{duplicate_record_family.code}'. Please enter a unique ID number."
|
||||
)
|
||||
raise ValidationError(_("The ID number {} already exists in family with code {}. Please enter a unique ID number.").format(id_number, duplicate_record_family.code))
|
||||
if duplicate_record_member :
|
||||
raise ValidationError(
|
||||
f"The ID number '{id_number}' already exists in family "
|
||||
f"with code '{duplicate_record_member.benefit_id.code}'. Please enter a unique ID number."
|
||||
)
|
||||
|
||||
raise ValidationError(_("The ID number {} already exists in family with code {}. Please enter a unique ID number.").format(id_number, duplicate_record_member.code))
|
||||
|
||||
@api.onchange("family_bank")
|
||||
def onchange_family_bank(self):
|
||||
|
|
@ -1264,40 +1245,11 @@ class GrantBenefitProfile(models.Model):
|
|||
qr_image = base64.b64encode(temp.getvalue())
|
||||
self.qr_code = qr_image
|
||||
|
||||
# @api.onchange('name')
|
||||
# def generate_qr_code(self):
|
||||
# qr = qrcode.QRCode(
|
||||
# version=1,
|
||||
# error_correction=qrcode.constants.ERROR_CORRECT_L,
|
||||
# box_size=15,
|
||||
# border=4,
|
||||
# )
|
||||
# name = self.name
|
||||
# qr.add_data(name)
|
||||
# qr.make(fit=True)
|
||||
# img = qr.make_image()
|
||||
# temp = BytesIO()
|
||||
# img.save(temp, format="PNG")
|
||||
# qr_image = base64.b64encode(temp.getvalue())
|
||||
# self.qr_code = qr_image
|
||||
|
||||
@api.onchange('bank_id')
|
||||
def _compute_prefix_iban(self):
|
||||
if self.bank_id:
|
||||
self.iban = self.bank_id.iban
|
||||
|
||||
# @api.depends('age', 'gender')
|
||||
# def get_orphan_category(self):
|
||||
# for rec in self:
|
||||
# if rec.age and rec.gender:
|
||||
# age = int(rec.age)
|
||||
# category = self.env['benefit.category'].sudo().search([],limit=1)
|
||||
# record = category.filtered(
|
||||
# lambda r: r.age_from <= age and age <= r.age_to and r.gender == rec.gender
|
||||
# )
|
||||
# rec.benefit_category_id = record.id if record else False
|
||||
# rec.benefit_category_id = False
|
||||
|
||||
@api.onchange('weight', 'height')
|
||||
def _compute_obesity_rate(self):
|
||||
for rec in self:
|
||||
|
|
@ -1356,6 +1308,7 @@ class GrantBenefitProfile(models.Model):
|
|||
rec.total_income += calculate_income(rec.replacement_mother_income, rec.replacement_mother_status,
|
||||
rec.salary_ids)
|
||||
|
||||
|
||||
def get_mother_name(self):
|
||||
for rec in self:
|
||||
name = ''
|
||||
|
|
|
|||
|
|
@ -685,7 +685,7 @@ class ServiceAttachmentsSettings(models.Model):
|
|||
|
||||
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'),('home_restoration', 'Home Restoration'),('alternative_housing', 'Alternative Housing')],string='Service Type',related="service_id.service_type")
|
||||
service_type = fields.Selection([('rent', 'Rent'),('home_restoration', 'Home Restoration'),('alternative_housing', 'Alternative Housing'),('home_maintenance','Home Maintenance')],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')
|
||||
|
|
@ -13,7 +13,7 @@ class ServiceRequest(models.Model):
|
|||
# raise_amount_for_orphan = fields.Float(string='Raise Amount For Orphan')
|
||||
# rent_lines = fields.One2many('rent.lines','services_settings_id')
|
||||
benefit_type = fields.Selection(string='Benefit Type',selection=[('family', 'Family'),('member', 'Member')])
|
||||
date = fields.Datetime(string='Date')
|
||||
date = fields.Datetime(string='Date',default=fields.Datetime.now)
|
||||
family_id = fields.Many2one('grant.benefit',string='Family',domain="['|','|',('state','=','second_approve'),('state','=','temporarily_suspended'),('state','=','suspended_first_approve')]")
|
||||
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')
|
||||
|
|
@ -43,9 +43,10 @@ class ServiceRequest(models.Model):
|
|||
'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)
|
||||
account_id = fields.Many2one('account.account',string='Expenses Account',domain="[('user_type_id.id','=',15)]")
|
||||
account_id = fields.Many2one('account.account',string='Expenses Account',related='service_cat.account_id')
|
||||
service_producer_id = fields.Many2one('res.partner',string='Service Producer')
|
||||
is_service_producer = fields.Boolean(string='Is Service Producer?',related='service_cat.is_service_producer')
|
||||
maintenance_items_id = fields.Many2one('home.maintenance.lines', string="Maintenance Items")
|
||||
state = fields.Selection([
|
||||
('draft', 'Draft'),
|
||||
('send_request', 'Send Request'),
|
||||
|
|
@ -117,7 +118,7 @@ class ServiceRequest(models.Model):
|
|||
@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':
|
||||
if rec.service_cat.service_type == 'rent' and (rec.family_id.property_type == 'ownership' or rec.family_id.property_type == 'ownership_shared') and rec.benefit_type == 'family':
|
||||
raise UserError(_("You cannot benefit from this service"))
|
||||
|
||||
@api.onchange('rent_payment_date')
|
||||
|
|
@ -128,13 +129,23 @@ class ServiceRequest(models.Model):
|
|||
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"))
|
||||
@api.onchange('requested_service_amount','benefit_type')
|
||||
@api.onchange('requested_service_amount','benefit_type','date')
|
||||
def onchange_requested_service_amount(self):
|
||||
for rec in self:
|
||||
today = fields.Date.today()
|
||||
date_before_year = today - timedelta(days=365)
|
||||
if rec.requested_service_amount and rec.benefit_type == 'member':
|
||||
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)
|
||||
if rec.requested_service_amount and rec.benefit_type == 'family' and rec.service_cat.service_type == 'home_maintenance':
|
||||
max_requested_amount = rec.service_cat.max_maintenance_amount
|
||||
if rec.requested_service_amount > max_requested_amount:
|
||||
raise UserError(_("You Cannot request More than %s") % max_requested_amount)
|
||||
if rec.benefit_type == 'family' and rec.service_cat.service_type == 'home_maintenance':
|
||||
if self.search([('date','>',date_before_year),('family_id','=',rec.family_id.id)]):
|
||||
raise UserError(_("You Cannot request this service twice in same year"))
|
||||
|
||||
|
||||
@api.onchange('member_id')
|
||||
def onchange_member_id(self):
|
||||
|
|
@ -146,15 +157,29 @@ class ServiceRequest(models.Model):
|
|||
@api.onchange('family_category', 'sub_service_category')
|
||||
def _onchange_service_cat_domain(self):
|
||||
# Build the dynamic domain
|
||||
domain = [
|
||||
'|',
|
||||
('rent_lines.benefit_category_id', 'in', [self.family_category.id]),
|
||||
('home_restoration_lines.benefit_category_id', 'in', [self.family_category.id]),
|
||||
('is_main_service', '=', False),
|
||||
('service_type', '!=', False),
|
||||
('parent_service', '=', self.sub_service_category.id)
|
||||
]
|
||||
# Apply the domain dynamically
|
||||
domain = []
|
||||
if self.benefit_type == 'family':
|
||||
domain = [
|
||||
'|','|',
|
||||
('rent_lines.benefit_category_id', 'in', [self.family_category.id]),
|
||||
('home_restoration_lines.benefit_category_id', 'in', [self.family_category.id]),
|
||||
('benefit_category_ids', 'in', [self.family_category.id]),
|
||||
('is_main_service', '=', False),
|
||||
('service_type', '!=', False),
|
||||
('parent_service', '=', self.sub_service_category.id)
|
||||
]
|
||||
if self.benefit_type == 'member':
|
||||
domain = [
|
||||
'|', '|',
|
||||
('rent_lines.benefit_category_id', 'in', [self.family_category.id]),
|
||||
('home_restoration_lines.benefit_category_id', 'in', [self.family_category.id]),
|
||||
('benefit_category_ids', 'in', [self.family_category.id]),
|
||||
('is_main_service', '=', False),
|
||||
('service_type', '!=', False),
|
||||
('parent_service', '=', self.sub_service_category.id),
|
||||
('is_this_service_for_student','=',True)
|
||||
]
|
||||
# Apply the domain
|
||||
return {'domain': {'service_cat': domain}}
|
||||
|
||||
def action_set_to_draft(self):
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@ class ServicesSettings(models.Model):
|
|||
parent_service = fields.Many2one('services.settings',string='Parent Service')
|
||||
is_main_service = fields.Boolean(string='Is Main Service?')
|
||||
is_service_producer = fields.Boolean(string='Is Service Producer?')
|
||||
service_type = fields.Selection([('rent', 'Rent'),('home_restoration', 'Home Restoration'),('alternative_housing', 'Alternative Housing')],string='Service Type')
|
||||
is_this_service_for_student = fields.Boolean(string='Is Service For Student?')
|
||||
service_type = fields.Selection([('rent', 'Rent'),('home_restoration', 'Home Restoration'),('alternative_housing', 'Alternative Housing'),('home_maintenance','Home Maintenance')],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')
|
||||
|
|
@ -18,6 +19,10 @@ class ServicesSettings(models.Model):
|
|||
home_restoration_lines = fields.One2many('home.restoration.lines','services_settings_id')
|
||||
rent_amount_for_alternative_housing = fields.Float(string='Rent Amount For Alternative Housing')
|
||||
rent_period = fields.Integer('Rent Period')
|
||||
home_maintenance_lines = fields.One2many('home.maintenance.lines','services_settings_id')
|
||||
benefit_category_ids = fields.Many2many('benefit.category', string='Allowed Categories')
|
||||
max_maintenance_amount = fields.Float(string='Max Maintenance Amount')
|
||||
account_id = fields.Many2one('account.account',string='Expenses Account',domain="[('user_type_id.id','=',15)]")
|
||||
|
||||
class RentLines(models.Model):
|
||||
_name = 'rent.lines'
|
||||
|
|
@ -34,4 +39,11 @@ class HomeRestorationLines(models.Model):
|
|||
|
||||
benefit_category_id = fields.Many2one('benefit.category', string='Benefit Category')
|
||||
services_settings_id = fields.Many2one('services.settings', string='Services Settings')
|
||||
max_amount = fields.Float(string='Max Amount')
|
||||
max_amount = fields.Float(string='Max Amount')
|
||||
|
||||
class HomeMaintenanceLines(models.Model):
|
||||
_name = 'home.maintenance.lines'
|
||||
_rec_name = 'maintenance_name'
|
||||
|
||||
services_settings_id = fields.Many2one('services.settings', string='Services Settings')
|
||||
maintenance_name = fields.Char(string='Maintenance Name')
|
||||
|
|
@ -125,4 +125,5 @@ access_exception_reason,access_exception_reason,model_exception_reason,base.grou
|
|||
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_service_attachments_settings,access_service_attachments_settings,model_service_attachments_settings,base.group_user,1,1,1,1
|
||||
access_home_restoration_lines,access_home_restoration_lines,model_home_restoration_lines,base.group_user,1,1,1,1
|
||||
access_home_restoration_lines,access_home_restoration_lines,model_home_restoration_lines,base.group_user,1,1,1,1
|
||||
access_home_maintenance_lines,access_home_maintenance_lines,model_home_maintenance_lines,base.group_user,1,1,1,1
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
<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'])]}" required="1"/>
|
||||
<field name="account_id" attrs="{'readonly':[('state','not in',['draft','send_request'])]}"/>
|
||||
<field name="account_id"/>
|
||||
<field name="is_service_producer" invisible="1"/>
|
||||
<field name="service_producer_id" attrs="{'readonly':[('state','not in',['draft','send_request'])],'invisible':[('is_service_producer','=',False)]}"/>
|
||||
</group>
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
<field name="main_service_category" attrs="{'readonly':[('state','not in',['draft','send_request'])]}" required="1"/>
|
||||
<field name="sub_service_category" attrs="{'readonly':[('state','not in',['draft','send_request'])]}" required="1"/>
|
||||
<field name="service_cat" attrs="{'readonly':[('state','not in',['draft','send_request'])]}" required="1"/>
|
||||
<field name="date" attrs="{'readonly':[('state','not in',['draft','send_request'])]}"/>
|
||||
<field name="date" attrs="{'readonly':[('state','not in',['draft','send_request'])]}" required="1"/>
|
||||
<field name="description" attrs="{'readonly':[('state','not in',['draft','send_request'])]}"/>
|
||||
<field name="service_attach" attrs="{'readonly':[('state','not in',['draft','send_request'])]}" widget="many2many_attachment_preview"/>
|
||||
<field name="service_type" invisible="1"/>
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
<group>
|
||||
<separator string="Rent Contract Information" colspan="2"/>
|
||||
<br/>
|
||||
<field name="rent_payment_date" required="1"/>
|
||||
<field name="rent_payment_date" attrs="{'required':[('service_type','=','rent')]}"/>
|
||||
<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')]}"/>
|
||||
|
|
@ -83,6 +83,11 @@
|
|||
</sheet>
|
||||
</form>
|
||||
</page>
|
||||
<page string="Maintenance Service" attrs="{'invisible':[('service_type', '!=', 'home_maintenance')]}">
|
||||
<group>
|
||||
<field name="maintenance_items_id"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Services Attachments Settings">
|
||||
<field name="attachment_lines" widget="one2many_list">
|
||||
<tree editable="bottom" delete="0">
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@
|
|||
</group>
|
||||
<group>
|
||||
<field name="service_type"/>
|
||||
<field name="is_this_service_for_student"/>
|
||||
<field name="account_id"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
|
|
@ -59,6 +61,19 @@
|
|||
<field name="rent_period"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Home Maintenance Service Settings" attrs="{'invisible':[('service_type','!=','home_maintenance')]}">
|
||||
<field name="home_maintenance_lines" widget="one2many_list">
|
||||
<tree editable="bottom">
|
||||
<field name="maintenance_name"/>
|
||||
</tree>
|
||||
</field>
|
||||
<!-- <group>-->
|
||||
<group>
|
||||
<field name="benefit_category_ids" widget="many2many_tags"/>
|
||||
<field name="max_maintenance_amount"/>
|
||||
</group>
|
||||
<!-- </group>-->
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
|
|
|
|||
Loading…
Reference in New Issue