This commit improve event.type (Event Categories) model and views in order to ease event configuration through more detailed categories. The purpose is to be able to define categories holding default data for website, tickets, attendee mailing, ... Choosing a category on a new event takes those default values to help users creating finely-tuned events. Main configuration on event.type is * auto confirmation, replacing the old system-wide auto confirmation parameter * seats limitation * location: online events, timezone * communication: reply-to email address, twitter hashtag, automated mailing of attendees * ticketing * website parameters: display on website, display tracks, allow track proposal * question to attendees
81 lines
3.3 KiB
Python
81 lines
3.3 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.website.models.website import slug
|
|
|
|
|
|
class EventType(models.Model):
|
|
_inherit = 'event.type'
|
|
|
|
website_track = fields.Boolean('Tracks on Website')
|
|
website_track_proposal = fields.Boolean('Tracks Proposals on Website')
|
|
|
|
|
|
class Event(models.Model):
|
|
_inherit = "event.event"
|
|
|
|
track_ids = fields.One2many('event.track', 'event_id', 'Tracks')
|
|
track_count = fields.Integer('Tracks', compute='_compute_track_count')
|
|
|
|
sponsor_ids = fields.One2many('event.sponsor', 'event_id', 'Sponsors')
|
|
sponsor_count = fields.Integer('Sponsors', compute='_compute_sponsor_count')
|
|
|
|
website_track = fields.Boolean('Tracks on Website', compute='_compute_website_track', inverse='_set_website_menu')
|
|
website_track_proposal = fields.Boolean('Proposals on Website', compute='_compute_website_track_proposal', inverse='_set_website_menu')
|
|
|
|
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)
|
|
|
|
@api.multi
|
|
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.multi
|
|
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.multi
|
|
def _compute_website_track(self):
|
|
for event in self:
|
|
existing_pages = event.menu_id.child_id.mapped('name')
|
|
event.website_track = _('Talks') in existing_pages
|
|
|
|
@api.multi
|
|
def _compute_website_track_proposal(self):
|
|
for event in self:
|
|
existing_pages = event.menu_id.child_id.mapped('name')
|
|
event.website_track_proposal = _('Talk Proposals') in existing_pages
|
|
|
|
@api.multi
|
|
@api.depends('track_ids.tag_ids')
|
|
def _compute_tracks_tag_ids(self):
|
|
for event in self:
|
|
event.tracks_tag_ids = event.track_ids.mapped('tag_ids').ids
|
|
|
|
@api.onchange('event_type_id')
|
|
def _onchange_type(self):
|
|
super(Event, self)._onchange_type()
|
|
if self.event_type_id:
|
|
self.website_track = self.event_type_id.website_track
|
|
self.website_track_proposal = self.event_type_id.website_track_proposal
|
|
|
|
def _get_menu_entries(self):
|
|
self.ensure_one()
|
|
res = super(Event, self)._get_menu_entries()
|
|
if self.website_track:
|
|
res += [
|
|
(_('Talks'), '/event/%s/track' % slug(self), False),
|
|
(_('Agenda'), '/event/%s/agenda' % slug(self), False)]
|
|
if self.website_track_proposal:
|
|
res += [(_('Talk Proposals'), '/event/%s/track_proposal' % slug(self), False)]
|
|
return res
|