Skip to content

[IMP] base: review avatars in Contacts views #4395

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 37 additions & 2 deletions addons/account/models/partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -559,6 +559,7 @@ def _default_display_invoice_template_pdf_report_id(self):
ref_company_ids = fields.One2many('res.company', 'partner_id',
string='Companies that refers to partner')
supplier_invoice_count = fields.Integer(compute='_compute_supplier_invoice_count', string='# Vendor Bills')
account_move_count = fields.Integer(compute='_compute_account_move_count', groups='account.group_account_invoice,account.group_account_readonly')
invoice_ids = fields.One2many('account.move', 'partner_id', string='Invoices', readonly=True, copy=False)
contract_ids = fields.One2many('account.analytic.account', 'partner_id', string='Partner Contracts', readonly=True)
bank_account_count = fields.Integer(compute='_compute_bank_count', string="Bank")
Expand Down Expand Up @@ -1007,11 +1008,11 @@ def _deduce_country_code(self):
@api.depends('country_id')
def _compute_partner_vat_placeholder(self):
for partner in self:
placeholder = _("/ if not applicable")
placeholder = _("not applicable")
if partner.country_id:
expected_vat = _ref_vat.get(partner.country_id.code.lower())
if expected_vat:
placeholder = _("%s, or / if not applicable", expected_vat)
placeholder = _("%s, or not applicable", expected_vat)

partner.partner_vat_placeholder = placeholder

Expand All @@ -1023,3 +1024,37 @@ def _compute_partner_company_registry_placeholder(self):
for partner in self:
country_code = partner.country_id.code or ''
partner.partner_company_registry_placeholder = _ref_company_registry.get(country_code.lower(), '')

def _compute_account_move_count(self):
# retrieve all children partners and prefetch 'parent_id' on them
all_partners = self.with_context(active_test=False).search_fetch(
[("id", "child_of", self.ids)],
["parent_id"],
)
domain = [
("partner_id", "in", all_partners.ids),
("move_type", "in", ("out_invoice", "out_refund")),
]
account_move_groups = self.env["account.move"]._read_group(
domain=domain, groupby=["partner_id"], aggregates=["__count"],
)
self_ids = set(self._ids)

self.account_move_count = 0
for partner, count in account_move_groups:
while partner:
if partner.id in self_ids:
partner.account_move_count += count
partner = partner.parent_id

def _get_stat_info(self):
data_list = super()._get_stat_info()
if not self.env.user.has_group('account.group_account_invoice'):
return data_list
for partner in self.filtered(lambda p: p._get_account_stat_count()):
stat_info = {'iconClass': 'fa-pencil-square-o', 'value': partner._get_account_stat_count(), 'label': _('Invoices/Bills/Mandates')}
data_list[partner.id].append(stat_info)
return data_list

