[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:
co-authored by
Aurélien Warnon
David Beguin
parent
2b10f951f4
commit
e79a68d97d
@@ -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>
|
||||
Reference in New Issue
Block a user