[IMP] crm,crm_iap{_enrich}{_mine},*: improve UI
*: sale,sales_team Improve UI of the CRM app: - Add placeholders and underline m2o fields in the CRM quick create - In the lead generation form, underline the industries field, add the avatar widget on the user_id field, add the color attributes on the tag field, add a placeholder for the states field and set a longer selection field to avoid the caret from overlapping the content. - In the opportunity form, align the expected revenue and probability headers, set a longer width for the expected revenue field, change the recurring plan placeholder. - In the contact opportunities page, change the "Open Opportunities" filter to exclude lost opportunities. - In the Sales team page, add a groupby on the company_id. - In the Sales team form, change the assigned lead count to be a muted text, the pipeline checkbox should be visible only when leads has been activated, the quotations/pipeline/leads options should be aligned. - In the lost lead modal, change the title from "Lost Reason" to "Lost Lead" and the validate button from "Submit" to "Mark as lost". - In the Sales team member form, align the fields on the left and hide the Create Employee field as it should not be displayed there because this is not an hr module. - In the lead analysis tree view, add the lost reason field with optional hide. - Align the enrichment company not found message to the left of the chatter. - Update the crm iap lead role "Search More" list to display human readable names instead of the technical names. Task-3204763 Part-of: odoo/odoo#115326
This commit is contained in:
@@ -142,6 +142,9 @@
|
||||
<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>
|
||||
|
||||
|
||||
@@ -50,43 +50,37 @@
|
||||
<widget name="web_ribbon" title="Won" attrs="{'invisible': [('probability', '<', 100)]}" />
|
||||
<div class="oe_title">
|
||||
<h1><field class="text-break" options="{'line_breaks': False}" widget="text" name="name" placeholder="e.g. Product Pricing"/></h1>
|
||||
<h2 class="d-flex gap-2 g-0 align-items-end pb-3">
|
||||
<div attrs="{'invisible': [('type', '=', 'lead')]}">
|
||||
<label for="expected_revenue" class="oe_edit_only pb-1" />
|
||||
<div class="d-flex align-items-end">
|
||||
<h2 class="row g-0 pb-3 pb-sm-4">
|
||||
<div class="col-auto pb-2 pb-md-0" attrs="{'invisible': [('type', '=', 'lead')]}">
|
||||
<label for="expected_revenue" class="oe_edit_only"/>
|
||||
<div class="d-flex align-items-baseline">
|
||||
<field name="company_currency" invisible="1"/>
|
||||
<field name="expected_revenue" class="oe_inline o_input_8ch" widget='monetary' options="{'currency_field': 'company_currency'}"/>
|
||||
<field name="expected_revenue" class="o_input_13ch" widget='monetary' options="{'currency_field': 'company_currency'}"/>
|
||||
<span class="oe_grey p-2" groups="crm.group_use_recurring_revenues"> + </span>
|
||||
<span class="oe_grey p-2" groups="!crm.group_use_recurring_revenues"> at </span>
|
||||
</div>
|
||||
</div>
|
||||
<div attrs="{'invisible': [('type', '=', 'lead')]}" groups="crm.group_use_recurring_revenues">
|
||||
<field name="recurring_revenue" class="oe_inline o_input_10ch" widget="monetary" options="{'currency_field': 'company_currency'}"/>
|
||||
</div>
|
||||
<div attrs="{'invisible': [('type', '=', 'lead')]}" groups="crm.group_use_recurring_revenues">
|
||||
<div class="d-flex align-items-end ps-2">
|
||||
<field name="recurring_plan" class="oe_inline o_input_12ch" placeholder="E.g. Monthly"
|
||||
attrs="{'required': [('recurring_revenue', '!=', 0)]}" options="{'no_create': True, 'no_open': True}"/>
|
||||
<span class="oe_grey p-2"> at </span>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="oe_edit_only d-md-flex align-items-center">
|
||||
<label for="probability"/>
|
||||
<div class="d-flex align-items-center">
|
||||
<button class="ps-0 ps-md-2 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 h6 mb0 d-flex" attrs="{'invisible': [('is_automated_probability', '=', True)]}">
|
||||
<field class="mb0" name="automated_probability" force_save="1"/> %
|
||||
</small>
|
||||
<div class="d-flex align-items-baseline gap-3" groups="crm.group_use_recurring_revenues">
|
||||
<field name="recurring_revenue" class="o_input_10ch" widget="monetary" options="{'currency_field': 'company_currency'}"/>
|
||||
<div class="d-flex align-items-baseline">
|
||||
<field name="recurring_plan" class="oe_inline o_input_13ch" placeholder='e.g. "Monthly"'
|
||||
attrs="{'required': [('recurring_revenue', '!=', 0)]}" options="{'no_create': True, 'no_open': True}"/>
|
||||
<span class="oe_grey p-2 text-nowrap"> at </span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="probability" class="d-inline-block">
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<label for="probability" class="d-inline-block"/>
|
||||
<button class="d-inline-block px-2 py-0 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="d-inline-block oe_grey h6 mb-0" attrs="{'invisible': [('is_automated_probability', '=', True)]}">
|
||||
<field class="mb-0" name="automated_probability" force_save="1"/> %
|
||||
</small>
|
||||
<div id="probability" class="d-flex align-items-baseline">
|
||||
<field name="is_automated_probability" invisible="1"/>
|
||||
<field name="probability" widget="float" class="oe_inline o_input_6ch"/>
|
||||
<span class="oe_grey"> %</span>
|
||||
<span class="oe_grey p-2"> %</span>
|
||||
</div>
|
||||
</div>
|
||||
</h2>
|
||||
@@ -460,6 +454,7 @@
|
||||
<form>
|
||||
<group>
|
||||
<field name="partner_id" widget="res_partner_many2one"
|
||||
class="o_field_highlight"
|
||||
string='Organization / Contact'
|
||||
context="{
|
||||
'res_partner_search_mode': type == 'opportunity' and 'customer' or False,
|
||||
@@ -472,17 +467,17 @@
|
||||
'default_team_id': team_id,
|
||||
'show_vat': True}"/>
|
||||
<field name="name" placeholder="e.g. Product Pricing" />
|
||||
<field name="email_from" string="Email" />
|
||||
<field name="phone" string="Phone" />
|
||||
<field name="email_from" string="Email" placeholder='e.g. "email@address.com"' />
|
||||
<field name="phone" string="Phone" placeholder='e.g. "0123456789"' />
|
||||
<label for="expected_revenue"/>
|
||||
<div>
|
||||
<div class="o_row">
|
||||
<field name="expected_revenue" class="oe_inline me-5" widget="monetary" options="{'currency_field': 'company_currency'}"/>
|
||||
<field name="expected_revenue" class="oe_inline me-5 o_field_highlight" widget="monetary" options="{'currency_field': 'company_currency'}"/>
|
||||
<field name="priority" class="oe_inline" nolabel="1" widget="priority"/>
|
||||
</div>
|
||||
<div class="o_row" groups="crm.group_use_recurring_revenues">
|
||||
<field name="recurring_revenue" class="oe_inline" widget="monetary" options="{'currency_field': 'company_currency'}"/>
|
||||
<field name="recurring_plan" class="oe_inline" placeholder="E.g. Monthly"
|
||||
<field name="recurring_revenue" class="oe_inline o_field_highlight" widget="monetary" options="{'currency_field': 'company_currency'}"/>
|
||||
<field name="recurring_plan" class="oe_inline" placeholder='e.g. "Monthly"'
|
||||
attrs="{'required': [('recurring_revenue', '!=', 0)]}" options="{'no_create': True, 'no_open': True}"/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -786,9 +781,9 @@
|
||||
domain="[('share', '=', False)]"/>
|
||||
<field name="team_id" optional="hide"/>
|
||||
<field name="priority" optional="hide" widget="priority"/>
|
||||
<field name="activity_ids" widget="list_activity"/>
|
||||
<field name="activity_ids" optional="hide" widget="list_activity"/>
|
||||
<field name="activity_user_id" optional="hide" string="Activity by" widget="many2one_avatar_user"/>
|
||||
<field name="my_activity_date_deadline" string="My Deadline" widget="remaining_days" options="{'allow_order': '1'}"/>
|
||||
<field name="my_activity_date_deadline" optional="hide" string="My Deadline" widget="remaining_days" options="{'allow_order': '1'}"/>
|
||||
<field name="activity_calendar_event_id" invisible="1"/>
|
||||
<field name="campaign_id" optional="hide"/>
|
||||
<field name="medium_id" optional="hide"/>
|
||||
@@ -804,6 +799,7 @@
|
||||
<field name="stage_id" optional="show" decoration-bf="1"/>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="probability" string="Probability (%)" optional="hide"/>
|
||||
<field name="lost_reason_id" optional="hide"/>
|
||||
<field name="tag_ids" optional="hide" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
||||
<field name="referred" invisible="1"/>
|
||||
<field name="message_needaction" invisible="1"/>
|
||||
@@ -994,7 +990,7 @@
|
||||
<filter string="Unassigned" name="unassigned"
|
||||
domain="[('user_id', '=', False)]" help="No salesperson"/>
|
||||
<filter string="Open Opportunities" name="open_opportunities"
|
||||
domain="[('probability', '<', 100), ('type', '=', 'opportunity')]"
|
||||
domain="[('probability', '<', 100), ('type', '=', 'opportunity'), ('active', '=', True)]"
|
||||
help="Open Opportunities"/>
|
||||
<separator/>
|
||||
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction', '=', True)]" groups="mail.group_mail_notification_type_inbox"/>
|
||||
|
||||
@@ -138,6 +138,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//sheet" position="before">
|
||||
<field name="use_leads" invisible="1"/>
|
||||
<field name="use_opportunities" invisible="1"/>
|
||||
<header>
|
||||
<button name="action_assign_leads" type="object"
|
||||
string="Assign Leads"
|
||||
@@ -147,16 +148,14 @@
|
||||
</header>
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='options_active']" position="inside">
|
||||
<div class="o_row">
|
||||
<span name="opportunities">
|
||||
<field name="use_opportunities"/>
|
||||
<label for="use_opportunities"/>
|
||||
</span>
|
||||
<span class="o_row" groups="crm.group_use_lead">
|
||||
<field name="use_leads"/>
|
||||
<label for="use_leads" string="Leads"/>
|
||||
</span>
|
||||
</div>
|
||||
<span name="opportunities" groups="crm.group_use_lead">
|
||||
<field name="use_opportunities"/>
|
||||
<label for="use_opportunities"/>
|
||||
</span>
|
||||
<span name="leads" groups="crm.group_use_lead">
|
||||
<field name="use_leads"/>
|
||||
<label for="use_leads" string="Leads"/>
|
||||
</span>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='user_id']" position="after">
|
||||
<label for="alias_name" string="Email Alias"
|
||||
@@ -184,15 +183,13 @@
|
||||
<xpath expr="//group[@name='right']" position="inside">
|
||||
<field name="assignment_enabled" invisible="1"/>
|
||||
<field name="assignment_auto_enabled" invisible="1"/>
|
||||
<div class="text-muted" colspan="2" attrs="{'invisible': [('assignment_enabled', '=', False)]}">
|
||||
<field name="lead_all_assigned_month_count" class="oe_inline"/><span> leads assigned this month
|
||||
on a maximum of </span><field name="assignment_max" class="oe_inline"/>
|
||||
</div>
|
||||
<field name="assignment_domain" widget="domain" string="Domain"
|
||||
options="{'model': 'crm.lead', 'in_dialog': True}"
|
||||
attrs="{'invisible': [('assignment_enabled', '=', False)]}"/>
|
||||
<label for="lead_all_assigned_month_count" string="Assigned Leads Count"
|
||||
attrs="{'invisible': [('assignment_enabled', '=', False)]}"/>
|
||||
<div attrs="{'invisible': [('assignment_enabled', '=', False)]}">
|
||||
<field name="lead_all_assigned_month_count" class="oe_inline"/> /
|
||||
<field name="assignment_max" class="oe_inline"/>
|
||||
</div>
|
||||
<field name="assignment_optout" attrs="{'invisible': [('assignment_auto_enabled', '=', False)]}"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='member_ids']" position="attributes">
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
<field name="name">crm.lead.lost.form</field>
|
||||
<field name="model">crm.lead.lost</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Lost Reason">
|
||||
<form string="Lost Lead">
|
||||
<group>
|
||||
<field name="lost_reason_id" options="{'no_create_edit': True}" />
|
||||
</group>
|
||||
<field name="lost_feedback" placeholder="What went wrong?"/>
|
||||
<footer>
|
||||
<button name="action_lost_reason_apply" string="Submit" type="object" class="btn-primary" data-hotkey="q"/>
|
||||
<button name="action_lost_reason_apply" string="Mark as Lost" type="object" class="btn-primary" data-hotkey="q"/>
|
||||
<button string="Cancel" class="btn-secondary" special="cancel" data-hotkey="z"/>
|
||||
</footer>
|
||||
</form>
|
||||
@@ -18,7 +18,7 @@
|
||||
</record>
|
||||
|
||||
<record id="crm_lead_lost_action" model="ir.actions.act_window">
|
||||
<field name="name">Lost Reason</field>
|
||||
<field name="name">Lost Lead</field>
|
||||
<field name="res_model">crm.lead.lost</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="crm_lead_lost_view_form"/>
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
<!-- VIEWS USED FOR MESSAGING -->
|
||||
<template id="mail_message_lead_enrich_notfound">
|
||||
<p>Lead Enrichment (based on email address)</p>
|
||||
<div style="background-color:#ffffff;padding:15px;">
|
||||
<div style="background-color:#ffffff;padding:15px;padding-left:0px;">
|
||||
<span> No company data found based on the email address or email address is one of an email provider. No credit was consumed. </span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template id="mail_message_lead_enrich_no_email">
|
||||
<p>Lead Enrichment (based on email address)</p>
|
||||
<div style="background-color:#ffffff;padding:15px;">
|
||||
<div style="background-color:#ffffff;padding:15px;padding-left:0px;">
|
||||
<span>Enrichment could not be done because the email address does not look valid.</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
"id",name,reveal_id
|
||||
"crm_iap_mine_role_1","CEO","CEO"
|
||||
"crm_iap_mine_role_2","communications","communications"
|
||||
"crm_iap_mine_role_3","consulting","consulting"
|
||||
"crm_iap_mine_role_4","customer_service","customer_service"
|
||||
"crm_iap_mine_role_5","education","education"
|
||||
"crm_iap_mine_role_6","engineering","engineering"
|
||||
"crm_iap_mine_role_7","finance","finance"
|
||||
"crm_iap_mine_role_8","founder","founder"
|
||||
"crm_iap_mine_role_9","health_professional","health_professional"
|
||||
"crm_iap_mine_role_10","human_resources","human_resources"
|
||||
"crm_iap_mine_role_11","information_technology","information_technology"
|
||||
"crm_iap_mine_role_12","legal","legal"
|
||||
"crm_iap_mine_role_13","marketing","marketing"
|
||||
"crm_iap_mine_role_14","operations","operations"
|
||||
"crm_iap_mine_role_15","owner","owner"
|
||||
"crm_iap_mine_role_16","president","president"
|
||||
"crm_iap_mine_role_17","product","product"
|
||||
"crm_iap_mine_role_18","public_relations","public_relations"
|
||||
"crm_iap_mine_role_19","real_estate","real_estate"
|
||||
"crm_iap_mine_role_20","recruiting","recruiting"
|
||||
"crm_iap_mine_role_21","research","research"
|
||||
"crm_iap_mine_role_22","sale","sale"
|
||||
"crm_iap_mine_role_2","Communications","communications"
|
||||
"crm_iap_mine_role_3","Consulting","consulting"
|
||||
"crm_iap_mine_role_4","Customer Service","customer_service"
|
||||
"crm_iap_mine_role_5","Education","education"
|
||||
"crm_iap_mine_role_6","Engineering","engineering"
|
||||
"crm_iap_mine_role_7","Finance","finance"
|
||||
"crm_iap_mine_role_8","Founder","founder"
|
||||
"crm_iap_mine_role_9","Health Professional","health_professional"
|
||||
"crm_iap_mine_role_10","Human Resources","human_resources"
|
||||
"crm_iap_mine_role_11","Information Technology","information_technology"
|
||||
"crm_iap_mine_role_12","Legal","legal"
|
||||
"crm_iap_mine_role_13","Marketing","marketing"
|
||||
"crm_iap_mine_role_14","Operations","operations"
|
||||
"crm_iap_mine_role_15","Owner","owner"
|
||||
"crm_iap_mine_role_16","President","president"
|
||||
"crm_iap_mine_role_17","Product","product"
|
||||
"crm_iap_mine_role_18","Public Relations","public_relations"
|
||||
"crm_iap_mine_role_19","Real Estate","real_estate"
|
||||
"crm_iap_mine_role_20","Recruiting","recruiting"
|
||||
"crm_iap_mine_role_21","Research","research"
|
||||
"crm_iap_mine_role_22","Sale","sale"
|
||||
|
||||
|
@@ -52,8 +52,8 @@
|
||||
<group name="requests">
|
||||
<group>
|
||||
<div class="o_row py-3">
|
||||
<field name="lead_number" attrs="{'readonly': [('state', '=', 'done')]}" nolabel="1" class="oe_inline pe-2 o_input_3ch"/>
|
||||
<field name="search_type" widget="selection" attrs="{'readonly': [('state', '=', 'done')]}" nolabel="1" class="oe_inline"/>
|
||||
<field name="lead_number" attrs="{'readonly': [('state', '=', 'done')]}" nolabel="1" class="oe_inline pe-2 o_input_3ch o_field_highlight"/>
|
||||
<field name="search_type" widget="selection" attrs="{'readonly': [('state', '=', 'done')]}" nolabel="1" class="oe_inline o_field_highlight"/>
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
@@ -62,10 +62,10 @@
|
||||
<group name="companies">
|
||||
<field name="country_ids" widget="many2many_tags" attrs="{'readonly': [('state', '=', 'done')]}" required="True" options="{'no_create': True, 'no_open': True}"/>
|
||||
<field name="available_state_ids" invisible="1"/>
|
||||
<field name="state_ids" widget="many2many_tags"
|
||||
<field name="state_ids" widget="many2many_tags" placeholder="Pick States..."
|
||||
attrs="{'invisible': ['|', ('country_ids', '=', []), ('available_state_ids', '=', [])], 'readonly': [('state', '=', 'done')]}"
|
||||
domain="[('id', 'in', available_state_ids)]" options="{'no_create': True, 'no_open': True}"/>
|
||||
<field name="industry_ids" widget="many2many_tags" attrs="{'readonly': [('state', '=', 'done')]}" options="{'no_create': True, 'no_open': True}" class="o_industry" required="1"/>
|
||||
<field name="industry_ids" widget="many2many_tags" attrs="{'readonly': [('state', '=', 'done')]}" options="{'no_create': True, 'no_open': True}" class="o_industry o_field_highlight" required="1"/>
|
||||
<field name="filter_on_size" attrs="{'readonly': [('state', '=', 'done')]}"/>
|
||||
<label for="company_size_min" attrs="{'invisible': [('filter_on_size', '=', False)]}"/>
|
||||
<div attrs="{'invisible': [('filter_on_size', '=', False)]}">
|
||||
@@ -80,8 +80,8 @@
|
||||
<group name="lead_info">
|
||||
<field name="lead_type" groups="crm.group_use_lead" invisible="context.get('is_modal')" attrs="{'readonly': [('state', '=', 'done')]}"/>
|
||||
<field name="team_id" no_create="1" no_open="1" attrs="{'readonly': [('state', '=', 'done')]}" context="{'kanban_view_ref': 'sales_team.crm_team_view_kanban'}"/>
|
||||
<field name="user_id" no_create="1" no_open="1" attrs="{'readonly': [('state', '=', 'done')]}"/>
|
||||
<field name="tag_ids" string="Default Tags" widget="many2many_tags" attrs="{'readonly': [('state', '=', 'done')]}"/>
|
||||
<field name="user_id" no_create="1" no_open="1" attrs="{'readonly': [('state', '=', 'done')]}" widget="many2one_avatar_user"/>
|
||||
<field name="tag_ids" string="Default Tags" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}" attrs="{'readonly': [('state', '=', 'done')]}"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
<group name="group_owner">
|
||||
<field name="crm_team_id" context="{'kanban_view_ref': 'sales_team.crm_team_view_kanban'}"/>
|
||||
</group>
|
||||
<group name="group_user">
|
||||
<group class="ps-0" name="group_user">
|
||||
<field name="company_id" attrs="{'invisible': [('user_id', '=', False)]}"
|
||||
groups="base.group_multi_company"/>
|
||||
<field name="email" attrs="{'invisible': [('user_id', '=', False)]}"/>
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
<field name="user_id"/>
|
||||
<field name="member_ids"/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Company" name="company" domain="[]" context="{'group_by': 'company_id'}" groups="base.group_multi_company"/>
|
||||
<filter string="Team Leader" name="team_leader" domain="[]" context="{'group_by': 'user_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
@@ -34,7 +35,7 @@
|
||||
<h1>
|
||||
<field class="text-break" name="name" placeholder="e.g. North America"/>
|
||||
</h1>
|
||||
<div name="options_active"/>
|
||||
<div name="options_active" class="o_row"/>
|
||||
</div>
|
||||
<group>
|
||||
<group name="left" string="Team Details">
|
||||
@@ -52,7 +53,7 @@
|
||||
<notebook>
|
||||
<page string="Members" name="members_users">
|
||||
<field name="member_ids" mode="kanban"
|
||||
class="w-100">
|
||||
class="w-100" context="{'allow_create_employee': False}">
|
||||
<kanban>
|
||||
<field name="id"/>
|
||||
<field name="name"/>
|
||||
|
||||
Reference in New Issue
Block a user