Following changes needing ir.model.access on transient models too.
Remove groups declaration on the action to move it to ir.model.access
when possible.
Rules are strict by default with no unlink access by default and high
priviledge asked. Adaptations may be needed later.
Write access is given as a wizard may need to be modified in case the
action triggers an error and the user has to correct a value
account*: use account.group_account_user for all transient by default
remove account.print.journal relic
stock*: use stock.group_stock_user by default
survey: survey user can send invitations
mail: allow any employee to execute wizards
additional verifications are made to ensure they are executed
only on the documents the user has access to you
give portal access to mail.compose.message as portal still does
some actions like posting messages on the forum
add ir.rule to avoid reading somebody else messages
increase the query count because of undeterminist count
crm: saleman for lead2opp, manager for massmailing
partner manager for actions linked to partners
avoid a write in test_lead_lost
sms: any employee can send sms
mrp: mrp user can execute wizards
give unlink access as making write during do_produce operation
base_import: employees can import files
delivery: stock user can deliver
event_sale: sale user can configure the wizards
event user inherit from sale rights
gamification: employee can give badge
google_service: resolve FIXME
hr: add specific rights
manager can set a plan according to group on button
anyone who can write on an employee can register a departure
hr_expense: set rights based on buttons
hr_holidays: an approver can make a summary report
hr_recruitment: recruiter can refuse a candidate
hr_timesheet: can use the wizard if can create a timesheet
l10n_eu_service: managers can create fiscal positions
mass_mailing: same group as on mass.mailing.list
membership: accountant can create invoice from membership
payment: accountant can create a link
as the source is an account.move
keep the payment.acquirer.onboarding.wizard to system user
only as it is called during company configuration
point_of_sale: PoS manager only can use wizards
never create closing_balance_confirm_wizard records
product_expiry: stock user has rights on stock.picking
product_margin: access from accounting menus
repair: same rules as for above models
sale: set ir.rule for self wizard only
add rule from model introduced in payment to add salesman group
sale_crm: saleman can create a quotation from a lead
sale_coupon: any saleman can generate coupon
add self ir.rule
sale_product_configurator: salesman can select product variants
snailmail: employee can send letters
website: designers can write on website
website_crm_partner_assign: same rule as group on action
website_sale: sale ACL as for payment.acquirer.onboarding.wizard
website_slides: anyone can send invitation
base: base.language.*: allow employee (cf lang_install)
change.password.user: can not read change password wizard of
other users
test.*: no access is needed
Courtesy of Damien Bouvy, William Andre and Antoine Prieëls for review
of acl
993 lines
59 KiB
XML
993 lines
59 KiB
XML
<?xml version="1.0"?>
|
|
<odoo>
|
|
<!--
|
|
crm.lead.tag views
|
|
-->
|
|
<record id="crm_lead_tag_form" model="ir.ui.view">
|
|
<field name="name">crm.lead.tag.form</field>
|
|
<field name="model">crm.lead.tag</field>
|
|
<field name="arch" type="xml">
|
|
<form string="Lead Tags">
|
|
<sheet>
|
|
<div class="oe_title">
|
|
<div class="oe_edit_only">
|
|
<label for="name"/>
|
|
</div>
|
|
<h1>
|
|
<field name="name"/>
|
|
</h1>
|
|
</div>
|
|
<group>
|
|
<group>
|
|
<field name="color" required="True"/>
|
|
</group>
|
|
</group>
|
|
</sheet>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="crm_lead_tag_tree" model="ir.ui.view">
|
|
<field name="name">crm.lead.tag.tree</field>
|
|
<field name="model">crm.lead.tag</field>
|
|
<field name="arch" type="xml">
|
|
<tree string="Lead Tags" editable="bottom">
|
|
<field name="name"/>
|
|
<field name="color" groups="base.group_no_one"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="crm_lead_view_form" model="ir.ui.view">
|
|
<field name="name">crm.lead.form</field>
|
|
<field name="model">crm.lead</field>
|
|
<field name="arch" type="xml">
|
|
<form class="o_lead_opportunity_form">
|
|
<header>
|
|
<button name="action_set_won_rainbowman" string="Mark Won"
|
|
type="object" class="oe_highlight"
|
|
attrs="{'invisible': ['|','|', ('active','=',False), ('probability', '=', 100), ('type', '=', 'lead')]}"/>
|
|
<button name="%(crm.crm_lead_lost_action)d" string="Mark Lost"
|
|
type="action" class="oe_highlight" context="{'default_lead_id': active_id}" attrs="{'invisible': ['|', ('type', '=', 'lead'),('active', '=', False),('probability', '<', 100)]}"/>
|
|
<button name="%(crm.action_crm_lead2opportunity_partner)d" string="Convert to Opportunity" type="action" help="Convert to Opportunity"
|
|
class="oe_highlight" attrs="{'invisible': ['|', ('type', '=', 'opportunity'), ('active', '=', False)]}"/>
|
|
<button name="toggle_active" string="Restore" type="object"
|
|
attrs="{'invisible': ['|', ('probability', '>', 0), ('active', '=', True)]}"/>
|
|
<button name="action_set_lost" string="Mark as Lost" type="object"
|
|
attrs="{'invisible': ['|', ('type', '=', 'opportunity'), '&', ('probability', '=', 0), ('active', '=', False)]}"/>
|
|
<field name="stage_id" widget="statusbar"
|
|
options="{'clickable': '1', 'fold_field': 'fold'}"
|
|
domain="['|', ('team_id', '=', team_id), ('team_id', '=', False)]"
|
|
attrs="{'invisible': ['|', ('active', '=', False), ('type', '=', 'lead')]}"/>
|
|
</header>
|
|
<sheet>
|
|
<field name="active" invisible="1"/>
|
|
<div class="oe_button_box" name="button_box">
|
|
<button name="action_schedule_meeting" type="object"
|
|
class="oe_stat_button" icon="fa-calendar"
|
|
context="{'partner_id': partner_id, 'search_default_opportunity_id': active_id}"
|
|
attrs="{'invisible': [('type', '=', 'lead')]}">
|
|
<div class="o_stat_info">
|
|
<field name="meeting_count" class="o_stat_value"/>
|
|
<span class="o_stat_text" attrs="{'invisible': [('meeting_count', '<', 2)]}"> Meetings</span>
|
|
<span class="o_stat_text" attrs="{'invisible': [('meeting_count', '>', 1)]}"> Meeting</span>
|
|
</div>
|
|
</button>
|
|
</div>
|
|
<widget name="web_ribbon" title="Lost" bg_color="bg-danger" attrs="{'invisible': ['|', ('probability', '>', 0), ('active', '=', True)]}"/>
|
|
<widget name="web_ribbon" title="Won" attrs="{'invisible': [('probability', '<', 100)]}" />
|
|
<div class="oe_title">
|
|
<label for="name" class="oe_edit_only" string="Lead" attrs="{'invisible': [('type', '=', 'opportunity')]}"/>
|
|
<label for="name" class="oe_edit_only" attrs="{'invisible': [('type', '=', 'lead')]}"/>
|
|
<h1><field name="name" placeholder="e.g. Product Pricing"/></h1>
|
|
<h2 class="o_row row no-gutters d-flex">
|
|
<div class="col" attrs="{'invisible': [('type', '=', 'lead')]}">
|
|
<label for="planned_revenue" class="oe_edit_only" />
|
|
<div class="o_row">
|
|
<field name="company_currency" invisible="1"/>
|
|
<field name="planned_revenue" class="oe_inline" widget='monetary' options="{'currency_field': 'company_currency'}"/>
|
|
<span class="oe_grey p-2"> at </span>
|
|
</div>
|
|
</div>
|
|
<div class="col">
|
|
<span class="oe_edit_only o_pls_probability">
|
|
<label for="probability"/>
|
|
<button class="btn btn-link" name="action_set_automated_probability" type="object"
|
|
attrs="{'invisible': [('is_automated_probability', '=', True)]}">
|
|
<i class="fa fa-gear" role="img" title="Switch to automatic probability" aria-label="Switch to automatic probability"></i>
|
|
</button>
|
|
<small class="oe_grey" attrs="{'invisible': [('is_automated_probability', '=', True)]}"><field name="automated_probability"/> %% (Estimated by Odoo)</small>
|
|
</span>
|
|
<div id="probability" class="o_row d-flex">
|
|
<field name="is_automated_probability" invisible="1"/>
|
|
<field name="probability" widget="float" class="oe_inline"/>
|
|
<span class="oe_grey"> %%</span>
|
|
</div>
|
|
</div>
|
|
</h2>
|
|
</div>
|
|
<group>
|
|
<group name="lead_partner" attrs="{'invisible': [('type', '=', 'opportunity')]}">
|
|
<!-- Preload all the partner's information -->
|
|
<field name="partner_id" widget="res_partner_many2one"
|
|
context="{'default_name': contact_name,
|
|
'default_street': street,
|
|
'default_city': city,
|
|
'default_state_id': state_id,
|
|
'default_zip': zip,
|
|
'default_country_id': country_id,
|
|
'default_function': function,
|
|
'default_phone': phone,
|
|
'default_mobile': mobile,
|
|
'default_email': email_from,
|
|
'default_user_id': user_id,
|
|
'default_team_id': team_id,
|
|
'default_website': website,
|
|
'show_vat': True
|
|
}" groups="base.group_no_one"/>
|
|
<field name="partner_name"/>
|
|
<label for="street" string="Address"/>
|
|
<div class="o_address_format">
|
|
<field name="street" placeholder="Street..." class="o_address_street"/>
|
|
<field name="street2" placeholder="Street 2..." class="o_address_street"/>
|
|
<field name="city" placeholder="City" class="o_address_city"/>
|
|
<field name="state_id" class="o_address_state" placeholder="State" options='{"no_open": True}'/>
|
|
<field name="zip" placeholder="ZIP" class="o_address_zip"/>
|
|
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'/>
|
|
</div>
|
|
<field name="website" widget="url" placeholder="e.g. https://www.odoo.com"/>
|
|
<field name="lang_id"/>
|
|
</group>
|
|
|
|
<group name="opportunity_partner" attrs="{'invisible': [('type', '=', 'lead')]}">
|
|
<field name="partner_id"
|
|
widget="res_partner_many2one"
|
|
string="Customer"
|
|
context="{'res_partner_search_mode': type == 'opportunity' and 'customer' or False,
|
|
'default_name': contact_name or partner_name,
|
|
'default_street': street,
|
|
'default_is_company': type == 'opportunity' and contact_name == False,
|
|
'default_company_name': type == 'opportunity' and partner_name,
|
|
'default_street2': street2,
|
|
'default_city': city,
|
|
'default_title': title,
|
|
'default_state_id': state_id,
|
|
'default_zip': zip,
|
|
'default_country_id': country_id,
|
|
'default_function': function,
|
|
'default_phone': phone,
|
|
'default_mobile': mobile,
|
|
'default_email': email_from,
|
|
'default_user_id': user_id,
|
|
'default_team_id': team_id,
|
|
'default_website': website,
|
|
'show_vat': True,
|
|
}"
|
|
/>
|
|
<field name="is_blacklisted" invisible="1"/>
|
|
<field name="partner_is_blacklisted" invisible="1"/>
|
|
<field name="email_state" invisible="1"/>
|
|
<field name="phone_state" invisible="1"/>
|
|
<label for="email_from" class="oe_inline"/>
|
|
<div class="o_row o_row_readonly">
|
|
<i class="fa fa-ban" style="color: red;" role="img" title="This email is blacklisted for mass mailing"
|
|
aria-label="Blacklisted" attrs="{'invisible': ['|', ('is_blacklisted', '=', False), ('partner_address_email', '!=', False)]}" groups="base.group_user"/>
|
|
<field name="email_from"
|
|
attrs="{'invisible': [('partner_address_email', '!=', False)]}" string="Email" widget="email"/>
|
|
<i class="fa fa-ban" style="color: red;" role="img" title="This email is blacklisted for mass mailing"
|
|
aria-label="Blacklisted" attrs="{'invisible': ['|', ('partner_is_blacklisted', '=', False), ('partner_address_email', '=', False)]}" groups="base.group_user"/>
|
|
<field name="partner_address_email"
|
|
attrs="{'invisible': [('partner_address_email', '=', False)]}" widget="email" string="Email"/>
|
|
</div>
|
|
<field name="phone" widget="phone"/>
|
|
</group>
|
|
<group name="lead_info" attrs="{'invisible': [('type', '=', 'opportunity')]}">
|
|
<label for="contact_name"/>
|
|
<div class="o_row">
|
|
<field name="contact_name"/>
|
|
<field name="title" placeholder="Title" domain="[]" options='{"no_open": True}'/>
|
|
</div>
|
|
<field name="is_blacklisted" invisible="1"/>
|
|
<field name="email_state" invisible="1"/>
|
|
<field name="phone_state" invisible="1"/>
|
|
<label for="email_from" class="oe_inline"/>
|
|
<div class="o_row o_row_readonly">
|
|
<i class="fa fa-ban" style="color: red;" role="img" title="This email is blacklisted for mass mailing"
|
|
aria-label="Blacklisted" attrs="{'invisible': [('is_blacklisted', '=', False)]}" groups="base.group_user"/>
|
|
<field name="email_from" widget="email"/>
|
|
</div>
|
|
<field name="email_cc" groups="base.group_no_one"/>
|
|
<field name="function"/>
|
|
<field name="phone" widget="phone"/>
|
|
<field name="mobile" widget="phone"/>
|
|
</group>
|
|
<group attrs="{'invisible': [('type', '=', 'lead')]}">
|
|
<field name="date_deadline"/>
|
|
<field name="priority" widget="priority"/>
|
|
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}"/>
|
|
</group>
|
|
<group>
|
|
<field name="user_id" domain="[('share', '=', False)]"
|
|
context="{'team_id': team_id}"/>
|
|
<field name="team_id" widget="selection"
|
|
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"/>
|
|
<field name="type" invisible="1"/>
|
|
</group>
|
|
<group name="lead_priority" attrs="{'invisible': [('type', '=', 'opportunity')]}">
|
|
<field name="priority" widget="priority"/>
|
|
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}"/>
|
|
</group>
|
|
<group name="opportunity_info" attrs="{'invisible': [('type', '=', 'lead')]}">
|
|
<field name="lost_reason" attrs="{'invisible': [('active', '=', True)]}"/>
|
|
<field name="date_conversion" invisible="1"/>
|
|
<field name="company_id" groups="base.group_multi_company"/>
|
|
</group>
|
|
</group>
|
|
|
|
<notebook>
|
|
<page string="Internal Notes" name="internal_notes">
|
|
<field name="description" placeholder="Add a description..."/>
|
|
</page>
|
|
<page name="extra" string="Extra Info" attrs="{'invisible': [('type', '=', 'opportunity')]}">
|
|
<group>
|
|
<group string="Email" groups="base.group_no_one">
|
|
<field name="message_bounce" readonly="1"/>
|
|
</group>
|
|
<group string="Tracking" groups="base.group_multi_company" name="categorization">
|
|
<field name="company_id"
|
|
options="{'no_create': True}"/>
|
|
<field name="campaign_id" />
|
|
<field name="medium_id"/>
|
|
<field name="source_id"/>
|
|
<field name="referred"/>
|
|
</group>
|
|
<group string="Analysis">
|
|
<field name="date_open"/>
|
|
<field name="date_closed"/>
|
|
<field name="probability"/>
|
|
</group>
|
|
</group>
|
|
</page>
|
|
<page name="lead" string="Follow-up" attrs="{'invisible': [('type', '=', 'lead')]}">
|
|
<group>
|
|
<group string="Contact Information">
|
|
<field name="partner_name"/>
|
|
<label for="street" string="Address"/>
|
|
<div class="o_address_format">
|
|
<field name="street" placeholder="Street..." class="o_address_street"/>
|
|
<field name="street2" placeholder="Street 2..." class="o_address_street"/>
|
|
<field name="city" placeholder="City" class="o_address_city"/>
|
|
<field name="state_id" class="o_address_state" placeholder="State" options='{"no_open": True}'/>
|
|
<field name="zip" placeholder="ZIP" class="o_address_zip"/>
|
|
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'/>
|
|
</div>
|
|
<field name="website" widget="url" placeholder="e.g. https://www.odoo.com"/>
|
|
<field name="lang_id"/>
|
|
</group>
|
|
<group class="mt48">
|
|
<label for="contact_name"/>
|
|
<div class="o_row">
|
|
<field name="contact_name"/>
|
|
<field name="title" placeholder="Title" domain="[]" options='{"no_open": True}'/>
|
|
</div>
|
|
<field name="function"/>
|
|
<field name="mobile" widget="phone"/>
|
|
</group>
|
|
<group string="Marketing">
|
|
<field name="campaign_id" />
|
|
<field name="medium_id" />
|
|
<field name="source_id" />
|
|
</group>
|
|
<group string="Misc" name="Misc">
|
|
<field name="day_open" groups="base.group_no_one"/>
|
|
<field name="day_close" groups="base.group_no_one"/>
|
|
<field name="referred"/>
|
|
<field name="type" invisible="1"/>
|
|
</group>
|
|
</group>
|
|
</page>
|
|
</notebook>
|
|
</sheet>
|
|
<div class="oe_chatter">
|
|
<field name="message_follower_ids" widget="mail_followers"/>
|
|
<field name="activity_ids" widget="mail_activity"/>
|
|
<field name="message_ids" widget="mail_thread" options="{'post_refresh': 'recipients'}"/>
|
|
</div>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<!--
|
|
crm.lead (as Lead) views
|
|
-->
|
|
<act_window
|
|
id="act_crm_opportunity_calendar_event_new"
|
|
name="Meetings"
|
|
res_model="calendar.event"
|
|
view_mode="tree,form,calendar"
|
|
context="{'default_duration': 4.0, 'default_opportunity_id': active_id}"/>
|
|
|
|
<record id="crm_case_tree_view_leads" model="ir.ui.view">
|
|
<field name="name">crm.lead.tree.lead</field>
|
|
<field name="model">crm.lead</field>
|
|
<field name="arch" type="xml">
|
|
<tree string="Leads" decoration-bf="message_needaction==True" decoration-muted="probability == 100">
|
|
<field name="date_deadline" invisible="1"/>
|
|
<field name="create_date" optional="show"/>
|
|
<field name="name" string="Lead"/>
|
|
<field name="contact_name" optional="show"/>
|
|
<field name="partner_name" optional="hide"/>
|
|
<field name="email_from" optional="show"/>
|
|
<field name="phone" optional="show"/>
|
|
<field name="city" optional="show"/>
|
|
<field name="state_id" optional="hide"/>
|
|
<field name="country_id" optional="show"/>
|
|
<field name="partner_id" invisible="1"/>
|
|
<field name="team_id" optional="show"/>
|
|
<field name="user_id" optional="show" string="Sales Person"/>
|
|
<field name="company_id" groups="base.group_multi_company" optional="show"/>
|
|
<field name="active" invisible="1"/>
|
|
<field name="probability" invisible="1"/>
|
|
<field name="campaign_id" invisible="1"/>
|
|
<field name="referred" invisible="1"/>
|
|
<field name="medium_id" invisible="1"/>
|
|
<field name="message_needaction" invisible="1"/>
|
|
<field name="tag_ids" optional="show" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
|
<field name="priority" optional="hide"/>
|
|
<field name="activity_exception_decoration" widget="activity_exception"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="view_crm_lead_kanban" model="ir.ui.view">
|
|
<field name="name">crm.lead.kanban</field>
|
|
<field name="model">crm.lead</field>
|
|
<field name="priority" eval="100"/>
|
|
<field name="arch" type="xml">
|
|
<kanban class="o_kanban_mobile" archivable="false">
|
|
<field name="name"/>
|
|
<field name="contact_name"/>
|
|
<field name="priority"/>
|
|
<field name="tag_ids"/>
|
|
<field name="user_id"/>
|
|
<field name="message_needaction_counter"/>
|
|
<field name="activity_ids"/>
|
|
<field name="activity_state"/>
|
|
<progressbar field="activity_state" colors='{"planned": "success", "today": "warning", "overdue": "danger"}'/>
|
|
<templates>
|
|
<t t-name="kanban-box">
|
|
<div t-attf-class="oe_kanban_content oe_kanban_global_click">
|
|
<div>
|
|
<strong class="o_kanban_record_title"><span><field name="name"/></span></strong>
|
|
</div>
|
|
<div>
|
|
<span class="o_kanban_record_subtitle"><field name="contact_name"/></span>
|
|
</div>
|
|
<div>
|
|
<field name="tag_ids"/>
|
|
</div>
|
|
<div class="o_kanban_record_bottom">
|
|
<div class="oe_kanban_bottom_left">
|
|
<field name="priority" widget="priority"/>
|
|
<t t-if="record.message_needaction_counter.raw_value">
|
|
<span role="alert" class="oe_kanban_mail_new" title="Unread Messages"><i class="fa fa-comments" aria-label="Messages" role="img"/><t t-raw="record.message_needaction_counter.raw_value"/></span>
|
|
</t>
|
|
<div class="o_kanban_inline_block">
|
|
<field name="activity_ids" widget="kanban_activity"/>
|
|
</div>
|
|
</div>
|
|
<div class="oe_kanban_bottom_right">
|
|
<t t-set="unassigned"><t t-esc="_t('Unassigned')"/></t>
|
|
<img t-att-src="kanban_image('res.users', 'image_128', record.user_id.raw_value)" t-att-title="record.user_id.value || unassigned" t-att-alt="record.user_id.value" class="oe_kanban_avatar float-right"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</templates>
|
|
</kanban>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="crm_case_calendar_view_leads" model="ir.ui.view">
|
|
<field name="name">crm.lead.calendar.lead</field>
|
|
<field name="model">crm.lead</field>
|
|
<field name="priority" eval="2"/>
|
|
<field name="arch" type="xml">
|
|
<calendar string="Leads Generation" create="0" mode="month" date_start="activity_date_deadline" color="user_id" hide_time="true" event_limit="5">
|
|
<field name="planned_revenue"/>
|
|
<field name="partner_id" avatar_field="image_128"/>
|
|
<field name="user_id" filters="1" invisible="1"/>
|
|
</calendar>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="quick_create_opportunity_form" model="ir.ui.view">
|
|
<field name="name">crm.lead.form.quick_create</field>
|
|
<field name="model">crm.lead</field>
|
|
<field name="priority">1000</field>
|
|
<field name="arch" type="xml">
|
|
<form>
|
|
<group>
|
|
<field name="name"/>
|
|
<field name="partner_id" widget="res_partner_many2one" context="{'res_partner_search_mode': 'customer', 'show_vat': True}"/>
|
|
<field name="planned_revenue" widget="monetary" options="{'currency_field': 'company_currency'}"/>
|
|
<field name="company_currency" invisible="1"/>
|
|
<field name="company_id" invisible="1"/>
|
|
<field name="priority" nolabel="1" widget="priority"/>
|
|
<field name="partner_name" invisible="1"/>
|
|
<field name="contact_name" invisible="1"/>
|
|
<field name="country_id" invisible="1"/>
|
|
<field name="state_id" invisible="1"/>
|
|
<field name="city" invisible="1"/>
|
|
<field name="street" invisible="1"/>
|
|
<field name="street2" invisible="1"/>
|
|
<field name="zip" invisible="1"/>
|
|
<field name="phone" invisible="1"/>
|
|
<field name="mobile" invisible="1"/>
|
|
<field name="website" invisible="1"/>
|
|
<field name="function" invisible="1"/>
|
|
<field name="title" invisible="1"/>
|
|
</group>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="crm_lead_view_activity" model="ir.ui.view">
|
|
<field name="name">crm.lead.view.activity</field>
|
|
<field name="model">crm.lead</field>
|
|
<field name="arch" type="xml">
|
|
<activity string="Leads or Opportunities">
|
|
<field name="user_id"/>
|
|
<field name="company_currency"/>
|
|
<templates>
|
|
<div t-name="activity-box">
|
|
<img t-att-src="activity_image('res.users', 'image_128', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value"/>
|
|
<div>
|
|
<field name="name" display="full"/>
|
|
<field name="planned_revenue" widget="monetary" display="full" muted="1"/>
|
|
</div>
|
|
</div>
|
|
</templates>
|
|
</activity>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="crm_case_kanban_view_leads" model="ir.ui.view">
|
|
<field name="name">crm.lead.kanban.lead</field>
|
|
<field name="model">crm.lead</field>
|
|
<field name="priority" eval="1"/>
|
|
<field name="arch" type="xml">
|
|
<kanban default_group_by="stage_id" class="o_kanban_small_column o_opportunity_kanban" on_create="quick_create" quick_create_view="crm.quick_create_opportunity_form"
|
|
archivable="false">
|
|
<field name="stage_id" options='{"group_by_tooltip": {"requirements": "Description"}}'/>
|
|
<field name="color"/>
|
|
<field name="priority"/>
|
|
<field name="planned_revenue"/>
|
|
<field name="kanban_state"/>
|
|
<field name="activity_date_deadline"/>
|
|
<field name="user_email"/>
|
|
<field name="user_id"/>
|
|
<field name="partner_address_email"/>
|
|
<field name="message_needaction_counter"/>
|
|
<field name="partner_id"/>
|
|
<field name="activity_summary"/>
|
|
<field name="active"/>
|
|
<field name="company_currency"/>
|
|
<field name="activity_state" />
|
|
<field name="activity_ids" />
|
|
<progressbar field="activity_state" colors='{"planned": "success", "today": "warning", "overdue": "danger"}' sum_field="planned_revenue" help="This bar allows to filter the opportunities based on scheduled activities."/>
|
|
<templates>
|
|
<t t-name="kanban-box">
|
|
<div t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''} oe_kanban_global_click">
|
|
<div class="o_dropdown_kanban dropdown">
|
|
|
|
<a class="dropdown-toggle o-no-caret btn" role="button" data-toggle="dropdown" data-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
|
<span class="fa fa-ellipsis-v"/>
|
|
</a>
|
|
<div class="dropdown-menu" role="menu">
|
|
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit</a></t>
|
|
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
|
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
|
</div>
|
|
</div>
|
|
<div class="oe_kanban_content">
|
|
<div>
|
|
<strong class="o_kanban_record_title"><field name="name"/></strong>
|
|
</div>
|
|
<div>
|
|
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
|
</div>
|
|
<div class="text-muted o_kanban_record_subtitle">
|
|
<t t-if="record.planned_revenue.raw_value"><field name="planned_revenue" widget="monetary" options="{'currency_field': 'company_currency'}"/><span t-if="record.partner_id.value">,</span></t> <span t-if="record.partner_id.value"> <t t-esc="record.partner_id.value"/></span>
|
|
</div>
|
|
|
|
<div class="o_kanban_record_bottom">
|
|
<div class="oe_kanban_bottom_left">
|
|
<field name="priority" widget="priority" groups="base.group_user"/>
|
|
<t t-if="record.message_needaction_counter.raw_value">
|
|
<span role="alert" class='oe_kanban_mail_new' title='Unread Messages'><i class='fa fa-comments' aria-label="Unread messages" role="img"/><t t-raw="record.message_needaction_counter.raw_value"/></span>
|
|
</t>
|
|
<field name="activity_ids" widget="kanban_activity"/>
|
|
</div>
|
|
<div class="oe_kanban_bottom_right">
|
|
<t t-set="unassigned"><t t-esc="_t('Unassigned')"/></t>
|
|
<img t-att-src="kanban_image('res.users', 'image_128', record.user_id.raw_value)" t-att-title="record.user_id.value || unassigned" t-att-alt="record.user_id.value" class="oe_kanban_avatar"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="oe_clear"/>
|
|
</div>
|
|
</t>
|
|
</templates>
|
|
</kanban>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="view_crm_case_leads_filter" model="ir.ui.view">
|
|
<field name="name">crm.lead.search.lead</field>
|
|
<field name="model">crm.lead</field>
|
|
<field name="arch" type="xml">
|
|
<search string="Search Leads">
|
|
<field name="name" string="Lead" filter_domain="['|','|','|',('partner_name', 'ilike', self),('email_from', 'ilike', self), ('contact_name', 'ilike', self), ('name', 'ilike', self)]"/>
|
|
<field name="tag_ids" string="Tag" filter_domain="[('tag_ids', 'ilike', self)]"/>
|
|
<field name="user_id"/>
|
|
<field name="team_id"/>
|
|
<field name="country_id"/>
|
|
<field name="city"/>
|
|
<field name="phone_mobile_search"/>
|
|
<field name="lang_id"/>
|
|
<field name="create_date"/>
|
|
<field name="source_id"/>
|
|
<field name="medium_id"/>
|
|
<field name="campaign_id"/>
|
|
<separator />
|
|
<filter string="My Leads"
|
|
name="assigned_to_me"
|
|
domain="[('user_id', '=', uid)]"
|
|
help="Leads that are assigned to me"/>
|
|
<filter string="Unassigned" name="unassigned_leads"
|
|
domain="[('user_id','=', False), ('type', '=', 'lead')]"
|
|
help="Leads that are not assigned"/>
|
|
<separator />
|
|
<filter string="Lost" name="lost"
|
|
domain="['&', ('probability', '=', 0), ('active', '=', False)]"/>
|
|
<separator/>
|
|
<filter string="Creation Date" name="creation_date" date="create_date"/>
|
|
<separator/>
|
|
<separator/>
|
|
<filter invisible="1" string="Late Activities" name="activities_overdue"
|
|
domain="[('activity_ids.date_deadline', '<', context_today().strftime('%Y-%m-%d'))]"
|
|
help="Show all opportunities for which the next action date is before today"/>
|
|
<filter invisible="1" string="Today Activities" name="activities_today"
|
|
domain="[('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
|
|
<filter invisible="1" string="Future Activities" name="activities_upcoming_all"
|
|
domain="[('activity_ids.date_deadline', '>', context_today().strftime('%Y-%m-%d'))]"/>
|
|
<separator/>
|
|
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
|
|
<group expand="0" 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 name="city" string="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="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="Closed Date" name="date_closed" context="{'group_by':'date_closed'}"/>
|
|
</group>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<!--
|
|
crm.lead (as Opportunity) views
|
|
-->
|
|
|
|
<record id="crm_case_tree_view_oppor" model="ir.ui.view">
|
|
<field name="name">crm.lead.tree.opportunity</field>
|
|
<field name="model">crm.lead</field>
|
|
<field name="arch" type="xml">
|
|
<tree string="Opportunities" decoration-bf="message_needaction==True" decoration-muted="probability == 100" decoration-danger="activity_date_deadline and (activity_date_deadline < current_date)">
|
|
<field name="date_deadline" invisible="1"/>
|
|
<field name="create_date" optional="show"/>
|
|
<field name="name" string="Opportunity"/>
|
|
<field name="partner_id" string="Customer" optional="show"/>
|
|
<field name="email_from" optional="hide"/>
|
|
<field name="phone" optional="hide"/>
|
|
<field name="city" optional="hide"/>
|
|
<field name="state_id" optional="hide"/>
|
|
<field name="country_id" optional="show"/>
|
|
<field name="activity_date_deadline" optional="show"/>
|
|
<field name="activity_summary" optional="show" readonly="1"/>
|
|
<field name="medium_id" invisible="1"/>
|
|
<field name="campaign_id" invisible="1"/>
|
|
<field name="source_id" invisible="1"/>
|
|
<field name="stage_id" required="1" optional="show"/>
|
|
<field name="planned_revenue" sum="Expected Revenues" optional="show"/>
|
|
<field name="probability" avg="Avg. of Probability" optional="show"/>
|
|
<field name="user_id" optional="hide"/>
|
|
<field name="team_id" optional="show"/>
|
|
<field name="referred" invisible="1"/>
|
|
<field name="message_needaction" invisible="1"/>
|
|
<field name="probability" invisible="1"/>
|
|
<field name="write_date" invisible="1"/>
|
|
<field name="company_id" groups="base.group_multi_company" optional="show" />
|
|
<field name="tag_ids" optional="hide" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
|
<field name="priority" optional="hide"/>
|
|
<field name="activity_exception_decoration" widget="activity_exception"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="crm_lead_view_graph" model="ir.ui.view">
|
|
<field name="name">crm.lead.view.graph</field>
|
|
<field name="model">crm.lead</field>
|
|
<field name="arch" type="xml">
|
|
<graph string="Opportunities">
|
|
<field name="stage_id" type="col"/>
|
|
<field name="user_id" type="row"/>
|
|
</graph>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="crm_lead_view_pivot" model="ir.ui.view">
|
|
<field name="name">crm.lead.view.pivot</field>
|
|
<field name="model">crm.lead</field>
|
|
<field name="arch" type="xml">
|
|
<pivot string="Pipeline Analysis">
|
|
<field name="create_date" interval="month" type="row"/>
|
|
<field name="stage_id" type="col"/>
|
|
<field name="planned_revenue" type="measure"/>
|
|
</pivot>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="crm_lead_view_tree_activity" model="ir.ui.view">
|
|
<field name="name">crm.lead.tree.opportunity.next.activity</field>
|
|
<field name="model">crm.lead</field>
|
|
<field name="arch" type="xml">
|
|
<tree string="Next Activities" decoration-danger="activity_date_deadline and (activity_date_deadline < current_date)">
|
|
<field name="name"/>
|
|
<field name="partner_id"/>
|
|
<field name="activity_date_deadline"/>
|
|
<field name="activity_type_id"/>
|
|
<field name="activity_summary"/>
|
|
<field name="stage_id" required="1"/>
|
|
<field name="planned_revenue"/>
|
|
<field name="date_deadline"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="view_crm_case_opportunities_filter" model="ir.ui.view">
|
|
<field name="name">crm.lead.search.opportunity</field>
|
|
<field name="model">crm.lead</field>
|
|
<field name="priority">15</field>
|
|
<field name="arch" type="xml">
|
|
<search string="Search Opportunities">
|
|
<field name="name" string="Opportunity" filter_domain="[
|
|
'|', '|', '|', '|',
|
|
('partner_id', 'ilike', self),
|
|
('partner_name', 'ilike', self),
|
|
('email_from', 'ilike', self),
|
|
('name', 'ilike', self),
|
|
('contact_name', 'ilike', self)]"/>
|
|
<field name="partner_id" operator="child_of" string="Customer" filter_domain="[
|
|
'|', '|', '|',
|
|
('partner_id', 'ilike', self),
|
|
('partner_name', 'ilike', self),
|
|
('email_from', 'ilike', self),
|
|
('contact_name', 'ilike', self)]"/>
|
|
<field name="tag_ids" string="Tag" filter_domain="[('tag_ids', 'ilike', self)]"/>
|
|
<field name="user_id"/>
|
|
<field name="team_id"/>
|
|
<field name="stage_id" domain="[]"/>
|
|
<field name="country_id"/>
|
|
<field name="city"/>
|
|
<field name="phone_mobile_search"/>
|
|
<separator/>
|
|
<filter string="My Pipeline" name="assigned_to_me"
|
|
domain="[('user_id', '=', uid)]"
|
|
help="Opportunities that are assigned to me"/>
|
|
<filter string="Unassigned" name="unassigned"
|
|
domain="[('user_id', '=', False)]" help="No salesperson"/>
|
|
<filter string="Open Opportunities" name="open_opportunities"
|
|
domain="[('probability', '<', 100), ('type', '=', 'opportunity')]"
|
|
help="Open Opportunities"/>
|
|
<separator/>
|
|
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction', '=', True)]"/>
|
|
<separator/>
|
|
<filter string="Creation Date" name="creation_date" date="create_date"/>
|
|
<filter string="Closed Date" name="close_date" date="date_closed"/>
|
|
<separator/>
|
|
<filter string="Won" name="won" domain="['&', ('active', '=', True), ('stage_id.is_won', '=', True)]"/>
|
|
<filter string="Lost" name="lost" domain="['&', ('active', '=', False), ('probability', '=', 0)]"/>
|
|
<separator/>
|
|
<filter invisible="1" string="Late Activities" name="activities_overdue"
|
|
domain="[('activity_ids.date_deadline', '<', context_today().strftime('%Y-%m-%d'))]"
|
|
help="Show all opportunities for which the next action date is before today"/>
|
|
<filter invisible="1" string="Today Activities" name="activities_today"
|
|
domain="[('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
|
|
<filter invisible="1" string="Future Activities" name="activities_upcoming_all"
|
|
domain="[('activity_ids.date_deadline', '>', context_today().strftime('%Y-%m-%d'))]"/>
|
|
<separator/>
|
|
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
|
|
<group expand="0" string="Group By" colspan="16">
|
|
<filter string="Salesperson" name="salesperson" context="{'group_by':'user_id'}"/>
|
|
<filter string="Sales Team" name="saleschannel" context="{'group_by':'team_id'}"/>
|
|
<filter name="stage" string="Stage" context="{'group_by':'stage_id'}"/>
|
|
<filter name="city" string="City" context="{'group_by': 'city'}"/>
|
|
<filter string="Country" name="country" context="{'group_by':'country_id'}" />
|
|
<filter string="Lost Reason" name="lostreason" context="{'group_by':'lost_reason'}"/>
|
|
<filter string="Company" name="company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
|
<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" name="date_conversion" context="{'group_by': 'date_conversion'}" groups="crm.group_use_lead"/>
|
|
<filter string="Expected Closing" name="date_deadline" context="{'group_by':'date_deadline'}"/>
|
|
<filter string="Closed Date" name="date_closed" context="{'group_by':'date_closed'}"/>
|
|
</group>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<!--
|
|
MASS MAILING
|
|
-->
|
|
<act_window name="Send email"
|
|
res_model="mail.compose.message"
|
|
binding_model="crm.lead"
|
|
binding_views="list"
|
|
view_mode="form"
|
|
target="new"
|
|
id="crm.action_lead_mass_mail"
|
|
context="{
|
|
'default_composition_mode': 'mass_mail',
|
|
'default_email_to':'{($object.email or \'\')|safe}',
|
|
'default_use_template': True,
|
|
'default_template_id': ref('crm.email_template_opportunity_mail'),
|
|
}"
|
|
/>
|
|
|
|
<!--Update of email_template defined in crm_lead_data, to add ref_ir_act_window
|
|
allowing to have a well formed email template (context action considered as set). -->
|
|
<record id="email_template_opportunity_mail" model="mail.template">
|
|
<field name="ref_ir_act_window" ref="crm.action_lead_mass_mail"/>
|
|
</record>
|
|
|
|
<!--
|
|
'Mark as Lost' in action dropdown
|
|
-->
|
|
<record id="action_mark_as_lost" model="ir.actions.server">
|
|
<field name="name">Mark as lost</field>
|
|
<field name="model_id" ref="model_crm_lead"/>
|
|
<field name="binding_model_id" ref="crm.model_crm_lead"/>
|
|
<field name="binding_view_types">list</field>
|
|
<field name="state">code</field>
|
|
<field name="code">
|
|
if record:
|
|
action_values = env.ref('crm.crm_lead_lost_action').read()[0]
|
|
action_values.update({'context': env.context})
|
|
action = action_values
|
|
</field>
|
|
</record>
|
|
|
|
<!--
|
|
Menu Actions
|
|
-->
|
|
<menuitem
|
|
id="crm_menu_sales"
|
|
name="Sales"
|
|
parent="crm_menu_root"
|
|
sequence="1"/>
|
|
|
|
<menuitem id="sales_team_menu_team_pipeline"
|
|
name="Team Pipelines"
|
|
parent="crm_menu_sales"
|
|
action="sales_team.crm_team_salesteams_pipelines_act"
|
|
groups="sales_team.group_sale_manager"
|
|
sequence="4"/>
|
|
|
|
<menuitem id="res_partner_menu_customer"
|
|
name="Customers"
|
|
parent="crm_menu_sales"
|
|
action="base.action_partner_form"
|
|
sequence="5"/>
|
|
|
|
<!-- Lead Menu -->
|
|
<record model="ir.actions.act_window" id="crm_lead_all_leads">
|
|
<field name="name">Leads</field>
|
|
<field name="res_model">crm.lead</field>
|
|
<field name="view_mode">tree,kanban,graph,pivot,calendar,form,activity</field>
|
|
<field name="domain">['|', ('type','=','lead'), ('type','=',False)]</field>
|
|
<field name="search_view_id" ref="crm.view_crm_case_leads_filter"/>
|
|
<field name="context">{
|
|
'default_type':'lead',
|
|
'search_default_type': 'lead',
|
|
'search_default_to_process':1,
|
|
}
|
|
</field>
|
|
</record>
|
|
|
|
<record id="crm_lead_all_leads_view_tree" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="1"/>
|
|
<field name="view_mode">tree</field>
|
|
<field name="view_id" ref="crm_case_tree_view_leads"/>
|
|
<field name="act_window_id" ref="crm_lead_all_leads"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_all_leads_view_kanban" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="2"/>
|
|
<field name="view_mode">kanban</field>
|
|
<field name="view_id" ref="view_crm_lead_kanban"/>
|
|
<field name="act_window_id" ref="crm_lead_all_leads"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_all_leads_view_calendar" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="3"/>
|
|
<field name="view_mode">calendar</field>
|
|
<field name="view_id" ref="crm_case_calendar_view_leads"/>
|
|
<field name="act_window_id" ref="crm_lead_all_leads"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_all_leads_view_pivot" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="4"/>
|
|
<field name="view_mode">pivot</field>
|
|
<field name="view_id" ref="crm_lead_view_pivot"/>
|
|
<field name="act_window_id" ref="crm_lead_all_leads"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_all_leads_view_graph" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="5"/>
|
|
<field name="view_mode">graph</field>
|
|
<field name="view_id" ref="crm_lead_view_graph"/>
|
|
<field name="act_window_id" ref="crm_lead_all_leads"/>
|
|
</record>
|
|
|
|
<menuitem id="crm_menu_leads"
|
|
name="Leads"
|
|
parent="crm_menu_root"
|
|
groups="crm.group_use_lead"
|
|
action="crm_lead_all_leads"
|
|
sequence="5"/>
|
|
|
|
<!-- 'My Pipeline' menu : Server action, act_window_views and act_windows -->
|
|
<record model="ir.actions.act_window" id="crm_lead_opportunities">
|
|
<field name="name">Opportunities</field>
|
|
<field name="res_model">crm.lead</field>
|
|
<field name="view_mode">kanban,tree,graph,pivot,form,calendar,activity</field>
|
|
<field name="domain">[('type','=','opportunity')]</field>
|
|
<field name="context">{
|
|
'default_type': 'opportunity',
|
|
}
|
|
</field>
|
|
<field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_opportunities_view_kanban" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="0"/>
|
|
<field name="view_mode">kanban</field>
|
|
<field name="view_id" ref="crm_case_kanban_view_leads"/>
|
|
<field name="act_window_id" ref="crm_lead_opportunities"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_opportunities_view_tree" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="1"/>
|
|
<field name="view_mode">tree</field>
|
|
<field name="view_id" ref="crm.crm_case_tree_view_oppor"/>
|
|
<field name="act_window_id" ref="crm_lead_opportunities"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_opportunities_view_graph" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="3"/>
|
|
<field name="view_mode">graph</field>
|
|
<field name="view_id" ref="crm_lead_view_graph"/>
|
|
<field name="act_window_id" ref="crm_lead_opportunities"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_opportunities_view_pivot" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="4"/>
|
|
<field name="view_mode">pivot</field>
|
|
<field name="view_id" ref="crm_lead_view_pivot"/>
|
|
<field name="act_window_id" ref="crm_lead_opportunities"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_opportunities_view_calendar" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="5"/>
|
|
<field name="view_mode">calendar</field>
|
|
<field name="view_id" ref="crm_case_calendar_view_leads"/>
|
|
<field name="act_window_id" ref="crm_lead_opportunities"/>
|
|
</record>
|
|
|
|
<record id="action_your_pipeline" model="ir.actions.server">
|
|
<field name="name">Crm: My Pipeline</field>
|
|
<field name="model_id" ref="crm.model_crm_team"/>
|
|
<field name="state">code</field>
|
|
<field name="code">action = model.action_your_pipeline()</field>
|
|
</record>
|
|
|
|
<record model="ir.actions.act_window" id="crm_lead_action_pipeline">
|
|
<field name="name">Pipeline</field>
|
|
<field name="res_model">crm.lead</field>
|
|
<field name="view_mode">kanban,tree,graph,pivot,form,calendar,activity</field>
|
|
<field name="domain">[('type','=','opportunity')]</field>
|
|
<field name="context">{
|
|
'default_type': 'opportunity',
|
|
'search_default_assigned_to_me': 1
|
|
}</field>
|
|
<field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_action_pipeline_view_kanban" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="0"/>
|
|
<field name="view_mode">kanban</field>
|
|
<field name="view_id" ref="crm_case_kanban_view_leads"/>
|
|
<field name="act_window_id" ref="crm_lead_action_pipeline"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_action_pipeline_view_tree" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="1"/>
|
|
<field name="view_mode">tree</field>
|
|
<field name="view_id" ref="crm.crm_case_tree_view_oppor"/>
|
|
<field name="act_window_id" ref="crm_lead_action_pipeline"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_action_pipeline_view_calendar" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="2"/>
|
|
<field name="view_mode">calendar</field>
|
|
<field name="view_id" ref="crm_case_calendar_view_leads"/>
|
|
<field name="act_window_id" ref="crm_lead_action_pipeline"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_action_pipeline_view_pivot" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="3"/>
|
|
<field name="view_mode">pivot</field>
|
|
<field name="view_id" ref="crm_lead_view_pivot"/>
|
|
<field name="act_window_id" ref="crm_lead_action_pipeline"/>
|
|
</record>
|
|
|
|
<record id="crm_lead_action_pipeline_view_graph" model="ir.actions.act_window.view">
|
|
<field name="sequence" eval="5"/>
|
|
<field name="view_mode">graph</field>
|
|
<field name="view_id" ref="crm_lead_view_graph"/>
|
|
<field name="act_window_id" ref="crm_lead_action_pipeline"/>
|
|
</record>
|
|
|
|
<menuitem
|
|
id="menu_crm_opportunities"
|
|
action="action_your_pipeline"
|
|
name="My Pipeline"
|
|
parent="crm_menu_sales"
|
|
sequence="1"/>
|
|
|
|
<menuitem
|
|
id="crm.crm_menu_root"
|
|
name="CRM"
|
|
action="action_your_pipeline"/>
|
|
|
|
<!-- Configuration/Lead & Opporotunities/Lead Tags Menu -->
|
|
<record id="crm_lead_tag_action" model="ir.actions.act_window">
|
|
<field name="name">Tags</field>
|
|
<field name="res_model">crm.lead.tag</field>
|
|
<field name="view_id" ref="crm_lead_tag_tree"/>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Create new tags for your opportunities
|
|
</p><p>
|
|
Create tags that fit your business (product structure, sales type, etc.) to better manage and track your opportunities.
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<menuitem
|
|
id="menu_crm_lead_categ"
|
|
name="Tags"
|
|
action="crm_lead_tag_action"
|
|
parent="menu_crm_config_lead"
|
|
sequence="1"/>
|
|
</odoo>
|