123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- # -*- 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
|