def _get_account_stat_count(self):
return self.account_move_count + self.supplier_invoice_count
4 changes: 2 additions & 2 deletions addons/account/views/partner_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@
<field name="name">Customers</field>
<field name="res_model">res.partner</field>
<field name="path">customers</field>
<field name="view_mode">kanban,list,form</field>
<field name="view_mode">list,kanban,form</field>
<field name="context">{'search_default_customer': 1,'res_partner_search_mode': 'customer', 'default_is_company': True, 'default_customer_rank': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Expand All @@ -332,7 +332,7 @@
<field name="name">Vendors</field>
<field name="res_model">res.partner</field>
<field name="path">vendors</field>
<field name="view_mode">kanban,list,form</field>
<field name="view_mode">list,kanban,form</field>
<field name="context">{'search_default_supplier': 1,'res_partner_search_mode': 'supplier', 'default_is_company': True, 'default_supplier_rank': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Expand Down
4 changes: 2 additions & 2 deletions addons/base_setup/views/res_partner_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.res_partner_kanban_view"/>
<field name="arch" type="xml">
<xpath expr="//main//field[@name='complete_name']" position="after">
<field name="category_id" widget="many2many_tags" options="{'color_field': 'color'}" class="m-0"/>
<xpath expr="//footer" position="before">
<field name="category_id" widget="many2many_tags" options="{'color_field': 'color'}" />
</xpath>
</field>
</record>
Expand Down
9 changes: 8 additions & 1 deletion addons/calendar/models/res_partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from collections import defaultdict
from datetime import datetime

from odoo import api, fields, models
from odoo import _, api, fields, models
from odoo.tools import SQL


Expand Down Expand Up @@ -112,3 +112,10 @@ def _get_busy_calendar_events(self, start_datetime, end_datetime):
for partner in event.partner_ids:
event_by_partner_id[partner.id] |= event
return dict(event_by_partner_id)

def _get_stat_info(self):
data_list = super()._get_stat_info()
for partner in self.filtered('meeting_count'):
stat_info = {'iconClass': 'fa-calendar', 'value': partner.meeting_count, 'label': _('Meetings')}
data_list[partner.id].append(stat_info)
return data_list
17 changes: 0 additions & 17 deletions addons/calendar/views/res_partner_views.xml
Original file line number Diff line number Diff line change
@@ -1,22 +1,5 @@
<?xml version="1.0"?>
<odoo>

<!-- Partner kanban view inherit -->
<record id="res_partner_kanban_view" model="ir.ui.view">
<field name="name">res.partner.view.kanban.calendar</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.res_partner_kanban_view"/>
<field name="priority" eval="10"/>
<field name="arch" type="xml">
<xpath expr="//footer/div" position="inside">
<a t-if="record.meeting_count.value>0" type="object" name="schedule_meeting" class="btn btn-sm btn-link smaller" role="button">
<i class="fa fa-calendar me-1" aria-label="Meetings" role="img" title="Meetings"/>
<field name="meeting_count"/>
</a>
</xpath>
</field>
</record>

<!-- Add contextual button on partner form view -->
<record id="view_partners_form" model="ir.ui.view">
<field name="name">res_partner.view.form.calendar</field>
Expand Down
6 changes: 3 additions & 3 deletions addons/contacts/static/tests/tours/debug_menu_set_defaults.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
...stepUtils.goToAppSteps('contacts.menu_contacts', "Open the contacts menu"),
{
content: "Create a new contact",
trigger: '.o-kanban-button-new',
trigger: '.o_list_button_add',
run: "click",
},
{
Expand Down Expand Up @@ -54,7 +54,7 @@
run: "click",
},
{
trigger: '.o_action_manager > .o_kanban_view .o-kanban-button-new',
trigger: '.o_action_manager > .o_list_view .o_list_button_add',
run: "click",
},
{
Expand All @@ -68,7 +68,7 @@
},
{
content: "Wait for discard",
trigger: '.o_control_panel .o-kanban-button-new',
trigger: '.o_control_panel .o_list_button_add',
},
]
});
6 changes: 3 additions & 3 deletions addons/contacts/views/contact_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<field name="name">Contacts</field>
<field name="path">contacts</field>
<field name="res_model">res.partner</field>
<field name="view_mode">kanban,list,form,activity</field>
<field name="view_mode">list,kanban,form,activity</field>
<field name="search_view_id" ref="base.view_res_partner_filter"/>
<field name="context">{'default_is_company': True}</field>
<field name="help" type="html">
Expand All @@ -16,13 +16,13 @@
</field>
</record>
<record id="action_contacts_view_kanban" model="ir.actions.act_window.view">
<field name="sequence" eval="0"/>
<field name="sequence" eval="1"/>
<field name="view_mode">kanban</field>
<field name="view_id" ref="base.res_partner_kanban_view"/>
<field name="act_window_id" ref="action_contacts"/>
</record>
<record id="action_contacts_view_tree" model="ir.actions.act_window.view">
<field name="sequence" eval="1"/>
<field name="sequence" eval="0"/>
<field name="view_mode">list</field>
<field name="view_id" ref="base.view_partner_tree"/>
<field name="act_window_id" ref="action_contacts"/>
Expand Down
11 changes: 10 additions & 1 deletion addons/crm/models/res_partner.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.

