RATIONALE Events often have sponsors displayed on their front page. This should be a real standalone feature of Online Event application. However currently it cannot be used without tracks managements PURPOSE Purpose of this task is to allow to use and display sponsors on an Event front page without using tracks. Moreover online and chat capabilities should be part of a sponsor feature, located within website_event_exhibitor module. SPECIFICATIONS Move everything related to event.sponsor model from website_event_track to website_event_exhibitor. Functionally feature should be the same as before except that we should be able to configure and display sponsors directly with website_event_exhibitor application without using tracks. Website_event_exhibitor should also define the sponsor template used to display sponsors below an event. LINKS Task ID-2326433 COM PR odoo/odoo#61781 ENT pr odoo/enterprise#14752 UPG PR odoo/upgrade#1931
106 lines
5.5 KiB
Python
106 lines
5.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models, _
|
|
from odoo.addons.http_routing.models.ir_http import slug
|
|
|
|
|
|
class Event(models.Model):
|
|
_inherit = "event.event"
|
|
|
|
track_ids = fields.One2many('event.track', 'event_id', 'Tracks')
|
|
track_count = fields.Integer('Track Count', compute='_compute_track_count')
|
|
website_track = fields.Boolean(
|
|
'Tracks on Website', compute='_compute_website_track',
|
|
readonly=False, store=True)
|
|
website_track_proposal = fields.Boolean(
|
|
'Proposals on Website', compute='_compute_website_track_proposal',
|
|
readonly=False, store=True)
|
|
track_menu_ids = fields.One2many('website.event.menu', 'event_id', string='Event Tracks Menus', domain=[('menu_type', '=', 'track')])
|
|
track_proposal_menu_ids = fields.One2many('website.event.menu', 'event_id', string='Event Proposals Menus', domain=[('menu_type', '=', 'track_proposal')])
|
|
allowed_track_tag_ids = fields.Many2many('event.track.tag', relation='event_allowed_track_tags_rel', string='Available Track Tags')
|
|
tracks_tag_ids = fields.Many2many(
|
|
'event.track.tag', relation='event_track_tags_rel', string='Track Tags',
|
|
compute='_compute_tracks_tag_ids', store=True)
|
|
|
|
def _compute_track_count(self):
|
|
data = self.env['event.track'].read_group([('stage_id.is_cancel', '!=', True)], ['event_id'], ['event_id'])
|
|
result = dict((data['event_id'][0], data['event_id_count']) for data in data)
|
|
for event in self:
|
|
event.track_count = result.get(event.id, 0)
|
|
|
|
@api.depends('event_type_id', 'website_menu')
|
|
def _compute_website_track(self):
|
|
""" Propagate event_type configuration (only at change); otherwise propagate
|
|
website_menu updated value. Also force True is track_proposal changes. """
|
|
for event in self:
|
|
if event.event_type_id and event.event_type_id != event._origin.event_type_id:
|
|
event.website_track = event.event_type_id.website_track
|
|
elif event.website_menu and (event.website_menu != event._origin.website_menu or not event.website_track):
|
|
event.website_track = True
|
|
elif not event.website_menu:
|
|
event.website_track = False
|
|
|
|
@api.depends('event_type_id', 'website_track')
|
|
def _compute_website_track_proposal(self):
|
|
""" Propagate event_type configuration (only at change); otherwise propagate
|
|
website_track updated value (both together True or False at update). """
|
|
for event in self:
|
|
if event.event_type_id and event.event_type_id != event._origin.event_type_id:
|
|
event.website_track_proposal = event.event_type_id.website_track_proposal
|
|
elif event.website_track != event._origin.website_track or not event.website_track or not event.website_track_proposal:
|
|
event.website_track_proposal = event.website_track
|
|
|
|
@api.depends('track_ids.tag_ids', 'track_ids.tag_ids.color')
|
|
def _compute_tracks_tag_ids(self):
|
|
for event in self:
|
|
event.tracks_tag_ids = event.track_ids.mapped('tag_ids').filtered(lambda tag: tag.color != 0).ids
|
|
|
|
# ------------------------------------------------------------
|
|
# WEBSITE MENU MANAGEMENT
|
|
# ------------------------------------------------------------
|
|
|
|
def toggle_website_track(self, val):
|
|
self.website_track = val
|
|
|
|
def toggle_website_track_proposal(self, val):
|
|
self.website_track_proposal = val
|
|
|
|
def _get_menu_update_fields(self):
|
|
return super(Event, self)._get_menu_update_fields() + ['website_track', 'website_track_proposal']
|
|
|
|
def _update_website_menus(self, menus_update_by_field=None):
|
|
super(Event, self)._update_website_menus(menus_update_by_field=menus_update_by_field)
|
|
for event in self:
|
|
if event.menu_id and (not menus_update_by_field or event in menus_update_by_field.get('website_track')):
|
|
event._update_website_menu_entry('website_track', 'track_menu_ids', '_get_track_menu_entries')
|
|
if event.menu_id and (not menus_update_by_field or event in menus_update_by_field.get('website_track_proposal')):
|
|
event._update_website_menu_entry('website_track_proposal', 'track_proposal_menu_ids', '_get_track_proposal_menu_entries')
|
|
|
|
def _get_menu_type_field_matching(self):
|
|
res = super(Event, self)._get_menu_type_field_matching()
|
|
res['track_proposal'] = 'website_track_proposal'
|
|
return res
|
|
|
|
def _get_track_menu_entries(self):
|
|
""" Method returning menu entries to display on the website view of the
|
|
event, possibly depending on some options in inheriting modules.
|
|
|
|
Each menu entry is a tuple containing :
|
|
* name: menu item name
|
|
* url: if set, url to a route (do not use xml_id in that case);
|
|
* xml_id: template linked to the page (do not use url in that case);
|
|
* menu_type: key linked to the menu, used to categorize the created
|
|
website.event.menu;
|
|
"""
|
|
self.ensure_one()
|
|
return [
|
|
(_('Talks'), '/event/%s/track' % slug(self), False, 10, 'track'),
|
|
(_('Agenda'), '/event/%s/agenda' % slug(self), False, 70, 'track')
|
|
]
|
|
|
|
def _get_track_proposal_menu_entries(self):
|
|
""" See website_event_track._get_track_menu_entries() """
|
|
self.ensure_one()
|
|
return [(_('Talk Proposals'), '/event/%s/track_proposal' % slug(self), False, 15, 'track_proposal')]
|