diff --git a/odex25_benefit/odex_benefit/models/benefit.py b/odex25_benefit/odex_benefit/models/benefit.py
index a545af256..18e581502 100644
--- a/odex25_benefit/odex_benefit/models/benefit.py
+++ b/odex25_benefit/odex_benefit/models/benefit.py
@@ -66,10 +66,10 @@ class GrantBenefitProfile(models.Model):
phone2 = fields.Char(string="Phone2")
relative_phone = fields.Char(string="Relative Phone")
relative_relation = fields.Char(string="Relative Relation")
- sms_phone = fields.Char(string="Contact Phone")
+ sms_phone = fields.Char(string="Contact Phone",tracking=True)
name_in_bank = fields.Char()
family_bank = fields.Many2one('res.partner.bank')
- acc_number = fields.Char('Account Number',copy=False)
+ acc_number = fields.Char('Account Number',copy=False,tracking=True)
acc_holder_name = fields.Char('Account Holder Name')
acc_holder_id_number = fields.Char(string="Account Holder ID Number")
bank_id = fields.Many2one("res.bank",string='Bank')
@@ -104,7 +104,7 @@ class GrantBenefitProfile(models.Model):
user_id = fields.Many2one('res.users', string="User")
password = fields.Char('Password')
# Category And Family
- benefit_category_id = fields.Many2one('benefit.category', string='Benefit Category', compute="get_benefit_category",store=True)
+ benefit_category_id = fields.Many2one('benefit.category', string='Benefit Category', compute="get_benefit_category",store=True,tracking=True)
benefit_category_old = fields.Many2one('benefit.category', string='Family category in the old system')
family_id = fields.Many2one('benefit.family', string='Benefit Family')
# address
@@ -123,7 +123,7 @@ class GrantBenefitProfile(models.Model):
('villa', 'villa'),
('popular_house', 'popular house'),
('tent', 'tent'),
- ('Appendix', 'Appendix'), ], default='apartment')
+ ('Appendix', 'Appendix'), ], default='apartment',tracking=True)
property_instrument_number = fields.Char(string='Property Instrument number')
property_instrument_attach = fields.Many2many('ir.attachment','rel_property_instrument_attach_attachment','benefit_id','attachment_id',string='Property Instrument Attach')
electricity_attach = fields.Many2many('ir.attachment','rel_electricity_attach_attachment','benefit_id','attachment_id',string='Electricity Attach')
@@ -387,7 +387,7 @@ class GrantBenefitProfile(models.Model):
total_income = fields.Float('Total Income', compute="get_total_income", store=True)
benefit_member_count = fields.Integer(string="Members count", compute="get_members_count")
non_member_count = fields.Integer(string="Non Benefit Members count", compute="get_non_members_count")
- member_income = fields.Integer(string="Member Income Average", compute="get_member_income",store=True)
+ member_income = fields.Integer(string="Member Income Average", compute="get_member_income",store=True,tracking=True)
request_activity_id = fields.Many2one('mail.activity')
state = fields.Selection([
('draft', 'Draft'),
@@ -404,15 +404,15 @@ class GrantBenefitProfile(models.Model):
('exception_second_approve', 'Waiting for General Manager'),
('black_list', 'Black List'),
], string='state', default="draft", tracking=True, group_expand='_expand_states')
- branch_custom_id = fields.Many2one('branch.settings', string="Branch")
- branch_family_id = fields.Many2one('branch.settings', string="Family Branch")
+ branch_custom_id = fields.Many2one('branch.settings', string="Branch",tracking=True)
+ branch_family_id = fields.Many2one('branch.settings', string="Family Branch",tracking=True)
branch_has_employees = fields.Boolean('Has Employees In branch',related="branch_custom_id.has_employees")
- district_id = fields.Many2one('res.districts', string="District", domain="[('branch_custom_id','=',branch_custom_id)]")
+ district_id = fields.Many2one('res.districts', string="District", domain="[('branch_custom_id','=',branch_custom_id)]",tracking=True)
meal_card = fields.Boolean(string="Meal Card",related="district_id.meal_card", store=True,related_sudo=True)
attachment_ids = fields.One2many('ir.attachment', 'benefit_id')
family_debits_ids = fields.One2many('family.debits', 'benefit_id')
- researcher_id = fields.Many2one("committees.line", string="Researcher")
- assigned_researcher_id = fields.Many2one('committees.line',string='Assigned Researcher')
+ researcher_id = fields.Many2one("committees.line", string="Researcher",tracking=True)
+ assigned_researcher_id = fields.Many2one('committees.line',string='Assigned Researcher',tracking=True)
auto_accept_for_member = fields.Boolean(string="Auto Accept For members", default=True)
last_visit_date = fields.Datetime(string='Last Visit Date')
# Benefit Housing Information
@@ -714,6 +714,14 @@ class GrantBenefitProfile(models.Model):
"Numbers and special characters are not allowed.") % field_label
)
+ @api.constrains('active', 'state')
+ def _prevent_archive_unless_allowed(self):
+ for rec in self:
+ if not rec.active and rec.state not in ['refused', 'suspended_second_approve', 'black_list']:
+ raise ValidationError(
+ "You can only archive the family if its status is: Refused, Final Suspension, or Blacklisted."
+ )
+
@api.depends('rent_amount','property_type','benefit_member_count', 'branch_custom_id.branch_type')
def _compute_estimated_rent_amount(self):
for rec in self:
@@ -1340,6 +1348,9 @@ class GrantBenefitProfile(models.Model):
record.partner_id.get_partner_name() # Force recomputation of name
if record.user_id:
record.sudo().user_id.write({"name": record.partner_id.name})
+ if 'active' in vals:
+ for rec in self:
+ rec.member_ids.write({'active': vals['active']})
#if not self.env.context.get('force_website', False) and not self.env.context.get('bypass_attachments_requirement', False):
# self._validate_required_attachments()
diff --git a/odex25_benefit/odex_benefit/models/benefit_config.py b/odex25_benefit/odex_benefit/models/benefit_config.py
index 99effabaa..39c2e6d18 100644
--- a/odex25_benefit/odex_benefit/models/benefit_config.py
+++ b/odex25_benefit/odex_benefit/models/benefit_config.py
@@ -666,7 +666,7 @@ class ResDistricts(models.Model):
name = fields.Char(string="Name")
meal_card = fields.Boolean(string='Meal Card')
city_id = fields.Many2one('res.country.city')
- branch_custom_id = fields.Many2one("branch.settings", string="Branch", domain="[('city_id', '=', city_id)]")
+ branch_custom_id = fields.Many2one("branch.settings", string="Branch")
class VisitsSettings(models.Model):
_name = 'visits.types'
diff --git a/odex25_benefit/odex_benefit/models/family_members.py b/odex25_benefit/odex_benefit/models/family_members.py
index d73064bb5..526b36411 100644
--- a/odex25_benefit/odex_benefit/models/family_members.py
+++ b/odex25_benefit/odex_benefit/models/family_members.py
@@ -275,6 +275,7 @@ class FamilyMemberProfile(models.Model):
total_member_service_requests = fields.Integer(compute='_get_total_member_service_requests')
non_benefit_reason = fields.Text(string="Non Benefit Reason", tracking=True)
final_suspend_date = fields.Date(string="Final Suspend Date")
+ active = fields.Boolean(string='Active', default=True)
# def create(self, vals):
# for line_vals in vals:
diff --git a/odex25_benefit/odex_benefit/models/service_request.py b/odex25_benefit/odex_benefit/models/service_request.py
index 3f775f504..5fe02e2b4 100644
--- a/odex25_benefit/odex_benefit/models/service_request.py
+++ b/odex25_benefit/odex_benefit/models/service_request.py
@@ -823,6 +823,28 @@ class ServiceRequest(models.Model):
('state', '!=', 'refused')
], order='date desc', limit=1)
+ if service_type == 'buy_home':
+ complete_building_requests = Service.search([
+ ('family_id', '=', family_id),
+ ('service_cat.service_type', '=', 'complete_building_house'),
+ ('id', '!=', rec._origin.id),
+ ('state', '!=', 'refused')
+ ], order='date desc', limit=1)
+ if complete_building_requests and complete_building_requests.date:
+ raise UserError(_(
+ "You cannot request 'buy_home' service because there is an existing 'complete_building_house' service request."
+ ))
+ if service_type == 'complete_building_house':
+ buy_home_requests = Service.search([
+ ('family_id', '=', family_id),
+ ('service_cat.service_type', '=', 'buy_home'),
+ ('id', '!=', rec._origin.id),
+ ('state', '!=', 'refused')
+ ], order='date desc', limit=1)
+ if buy_home_requests and buy_home_requests.date:
+ raise UserError(_(
+ "You cannot request 'complete_building_house' service because there is an existing 'buy_home' service request."
+ ))
if existing_request_restoration and existing_request_restoration.date:
if service_type == 'buy_home':
raise ValidationError(_(
diff --git a/odex25_benefit/odex_benefit/views/family_members.xml b/odex25_benefit/odex_benefit/views/family_members.xml
index fdcfdc308..0da5ccbf6 100644
--- a/odex25_benefit/odex_benefit/views/family_members.xml
+++ b/odex25_benefit/odex_benefit/views/family_members.xml
@@ -154,7 +154,7 @@
-
+