from odoo import api, fields, models
from odoo import _, api, fields, models
from odoo.osv import expression


Expand Down Expand Up @@ -59,6 +59,15 @@ def _compute_opportunity_count(self):
partner.opportunity_count += count
partner = partner.parent_id

def _get_stat_info(self):
data_list = super()._get_stat_info()
if not self.env.user.has_group('sales_team.group_sale_salesman'):
return data_list
for partner in self.filtered('opportunity_count'):
stat_info = {'iconClass': 'fa-star', 'value': partner.opportunity_count, 'label': _('Opportunities')}
data_list[partner.id].append(stat_info)
return data_list

def action_view_opportunity(self):
action = self.env['ir.actions.act_window']._for_xml_id('crm.crm_lead_opportunities')
action['context'] = {
Expand Down
14 changes: 6 additions & 8 deletions addons/crm/views/crm_lead_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@
<field name="lead_properties" nolabel="1" columns="2"/>
</div>
<notebook>
<page string="Internal Notes" name="internal_notes">
<page string="Notes" name="internal_notes">
<field name="description" placeholder="Add a description..." options="{'collaborative': true}" />
</page>
<page name="extra" string="Extra Info" invisible="type == 'opportunity'">
Expand All @@ -265,9 +265,9 @@
</group>
</group>
</page>
<page name="lead" string="Extra Information" invisible="type == 'lead'">
<page name="lead" string="Contacts" invisible="type == 'lead'">
<group>
<group string="Contact Information">
<group string="Company Information">
<field name="partner_name"/>
<label for="street_page_lead" string="Address"/>
<div class="o_address_format">
Expand All @@ -278,32 +278,30 @@
<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_active_count" invisible="1"/>
<field name="lang_id" invisible="lang_active_count &lt;= 1"
options="{'no_quick_create': True, 'no_create_edit': True, 'no_open': True}"/>
</group>
<group class="mt48">
<group string="Contact Information">
<label for="contact_name_page_lead"/>
<div class="o_row">
<field name="contact_name" id="contact_name_page_lead"/>
</div>
<field name="function"/>
<field name="website" widget="url" placeholder="e.g. https://www.odoo.com"/>
</group>
<group string="Marketing">
<field name="campaign_id" options="{'create_name_field': 'title'}"/>
<field name="medium_id" />
<field name="source_id" />
<field name="referred"/>
</group>
<group string="Tracking" name="Misc">
<group string="Ownership" name="Misc">
<field name="company_id"
groups="base.group_multi_company"
options="{'no_create': True}"
placeholder="Visible to all"/>
<field name="team_id" options="{'no_open': True, 'no_create': True}" context="{'kanban_view_ref': 'sales_team.crm_team_view_kanban'}"/>
<field name="day_open" />
<field name="day_close"/>
<field name="type" invisible="1"/>
</group>
</group>
Expand Down
22 changes: 0 additions & 22 deletions addons/crm/views/res_partner_views.xml
Original file line number Diff line number Diff line change
@@ -1,27 +1,5 @@
<?xml version="1.0"?>
<odoo>

<!-- Partner kanban view inherit -->
<record id="crm_lead_partner_kanban_view" model="ir.ui.view">
<field name="name">res.partner.kanban.inherit</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.res_partner_kanban_view"/>
<field name="priority" eval="10"/>
<field name="arch" type="xml">
<xpath expr="//footer/div" position="inside">
<a t-if="record.opportunity_count?.value"
class="btn btn-sm btn-link smaller"
groups="sales_team.group_sale_salesman"
name="action_view_opportunity"
role="button"
type="object">
<i class="fa fa-star me-1" aria-label="Opportunities" role="img" title="Opportunities"/>
<field name="opportunity_count"/>
</a>
</xpath>
</field>
</record>

<!-- Add contextual button on partner form view -->
<record id="view_partners_form_crm1" model="ir.ui.view">
<field name="name">view.res.partner.form.crm.inherited1</field>
Expand Down
31 changes: 17 additions & 14 deletions addons/hr/views/hr_employee_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,25 +74,27 @@
<sheet>
<div name="button_box" class="oe_button_box">
</div>
<field name="avatar_128" invisible="1"/>
<div class="row justify-content-between position-relative w-100 m-0 mb-2">
<div class="oe_title mw-75 ps-0 pe-2">
<h1 class="d-flex flex-row align-items-center">
<div invisible="not user_id" class="me-2">
<widget name="hr_employee_chat" invisible="not context.get('chat_icon')"/>
</div>
<field name="name" placeholder="Employee's Name"
required="True" style="font-size: min(4vw, 2.6rem);"/>
</h1>
<h2>
<field name="job_title" placeholder="Job Title"/>
</h2>
</div>
<div class="d-flex align-items-center">
<div class="o_employee_avatar m-0 p-0">
<field name="image_1920" widget='image' class="oe_avatar m-0" options='{"zoom": true, "preview_image":"avatar_128"}'/>
<field name="show_hr_icon_display" invisible="1" />
<field name="hr_icon_display" class="d-flex align-items-end fs-6 o_employee_availability" invisible="not show_hr_icon_display or not id" widget="hr_presence_status"/>
</div>
<div class="d-flex flex-column ms-2">
<div class="oe_title mw-75 ps-0 pe-2">
<h1 class="d-flex flex-row align-items-center">
<field name="name" placeholder="Employee's Name"
required="True" style="font-size: min(4vw, 2.6rem);"/>
<div invisible="not user_id" class="me-2">
<widget name="hr_employee_chat" invisible="not context.get('chat_icon')"/>
</div>
</h1>
<h2 class="d-flex align-items-baseline">
<i class="fa fa-suitcase fa-fw me-1 text-primary" title="Position"/>
<field name="job_title" placeholder="Job Title"/>
</h2>
</div>
</div>
</div>
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
<group>
Expand Down Expand Up @@ -280,6 +282,7 @@
<header>
<button name="%(plan_wizard_action)d" string="Launch Plan" type="action" groups="hr.group_hr_user"/>
</header>
<field name="avatar_128" widget="image" options="{'size': [24, 24], 'img_class': 'rounded-3'}" width="30" nolabel="1"/>
<field name="name" readonly="1"/>
<field name="work_phone" class="o_force_ltr" readonly="1" optional="show"/>
<field name="work_email" optional="hide"/>
Expand Down
12 changes: 7 additions & 5 deletions addons/l10n_es_edi_facturae/views/res_partner_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='child_ids']//form//field[@name='name']" position="after">
<field name="l10n_es_edi_facturae_ac_center_code" invisible="type != 'facturae_ac'"/>
<field name="l10n_es_edi_facturae_ac_role_type_ids" widget="many2many_tags" invisible="type != 'facturae_ac'"/>
<field name="l10n_es_edi_facturae_ac_physical_gln" invisible="type != 'facturae_ac'"/>
<field name="l10n_es_edi_facturae_ac_logical_operational_point" invisible="type != 'facturae_ac'"/>
<xpath expr="//field[@name='child_ids']//form//group[@name='other_info']" position="inside">
<group invisible="type != 'facturae_ac'">
<field name="l10n_es_edi_facturae_ac_center_code"/>
<field name="l10n_es_edi_facturae_ac_role_type_ids" widget="many2many_tags"/>
<field name="l10n_es_edi_facturae_ac_physical_gln"/>
<field name="l10n_es_edi_facturae_ac_logical_operational_point"/>
</group>
</xpath>
</field>
</record>
Expand Down
Loading