Files
odoo_source/addons/crm/models/res_partner.py
T
Mitul Shah f0b7600314 [IMP] base, crm: set salesperson and team on partner from parent
This commit does below improvements:

1/ If salesperson and sales team are set on an individual partner, we propagate
   those to parent company being created from m2o of the form view.
2/ If the existing parent company is manually linked to an individual partner
   being created, and salesperson and sales team are not set on the individual,
   we set those values from the linked parent (if set on the parent).

Task-2636290

closes odoo/odoo#78696

Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
2022-06-24 13:49:07 +02:00

75 lines
3.0 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
class Partner(models.Model):
_name = 'res.partner'
_inherit = 'res.partner'
team_id = fields.Many2one(
'crm.team', string='Sales Team',
compute='_compute_team_id',
precompute=True, # avoid queries post-create
ondelete='set null', readonly=False, store=True)
opportunity_ids = fields.One2many('crm.lead', 'partner_id', string='Opportunities', domain=[('type', '=', 'opportunity')])
opportunity_count = fields.Integer("Opportunity", compute='_compute_opportunity_count')
@api.model
def default_get(self, fields):
rec = super(Partner, self).default_get(fields)
active_model = self.env.context.get('active_model')
if active_model == 'crm.lead' and len(self.env.context.get('active_ids', [])) <= 1:
lead = self.env[active_model].browse(self.env.context.get('active_id')).exists()
if lead:
rec.update(
phone=lead.phone,
mobile=lead.mobile,
function=lead.function,
title=lead.title.id,
website=lead.website,
street=lead.street,
street2=lead.street2,
city=lead.city,
state_id=lead.state_id.id,
country_id=lead.country_id.id,
zip=lead.zip,
)
return rec
@api.depends('parent_id')
def _compute_team_id(self):
for partner in self.filtered(lambda partner: not partner.team_id and partner.company_type == 'person' and partner.parent_id.team_id):
partner.team_id = partner.parent_id.team_id
def _compute_opportunity_count(self):
# retrieve all children partners and prefetch 'parent_id' on them
all_partners = self.with_context(active_test=False).search([('id', 'child_of', self.ids)])
all_partners.read(['parent_id'])
opportunity_data = self.env['crm.lead'].with_context(active_test=False)._read_group(
domain=[('partner_id', 'in', all_partners.ids)],
fields=['partner_id'], groupby=['partner_id']
)
self.opportunity_count = 0
for group in opportunity_data:
partner = self.browse(group['partner_id'][0])
while partner:
if partner in self:
partner.opportunity_count += group['partner_id_count']
partner = partner.parent_id
def action_view_opportunity(self):
'''
This function returns an action that displays the opportunities from partner.
'''
action = self.env['ir.actions.act_window']._for_xml_id('crm.crm_lead_opportunities')
action['context'] = {'active_test': False}
if self.is_company:
action['domain'] = [('partner_id.commercial_partner_id', '=', self.id)]
else:
action['domain'] = [('partner_id', '=', self.id)]
return action