19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:30:53 +01:00
parent dc68f80d3f
commit 7221b9ac46
610 changed files with 135477 additions and 161677 deletions

View file

@ -1,13 +1,13 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models, tools, api
from odoo import fields, models, tools
class ActivityReport(models.Model):
class CrmActivityReport(models.Model):
""" CRM Lead Analysis """
_name = "crm.activity.report"
_name = 'crm.activity.report'
_auto = False
_description = "CRM Activity Analysis"
_rec_name = 'id'
@ -33,6 +33,12 @@ class ActivityReport(models.Model):
selection=[('lead', 'Lead'), ('opportunity', 'Opportunity')],
help="Type is used to separate Leads and Opportunities")
active = fields.Boolean('Active', readonly=True)
tag_ids = fields.Many2many(related="lead_id.tag_ids", readonly=True)
won_status = fields.Selection([
('won', 'Won'),
('lost', 'Lost'),
('pending', 'Pending'),
], string='Is Won', readonly=True)
def _select(self):
return """
@ -55,7 +61,8 @@ class ActivityReport(models.Model):
l.stage_id,
l.partner_id,
l.type as lead_type,
l.active
l.active,
l.won_status
"""
def _from(self):
@ -69,15 +76,14 @@ class ActivityReport(models.Model):
"""
def _where(self):
disccusion_subtype = self.env.ref('mail.mt_comment')
return """
WHERE
m.model = 'crm.lead' AND (m.mail_activity_type_id IS NOT NULL OR m.subtype_id = %s)
""" % (disccusion_subtype.id,)
m.model = 'crm.lead' AND (m.mail_activity_type_id IS NOT NULL)
"""
def init(self):
tools.drop_view_if_exists(self._cr, self._table)
self._cr.execute("""
tools.drop_view_if_exists(self.env.cr, self._table)
self.env.cr.execute("""
CREATE OR REPLACE VIEW %s AS (
%s
%s

View file

@ -24,16 +24,17 @@
</record>
<record id="crm_activity_report_view_tree" model="ir.ui.view">
<field name="name">crm.activity.report.tree</field>
<field name="name">crm.activity.report.list</field>
<field name="model">crm.activity.report</field>
<field name="arch" type="xml">
<tree default_order="date desc">
<list default_order="date desc">
<field name="date"/>
<field name="author_id"/>
<field name="author_id" widget="many2one_avatar"/>
<field name="mail_activity_type_id"/>
<field name="body"/>
<field name="body" optional="hide"/>
<field name="company_id" groups="base.group_multi_company"/>
</tree>
<field name="tag_ids" string="Lead Tags" optional="show" widget="many2many_tags" options="{'color_field': 'color'}"/>
</list>
</field>
</record>
@ -47,20 +48,22 @@
<field name="user_id" string="Salesperson"/>
<field name="team_id" context="{'invisible_team': False}"/>
<field name="author_id" string="Assigned To"/>
<field name="tag_ids" string="Lead Tags"/>
<separator groups="crm.group_use_lead"/>
<filter string="Leads" name="lead" domain="[('lead_type', '=', 'lead')]" help="Show only lead" groups="crm.group_use_lead"/>
<filter string="Opportunities" name="opportunity" domain="[('lead_type', '=', 'opportunity')]" help="Show only opportunity" groups="crm.group_use_lead"/>
<separator/>
<filter string="Won" name="won" domain="[('stage_id.is_won', '=', True)]"/>
<filter string="Lost" name="lost" domain="[('won_status', '=', 'lost')]" context="{'active_test': False}"/>
<separator/>
<filter string="Trailing 12 months" name="completion_date" domain="[
('date', '>=', (datetime.datetime.combine(context_today() + relativedelta(days=-365), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S')),
('date', '&lt;=', (datetime.datetime.combine(context_today(), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))]"/>
('date', '>=', '-1y'),
('date', '&lt;', '+1d =0H')]"/>
<separator/>
<filter name="filter_date" date="date"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
<group expand="1" string="Group By">
<group>
<filter string="Activity" name="group_by_activity_type" context="{'group_by': 'mail_activity_type_id'}"/>
<filter string="Type" name="group_by_subtype" context="{'group_by': 'subtype_id'}"/>
<filter string="Assigned To" name="group_by_author_id" context="{'group_by': 'author_id'}"/>
@ -81,7 +84,7 @@
<record id="crm_activity_report_action" model="ir.actions.act_window">
<field name="name">Activities</field>
<field name="res_model">crm.activity.report</field>
<field name="view_mode">graph,pivot,tree</field>
<field name="view_mode">graph,pivot,list</field>
<field name="context">{
'search_default_completion_date': 1,
'pivot_column_groupby': ['subtype_id', 'mail_activity_type_id'],
@ -92,9 +95,9 @@
<field name="domain">[]</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No data yet!
Let's get to work!
</p><p>
Start scheduling activities on your opportunities
Activities marked as Done on Leads will appear here, providing an overview of lead interactions.
</p>
</field>
</record>
@ -102,14 +105,14 @@
<record id="crm_activity_report_action_team" model="ir.actions.act_window">
<field name="name">Pipeline Activities</field>
<field name="res_model">crm.activity.report</field>
<field name="view_mode">graph,pivot,tree</field>
<field name="view_mode">graph,pivot,list</field>
<field name="context">{'search_default_team_id': active_id}</field>
<field name="domain">[]</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No data yet!
Let's get to work!
</p><p>
Start scheduling activities on your opportunities
Activities marked as Done on Leads will appear here, providing an overview of lead interactions.
</p>
</field>
</record>

View file

@ -1,6 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="crm_lead_view_tree_opportunity_reporting" model="ir.ui.view">
<field name="name">crm.lead.list.opportunity.reporting</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_case_tree_view_oppor"/>
<field name="mode">primary</field>
<field name="arch" type="xml">
<xpath expr="//button[@name='%(crm.action_lead_mail_compose)d']" position="replace"/>
<xpath expr="//widget[@name='mail_activity_mixin_list_reschedule_dropdown']" position="replace"/>
</field>
</record>
<!-- Opportunities by user and team pivot View -->
<record id="crm_opportunity_report_view_pivot" model="ir.ui.view">
<field name="name">crm.opportunity.report.pivot</field>
@ -18,6 +29,7 @@
<field name="recurring_revenue_monthly" groups="!crm.group_use_recurring_revenues" invisible="1"/>
<field name="recurring_revenue_monthly_prorated" groups="!crm.group_use_recurring_revenues" invisible="1"/>
<field name="recurring_revenue" groups="!crm.group_use_recurring_revenues" invisible="1"/>
<field name="recurring_revenue_prorated" groups="!crm.group_use_recurring_revenues" invisible="1"/>
</pivot>
</field>
</record>
@ -37,6 +49,7 @@
<field name="recurring_revenue_monthly" groups="!crm.group_use_recurring_revenues" invisible="1"/>
<field name="recurring_revenue_monthly_prorated" groups="!crm.group_use_recurring_revenues" invisible="1"/>
<field name="recurring_revenue" groups="!crm.group_use_recurring_revenues" invisible="1"/>
<field name="recurring_revenue_prorated" groups="!crm.group_use_recurring_revenues" invisible="1"/>
</pivot>
</field>
</record>
@ -57,6 +70,7 @@
<field name="recurring_revenue_monthly" groups="!crm.group_use_recurring_revenues" invisible="1"/>
<field name="recurring_revenue_monthly_prorated" groups="!crm.group_use_recurring_revenues" invisible="1"/>
<field name="recurring_revenue" groups="!crm.group_use_recurring_revenues" invisible="1"/>
<field name="recurring_revenue_prorated" groups="!crm.group_use_recurring_revenues" invisible="1"/>
</graph>
</field>
</record>
@ -76,6 +90,7 @@
<field name="recurring_revenue_monthly" groups="!crm.group_use_recurring_revenues" invisible="1"/>
<field name="recurring_revenue_monthly_prorated" groups="!crm.group_use_recurring_revenues" invisible="1"/>
<field name="recurring_revenue" groups="!crm.group_use_recurring_revenues" invisible="1"/>
<field name="recurring_revenue_prorated" groups="!crm.group_use_recurring_revenues" invisible="1"/>
</graph>
</field>
</record>
@ -97,19 +112,19 @@
domain="[('active', '=', True)]"/>
<filter string="Inactive" name="filter_inactive"
domain="[('active', '=', False)]"/>
<filter string="Won" name="won"
domain="[('probability', '=', 100)]"/>
<filter string="Lost" name="lost"
domain="[('probability', '=', 0), ('active', '=', False)]"/>
<filter string="Won" name="filter_won_status_won"
domain="[('won_status', '=', 'won')]"/>
<filter string="Lost" name="filter_won_status_lost"
domain="[('won_status', '=', 'lost')]"/>
<field name="team_id" context="{'invisible_team': False}"/>
<field name="user_id" string="Salesperson"/>
<separator/>
<filter name="filter_create_date" date="create_date" default_period="this_year"/>
<filter name="filter_create_date" date="create_date" default_period="year"/>
<filter string="Expected Closing" name="filter_date_deadline" date="date_deadline"/>
<filter string="Date Closed" name="date_closed_filter" date="date_closed"/>
<group expand="0" string="Extended Filters">
<group>
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="stage_id" domain="['|', ('team_id', '=', False), ('team_id', '=', 'team_id')]"/>
<field name="stage_id" domain="['|', ('team_ids', '=', False), ('team_ids', 'in', 'team_id')]"/>
<field name="campaign_id"/>
<field name="medium_id"/>
<field name="source_id"/>
@ -120,7 +135,7 @@
<field name="date_closed"/>
</group>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
<group expand="1" string="Group By">
<group>
<filter string="Salesperson" name="salesperson" context="{'group_by':'user_id'}" />
<filter string="Sales Team" name="saleschannel" context="{'group_by':'team_id'}"/>
<filter string="City" name="city" context="{'group_by':'city'}" />
@ -142,7 +157,7 @@
</record>
<record id="crm_lead_view_tree_reporting" model="ir.ui.view">
<field name="name">crm.lead.tree.lead.reporting</field>
<field name="name">crm.lead.list.lead.reporting</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_case_tree_view_leads"/>
<field name="mode">primary</field>
@ -155,20 +170,23 @@
<field name="type" groups="crm.group_use_lead" optional="show"/>
<field name="stage_id" optional="show"/>
</xpath>
<xpath expr="field[@name='probability']" position="after">
<field name="lost_reason_id" optional="hide"/>
</xpath>
</field>
</record>
<record id="crm_opportunity_report_action" model="ir.actions.act_window">
<field name="name">Pipeline Analysis</field>
<field name="res_model">crm.lead</field>
<field name="view_mode">graph,pivot,tree,form</field>
<field name="view_mode">graph,pivot,list,form</field>
<field name="search_view_id" ref="crm.crm_opportunity_report_view_search"/>
<field name="context">{'search_default_filter_opportunity': True, 'search_default_current': True}</field>
<field name="view_ids"
eval="[(5, 0, 0),
(0, 0, {'view_mode': 'graph', 'view_id': ref('crm_opportunity_report_view_graph')}),
(0, 0, {'view_mode': 'pivot', 'view_id': ref('crm_opportunity_report_view_pivot')}),
(0, 0, {'view_mode': 'tree', 'view_id': ref('crm_case_tree_view_oppor')})]"/>
(0, 0, {'view_mode': 'list', 'view_id': ref('crm_lead_view_tree_opportunity_reporting')})]"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No data found!
@ -181,7 +199,7 @@
<record id="crm_opportunity_report_action_lead" model="ir.actions.act_window">
<field name="name">Leads Analysis</field>
<field name="res_model">crm.lead</field>
<field name="view_mode">graph,pivot,tree</field>
<field name="view_mode">graph,pivot,list</field>
<field name="search_view_id" ref="crm.crm_opportunity_report_view_search"/>
<field name="context">{
'search_default_filter_active': 1,
@ -193,7 +211,7 @@
(0, 0, {'view_mode': 'graph', 'view_id': ref('crm_opportunity_report_view_graph_lead')}),
(0, 0, {'view_mode': 'pivot', 'view_id': ref('crm_opportunity_report_view_pivot_lead')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('crm_lead_view_form')}),
(0, 0, {'view_mode': 'tree', 'view_id': ref('crm_lead_view_tree_reporting')}),
(0, 0, {'view_mode': 'list', 'view_id': ref('crm_lead_view_tree_reporting')}),
]"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">