[IMP] website_event_track_online: improve sponsor partner synchronization

RATIONALE

Events are sometimes held online, gathering a community. In this merge we
improve Event application to better support full-online events with improved
tracks, wishlists, chat rooms, ...

SPECIFICATIONS: PARTNER SYNCHRONIZATION

Right now, information on the sponsor page in frontend is dependent on partner
through related fields. It is not possible to have contact data specific to
the sponsor without modifying the related partner.

In this commit we make sponsor a model based on partner while allowing to
update its contact information. Name, email, mobile and phone are now computed
stored based on partner and editable.

A new image_512 field is introduced, as base image field is too small for
a new list view of sponsors we plan to make.

LINKS

Community PR #53540
Enterprise PR odoo/enterprise#11384

Task ID-2252655 (Main Online Event task)
Task ID-2283796 (Event B2Basics / Registration Flow)
Task ID-2283738 (Sponsors -> Exhibitors upgrade)

Co-Authored-By: Aurélien Warnon <awa@odoo.com>
Co-Authored-By: David Beguin <dbe@odoo.com>
Co-Authored-By: Thibault Delavallée <tde@odoo.com>
This commit is contained in:
Thibault Delavallée
2020-08-04 14:28:29 +00:00
co-authored by Aurélien Warnon David Beguin
parent 2b10f951f4
commit e79a68d97d
5 changed files with 163 additions and 0 deletions
@@ -19,7 +19,9 @@
'security/ir.model.access.csv',
'views/assets.xml',
'views/event_event_views.xml',
'views/event_sponsor_views.xml',
'views/event_templates_registration.xml',
'views/event_track_templates_reminder.xml',
'views/event_track_templates.xml',
'views/event_track_templates_reminder.xml',
'views/event_track_views.xml',
@@ -29,6 +31,7 @@
'views/event_menus.xml',
],
'demo': [
'data/event_sponsor_demo.xml',
'data/event_track_demo.xml',
'data/event_track_tag_demo.xml',
'data/event_track_visitor_demo.xml',
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo><data>
<record id="website_event_track.event_7_sponsor_0" model="event.sponsor">
<field name="partner_id" ref="base.res_partner_1"/>
</record>
<record id="website_event_track.event_7_sponsor_1" model="event.sponsor">
<field name="partner_id" ref="base.res_partner_2"/>
</record>
<record id="website_event_track.event_7_sponsor_2" model="event.sponsor">
<field name="partner_id" ref="base.res_partner_3"/>
</record>
<record id="website_event_track.event_7_sponsor_3" model="event.sponsor">
<field name="partner_id" ref="base.res_partner_4"/>
</record>
<record id="website_event_track.event_7_sponsor_4" model="event.sponsor">
<field name="partner_id" ref="base.res_partner_10"/>
</record>
<record id="website_event_track.event_7_sponsor_5" model="event.sponsor">
<field name="partner_id" ref="base.res_partner_12"/>
</record>
<record id="website_event_track.event_7_sponsor_6" model="event.sponsor">
<field name="partner_id" ref="event.res_partner_event_1"/>
</record>
<record id="website_event_track.event_7_sponsor_7" model="event.sponsor">
<field name="partner_id" ref="event.res_partner_event_2"/>
</record>
<record id="website_event_track.event_7_sponsor_8" model="event.sponsor">
<field name="partner_id" ref="event.res_partner_event_3"/>
</record>
<record id="website_event_track.event_7_sponsor_9" model="event.sponsor">
<field name="partner_id" ref="event.res_partner_event_4"/>
</record>
</data></odoo>
@@ -2,6 +2,7 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import event_event
from . import event_sponsor
from . import event_track_visitor
from . import event_track
from . import event_track_tag
@@ -0,0 +1,62 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
from odoo.modules.module import get_resource_path
class Sponsor(models.Model):
_name = 'event.sponsor'
_inherit = ['event.sponsor']
# contact information
name = fields.Char('Sponsor Name', compute='_compute_name', readonly=False, store=True)
email = fields.Char('Sponsor Email', compute='_compute_email', readonly=False, store=True)
phone = fields.Char('Sponsor Phone', compute='_compute_phone', readonly=False, store=True)
mobile = fields.Char('Sponsor Mobile', compute='_compute_mobile', readonly=False, store=True)
# image
image_512 = fields.Image(
string="Logo", max_width=512, max_height=512,
compute='_compute_image_512', readonly=False, store=True)
image_256 = fields.Image("Image 256", related="image_512", max_width=256, max_height=256, store=False)
image_128 = fields.Image("Image 128", related="image_512", max_width=128, max_height=128, store=False)
website_image_url = fields.Char(
string='Image URL', max_width=256, max_height=256,
compute='_compute_website_image_url', compute_sudo=True, store=False)
@api.depends('partner_id')
def _compute_name(self):
self._synchronize_with_partner('name')
@api.depends('partner_id')
def _compute_email(self):
self._synchronize_with_partner('email')
@api.depends('partner_id')
def _compute_phone(self):
self._synchronize_with_partner('phone')
@api.depends('partner_id')
def _compute_mobile(self):
self._synchronize_with_partner('mobile')
@api.depends('partner_id')
def _compute_image_512(self):
self._synchronize_with_partner('image_512')
@api.depends('image_256', 'partner_id.image_256')
def _compute_website_image_url(self):
for sponsor in self:
if sponsor.image_256:
sponsor.website_image_url = self.env['website'].image_url(sponsor, 'image_256', size=256)
elif sponsor.partner_id.image_256:
sponsor.website_image_url = self.env['website'].image_url(sponsor.partner_id, 'image_256', size=256)
else:
sponsor.website_image_url = get_resource_path('website_event_track', 'static/src/img', 'event_sponsor_default_%d.png' % (sponsor.id % 1))
def _synchronize_with_partner(self, fname):
""" Synchronize with partner if not set. Setting a value does not write
on partner as this may be event-specific information. """
for sponsor in self:
if not sponsor[fname]:
sponsor[fname] = sponsor.partner_id[fname]
@@ -0,0 +1,62 @@
<?xml version="1.0"?>
<odoo>
<record id="event_sponsor_view_search" model="ir.ui.view">
<field name="name">event.sponsor.view.search.inherit.online</field>
<field name="model">event.sponsor</field>
<field name="inherit_id" ref="website_event_track.event_sponsor_view_search"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="after">
<field name="name"/>
<field name="email"/>
<field name="phone"/>
</xpath>
</field>
</record>
<record id="event_sponsor_view_tree" model="ir.ui.view">
<field name="name">event.sponsor.view.tree.inherit.online</field>
<field name="model">event.sponsor</field>
<field name="inherit_id" ref="website_event_track.event_sponsor_view_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="after">
<field name="name"/>
<field name="email"/>
<field name="phone"/>
<field name="mobile"/>
</xpath>
</field>
</record>
<record id="event_sponsor_view_form" model="ir.ui.view">
<field name="name">event.sponsor.view.form.inherit.online</field>
<field name="model">event.sponsor</field>
<field name="inherit_id" ref="website_event_track.event_sponsor_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='image_128']" position="replace">
<field name="image_512" widget="image" class="oe_avatar"/>
</xpath>
<xpath expr="//h1//field[@name='partner_id']" position="replace">
<div class="oe_title">
<label for="name" class="oe_edit_only" string="Sponsor Name"/>
<h1><field name="name" placeholder="e.g. : OpenWood Decoration"/></h1>
</div>
</xpath>
<xpath expr="//field[@name='event_id']" position="after">
<field name="partner_id" string="Customer"/>
</xpath>
<xpath expr="//field[@name='partner_email']" position="replace">
<field name="email" widget="email" string="Email"
placeholder="e.g. : open.wood.decoration@example.com"/>
</xpath>
<xpath expr="//field[@name='url']" position="attributes">
<attribute name="placeholder">e.g. : https://www.odoo.com</attribute>
</xpath>
<xpath expr="//field[@name='partner_phone']" position="replace">
<field name="phone" widget="phone" string="Phone" options="{'enable_sms': True}"/>
</xpath>
<xpath expr="//field[@name='partner_mobile']" position="replace">
<field name="mobile" widget="phone" string="Mobile" options="{'enable_sms': True}"/>
</xpath>
</field>
</record>
</odoo>