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 Merge website_event_track_exhibitor into website_event_exhibitor and remove dependency on website_event_track. That way all features related to sponsors are now located within website_event_exhibitor. LINKS Task ID-2326433 COM PR odoo/odoo#61781 ENT pr odoo/enterprise#14752 UPG PR odoo/upgrade#1931
62 lines
2.7 KiB
Python
62 lines
2.7 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 EventEvent(models.Model):
|
|
_inherit = "event.event"
|
|
|
|
# sponsors
|
|
sponsor_ids = fields.One2many('event.sponsor', 'event_id', 'Sponsors')
|
|
sponsor_count = fields.Integer('Sponsor Count', compute='_compute_sponsor_count')
|
|
# frontend menu management
|
|
exhibitor_menu = fields.Boolean(
|
|
string='Showcase Exhibitors', compute='_compute_exhibitor_menu',
|
|
readonly=False, store=True)
|
|
exhibitor_menu_ids = fields.One2many(
|
|
'website.event.menu', 'event_id', string='Exhibitors Menus',
|
|
domain=[('menu_type', '=', 'exhibitor')])
|
|
|
|
def _compute_sponsor_count(self):
|
|
data = self.env['event.sponsor'].read_group([], ['event_id'], ['event_id'])
|
|
result = dict((data['event_id'][0], data['event_id_count']) for data in data)
|
|
for event in self:
|
|
event.sponsor_count = result.get(event.id, 0)
|
|
|
|
@api.depends('event_type_id', 'website_menu', 'exhibitor_menu')
|
|
def _compute_exhibitor_menu(self):
|
|
for event in self:
|
|
if event.event_type_id and event.event_type_id != event._origin.event_type_id:
|
|
event.exhibitor_menu = event.event_type_id.exhibitor_menu
|
|
elif event.website_menu and (event.website_menu != event._origin.website_menu or not event.exhibitor_menu):
|
|
event.exhibitor_menu = True
|
|
elif not event.website_menu:
|
|
event.exhibitor_menu = False
|
|
|
|
# ------------------------------------------------------------
|
|
# WEBSITE MENU MANAGEMENT
|
|
# ------------------------------------------------------------
|
|
|
|
def toggle_exhibitor_menu(self, val):
|
|
self.exhibitor_menu = val
|
|
|
|
def _get_menu_update_fields(self):
|
|
return super(EventEvent, self)._get_menu_update_fields() + ['exhibitor_menu']
|
|
|
|
def _update_website_menus(self, menus_update_by_field=None):
|
|
super(EventEvent, 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('exhibitor_menu')):
|
|
event._update_website_menu_entry('exhibitor_menu', 'exhibitor_menu_ids', '_get_exhibitor_menu_entries')
|
|
|
|
def _get_menu_type_field_matching(self):
|
|
res = super(EventEvent, self)._get_menu_type_field_matching()
|
|
res['exhibitor'] = 'exhibitor_menu'
|
|
return res
|
|
|
|
def _get_exhibitor_menu_entries(self):
|
|
self.ensure_one()
|
|
return [(_('Exhibitors'), '/event/%s/exhibitors' % slug(self), False, 60, 'exhibitor')]
|