[FIX] base: restore delivery and shipping image on contact in kanban

Since c53724ebc3, the contact image in contact kanban view for a shipping
or delivery contact type would be the regular placeholder instead of the truck
or money image.

Now, by using the new avatar system, we restore that behavior.

+ we also use that new avatar system to cleanup some code in the kanban in the
  form view (`child_ids` field in `Contacts & Addresses` tab). That part was
   working fine but wasn't using the new system and needed extra code.

closes odoo/odoo#75709

X-original-commit: a97cbdd033391af75628bed50accfef11c73687c
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
Signed-off-by: Romain Derie <rdeodoo@users.noreply.github.com>
This commit is contained in:
Romain Derie
2021-08-31 08:47:14 +00:00
parent 99f6bf96ea
commit 23c88405a9
5 changed files with 27 additions and 41 deletions
@@ -37,3 +37,8 @@ class ResPartnerMondialRelay(models.Model):
'parent_id': self.id,
})
return partner
def _avatar_get_placeholder_path(self):
if self.is_mondialrelay:
return "delivery_mondialrelay/static/src/img/truck_mr.png"
return super()._avatar_get_placeholder_path()
@@ -24,18 +24,5 @@
</field>
</record>
<record id="view_partner_form_mondialrelay" model="ir.ui.view">
<field name="name">view_partner_form_mondialrelay</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='contact_addresses']//kanban/field[@name='display_name']" position="after">
<field name="is_mondialrelay"/>
</xpath>
<xpath expr="//t[@t-set='delivery_icon_path']" position="after">
<t t-set="delivery_icon_path" t-if="record.is_mondialrelay.raw_value" t-value="'/delivery_mondialrelay/static/src/img/truck_mr.png'"/>
</xpath>
</field>
</record>
</data>
</odoo>
+4 -1
View File
@@ -72,5 +72,8 @@ class AvatarMixin(models.AbstractModel):
"</svg>"
).encode())
def _avatar_get_placeholder_path(self):
return "base/static/img/avatar_grey.png"
def _avatar_get_placeholder(self):
return b64encode(file_open("base/static/img/avatar_grey.png", 'rb').read())
return b64encode(file_open(self._avatar_get_placeholder_path(), 'rb').read())
+12 -9
View File
@@ -238,23 +238,23 @@ class Partner(models.Model):
('check_name', "CHECK( (type='contact' AND name IS NOT NULL) or (type!='contact') )", 'Contacts require a name'),
]
@api.depends('name', 'user_ids.share', 'image_1920', 'is_company')
@api.depends('name', 'user_ids.share', 'image_1920', 'is_company', 'type')
def _compute_avatar_1920(self):
super()._compute_avatar_1920()
@api.depends('name', 'user_ids.share', 'image_1024', 'is_company')
@api.depends('name', 'user_ids.share', 'image_1024', 'is_company', 'type')
def _compute_avatar_1024(self):
super()._compute_avatar_1024()
@api.depends('name', 'user_ids.share', 'image_512', 'is_company')
@api.depends('name', 'user_ids.share', 'image_512', 'is_company', 'type')
def _compute_avatar_512(self):
super()._compute_avatar_512()
@api.depends('name', 'user_ids.share', 'image_256', 'is_company')
@api.depends('name', 'user_ids.share', 'image_256', 'is_company', 'type')
def _compute_avatar_256(self):
super()._compute_avatar_256()
@api.depends('name', 'user_ids.share', 'image_128', 'is_company')
@api.depends('name', 'user_ids.share', 'image_128', 'is_company', 'type')
def _compute_avatar_128(self):
super()._compute_avatar_128()
@@ -264,11 +264,14 @@ class Partner(models.Model):
for partner in self - partners_with_internal_user:
partner[avatar_field] = partner[image_field] or partner._avatar_get_placeholder()
def _avatar_get_placeholder(self):
path = "base/static/img/avatar_grey.png"
def _avatar_get_placeholder_path(self):
if self.is_company:
path = "base/static/img/company_image.png"
return base64.b64encode(tools.file_open(path, 'rb').read())
return "base/static/img/company_image.png"
if self.type == 'delivery':
return "base/static/img/truck.png"
if self.type == 'invoice':
return "base/static/img/money.png"
return super()._avatar_get_placeholder_path()
@api.depends('is_company', 'name', 'parent_id.display_name', 'type', 'company_name')
def _compute_display_name(self):
+6 -18
View File
@@ -260,6 +260,7 @@
<field name="mobile"/>
<field name="state_id"/>
<field name="image_128"/>
<field name="avatar_128"/>
<field name="lang"/>
<!-- fields in form x2many view to diminish requests -->
<field name="comment"/>
@@ -269,17 +270,7 @@
<t t-set="color" t-value="kanban_color(record.color.raw_value)"/>
<div t-att-class="color + (record.title.raw_value == 1 ? ' oe_kanban_color_alert' : '') + ' oe_kanban_global_click'">
<div class="o_kanban_image">
<img alt="Contact image" t-if="record.image_128.raw_value" t-att-src="kanban_image('res.partner', 'image_128', record.id.raw_value)"/>
<t t-if="!record.image_128.raw_value">
<t t-set="delivery_icon_path" t-value="'/base/static/img/truck.png'"/>
<t t-set="invoice_icon_path" t-value="'/base/static/img/money.png'"/>
<img alt="Delivery" t-if="record.type.raw_value === 'delivery'" t-att-src='_s + delivery_icon_path'/>
<img alt="Invoice" t-if="record.type.raw_value === 'invoice'" t-att-src='_s + invoice_icon_path'/>
<t t-if="record.type.raw_value !== 'invoice' &amp;&amp; record.type.raw_value !== 'delivery'">
<img alt="Logo" t-if="record.is_company.raw_value === true" t-att-src='_s + "/base/static/img/company_image.png"'/>
<img alt="Avatar" t-if="record.is_company.raw_value === false" t-att-src='_s + "/base/static/img/avatar_grey.png"'/>
</t>
</t>
<img alt="Contact image" t-att-src="kanban_image('res.partner', 'avatar_128', record.id.raw_value)"/>
</div>
<div class="oe_kanban_details">
<field name="name"/>
@@ -474,19 +465,16 @@
<t t-name="kanban-box">
<div class="oe_kanban_global_click o_kanban_record_has_image_fill o_res_partner_kanban">
<t t-if="!record.is_company.raw_value">
<t t-if="record.type.raw_value === 'delivery'" t-set="placeholder" t-value="'/base/static/img/truck.png'"/>
<t t-elif="record.type.raw_value === 'invoice'" t-set="placeholder" t-value="'/base/static/img/money.png'"/>
<t t-else="" t-set="placeholder" t-value="'/base/static/img/avatar_grey.png'"/>
<div class="o_kanban_image_fill_left d-none d-md-block" t-attf-style="background-image:url('#{kanban_image('res.partner', 'avatar_128', record.id.raw_value, placeholder)}')">
<t t-set="background_image" t-value="kanban_image('res.partner', 'avatar_128', record.id.raw_value)"/>
<div class="o_kanban_image_fill_left d-none d-md-block" t-attf-style="background-image:url('#{background_image}')">
<img class="o_kanban_image_inner_pic" t-if="record.parent_id.raw_value" t-att-alt="record.parent_id.value" t-att-src="kanban_image('res.partner', 'avatar_128', record.parent_id.raw_value)"/>
</div>
<div class="o_kanban_image d-md-none" t-attf-style="background-image:url('#{kanban_image('res.partner', 'avatar_128', record.id.raw_value, placeholder)}')">
<div class="o_kanban_image d-md-none" t-attf-style="background-image: url(#{background_image})">
<img class="o_kanban_image_inner_pic" t-if="record.parent_id.raw_value" t-att-alt="record.parent_id.value" t-att-src="kanban_image('res.partner', 'avatar_128', record.parent_id.raw_value)"/>
</div>
</t>
<t t-else="">
<t t-set="placeholder" t-value="'/base/static/img/company_image.png'"/>
<div class="o_kanban_image_fill_left o_kanban_image_full" t-attf-style="background-image: url(#{kanban_image('res.partner', 'avatar_128', record.id.raw_value, placeholder)})" role="img"/>
<div class="o_kanban_image_fill_left o_kanban_image_full" t-attf-style="background-image: url(#{kanban_image('res.partner', 'avatar_128', record.id.raw_value)})" role="img"/>
</t>
<div class="oe_kanban_details d-flex flex-column">
<strong class="o_kanban_record_title oe_partner_heading"><field name="display_name"/></strong>