[MERGE][IMP] crm{_iap_mine}{_iap_enrich}{_sms}, web, iap{_mail}: improve UI
Purpose
=======
Improve some UI display of the CRM and CRM related modules.
CRM v16.3 promenade.
Specifications
===========
web
------
* Increase the maximum input field size to handle a larger number
of characters.
crm,crm_iap{_enrich}{_mine},sale,sales_team
-------------------------------------------------------------------
* Improve some small UI display like placeholders, search filters,
the wording of the lost reason modal, the fields alignments,
always underline certain fields, set certain fields as optional in
the reporting tree views, ...
crm
------
* Modify the informative lead count field to be displayed as a muted text
sentence with text color warning when it exceeds the maximum month count.
crm{_sms}
---------------
* Remove the reporting pipeline tree view buttons as the view is not
an operational one so those won't be used by the manager.
mail
-------
* Add a m2o avatar widget to a field.
iap_mail
-------------
* Improve the display of the lead enrichment message appearing in the
chatter after an enrichment.
More details in underlying commits.
See: https://github.com/odoo/enterprise/pull/38498
Task-3204763
closes odoo/odoo#115326
Related: odoo/enterprise#38498
Signed-off-by: Warnon Aurélien (awa) <awa@odoo.com>
This commit is contained in:
@@ -43,6 +43,9 @@ class Team(models.Model):
|
||||
lead_all_assigned_month_count = fields.Integer(
|
||||
string='# Leads/Opps assigned this month', compute='_compute_lead_all_assigned_month_count',
|
||||
help="Number of leads and opportunities assigned this last month.")
|
||||
lead_all_assigned_month_exceeded = fields.Boolean('Exceed monthly lead assignement', compute="_compute_lead_all_assigned_month_count",
|
||||
help="True if the monthly lead assignment count is greater than the maximum assignment limit, false otherwise."
|
||||
)
|
||||
opportunities_count = fields.Integer(
|
||||
string='# Opportunities', compute='_compute_opportunities_data')
|
||||
opportunities_amount = fields.Monetary(
|
||||
@@ -82,10 +85,11 @@ class Team(models.Model):
|
||||
for team in self:
|
||||
team.lead_unassigned_count = counts.get(team.id, 0)
|
||||
|
||||
@api.depends('crm_team_member_ids.lead_month_count')
|
||||
@api.depends('crm_team_member_ids.lead_month_count', 'assignment_max')
|
||||
def _compute_lead_all_assigned_month_count(self):
|
||||
for team in self:
|
||||
team.lead_all_assigned_month_count = sum(member.lead_month_count for member in team.crm_team_member_ids)
|
||||
team.lead_all_assigned_month_exceeded = team.lead_all_assigned_month_count > team.assignment_max
|
||||
|
||||
def _compute_opportunities_data(self):
|
||||
opportunity_data = self.env['crm.lead']._read_group([
|
||||
|
||||
@@ -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.tree.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="//button[@name='action_snooze']" 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>
|
||||
@@ -142,6 +153,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>
|
||||
|
||||
@@ -155,7 +169,7 @@
|
||||
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': 'tree', 'view_id': ref('crm_lead_view_tree_opportunity_reporting')})]"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No data found!
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
.o_crm_team_form_view {
|
||||
/*
|
||||
* Used to conditionnaly add a css class on a record field.
|
||||
* Add text-warning on the element with class o_crm_lead_month_assignment
|
||||
* only if the element with o_crm_lead_all_assigned_month_exceeded is visible
|
||||
* in the template.
|
||||
*/
|
||||
div.o_crm_lead_all_assigned_month_exceeded + .o_crm_lead_month_assignment {
|
||||
@extend .text-warning;
|
||||
}
|
||||
}
|
||||
@@ -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"/>
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
<field name="search_view_id" ref="crm.crm_opportunity_report_view_search"/>
|
||||
<field name="context">{
|
||||
'search_default_team_id': [active_id],
|
||||
'tree_view_ref': 'crm.crm_case_tree_view_oppor',
|
||||
'tree_view_ref': 'crm.crm_lead_view_tree_opportunity_reporting',
|
||||
'search_default_filter_opportunity': True,
|
||||
'search_default_filter_create_date': 1}</field>
|
||||
<field name="domain">[]</field>
|
||||
@@ -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,18 @@
|
||||
<xpath expr="//group[@name='right']" position="inside">
|
||||
<field name="assignment_enabled" invisible="1"/>
|
||||
<field name="assignment_auto_enabled" invisible="1"/>
|
||||
<field name="lead_all_assigned_month_exceeded" invisible="1"/>
|
||||
<div colspan="2">
|
||||
<div class="o_crm_lead_all_assigned_month_exceeded" attrs="{'invisible': [('lead_all_assigned_month_exceeded', '=', False)]}"/>
|
||||
<div class="o_crm_lead_month_assignment text-muted" attrs="{'invisible': [('assignment_enabled', '=', False)]}">
|
||||
<i class="fa fa-info-circle me-2" title="Assigned Lead Count"/>
|
||||
<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>
|
||||
</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>
|
||||
|
||||
|
||||
@@ -41,4 +41,13 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="crm_lead_view_tree_opportunity_reporting" model="ir.ui.view">
|
||||
<field name="name">crm.lead.tree.opportunity.reporting.inherit.sms</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="inherit_id" ref="crm.crm_lead_view_tree_opportunity_reporting"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//button[@name='%(crm_sms.crm_lead_act_window_sms_composer_multi)d']" position="replace"/>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
'assets': {
|
||||
'web.assets_backend': [
|
||||
'iap_mail/static/src/js/**/*',
|
||||
'iap_mail/static/src/scss/iap_mail.scss',
|
||||
],
|
||||
},
|
||||
'license': 'LGPL-3',
|
||||
|
||||
@@ -23,19 +23,19 @@
|
||||
</h4>
|
||||
<p t-esc="description"/>
|
||||
</div>
|
||||
<div class="col-sm-2 p-0 text-center text-md-end order-first order-md-last">
|
||||
<img t-attf-src="{{logo}}" alt="Company Logo" style="max-width: 80px;"/>
|
||||
<div t-if="logo" class="col-sm-2 p-0 text-center text-md-end order-first order-md-last">
|
||||
<img t-attf-src="{{logo}}" alt="" style="max-width: 80px;"/>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
|
||||
<div class="col-sm-12 row m-0 p-0">
|
||||
<div t-if="company_type" class="my-1 p-0 col-sm-3">
|
||||
<div t-if="company_type" class="d-flex my-1 p-0 col-sm-3">
|
||||
<i class="fa fa-fw me-2 fa-building text-primary"/>
|
||||
<b>Company type</b>
|
||||
</div>
|
||||
<div t-if="company_type" class="my-1 col-sm-9" t-esc="company_type" />
|
||||
<div t-if="founded_year" class="my-1 p-0 col-sm-3">
|
||||
<div t-if="founded_year" class="d-flex my-1 p-0 col-sm-3">
|
||||
<i class="fa fa-fw me-2 fa-calendar text-primary"/>
|
||||
<b>Founded</b>
|
||||
</div>
|
||||
@@ -45,7 +45,7 @@
|
||||
<t t-if="industry" t-set="sectors" t-value="sectors + [industry]" />
|
||||
<t t-if="industry_group" t-set="sectors" t-value="sectors + [industry_group]" />
|
||||
<t t-if="sub_industry" t-set="sectors" t-value="sectors + [sub_industry]" />
|
||||
<div t-if="sectors" class="my-1 p-0 col-sm-3">
|
||||
<div t-if="sectors" class="d-flex my-1 p-0 col-sm-3">
|
||||
<i class="fa fa-fw me-2 fa-industry text-primary"/>
|
||||
<b>Sectors</b>
|
||||
</div>
|
||||
@@ -54,19 +54,19 @@
|
||||
<label t-esc="inner_sector" style="font-weight:normal; padding: 2px 10px; background-color: #eeeeee; margin: 1px 0px; border-radius: 13px; display: inline-block;"/>
|
||||
</t>
|
||||
</div>
|
||||
<div t-if="employees" class="my-1 p-0 col-sm-3">
|
||||
<div t-if="employees" class="d-flex my-1 p-0 col-sm-3">
|
||||
<i class="fa fa-fw me-2 fa-users text-primary"/>
|
||||
<b>Employees</b>
|
||||
</div>
|
||||
<div t-if="employees" class="my-1 col-sm-9" t-esc="'%.0f' % employees" />
|
||||
<div t-if="estimated_annual_revenue" class="my-1 p-0 col-sm-3">
|
||||
<div t-if="estimated_annual_revenue" class="d-flex my-1 p-0 col-sm-3">
|
||||
<i class="fa fa-fw me-2 fa-money text-primary"/>
|
||||
<b>Estimated revenue</b>
|
||||
</div>
|
||||
<div t-if="estimated_annual_revenue" class="my-1 col-sm-9">
|
||||
<span t-esc="estimated_annual_revenue" /><span> per year</span>
|
||||
</div>
|
||||
<div t-if="phone_numbers" class="my-1 p-0 col-sm-3">
|
||||
<div t-if="phone_numbers" class="d-flex my-1 p-0 col-sm-3">
|
||||
<i class="fa fa-fw me-2 fa-phone text-primary"/>
|
||||
<b>Phone</b>
|
||||
</div>
|
||||
@@ -75,7 +75,7 @@
|
||||
<a t-attf-href="tel:{{phone_number}}" t-esc="phone_number" style="font-weight:normal; padding: 2px 10px; background-color: #eeeeee; margin: 1px 0px; border-radius: 13px; display: inline-block;"/>
|
||||
</t>
|
||||
</div>
|
||||
<div t-if="email" class="my-1 p-0 col-sm-3">
|
||||
<div t-if="email" class="d-flex my-1 p-0 col-sm-3">
|
||||
<i class="fa fa-fw me-2 fa-envelope text-primary"/>
|
||||
<b>Email</b>
|
||||
</div>
|
||||
@@ -84,12 +84,12 @@
|
||||
<a target="_top" t-attf-href="mailto:{{email_item}}" t-esc="email_item" style="font-weight:normal; padding: 2px 10px; background-color: #eeeeee; margin: 1px 0px; border-radius: 13px; display: inline-block;"/>
|
||||
</t>
|
||||
</div>
|
||||
<div t-if="timezone" class="my-1 p-0 col-sm-3">
|
||||
<div t-if="timezone" class="d-flex my-1 p-0 col-sm-3">
|
||||
<i class="fa fa-fw me-2 fa-globe text-primary"/>
|
||||
<b>Timezone</b>
|
||||
</div>
|
||||
<div t-if="timezone" class="my-1 col-sm-9" t-esc="timezone.replace('_', ' ')" />
|
||||
<div t-if="tech" class="my-1 p-0 col-sm-3">
|
||||
<div t-if="tech" class="d-flex my-1 p-0 col-sm-3">
|
||||
<i class="fa fa-fw me-2 fa-cube text-primary"/>
|
||||
<b>Technologies Used</b>
|
||||
</div>
|
||||
@@ -98,12 +98,18 @@
|
||||
<label t-esc="tech_item.replace('_', ' ').title()" style="font-weight:normal; padding: 2px 10px; background-color: #eeeeee; margin: 1px 0px; border-radius: 13px; display: inline-block;"/>
|
||||
</t>
|
||||
</div>
|
||||
<div t-if="twitter_bio" class="my-1 p-0 col-sm-3">
|
||||
<div t-if="twitter_bio" class="d-flex my-1 p-0 col-sm-3">
|
||||
<i class="fa fa-fw me-2 fa-twitter text-primary"/>
|
||||
<b>Twitter</b>
|
||||
</div>
|
||||
<div t-if="twitter_bio" class="my-1 col-sm-9">
|
||||
<div t-if="twitter_followers"><t t-esc="twitter_followers"/> followers</div>
|
||||
<div class="d-flex gap-2">
|
||||
<a t-if="twitter" target="_blank" t-attf-href="http://www.twitter.com/{{twitter}}">
|
||||
http://www.twitter.com/<t t-esc="twitter"/>
|
||||
</a>
|
||||
<span t-if="twitter"> • </span>
|
||||
<div t-if="twitter_followers"><t t-esc="twitter_followers"/> followers</div>
|
||||
</div>
|
||||
<div t-esc="twitter_bio" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
.o_partner_autocomplete_enrich_info i {
|
||||
/* To prevent the icons from being cropped when there is not enough available space */
|
||||
min-width: fit-content;
|
||||
}
|
||||
@@ -124,7 +124,7 @@
|
||||
</group>
|
||||
<group>
|
||||
<field name="date_deadline"/>
|
||||
<field name="user_id"/>
|
||||
<field name="user_id" widget="many2one_avatar_user"/>
|
||||
</group>
|
||||
</group>
|
||||
<field name="note" class="oe-bordered-editor" placeholder="Log a note..."/>
|
||||
|
||||
@@ -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>
|
||||
@@ -21,7 +22,7 @@
|
||||
<field name="name">crm.team.form</field>
|
||||
<field name="model">crm.team</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Sales Team">
|
||||
<form string="Sales Team" class="o_crm_team_form_view">
|
||||
<div class="alert alert-info text-center" role="alert"
|
||||
attrs="{'invisible': ['|', ('is_membership_multi', '=', True), ('member_warning', '=', False)]}">
|
||||
<field name="member_warning"/>
|
||||
@@ -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"/>
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
@extend .oe_inline;
|
||||
float: right!important;
|
||||
}
|
||||
@for $i from 2 through 12 {
|
||||
@for $i from 2 through 13 {
|
||||
.o_field_widget.o_input_#{$i}ch input{
|
||||
width: 1ch * $i !important;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user