mirror of
https://github.com/bringout/oca-ocb-crm.git
synced 2026-04-26 06:12:07 +02:00
Initial commit: Crm packages
This commit is contained in:
commit
21a345b5b9
654 changed files with 418312 additions and 0 deletions
4
odoo-bringout-oca-ocb-crm/crm/report/__init__.py
Normal file
4
odoo-bringout-oca-ocb-crm/crm/report/__init__.py
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import crm_activity_report
|
||||
88
odoo-bringout-oca-ocb-crm/crm/report/crm_activity_report.py
Normal file
88
odoo-bringout-oca-ocb-crm/crm/report/crm_activity_report.py
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import fields, models, tools, api
|
||||
|
||||
|
||||
class ActivityReport(models.Model):
|
||||
""" CRM Lead Analysis """
|
||||
|
||||
_name = "crm.activity.report"
|
||||
_auto = False
|
||||
_description = "CRM Activity Analysis"
|
||||
_rec_name = 'id'
|
||||
|
||||
date = fields.Datetime('Completion Date', readonly=True)
|
||||
lead_create_date = fields.Datetime('Creation Date', readonly=True)
|
||||
date_conversion = fields.Datetime('Conversion Date', readonly=True)
|
||||
date_deadline = fields.Date('Expected Closing', readonly=True)
|
||||
date_closed = fields.Datetime('Closed Date', readonly=True)
|
||||
author_id = fields.Many2one('res.partner', 'Assigned To', readonly=True)
|
||||
user_id = fields.Many2one('res.users', 'Salesperson', readonly=True)
|
||||
team_id = fields.Many2one('crm.team', 'Sales Team', readonly=True)
|
||||
lead_id = fields.Many2one('crm.lead', "Opportunity", readonly=True)
|
||||
body = fields.Html('Activity Description', readonly=True)
|
||||
subtype_id = fields.Many2one('mail.message.subtype', 'Subtype', readonly=True)
|
||||
mail_activity_type_id = fields.Many2one('mail.activity.type', 'Activity Type', readonly=True)
|
||||
country_id = fields.Many2one('res.country', 'Country', readonly=True)
|
||||
company_id = fields.Many2one('res.company', 'Company', readonly=True)
|
||||
stage_id = fields.Many2one('crm.stage', 'Stage', readonly=True)
|
||||
partner_id = fields.Many2one('res.partner', 'Customer', readonly=True)
|
||||
lead_type = fields.Selection(
|
||||
string='Type',
|
||||
selection=[('lead', 'Lead'), ('opportunity', 'Opportunity')],
|
||||
help="Type is used to separate Leads and Opportunities")
|
||||
active = fields.Boolean('Active', readonly=True)
|
||||
|
||||
def _select(self):
|
||||
return """
|
||||
SELECT
|
||||
m.id,
|
||||
l.create_date AS lead_create_date,
|
||||
l.date_conversion,
|
||||
l.date_deadline,
|
||||
l.date_closed,
|
||||
m.subtype_id,
|
||||
m.mail_activity_type_id,
|
||||
m.author_id,
|
||||
m.date,
|
||||
m.body,
|
||||
l.id as lead_id,
|
||||
l.user_id,
|
||||
l.team_id,
|
||||
l.country_id,
|
||||
l.company_id,
|
||||
l.stage_id,
|
||||
l.partner_id,
|
||||
l.type as lead_type,
|
||||
l.active
|
||||
"""
|
||||
|
||||
def _from(self):
|
||||
return """
|
||||
FROM mail_message AS m
|
||||
"""
|
||||
|
||||
def _join(self):
|
||||
return """
|
||||
JOIN crm_lead AS l ON m.res_id = l.id
|
||||
"""
|
||||
|
||||
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,)
|
||||
|
||||
def init(self):
|
||||
tools.drop_view_if_exists(self._cr, self._table)
|
||||
self._cr.execute("""
|
||||
CREATE OR REPLACE VIEW %s AS (
|
||||
%s
|
||||
%s
|
||||
%s
|
||||
%s
|
||||
)
|
||||
""" % (self._table, self._select(), self._from(), self._join(), self._where())
|
||||
)
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="crm_activity_report_view_graph" model="ir.ui.view">
|
||||
<field name="name">crm.activity.report.graph</field>
|
||||
<field name="model">crm.activity.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Activities Analysis" sample="1">
|
||||
<field name="mail_activity_type_id"/>
|
||||
<field name="date" interval="month"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="crm_activity_report_view_pivot" model="ir.ui.view">
|
||||
<field name="name">crm.activity.report.pivot</field>
|
||||
<field name="model">crm.activity.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Activities Analysis" sample="1">
|
||||
<field name="mail_activity_type_id" type="col"/>
|
||||
<field name="date" interval="month" type="row"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="crm_activity_report_view_tree" model="ir.ui.view">
|
||||
<field name="name">crm.activity.report.tree</field>
|
||||
<field name="model">crm.activity.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree default_order="date desc">
|
||||
<field name="date"/>
|
||||
<field name="author_id"/>
|
||||
<field name="mail_activity_type_id"/>
|
||||
<field name="body"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="crm_activity_report_view_search" model="ir.ui.view">
|
||||
<field name="name">crm.activity.report.search</field>
|
||||
<field name="model">crm.activity.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Activities Analysis">
|
||||
<field name="mail_activity_type_id" string="Activity Type"/>
|
||||
<field name="lead_id" string="Opportunity"/>
|
||||
<field name="user_id" string="Salesperson"/>
|
||||
<field name="team_id" context="{'invisible_team': False}"/>
|
||||
<field name="author_id" string="Assigned To"/>
|
||||
<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)]"/>
|
||||
<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', '<=', (datetime.datetime.combine(context_today(), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))]"/>
|
||||
<separator/>
|
||||
<filter name="filter_date" date="date"/>
|
||||
<separator/>
|
||||
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
|
||||
<group expand="1" string="Group By">
|
||||
<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'}"/>
|
||||
<filter string="Completion Date" name="group_by_completion_date" context="{'group_by': 'date:month'}"/>
|
||||
<separator/>
|
||||
<filter string="Salesperson" name="group_by_user_id" context="{'group_by': 'user_id'}"/>
|
||||
<filter string="Sales Team" name="saleschannel" context="{'group_by': 'team_id'}"/>
|
||||
<filter string="Stage" name="stage" context="{'group_by': 'stage_id'}"/>
|
||||
<filter string="Company" name="company" context="{'group_by': 'company_id'}" groups="base.group_multi_company"/>
|
||||
<filter string="Creation Date" name="group_by_lead_date_creation" context="{'group_by': 'lead_create_date'}"/>
|
||||
<filter string="Expected Closing" name="group_by_date_deadline" context="{'group_by': 'date_deadline'}"/>
|
||||
<filter string="Closed Date" name="group_by_date_closed" context="{'group_by': 'date_closed'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<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="context">{
|
||||
'search_default_completion_date': 1,
|
||||
'pivot_column_groupby': ['subtype_id', 'mail_activity_type_id'],
|
||||
'pivot_row_groupby': ['date:month'],
|
||||
'graph_mode': 'bar',
|
||||
'graph_groupbys': ['date:month', 'subtype_id'],
|
||||
}</field>
|
||||
<field name="domain">[]</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No data yet!
|
||||
</p><p>
|
||||
Start scheduling activities on your opportunities
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<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="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!
|
||||
</p><p>
|
||||
Start scheduling activities on your opportunities
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,207 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<!-- 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>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="priority">60</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Pipeline Analysis" sample="1">
|
||||
<field name="create_date" interval="month" type="col"/>
|
||||
<field name="stage_id" type="row"/>
|
||||
<field name="prorated_revenue" type="measure"/>
|
||||
<field name="color" invisible="1"/>
|
||||
<field name="message_bounce" invisible="1"/>
|
||||
<field name="probability" invisible="1"/>
|
||||
<field name="automated_probability" invisible="1"/>
|
||||
<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"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="crm_opportunity_report_view_pivot_lead" model="ir.ui.view">
|
||||
<field name="name">crm.opportunity.report.view.pivot.lead</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="priority">60</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Leads Analysis" sample="1">
|
||||
<field name="create_date" interval="month" type="row"/>
|
||||
<field name="team_id" type="col"/>
|
||||
<field name="color" invisible="1"/>
|
||||
<field name="message_bounce" invisible="1"/>
|
||||
<field name="probability" invisible="1"/>
|
||||
<field name="automated_probability" invisible="1"/>
|
||||
<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"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Opportunities by user and team Graph View -->
|
||||
<record id="crm_opportunity_report_view_graph" model="ir.ui.view">
|
||||
<field name="name">crm.opportunity.report.graph</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Pipeline Analysis" sample="1">
|
||||
<field name="stage_id"/>
|
||||
<field name="date_deadline" interval="month"/>
|
||||
<field name="prorated_revenue" type="measure"/>
|
||||
<field name="color" invisible="1"/>
|
||||
<field name="message_bounce" invisible="1"/>
|
||||
<field name="probability" invisible="1"/>
|
||||
<field name="automated_probability" invisible="1"/>
|
||||
<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"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="crm_opportunity_report_view_graph_lead" model="ir.ui.view">
|
||||
<field name="name">crm.opportunity.report.graph.lead</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="priority">20</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Leads Analysis" sample="1">
|
||||
<field name="create_date" interval="month"/>
|
||||
<field name="team_id"/>
|
||||
<field name="color" invisible="1"/>
|
||||
<field name="automated_probability" invisible="1"/>
|
||||
<field name="message_bounce" invisible="1"/>
|
||||
<field name="probability" invisible="1"/>
|
||||
<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"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Opportunities by user and team Search View -->
|
||||
<record id="crm_opportunity_report_view_search" model="ir.ui.view">
|
||||
<field name="name">crm.lead.search</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="priority">32</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Opportunities Analysis">
|
||||
<filter string="My Pipeline" name="my"
|
||||
domain="[('user_id', '=', uid)]"/>
|
||||
<separator/>
|
||||
<filter name="filter_opportunity" string="Opportunities" domain="[('type','=','opportunity')]" help="Show only opportunities" groups="crm.group_use_lead"/>
|
||||
<filter name="filter_lead" string="Leads" domain="[('type','=', 'lead')]" help="Show only leads" groups="crm.group_use_lead"/>
|
||||
<separator/>
|
||||
<filter string="Active" name="filter_active"
|
||||
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)]"/>
|
||||
<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 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">
|
||||
<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="campaign_id"/>
|
||||
<field name="medium_id"/>
|
||||
<field name="source_id"/>
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
<newline/>
|
||||
<field name="create_date"/>
|
||||
<field name="date_open"/>
|
||||
<field name="date_closed"/>
|
||||
</group>
|
||||
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
|
||||
<group expand="1" string="Group By">
|
||||
<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'}" />
|
||||
<filter string="Country" name="country" context="{'group_by':'country_id'}" />
|
||||
<filter string="Company" name="company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<filter string="Stage" name="stage" context="{'group_by':'stage_id'}"/>
|
||||
<filter string="Campaign" name="compaign" domain="[]" context="{'group_by':'campaign_id'}"/>
|
||||
<filter string="Medium" name="medium" domain="[]" context="{'group_by':'medium_id'}"/>
|
||||
<filter string="Source" name="source" domain="[]" context="{'group_by':'source_id'}"/>
|
||||
<separator orientation="vertical" />
|
||||
<filter string="Creation Date" context="{'group_by':'create_date:month'}" name="month"/>
|
||||
<filter string="Conversion Date" context="{'group_by':'date_conversion:month'}" name="conversion_date" help="Conversion Date from Lead to Opportunity" groups="crm.group_use_lead"/>
|
||||
<filter string="Expected Closing" context="{'group_by':'date_deadline:month'}" name="date_deadline"/>
|
||||
<filter string="Closed Date" context="{'group_by':'date_closed'}" name="date_closed_groupby"/>
|
||||
<filter string="Lost Reason" name="lostreason" context="{'group_by':'lost_reason_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="crm_lead_view_tree_reporting" model="ir.ui.view">
|
||||
<field name="name">crm.lead.tree.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>
|
||||
<field name="priority">24</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="field[@name='city']" position="attributes">
|
||||
<attribute name="optional">hide</attribute>
|
||||
</xpath>
|
||||
<xpath expr="field[@name='probability']" position="before">
|
||||
<field name="type" groups="crm.group_use_lead" optional="show"/>
|
||||
<field name="stage_id" optional="show"/>
|
||||
</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="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')})]"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No data found!
|
||||
</p><p>
|
||||
Use this menu to have an overview of your Pipeline.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<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="search_view_id" ref="crm.crm_opportunity_report_view_search"/>
|
||||
<field name="context">{
|
||||
'search_default_filter_active': 1,
|
||||
'search_default_filter_inactive': 1,
|
||||
'search_default_filter_create_date': 1,
|
||||
}</field>
|
||||
<field name="view_ids"
|
||||
eval="[(5, 0, 0),
|
||||
(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')}),
|
||||
]"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No data found!
|
||||
</p><p>
|
||||
This analysis shows you how many leads have been created per month.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
Loading…
Add table
Add a link
Reference in a new issue