<field name="groups_id" eval="[(4, ref('event.group_event_user'))]"/>
</record>
-
-<!-- Demo Data for Event Type -->
+ <!-- Demo Data for Event Type -->
<record id="event_type_0" model="event.type">
<field name="name">Seminar</field>
</record>
access_event_registration,event.registration,model_event_registration,event.group_event_user,1,1,1,1\r
access_report_event_registration,report.event.registration,model_report_event_registration,event.group_event_user,1,1,1,1\r
access_event_event_portal,event.event,model_event_event,,1,0,0,0\r
-access_event_registration_portal,event.registration,model_event_registration,,1,0,0,0\r
+access_event_registration_portal,event.registration,model_event_registration,,1,0,0,0
\ No newline at end of file
<field name="name">Gold</field>
<field name="sequence">1</field>
</record>
-
-
- <record id="event_track_stage1" model="event.track.stage">
- <field name="name">Proposals</field>
- </record>
- <record id="event_track_stage2" model="event.track.stage">
- <field name="name">Confirmed</field>
- </record>
- <record id="event_track_stage3" model="event.track.stage">
- <field name="name">Published</field>
- </record>
- <record id="event_track_stage4" model="event.track.stage">
- <field name="name">Announced</field>
- </record>
- <record id="event_track_stage5" model="event.track.stage">
- <field name="name">Completed</field>
- </record>
-
</data>
</openerp>
<openerp>
<data>
- <record id="event_tag1" model="event.track.tag">
- <field name="name">Webinar</field>
- </record>
- <record id="event_tag2" model="event.track.tag">
- <field name="name">Exhibition</field>
- </record>
- <record id="event_tag3" model="event.track.tag">
- <field name="name">Conference</field>
- </record>
-
<record id="event_track_tag1" model="event.track.tag">
<field name="name">Technical</field>
</record>
<field name="duration" eval="1"/>
<field eval="[(4, ref('base.res_partner_2')),(4, ref('base.res_partner_3'))]" name="speaker_ids"/>
<field name="color">3</field>
- <field name="stage_id" ref="event_track_stage1"/>
+ <field name="state">draft</field>
</record>
<record id="event_track2" model="event.track">
<field name="location_id" ref="website_event_track.event_track_location5"/>
<field name="duration" eval="0.25"/>
<field eval="[(4, ref('base.res_partner_3'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage2"/>
+ <field name="state">confirmed</field>
</record>
<record id="event_track3" model="event.track">
<field name="name">How to develop real time apps, the live chat module explained.</field>
<field name="location_id" ref="website_event_track.event_track_location5"/>
<field name="duration" eval="0.3"/>
<field eval="[(4, ref('base.res_partner_4'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage3"/>
+ <field name="state">confirmed</field>
</record>
<record id="event_track4" model="event.track">
<field name="name">How to develop automated tests in the Odoo web client.</field>
<field name="location_id" ref="website_event_track.event_track_location5"/>
<field name="duration" eval="0.5"/>
<field eval="[(4, ref('base.res_partner_2'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage4"/>
+ <field name="state">published</field>
</record>
<record id="event_track5" model="event.track">
<field name="name">The new way to promote your modules in the Apps platform and Odoo website.</field>
<field name="location_id" ref="website_event_track.event_track_location6"/>
<field name="duration" eval="0.5"/>
<field eval="[(4, ref('base.res_partner_4'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage5"/>
+ <field name="state">announced</field>
</record>
<record id="event_track6" model="event.track">
<field name="name">Detailed roadmap of accounting new modules and improvements for version 8.</field>
<field name="location_id" ref="website_event_track.event_track_location6"/>
<field name="duration" eval="0.5"/>
<field eval="[(4, ref('base.res_partner_5'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage2"/>
+ <field name="state">announced</field>
</record>
<record id="event_track7" model="event.track">
<field name="name">A technical explanation of Odoo as a CMS and a eCommerce platform for version 8.</field>
<field name="location_id" ref="website_event_track.event_track_location6"/>
<field name="duration" eval="1"/>
<field eval="[(4, ref('base.res_partner_6'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage4"/>
+ <field name="state">published</field>
</record>
<record id="event_track8" model="event.track">
<field name="name">Discover Odoo CRM: How to optimize your sales, from leads to sales orders.</field>
<field name="duration" eval="0.5"/>
<field name="color">2</field>
<field eval="[(4, ref('base.res_partner_7'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage3"/>
+ <field name="state">published</field>
</record>
<record id="event_track9" model="event.track">
<field name="name">How to use Odoo for your HR process: recruitment, leaves management, appraisals, expenses, etc.</field>
<field name="duration" eval="1"/>
<field name="color">2</field>
<field eval="[(4, ref('base.res_partner_8'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage2"/>
+ <field name="state">published</field>
</record>
<record id="event_track10" model="event.track">
<field name="name">Raising qualitive insights with the survey app</field>
<field name="location_id" ref="website_event_track.event_track_location7"/>
<field name="duration" eval="0.5"/>
<field name="color">5</field>
- <field name="stage_id" ref="event_track_stage1"/>
+ <field name="state">draft</field>
</record>
<record id="event_track11" model="event.track">
<field name="name">Discover Odoo Point-of-Sale: Your shop ready to use in 30 minutes.</field>
<field name="location_id" ref="website_event_track.event_track_location7"/>
<field name="duration" eval="0.5"/>
<field eval="[(4, ref('base.res_partner_4'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage2"/>
+ <field name="state">confirmed</field>
</record>
<record id="event_track12" model="event.track">
<field name="name">Manage your events with Odoo, the new training modules.</field>
<field name="location_id" ref="website_event_track.event_track_location7"/>
<field name="duration" eval="0.5"/>
<field eval="[(4, ref('base.res_partner_2')),(4, ref('base.res_partner_8'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage3"/>
+ <field name="state">announced</field>
</record>
<record id="event_track13" model="event.track">
<field name="name">Advanced reporting with Google Spreadsheets integration.</field>
<field name="location_id" ref="website_event_track.event_track_location8"/>
<field name="duration" eval="0.25"/>
<field eval="[(4, ref('base.res_partner_9'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage5"/>
+ <field name="state">published</field>
</record>
<record id="event_track14" model="event.track">
<field name="name">New Paypal modules (portal, handling, installments).</field>
<field name="location_id" ref="website_event_track.event_track_location8"/>
<field name="duration" eval="0.5"/>
<field eval="[(4, ref('base.res_partner_10'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage5"/>
+ <field name="state">published</field>
</record>
<record id="event_track15" model="event.track">
<field name="name">Odoo Mobile for Notes, Meetings and Messages.</field>
<field name="location_id" ref="website_event_track.event_track_location8"/>
<field name="duration" eval="0.5"/>
<field eval="[(4, ref('base.res_partner_11'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage4"/>
+ <field name="state">announced</field>
</record>
<record id="event_track16" model="event.track">
<field name="name">Odoo as your Enterprise Social Network.</field>
<field name="location_id" ref="website_event_track.event_track_location8"/>
<field name="duration" eval="0.5"/>
<field eval="[(4, ref('base.res_partner_12'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage3"/>
+ <field name="state">draft</field>
</record>
<record id="event_track17" model="event.track">
<field name="name">The Art of Making an Odoo Demo.</field>
<field name="location_id" ref="website_event_track.event_track_location9"/>
<field name="duration" eval="0.5"/>
<field eval="[(4, ref('base.res_partner_10'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage2"/>
+ <field name="state">draft</field>
</record>
<record id="event_track18" model="event.track">
<field name="name">How to build your marketing strategy for the purpose of generating leads with Odoo.</field>
<field name="duration" eval="0.5"/>
<field name="color">5</field>
<field eval="[(4, ref('base.res_partner_13'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage4"/>
+ <field name="state">confirmed</field>
</record>
<record id="event_track19" model="event.track">
<field name="name">Advanced lead management with Odoo: tips and tricks from the fields</field>
<field name="duration" eval="0.5"/>
<field name="color">5</field>
<field eval="[(4, ref('base.res_partner_14'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage1"/>
+ <field name="state">confirmed</field>
</record>
<record id="event_track20" model="event.track">
<field name="name">New Certification Program (valid from Oct. 2013).</field>
<field name="location_id" ref="website_event_track.event_track_location9"/>
<field name="duration" eval="0.5"/>
<field eval="[(4, ref('base.res_partner_15'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage2"/>
+ <field name="state">confirmed</field>
</record>
<record id="event_track21" model="event.track">
<field name="name">Recruiting high skilled talents with Odoo HR apps</field>
<field name="location_id" ref="website_event_track.event_track_location9"/>
<field name="duration" eval="0.5"/>
<field name="color">7</field>
- <field name="stage_id" ref="event_track_stage2"/>
+ <field name="state">confirmed</field>
</record>
<record id="event_track22" model="event.track">
<field name="name">Manage your KPIs (recomended to openERP partners).</field>
<field name="location_id" ref="website_event_track.event_track_location9"/>
<field name="duration" eval="0.5"/>
<field eval="[(4, ref('base.res_partner_15'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage1"/>
+ <field name="state">draft</field>
</record>
<record id="event_track23" model="event.track">
<field name="name">Key Success factors selling Odoo.</field>
<field name="location_id" ref="website_event_track.event_track_location9"/>
<field name="duration" eval="0.5"/>
<field eval="[(4, ref('base.res_partner_16'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage3"/>
+ <field name="state">announced</field>
</record>
<record id="event_track24" model="event.track">
<field name="name">Merge proposals review, code sprint (entire day).</field>
<field name="location_id" ref="website_event_track.event_track_location10"/>
<field name="duration" eval="1.5"/>
<field eval="[(4, ref('base.res_partner_17')),(4, ref('base.res_partner_18'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage2"/>
+ <field name="state">announced</field>
</record>
<record id="event_track25" model="event.track">
<field name="name">Merge proposals review, code sprint (entire afternoon)</field>
<field name="location_id" ref="website_event_track.event_track_location10"/>
<field name="duration" eval="2.5"/>
<field eval="[(4, ref('base.res_partner_17')),(4, ref('base.res_partner_18'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage4"/>
+ <field name="state">announced</field>
</record>
<record id="event_track27" model="event.track">
<field name="name">Odoo in 2014</field>
<field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 04:00:00')"></field>
<field name="duration" eval="1"/>
<field eval="[(4, ref('base.res_partner_1'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage2"/>
+ <field name="state">published</field>
<field name="color">3</field>
</record>
<record id="event_track28" model="event.track">
<field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 5:00:00')"></field>
<field name="duration" eval="0.5"/>
<field eval="[(4, ref('base.res_partner_2'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage4"/>
+ <field name="state">published</field>
</record>
<record id="event_track29" model="event.track">
<field name="name">The new marketing strategy.</field>
<field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 5:30:00')"></field>
<field name="duration" eval="0.25"/>
<field eval="[(4, ref('base.res_partner_19'))]" name="speaker_ids"/>
- <field name="stage_id" ref="event_track_stage1"/>
+ <field name="state">published</field>
<field name="color">6</field>
</record>
<record id="event_track30" model="event.track">
<field name="event_id" ref="event.event_0"/>
<field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 5:45:00')"></field>
<field name="duration" eval="0.25"/>
- <field name="stage_id" ref="event_track_stage2"/>
+ <field name="state">confirmed</field>
</record>
<record id="event_track31" model="event.track">
<field name="name">Lunch</field>
<field name="event_id" ref="event.event_0"/>
<field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 7:30:00')"></field>
<field name="duration" eval="1"/>
- <field name="stage_id" ref="event_track_stage2"/>
+ <field name="state">confirmed</field>
</record>
</data>
</openerp>
# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-
-from openerp import api
-from openerp.osv import fields, osv
+
+from openerp import models, fields, api
from openerp.tools.translate import _
from openerp.addons.website.models.website import slug
-import pytz
-class event_track_tag(osv.osv):
+class event_track_tag(models.Model):
_name = "event.track.tag"
+ _description = 'Track Tag'
_order = 'name'
- _columns = {
- 'name': fields.char('Event Track Tag', translate=True)
- }
-class event_tag(osv.osv):
- _name = "event.tag"
- _order = 'name'
- _columns = {
- 'name': fields.char('Event Tag', translate=True)
- }
-
-#
-# Tracks: conferences
-#
-
-class event_track_stage(osv.osv):
- _name = "event.track.stage"
- _order = 'sequence'
- _columns = {
- 'name': fields.char('Track Stage', translate=True),
- 'sequence': fields.integer('Sequence')
- }
- _defaults = {
- 'sequence': 0
- }
-
-
-class event_track_location(osv.osv):
+ name = fields.Char('Tag', translate=True)
+ track_ids = fields.Many2many('event.track', string='Tracks')
+
+
+class event_track_location(models.Model):
_name = "event.track.location"
- _columns = {
- 'name': fields.char('Track Rooms')
- }
+ _description = 'Track Location'
+
+ name = fields.Char('Room')
-class event_track(osv.osv):
+
+class event_track(models.Model):
_name = "event.track"
_description = 'Event Tracks'
_order = 'priority, date'
_inherit = ['mail.thread', 'ir.needaction_mixin', 'website.seo.metadata']
- def _website_url(self, cr, uid, ids, field_name, arg, context=None):
- res = dict.fromkeys(ids, '')
- for track in self.browse(cr, uid, ids, context=context):
- res[track.id] = "/event/%s/track/%s" % (slug(track.event_id), slug(track))
- return res
-
- _columns = {
- 'name': fields.char('Track Title', required=True, translate=True),
- 'user_id': fields.many2one('res.users', 'Responsible'),
- 'speaker_ids': fields.many2many('res.partner', string='Speakers'),
- 'tag_ids': fields.many2many('event.track.tag', string='Tags'),
- 'stage_id': fields.many2one('event.track.stage', 'Stage'),
- 'description': fields.html('Track Description', translate=True),
- 'date': fields.datetime('Track Date'),
- 'duration': fields.float('Duration', digits=(16,2)),
- 'location_id': fields.many2one('event.track.location', 'Location'),
- 'event_id': fields.many2one('event.event', 'Event', required=True),
- 'color': fields.integer('Color Index'),
- 'priority': fields.selection([('3','Low'),('2','Medium (*)'),('1','High (**)'),('0','Highest (***)')], 'Priority', required=True),
- 'website_published': fields.boolean('Available in the website', copy=False),
- 'website_url': fields.function(_website_url, string="Website url", type="char"),
- 'image': fields.related('speaker_ids', 'image', type='binary', readonly=True)
- }
- def set_priority(self, cr, uid, ids, priority, context={}):
- return self.write(cr, uid, ids, {'priority' : priority})
-
- def _default_stage_id(self, cr, uid, context={}):
- stage_obj = self.pool.get('event.track.stage')
- ids = stage_obj.search(cr, uid, [], context=context)
- return ids and ids[0] or False
-
- _defaults = {
- 'user_id': lambda self, cr, uid, ctx: uid,
- 'website_published': lambda self, cr, uid, ctx: False,
- 'duration': lambda *args: 1.5,
- 'stage_id': _default_stage_id,
- 'priority': '2'
- }
-
- def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
- stage_obj = self.pool.get('event.track.stage')
- result = stage_obj.name_search(cr, uid, '', context=context)
- return result, {}
-
- _group_by_full = {
- 'stage_id': _read_group_stage_ids,
- }
+ @api.one
+ def _compute_website_url(self):
+ self.website_url = "/event/%s/track/%s" % (slug(self.event_id), slug(self))
+
+ name = fields.Char('Title', required=True, translate=True)
+
+ user_id = fields.Many2one('res.users', 'Responsible', default=lambda self: self.env.user)
+ speaker_ids = fields.Many2many('res.partner', string='Speakers')
+ tag_ids = fields.Many2many('event.track.tag', string='Tags')
+ state = fields.Selection([
+ ('draft', 'Proposal'), ('confirmed', 'Confirmed'), ('announced', 'Announced'), ('published', 'Published')],
+ 'Status', default='draft', required=True, copy=False, track_visibility='onchange')
+ description = fields.Html('Track Description', translate=True)
+ date = fields.Datetime('Track Date')
+ duration = fields.Float('Duration', digits=(16, 2), default=1.5)
+ location_id = fields.Many2one('event.track.location', 'Location')
+ event_id = fields.Many2one('event.event', 'Event', required=True)
+ color = fields.Integer('Color Index')
+ priority = fields.Selection([
+ ('0', 'Low'), ('1', 'Medium'),
+ ('2', 'High'), ('3', 'Highest')],
+ 'Priority', required=True, default='1')
+ website_published = fields.Boolean('Available in the website', copy=False)
+ website_url = fields.Char("Website url", compute='_compute_website_url')
+ image = fields.Binary('Image', compute='_compute_image', readonly=True, store=True)
+
+ @api.one
+ @api.depends('speaker_ids.image')
+ def _compute_image(self):
+ if self.speaker_ids:
+ self.image = self.speaker_ids[0].image
+ else:
+ self.image = False
+
+ def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True):
+ """ Override read_group to always display all states. """
+ if groupby and groupby[0] == "state":
+ # Default result structure
+ # states = self._get_state_list(cr, uid, context=context)
+ states = [('draft', 'Proposal'), ('confirmed', 'Confirmed'), ('announced', 'Announced'), ('published', 'Published')]
+ read_group_all_states = [{
+ '__context': {'group_by': groupby[1:]},
+ '__domain': domain + [('state', '=', state_value)],
+ 'state': state_value,
+ 'state_count': 0,
+ } for state_value, state_name in states]
+ # Get standard results
+ read_group_res = super(event_track, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby)
+ # Update standard results with default results
+ result = []
+ for state_value, state_name in states:
+ res = filter(lambda x: x['state'] == state_value, read_group_res)
+ if not res:
+ res = filter(lambda x: x['state'] == state_value, read_group_all_states)
+ res[0]['state'] = [state_value, state_name]
+ result.append(res[0])
+ return result
+ else:
+ return super(event_track, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby)
def open_track_speakers_list(self, cr, uid, track_id, context=None):
track_id = self.browse(cr, uid, track_id, context=context)
return {
- 'name':_('Speakers'),
- 'domain': [('id', 'in',[partner.id for partner in track_id.speaker_ids])],
+ 'name': _('Speakers'),
+ 'domain': [('id', 'in', [partner.id for partner in track_id.speaker_ids])],
'view_type': 'form',
'view_mode': 'kanban,form',
'res_model': 'res.partner',
- 'view_id':False,
+ 'view_id': False,
'type': 'ir.actions.act_window',
}
-#
-# Events
-#
-class event_event(osv.osv):
+
+class event_event(models.Model):
_inherit = "event.event"
- def _count_tracks(self, cr, uid, ids, field_name, arg, context=None):
- return {
- event.id: len(event.track_ids)
- for event in self.browse(cr, uid, ids, context=context)
- }
+ @api.one
+ def _count_tracks(self):
+ self.count_tracks = len(self.track_ids)
- def _count_sponsor(self, cr, uid, ids, field_name, arg, context=None):
- return {
- event.id: len(event.sponsor_ids)
- for event in self.browse(cr, uid, ids, context=context)
- }
+ @api.one
+ def _count_sponsor(self):
+ self.count_sponsor = len(self.sponsor_ids)
- def _get_tracks_tag_ids(self, cr, uid, ids, field_names, arg=None, context=None):
- res = dict((res_id, []) for res_id in ids)
- for event in self.browse(cr, uid, ids, context=context):
- for track in event.track_ids:
- res[event.id] += [tag.id for tag in track.tag_ids]
- res[event.id] = list(set(res[event.id]))
- return res
-
- _columns = {
- 'tag_ids': fields.many2many('event.tag', string='Tags'),
- 'track_ids': fields.one2many('event.track', 'event_id', 'Tracks', copy=True),
- 'sponsor_ids': fields.one2many('event.sponsor', 'event_id', 'Sponsorships', copy=True),
- 'blog_id': fields.many2one('blog.blog', 'Event Blog'),
- 'show_track_proposal': fields.boolean('Talks Proposals'),
- 'show_tracks': fields.boolean('Multiple Tracks'),
- 'show_blog': fields.boolean('News'),
- 'count_tracks': fields.function(_count_tracks, type='integer', string='Tracks'),
- 'tracks_tag_ids': fields.function(_get_tracks_tag_ids, type='one2many', relation='event.track.tag', string='Tags of Tracks'),
- 'allowed_track_tag_ids': fields.many2many('event.track.tag', string='Accepted Tags', help="List of available tags for track proposals."),
- 'count_sponsor': fields.function(_count_sponsor, type='integer', string='Sponsors'),
- }
-
- _defaults = {
- 'show_track_proposal': False,
- 'show_tracks': False,
- 'show_blog': False,
- }
+ @api.one
+ @api.depends('track_ids.tag_ids')
+ def _get_tracks_tag_ids(self):
+ track_tags = set(tag for track in self.track_ids for tag in track.tag_ids)
+ self.tracks_tag_ids = track_tags and list(track_tags) or False
+
+ track_ids = fields.One2many('event.track', 'event_id', 'Tracks', copy=True)
+ sponsor_ids = fields.One2many('event.sponsor', 'event_id', 'Sponsorships', copy=True)
+ blog_id = fields.Many2one('blog.blog', 'Event Blog')
+ show_track_proposal = fields.Boolean('Talks Proposals')
+ show_tracks = fields.Boolean('Multiple Tracks')
+ show_blog = fields.Boolean('News')
+ count_tracks = fields.Integer('# Tracks', compute='_count_tracks')
+ 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='_get_tracks_tag_ids', store=True)
+ count_sponsor = fields.Integer('# Sponsors', compute='_count_sponsor')
@api.one
def _get_new_menu_pages(self):
result.append((_('Talk Proposals'), '/event/%s/track_proposal' % slug(self)))
return result
-#
-# Sponsors
-#
-class event_sponsors_type(osv.osv):
+class event_sponsors_type(models.Model):
_name = "event.sponsor.type"
_order = "sequence"
- _columns = {
- "name": fields.char('Sponsor Type', required=True, translate=True),
- "sequence": fields.integer('Sequence')
- }
-class event_sponsors(osv.osv):
+ name = fields.Char('Sponsor Type', required=True, translate=True)
+ sequence = fields.Integer('Sequence')
+
+
+class event_sponsors(models.Model):
_name = "event.sponsor"
_order = "sequence"
- _columns = {
- 'event_id': fields.many2one('event.event', 'Event', required=True),
- 'sponsor_type_id': fields.many2one('event.sponsor.type', 'Sponsoring Type', required=True),
- 'partner_id': fields.many2one('res.partner', 'Sponsor/Customer', required=True),
- 'url': fields.text('Sponsor Website'),
- 'sequence': fields.related('sponsor_type_id', 'sequence', string='Sequence', store=True),
- 'image_medium': fields.related('partner_id', 'image_medium', string='Logo', type='binary')
- }
+
+ event_id = fields.Many2one('event.event', 'Event', required=True)
+ sponsor_type_id = fields.Many2one('event.sponsor.type', 'Sponsoring Type', required=True)
+ partner_id = fields.Many2one('res.partner', 'Sponsor/Customer', required=True)
+ url = fields.Char('Sponsor Website')
+ sequence = fields.Integer('Sequence', store=True, related='sponsor_type_id.sequence')
+ image_medium = fields.Binary(string='Logo', type='binary', related='partner_id.image_medium', store=True)
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink\r
access_event_location_manager,event.track.location manager,model_event_track_location,event.group_event_manager,1,1,1,1\r
access_event_track_manager,event.track manager,model_event_track,event.group_event_manager,1,1,1,1\r
-access_event_tag_public,event.tag public,model_event_tag,,1,0,0,0\r
-access_event_tag_manager,event.tag manager,model_event_tag,event.group_event_manager,1,1,1,1\r
-access_event_track_stage_public,event.track.stage public,model_event_track_stage,,1,0,0,0\r
-access_event_track_stage_manager,event.track.stage manager,model_event_track_stage,event.group_event_manager,1,1,1,1\r
access_event_track_tag_public,event.track.tag public,model_event_track_tag,,1,0,0,0\r
access_event_track_tag_manager,event.track.tag manager,model_event_track_tag,event.group_event_manager,1,1,1,1\r
access_event_track_location_public,event.track.location public,model_event_track_location,,1,0,0,0\r
<openerp>
<data>
- <record id="act_event_list_tracks" model="ir.actions.act_window">
+ <!-- Event Tracks -->
+ <record model="ir.ui.view" id="view_event_track_kanban">
+ <field name="name">event.track.kanban</field>
+ <field name="model">event.track</field>
+ <field name="arch" type="xml">
+ <kanban default_group_by="state">
+ <templates>
+ <field name="color"/>
+ <field name="speaker_ids"/>
+ <t t-name="kanban-box">
+ <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
+ <div class="oe_dropdown_toggle oe_dropdown_kanban" groups="base.group_user">
+ <span class="oe_e">í</span>
+ <ul class="oe_dropdown_menu">
+ <li><a href="/event/1/track/2">View Track</a></li>
+ <t t-if="widget.view.is_action_enabled('edit')"><li><a type="edit">Edit Track</a></li></t>
+ <t t-if="widget.view.is_action_enabled('delete')"><li><a type="delete">Delete</a></li></t>
+ <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
+ </ul>
+ </div>
+ <div class="oe_kanban_content">
+ <h4><field name="name"/></h4>
+ <field name="tag_ids"/>
+ <div>
+ <t t-if="duration"><field name="duration" widget="float_time"/> hours</t>
+ </div>
+ <div class="oe_kanban_bottom_right">
+ <field name="priority" widget="priority"/>
+ </div>
+ <div class="oe_kanban_footer_left">
+ <t t-foreach="record.speaker_ids.raw_value.slice(0,11)" t-as="speaker">
+ <img t-att-src="kanban_image('res.partner', 'image_small', speaker)" t-att-data-member_id="speaker" width="30px" height="30px"/>
+ </t>
+ <t t-if="record.speaker_ids.raw_value.length > 11 ">
+ <a name="open_track_speakers_list" type="object"><t t-esc="record.speaker_ids.raw_value.length - 11"> More</t></a>
+ </t>
+ </div>
+ <div class="oe_clear"/>
+ </div>
+ </div>
+ </t>
+ </templates>
+ </kanban>
+ </field>
+ </record>
+
+ <record id="view_event_track_calendar" model="ir.ui.view">
+ <field name="name">event.track.calendar</field>
+ <field name="model">event.track</field>
+ <field eval="2" name="priority"/>
+ <field name="arch" type="xml">
+ <calendar color="location_id" date_start="date" date_delay="duration" string="Event Tracks">
+ <field name="name"/>
+ <field name="event_id"/>
+ </calendar>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="view_event_track_search">
+ <field name="name">event.track.search</field>
+ <field name="model">event.track</field>
+ <field name="arch" type="xml">
+ <search string="Event Tracks">
+ <field name="name"/>
+ <field name="event_id"/>
+ <field name="state"/>
+ <field name="speaker_ids"/>
+ <group expand="0" string="Group By">
+ <filter string="Responsible" context="{'group_by': 'user_id'}"/>
+ <filter string="Status" context="{'group_by':'state'}"/>
+ <filter string="Date" context="{'group_by':'date'}"/>
+ <filter string="Event" context="{'group_by':'event_id'}"/>
+ </group>
+ </search>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="view_event_track_form">
+ <field name="name">event.track.form</field>
+ <field name="model">event.track</field>
+ <field name="arch" type="xml">
+ <form string="Event Track">
+ <header>
+ <field name="state" widget="statusbar" clickable="True"/>
+ </header>
+ <sheet string="Track">
+ <div class="oe_right oe_button_box">
+ <field name="website_url" invisible="1"/>
+ <field name="website_published" class="pull-right" widget="website_button"/>
+ </div>
+ <div class="oe_title">
+ <label for="name" class="oe_edit_only"/>
+ <h1>
+ <field name="name"/>
+ </h1>
+ <label for="event_id" class="oe_edit_only"/>
+ <h3>
+ <field name="event_id"/>
+ </h3>
+ </div>
+ <group>
+ <group>
+ <field name="user_id"/>
+ <field name="speaker_ids" widget="many2many_tags"/>
+ <field name="location_id"/>
+ </group>
+ <group>
+ <field name="date"/>
+ <label for="duration"/>
+ <div>
+ <field name="duration" class="oe_inline" widget="float_time"/> hours
+ </div>
+ <field name="tag_ids" widget="many2many_tags"/>
+ <field name="color"/>
+ </group>
+ </group>
+ </sheet>
+ <div class="oe_chatter">
+ <field name="message_follower_ids" widget="mail_followers"/>
+ <field name="message_ids" widget="mail_thread"/>
+ </div>
+ </form>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="view_event_track_tree">
+ <field name="name">event.track.tree</field>
+ <field name="model">event.track</field>
+ <field name="arch" type="xml">
+ <tree string="Event Track">
+ <field name="name"/>
+ <field name="event_id"/>
+ </tree>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="view_event_track_graph">
+ <field name="name">event.track.graph</field>
+ <field name="model">event.track</field>
+ <field name="arch" type="xml">
+ <graph string="Tracks" type="bar" orientation="horizontal">
+ <field name="location_id"/>
+ <field name="duration" operator="+"/>
+ </graph>
+ </field>
+ </record>
+
+ <record model="ir.actions.act_window" id="action_event_track">
+ <field name="name">Event Tracks</field>
+ <field name="res_model">event.track</field>
+ <field name="view_mode">kanban,tree,form,calendar,graph</field>
+ <field name="help" type="html">
+<p class="oe_view_nocontent_create">
+Click to add a track.
+</p><p>
+ Tracks define the agenda of your event. These can bea talk, a round table, a meeting, etc.
+</p></field>
+ </record>
+
+ <record model="ir.actions.act_window" id="action_event_track_from_event">
<field name="res_model">event.track</field>
<field name="name">Event Tracks</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,tree,form,calendar,graph</field>
- <field name="context">{'search_default_event_id': active_id, 'default_event_id': active_id, 'group_by': 'stage_id'}</field>
+ <field name="context">{'search_default_event_id': active_id, 'default_event_id': active_id, 'group_by': 'state'}</field>
<field name="help" type="html">
- <p class="oe_view_nocontent_create">
- Click to add a track.
- </p><p>
- Tracks define the agenda of your event. These can be
- a talk, a round table, a meeting, etc.
- </p>
- </field>
+<p class="oe_view_nocontent_create">
+Click to add a track.
+</p><p>
+Tracks define the agenda of your event. These can be a talk, a round table, a meeting, etc.
+</p></field>
</record>
+ <menuitem name="Event Tracks" id="menu_event_track" action="action_event_track" parent="event.event_configuration" groups="base.group_no_one"/>
+
<!-- EVENTS/CONFIGURATION/EVENT locations -->
<record model="ir.ui.view" id="view_event_location_form">
<field name="name">Event Locations</field>
action="action_event_track_location" parent="event.event_configuration"
groups="base.group_no_one"/>
- <!-- EVENTS/CONFIGURATION/EVENT Stages -->
- <record model="ir.ui.view" id="view_event_track_stage_form">
- <field name="name">Event Stages</field>
- <field name="model">event.track.stage</field>
- <field name="arch" type="xml">
- <form string="Event Stage">
- <field name="name"/>
- </form>
- </field>
- </record>
- <record model="ir.ui.view" id="view_event_track_stage_tree">
- <field name="name">Event Stage</field>
- <field name="model">event.track.stage</field>
- <field name="arch" type="xml">
- <tree string="Event Stage">
- <field name="sequence" widget="handle"/>
- <field name="name"/>
- </tree>
- </field>
- </record>
- <record model="ir.actions.act_window" id="action_event_track_stage">
- <field name="name">Event Stages</field>
- <field name="res_model">event.track.stage</field>
- </record>
- <menuitem name="Event Stages" id="menu_event_track_stage"
- action="action_event_track_stage" parent="event.event_configuration"
- groups="base.group_no_one"/>
-
<!-- EVENTS/CONFIGURATION/EVENT Sponsor Types -->
<record model="ir.ui.view" id="view_event_sponsor_type_form">
<field name="name">Sponsor Types</field>
</record>
<menuitem id="menu_event_track_tag" action="action_event_track_tag" parent="event.event_configuration" groups="base.group_no_one"/>
-
- <!-- EVENTS/CONFIGURATION/EVENT Tags -->
- <record model="ir.ui.view" id="view_event_tag_form">
- <field name="name">Event Tags</field>
- <field name="model">event.tag</field>
- <field name="arch" type="xml">
- <form string="Event Tag">
- <field name="name"/>
- </form>
- </field>
- </record>
- <record model="ir.ui.view" id="view_event_tag_tree">
- <field name="name">Event Tag</field>
- <field name="model">event.tag</field>
- <field name="arch" type="xml">
- <tree string="Event Tag">
- <field name="name"/>
- </tree>
- </field>
- </record>
- <record model="ir.actions.act_window" id="action_event_tag">
- <field name="name">Event Tags</field>
- <field name="res_model">event.tag</field>
- </record>
- <menuitem name="Event Tags" id="menu_event_tag" action="action_event_tag" parent="event.event_configuration" groups="base.group_no_one"/>
-
<!-- Events Organisation/CONFIGURATION/EVENTS -->
-
<record model="ir.ui.view" id="view_event_form">
<field name="name">Event Tracks</field>
<field name="inherit_id" ref="event.view_event_form"/>
<field name="model">event.event</field>
<field name="arch" type="xml">
<xpath expr="//div[@class='oe_right oe_button_box']" position="inside">
- <button name="%(act_event_list_tracks)d"
+ <button name="%(action_event_track_from_event)d"
type="action"
class="oe_stat_button oe_inline"
icon="fa-inbox">
</button>
</xpath>
<xpath expr="//div[@class='oe_title']" position="inside">
- <label for="tag_ids" class="oe_edit_only"/>
- <field name="tag_ids" widget="many2many_tags"/>
<div name="event_checkboxes">
<field name="show_menu"/>
<label for="show_menu"/>
</field>
</record>
- <!-- Event Tracks -->
-
- <record model="ir.ui.view" id="view_event_track_kanban">
- <field name="name">event.track.kanban</field>
- <field name="model">event.track</field>
- <field name="arch" type="xml">
- <kanban>
- <templates>
- <field name="color"/>
- <field name="priority"/>
- <field name="speaker_ids"/>
- <t t-name="kanban-box">
- <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
- <div class="oe_dropdown_toggle oe_dropdown_kanban" groups="base.group_user">
- <span class="oe_e">í</span>
- <ul class="oe_dropdown_menu">
- <li><a href="/event/1/track/2">View Track</a></li>
- <t t-if="widget.view.is_action_enabled('edit')"><li><a type="edit">Edit Track</a></li></t>
- <t t-if="widget.view.is_action_enabled('delete')"><li><a type="delete">Delete</a></li></t>
- <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
- </ul>
- </div>
- <div class="oe_kanban_content">
- <h4><field name="name"/></h4>
- <field name="tag_ids"/>
- <div t-if="duration"><field name="duration" widget="float_time"/> hours</div>
- <span class="oe_right">
- <t t-set="priority" t-value="record.priority.raw_value || 0"/>
- <a type="object" name="set_priority" args="['2']" t-if="priority == 3" title="Normal Priority">
- <img src="/web/static/src/img/icons/star-off.png" width="16" height="16"/>
- </a>
- <a type="object" name="set_priority" args="['3']" t-if="priority lte 2" title="Normal Priority">
- <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 2 ? 'on' : 'off'}.png" width="16" height="16"/>
- </a>
- <a type="object" name="set_priority" args="['1']" title="High Priority">
- <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 1 ? 'on' : 'off'}.png" width="16" height="16"/>
- </a>
- <a type="object" name="set_priority" args="['0']" title="Highest Priority">
- <img t-attf-src="/web/static/src/img/icons/star-#{priority == 0 ? 'on' : 'off'}.png" width="16" height="16"/>
- </a>
- </span>
- <div class="row">
- <div class="col-md-10">
- <t t-foreach="record.speaker_ids.raw_value.slice(0,11)" t-as="speaker">
- <img t-att-src="kanban_image('res.partner', 'image_small', speaker)" t-att-data-speaker_id="speaker" width="30px" height="30px"/>
- </t>
- <t t-if="record.speaker_ids.raw_value.length > 11 ">
- <a name="open_track_speakers_list" type="object">
- <t t-esc="record.speaker_ids.raw_value.length - 11"> More</t>
- </a>
- </t>
- </div>
- </div>
- <div class="oe_clear"/>
- </div>
- </div>
- </t>
- </templates>
- </kanban>
- </field>
- </record>
- <record id="view_event_track_calendar" model="ir.ui.view">
- <field name="name">event.track.calendar</field>
- <field name="model">event.track</field>
- <field eval="2" name="priority"/>
- <field name="arch" type="xml">
- <calendar color="location_id" date_start="date" date_delay="duration" string="Event Tracks">
- <field name="name"/>
- <field name="event_id"/>
- </calendar>
- </field>
- </record>
- <record model="ir.ui.view" id="view_event_track_search">
- <field name="name">Event Tracks</field>
- <field name="model">event.track</field>
- <field name="arch" type="xml">
- <search string="Event Tracks">
- <field name="name"/>
- <field name="event_id"/>
- <field name="stage_id"/>
- <field name="speaker_ids"/>
- <group expand="0" string="Group By">
- <filter string="Responsible" context="{'group_by': 'user_id'}"/>
- <filter string="Stage" context="{'group_by':'stage_id'}"/>
- <filter string="Date" context="{'group_by':'date'}"/>
- <filter string="Event" context="{'group_by':'event_id'}"/>
- </group>
- </search>
- </field>
- </record>
-
- <record model="ir.ui.view" id="view_event_track_form">
- <field name="name">event.track.form</field>
- <field name="model">event.track</field>
- <field name="arch" type="xml">
- <form string="Event Track">
- <header>
- <field name="stage_id" widget="statusbar"/>
- </header>
- <sheet string="Track">
- <div class="oe_right oe_button_box">
- <field name="website_url" invisible="1"/>
- <field name="website_published" class="pull-right" widget="website_button"/>
- </div>
- <div class="oe_title">
- <label for="name" class="oe_edit_only"/>
- <h1>
- <field name="name"/>
- </h1>
- <label for="event_id" class="oe_edit_only"/>
- <h3>
- <field name="event_id"/>
- </h3>
- </div>
- <group>
- <group>
- <field name="user_id"/>
- <field name="speaker_ids" widget="many2many_tags"/>
- <field name="location_id"/>
- </group>
- <group>
- <field name="date"/>
- <label for="duration"/>
- <div>
- <field name="duration" class="oe_inline" widget="float_time"/> hours
- </div>
- <field name="tag_ids" widget="many2many_tags"/>
- <field name="color"/>
- </group>
- </group>
- </sheet>
- <div class="oe_chatter">
- <field name="message_follower_ids" widget="mail_followers"/>
- <field name="message_ids" widget="mail_thread"/>
- </div>
- </form>
- </field>
- </record>
-
- <record model="ir.ui.view" id="view_event_track_tree">
- <field name="name">Event Tracks</field>
- <field name="model">event.track</field>
- <field name="arch" type="xml">
- <tree string="Event Track">
- <field name="name"/>
- <field name="event_id"/>
- </tree>
- </field>
- </record>
-
- <record model="ir.ui.view" id="view_event_track_graph">
- <field name="name">Tracks Graph</field>
- <field name="model">event.track</field>
- <field name="arch" type="xml">
- <graph string="Tracks" type="bar" orientation="horizontal">
- <field name="location_id"/>
- <field name="duration" operator="+"/>
- </graph>
- </field>
- </record>
-
- <record model="ir.actions.act_window" id="action_event_track">
- <field name="name">Event Tracks</field>
- <field name="res_model">event.track</field>
- <field name="view_mode">kanban,tree,form,calendar</field>
- </record>
- <menuitem name="Event Tracks" id="menu_event_track" action="action_event_track" parent="event.event_configuration" groups="base.group_no_one"/>
-
</data>
</openerp>
<div class="col-sm-2">
<span t-field="track.image"
t-field-options='{"widget": "image", "class": "img-circle"}'/>
+ <!-- <span t-field="speaker.self" t-field-options='{"widget": "contact", "fields": ["name", "country_id"]}'
+ style="display: inline-block;"/> -->
</div><div class="col-sm-10">
<h4 t-field="speaker.name" class="mb4"/>
<div class="fa fa-home mb16" t-if="speaker.website">