126 lines
4.9 KiB
Python
126 lines
4.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from odoo import api, fields, models, _
|
|
from odoo.addons.website.models import ir_http
|
|
|
|
|
|
class ResPartner(models.Model):
|
|
_inherit = 'res.partner'
|
|
|
|
surface = fields.Float(string='Surface (ha)') # terrain
|
|
lot_number = fields.Text(string='Lot Number') # terrain
|
|
|
|
ref_project = fields.Text(string='Project No') # proprio
|
|
intent_signing = fields.Boolean(string='Intent to sign') # proprio
|
|
cyberimpact = fields.Boolean(string='Cyberimpact') # proprio
|
|
specification_date = fields.Date(string='Specification date') # proprio
|
|
crm_stage_activity = fields.Text(string='Activity Stage') # proprio
|
|
|
|
property_count = fields.Integer(string='Property count', compute='_compute_property_count', store=True)
|
|
is_owner = fields.Boolean(string='Is Owner', compute='_compute_property_count', store=True)
|
|
|
|
sethy_first_date = fields.Date(string='First membership date') # member
|
|
sethy_last_date = fields.Date(string='Last membership date') # member
|
|
sethy_renew_date = fields.Date(string='Next renew date date') # member
|
|
sethy_certification_date = fields.Date(string='Certification date date') # member
|
|
sethy_payment_type = fields.Text(string='Payment Type') # member
|
|
sethy_amount = fields.Float(string='Payment amount') # Member
|
|
|
|
is_property = fields.Boolean(
|
|
string='Is Property',
|
|
default=False,
|
|
compute='_compute_is_property'
|
|
) # True if property, False if not
|
|
|
|
interest_level = fields.Selection(
|
|
selection=[
|
|
('1', 'None'),
|
|
('2', 'Low'),
|
|
('3', 'Average'),
|
|
('4', 'High')],
|
|
string='Interest Level') # proprio
|
|
|
|
company_use = fields.Text(string='Company related') # proprio
|
|
|
|
relation_owner_ids = fields.One2many(
|
|
"res.partner.relation.all",
|
|
compute="_compute_owner_ids",
|
|
string="Owner ids"
|
|
)
|
|
|
|
relation_property_ids = fields.One2many(
|
|
"res.partner.relation.all",
|
|
compute="_compute_property_ids",
|
|
string="Property ids"
|
|
)
|
|
|
|
@api.depends('relation_owner_ids')
|
|
def _compute_is_property(self):
|
|
for partner in self:
|
|
partner.is_property = partner.category_id.name == 'Property'
|
|
|
|
@api.depends('relation_all_ids')
|
|
def _compute_owner_ids(self):
|
|
for record in self:
|
|
record.relation_owner_ids = record.relation_all_ids.filtered(
|
|
lambda line: (
|
|
line.type_id.name == 'Owner' and not line.is_inverse)
|
|
)
|
|
|
|
@api.depends('relation_all_ids')
|
|
def _compute_property_ids(self):
|
|
for record in self:
|
|
record.relation_property_ids = record.relation_all_ids.filtered(
|
|
lambda line: (
|
|
line.type_id.name == 'Owner' and line.is_inverse)
|
|
)
|
|
|
|
@api.onchange('is_property')
|
|
def _onchange_is_property(self):
|
|
""" Set is_company to True when is_property is set to True. """
|
|
if self.is_property:
|
|
self.is_company = True
|
|
|
|
@api.onchange('is_company')
|
|
def _onchange_is_company(self):
|
|
""" Set is_property to False when is_company is set to False. """
|
|
if not self.is_company:
|
|
self.is_property = False
|
|
|
|
@api.onchange('lot_number')
|
|
def _onchange_lot_number(self):
|
|
for lot in self:
|
|
if lot.lot_number:
|
|
lot.name = "Lot " + str(lot.lot_number)
|
|
|
|
@api.depends('relation_property_ids')
|
|
def _compute_property_count(self):
|
|
for record in self:
|
|
record.property_count = len(record.relation_property_ids)
|
|
record.is_owner = record.property_count > 0
|
|
|
|
@api.model_create_multi
|
|
def create(self, vals_list):
|
|
# Get the property tag reference outside the loop to avoid repeated searches.
|
|
property_tag = self.env.ref('bemade_sethy_configuration.partner_tag_property', raise_if_not_found=False)
|
|
# Iterate over each set of values in the list.
|
|
for vals in vals_list:
|
|
# Check if 'is_property' is in the values of the current record.
|
|
if 'is_property' in vals:
|
|
if vals['is_property'] and property_tag:
|
|
# Add the tag to category_id if is_property is True.
|
|
vals['category_id'] = [(4, property_tag.id)]
|
|
elif not vals['is_property'] and property_tag:
|
|
# Remove the tag from category_id if is_property is False.
|
|
vals['category_id'] = [(3, property_tag.id)]
|
|
# Call super and pass the modified vals_list.
|
|
return super(ResPartner, self).create(vals_list)
|
|
|
|
@api.onchange('is_property')
|
|
def _inverse_is_property(self):
|
|
property_tag = self.env.ref('bemade_sethy_configuration.partner_tag_property', raise_if_not_found=False)
|
|
for partner in self:
|
|
if partner.is_property:
|
|
partner.category_id |= property_tag
|
|
else:
|
|
partner.category_id -= property_tag
|