[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:
Odoo's Mergebot
2023-05-05 12:44:00 +02:00
committed by GitHub
17 changed files with 156 additions and 108 deletions
+5 -1
View File
@@ -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!
+11
View File
@@ -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;
}
}
+34 -38
View File
@@ -50,43 +50,37 @@
<widget name="web_ribbon" title="Won" attrs="{'invisible': [('probability', '&lt;', 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', '&lt;', 100), ('type', '=', 'opportunity')]"
domain="[('probability', '&lt;', 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"/>
+19 -17
View File
@@ -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">
+3 -3
View File
@@ -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>
+21 -21
View File
@@ -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"
1 id name reveal_id
2 crm_iap_mine_role_1 CEO CEO
3 crm_iap_mine_role_2 communications Communications communications
4 crm_iap_mine_role_3 consulting Consulting consulting
5 crm_iap_mine_role_4 customer_service Customer Service customer_service
6 crm_iap_mine_role_5 education Education education
7 crm_iap_mine_role_6 engineering Engineering engineering
8 crm_iap_mine_role_7 finance Finance finance
9 crm_iap_mine_role_8 founder Founder founder
10 crm_iap_mine_role_9 health_professional Health Professional health_professional
11 crm_iap_mine_role_10 human_resources Human Resources human_resources
12 crm_iap_mine_role_11 information_technology Information Technology information_technology
13 crm_iap_mine_role_12 legal Legal legal
14 crm_iap_mine_role_13 marketing Marketing marketing
15 crm_iap_mine_role_14 operations Operations operations
16 crm_iap_mine_role_15 owner Owner owner
17 crm_iap_mine_role_16 president President president
18 crm_iap_mine_role_17 product Product product
19 crm_iap_mine_role_18 public_relations Public Relations public_relations
20 crm_iap_mine_role_19 real_estate Real Estate real_estate
21 crm_iap_mine_role_20 recruiting Recruiting recruiting
22 crm_iap_mine_role_21 research Research research
23 crm_iap_mine_role_22 sale 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>
+9
View File
@@ -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>
+1
View File
@@ -20,6 +20,7 @@
'assets': {
'web.assets_backend': [
'iap_mail/static/src/js/**/*',
'iap_mail/static/src/scss/iap_mail.scss',
],
},
'license': 'LGPL-3',
+19 -13
View File
@@ -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;
}
+1 -1
View File
@@ -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)]}"/>
+4 -3
View File
@@ -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;
}