diff --git a/addons/website/models/website_visitor.py b/addons/website/models/website_visitor.py index 969e5a93685..7f7e50073b4 100644 --- a/addons/website/models/website_visitor.py +++ b/addons/website/models/website_visitor.py @@ -13,7 +13,7 @@ from odoo.http import request class WebsitVisitorPage(models.Model): _name = 'website.visitor.page' _description = 'Visited Pages' - _order = 'visit_datetime ASC' + _order = 'visit_datetime DESC' _log_access = False visitor_id = fields.Many2one('website.visitor', ondelete="cascade", index=True, required=True, readonly=True) diff --git a/addons/website_crm/__manifest__.py b/addons/website_crm/__manifest__.py index c402dccf0c5..20b6c6577c6 100644 --- a/addons/website_crm/__manifest__.py +++ b/addons/website_crm/__manifest__.py @@ -14,6 +14,7 @@ This module includes contact phone and mobile numbers validation.""", 'depends': ['website_form', 'crm'], 'data': [ 'data/website_crm_data.xml', + 'views/website_crm_lead_views.xml', 'views/website_crm_templates.xml', 'views/res_config_settings_views.xml', 'views/website_visitor_views.xml', diff --git a/addons/website_crm/models/crm_lead.py b/addons/website_crm/models/crm_lead.py index e5c7f53b2be..7e3aa41389d 100644 --- a/addons/website_crm/models/crm_lead.py +++ b/addons/website_crm/models/crm_lead.py @@ -1,13 +1,45 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import fields, models +from odoo import api, fields, models class Lead(models.Model): _inherit = 'crm.lead' - visitor_id = fields.Many2one('website.visitor', "Web Visitor") + visitor_ids = fields.Many2many('website.visitor', string="Web Visitors") + visitor_page_count = fields.Integer('# Page Views', compute="_compute_visitor_page_count") + + @api.depends('visitor_ids.page_ids') + def _compute_visitor_page_count(self): + self.flush(['visitor_ids']) + sql = """ SELECT l.id as lead_id, count(*) as page_view_count + FROM crm_lead l + JOIN crm_lead_website_visitor_rel lv ON l.id = lv.crm_lead_id + JOIN website_visitor v ON v.id = lv.website_visitor_id + JOIN website_visitor_page p ON p.visitor_id = v.id + WHERE l.id in %s + GROUP BY l.id""" + self.env.cr.execute(sql, (tuple(self.ids),)) + page_data = self.env.cr.dictfetchall() + mapped_data = {data['lead_id']: data['page_view_count'] for data in page_data} + for lead in self: + lead.visitor_page_count = mapped_data.get(lead.id, 0) + + def action_redirect_to_page_views(self): + visitors = self.visitor_ids + action = self.env.ref('website.website_visitor_page_action').read()[0] + action['domain'] = [('visitor_id', 'in', visitors.ids)] + # avoid grouping if only few records + if len(visitors.visitor_page_ids.ids) > 15 and len(visitors.page_ids.ids) > 1: + action['context'] = {'search_default_group_by_page': '1'} + return action + + def _merge_data(self, fields): + merged_data = super(Lead, self)._merge_data(fields) + # add all the visitors from all lead to merge + merged_data['visitor_ids'] = [(6, 0, self.visitor_ids.ids)] + return merged_data def website_form_input_filter(self, request, values): values['medium_id'] = values.get('medium_id') or \ diff --git a/addons/website_crm/models/website_visitor.py b/addons/website_crm/models/website_visitor.py index 576c11d6fea..7bd3570a17a 100644 --- a/addons/website_crm/models/website_visitor.py +++ b/addons/website_crm/models/website_visitor.py @@ -7,12 +7,10 @@ from odoo import fields, models, api class WebsiteVisitor(models.Model): _inherit = 'website.visitor' - lead_ids = fields.One2many('crm.lead', 'visitor_id', string='Leads') - lead_count = fields.Integer('# Leads', compute="_compute_lead_count") + lead_ids = fields.Many2many('crm.lead', string='Leads', groups="sales_team.group_sale_salesman") + lead_count = fields.Integer('# Leads', compute="_compute_lead_count", groups="sales_team.group_sale_salesman") - @api.depends('lead_ids.visitor_id') + @api.depends('lead_ids') def _compute_lead_count(self): - page_data = self.env['crm.lead'].read_group([('visitor_id', 'in', self.ids)], ['visitor_id'], ['visitor_id']) - mapped_data = dict([(data['visitor_id'][0], data['visitor_id_count']) for data in page_data]) for visitor in self: - visitor.lead_count = mapped_data.get(visitor.id, 0) + visitor.lead_count = len(visitor.lead_ids) diff --git a/addons/website_crm/security/ir.model.access.csv b/addons/website_crm/security/ir.model.access.csv new file mode 100644 index 00000000000..c85af9f0e0c --- /dev/null +++ b/addons/website_crm/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_website_visitor_salesman,access_website_visitor_salesman,model_website_visitor,sales_team.group_sale_salesman,1,0,0,0 diff --git a/addons/website_crm/views/website_crm_lead_views.xml b/addons/website_crm/views/website_crm_lead_views.xml new file mode 100644 index 00000000000..8ed3b5e1a26 --- /dev/null +++ b/addons/website_crm/views/website_crm_lead_views.xml @@ -0,0 +1,16 @@ + + + + crm.lead.view.form.inherit.website.crm + crm.lead + + + + + + + + + + diff --git a/addons/website_crm/views/website_visitor_views.xml b/addons/website_crm/views/website_visitor_views.xml index 5c5807a0416..1d20b5271dc 100644 --- a/addons/website_crm/views/website_visitor_views.xml +++ b/addons/website_crm/views/website_visitor_views.xml @@ -5,7 +5,7 @@ Leads crm.lead tree,form - [('visitor_id', '=', active_id)] + [('visitor_ids', 'in', [active_id])] No lead linked for this visitor
No lead linked for this visitor