summaryrefslogtreecommitdiff
path: root/addons/website_event_track_exhibitor
diff options
context:
space:
mode:
authorThibault Delavallée <tde@odoo.com>2020-08-14 06:51:24 +0000
committerThibault Delavallée <tde@odoo.com>2020-08-14 14:53:38 +0000
commitc18b61442050424e7512a87b5f81c60b4ecc56a6 (patch)
tree5a94a292edfe2107617ef92831b15dfcca7a456d /addons/website_event_track_exhibitor
parent0b3fbfcb3838f8719aa77f9f0b4270a18484e2d9 (diff)
[FW][IMP] website_jitsi, website_event(_room/_track_sponsor): improve room management
PURPOSE Ease chat room management, especially when dealing with meeting rooms and exhibitors in backend: multi edit, avoid name collision, better support of copy with room names, ... SPECIFICATIONS Clean code managing chat rooms: handle most of its management in chat room mixin. It allows to lessen custom code in website_event_meet. Improve sanitize heuristic of chat rooms by avoiding name collision. If a room with a given name already exists, simply increment a counter as suffix. Improve copy management: when copying from the chat.room.mixin on a record with a room set, simply propagate an updated room name. As room_id itself is not kept but a new one is create, it will create a new room with a name avoiding collisions. Allow multi edit for event meeting rooms and exhibitors. It allows notably to publish by batch, and to set exhibitors as having chat rooms by batch. Give default values for max participants count when creating exhibitors so that required field has a default value. Otherwise people forgot it and have to come back on form view to set it. This is due to default value coming from mixin not being propagated to the form view. LINKS Coming from internal feedback while deploying online support Task ID-2314778 PR #55887 X-original-commit d35d6295ae1b50e9ecb4e57c5e7fb6cdd52c8b27
Diffstat (limited to 'addons/website_event_track_exhibitor')
-rw-r--r--addons/website_event_track_exhibitor/models/event_sponsor.py34
-rw-r--r--addons/website_event_track_exhibitor/views/event_sponsor_views.xml1
2 files changed, 31 insertions, 4 deletions
diff --git a/addons/website_event_track_exhibitor/models/event_sponsor.py b/addons/website_event_track_exhibitor/models/event_sponsor.py
index 1f91250377d..4f812034e3e 100644
--- a/addons/website_event_track_exhibitor/models/event_sponsor.py
+++ b/addons/website_event_track_exhibitor/models/event_sponsor.py
@@ -53,9 +53,12 @@ class EventSponsor(models.Model):
for sponsor in self:
if sponsor.is_exhibitor and not sponsor.room_name:
if sponsor.name:
- sponsor.room_name = self.env['chat.room']._jitsi_sanitize_name("odoo-exhibitor-%s" % sponsor.name)
+ room_name = "odoo-exhibitor-%s" % sponsor.name
else:
- sponsor.room_name = self.env['chat.room']._default_name()
+ room_name = self.env['chat.room']._default_name(objname='exhibitor')
+ sponsor.room_name = self._jitsi_sanitize_name(room_name)
+ if sponsor.is_exhibitor and not sponsor.room_max_capacity:
+ sponsor.room_max_capacity = '8'
@api.depends('partner_id')
def _compute_website_description(self):
@@ -97,6 +100,10 @@ class EventSponsor(models.Model):
else:
sponsor.country_flag_url = False
+ # ------------------------------------------------------------
+ # MIXINS
+ # ---------------------------------------------------------
+
@api.depends('name', 'event_id.name')
def _compute_website_url(self):
super(EventSponsor, self)._compute_website_url()
@@ -105,13 +112,32 @@ class EventSponsor(models.Model):
base_url = sponsor.event_id.get_base_url()
sponsor.website_url = '%s/event/%s/exhibitor/%s' % (base_url, slug(sponsor.event_id), slug(sponsor))
+ # ------------------------------------------------------------
+ # CRUD
+ # ------------------------------------------------------------
+
@api.model_create_multi
def create(self, values_list):
for values in values_list:
if values.get('is_exhibitor') and not values.get('room_name'):
- name = values['name'] if values.get('name') else self.env['res.partner'].browse(values['partner_id']).name or 'sponsor'
- values['room_name'] = self.env['chat.room']._jitsi_sanitize_name(name)
+ exhibitor_name = values['name'] if values.get('name') else self.env['res.partner'].browse(values['partner_id']).name
+ name = 'odoo-exhibitor-%s' % exhibitor_name or 'sponsor'
+ values['room_name'] = name
return super(EventSponsor, self).create(values_list)
+ def write(self, values):
+ toupdate = self.env['event.sponsor']
+ if values.get('is_exhibitor') and not values.get('chat_room_id') and not values.get('room_name'):
+ toupdate = self.filtered(lambda exhibitor: not exhibitor.chat_room_id)
+ # go into sequential update in order to create a custom room name for each sponsor
+ for exhibitor in toupdate:
+ values['room_name'] = 'odoo-exhibitor-%s' % exhibitor.name
+ super(EventSponsor, exhibitor).write(values)
+ return super(EventSponsor, self - toupdate).write(values)
+
+ # ------------------------------------------------------------
+ # ACTIONS
+ # ---------------------------------------------------------
+
def get_backend_menu_id(self):
return self.env.ref('event.event_main_menu').id
diff --git a/addons/website_event_track_exhibitor/views/event_sponsor_views.xml b/addons/website_event_track_exhibitor/views/event_sponsor_views.xml
index 4228c23527d..268342973b7 100644
--- a/addons/website_event_track_exhibitor/views/event_sponsor_views.xml
+++ b/addons/website_event_track_exhibitor/views/event_sponsor_views.xml
@@ -18,6 +18,7 @@
<field name="inherit_id" ref="website_event_track_online.event_sponsor_view_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='sponsor_type_id']" position="after">
+ <field name="is_published" optional="show"/>
<field name="is_exhibitor"/>
</xpath>
</field>