[MIG] website_event_track : migrate the module to new api

This commit is contained in:
Deep Bundela
2016-04-14 11:56:45 +02:00
committed by Jérome Maes
parent a2426e420d
commit 8a4ba5d21a
14 changed files with 133 additions and 125 deletions
+3 -3
View File
@@ -12,7 +12,7 @@ Organize Your Tracks
Add a talk proposal form on your events to allow visitors to submit talks and speakers. Organize the validation process of every talk, and schedule easily.
OpenERP's unique frontend and backend integration makes organization and publication so easy. Easily design beautiful speaker biographies and talks description.
Odoo's unique frontend and backend integration makes organization and publication so easy. Easily design beautiful speaker biographies and talks description.
Agenda and List of Talks
------------------------
@@ -28,11 +28,11 @@ Manage Sponsors
Add sponsors to your events and publish sponsors per level (e.g. bronze, silver, gold) on the bottom of every page of the event.
Sell sponsorship packages online through the OpenERP eCommerce for a full sales cycle integration.
Sell sponsorship packages online through the Odoo eCommerce for a full sales cycle integration.
Communicate Efficiently
-----------------------
### Activate a blog for some events
You can activate a blog for each event allowing you to communicate on specific events. Visitors can subscribe to news to get informed.
You can activate a blog for each event allowing you to communicate on specific events. Visitors can subscribe to news to get informed.
+5 -7
View File
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
'name': 'Advanced Events',
@@ -20,18 +21,15 @@ Adds support for:
""",
'depends': ['website_event'],
'data': [
'data/website_event_track_data.xml',
'views/event_views.xml',
'views/website_event_track_templates.xml',
'views/website_event_track_views.xml',
'data/website_event_track_tip_data.xml',
'security/ir.model.access.csv',
'security/website_event_track_security.xml',
'data/website_event_track_data.xml',
'views/website_event_track_templates.xml',
'views/website_event_track_views.xml',
'views/event_views.xml',
],
'qweb': ['static/src/xml/*.xml'],
'demo': [
'data/event_demo.xml',
'data/website_event_track_demo.xml'
],
'installable': True,
}
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import main
+25 -45
View File
@@ -4,20 +4,18 @@
import collections
import datetime
import pytz
import re
import openerp
from openerp.addons.web import http
from openerp.addons.web.http import request
from openerp.tools import html_escape
from odoo import fields, http
from odoo.http import request
from odoo.tools import html_escape as escape, html2plaintext
class website_event(http.Controller):
class WebsiteEventTrackController(http.Controller):
@http.route(['''/event/<model("event.event"):event>/track/<model("event.track", "[('event_id','=',event[0])]"):track>'''], type='http', auth="public", website=True)
def event_track_view(self, event, track, **post):
track_obj = request.registry.get('event.track')
track = track_obj.browse(request.cr, openerp.SUPERUSER_ID, track.id, context=request.context)
values = { 'track': track, 'event': track.event_id, 'main_object': track }
track = track.sudo()
values = {'track': track, 'event': track.event_id, 'main_object': track}
return request.website.render("website_event_track.track_view", values)
def _prepare_calendar(self, event, event_track_ids):
@@ -29,8 +27,8 @@ class website_event(http.Controller):
forcetr = True
for track in event_track_ids:
start_date = (datetime.datetime.strptime(track.date, '%Y-%m-%d %H:%M:%S')).replace(tzinfo=pytz.utc).astimezone(local_tz)
end_date = start_date + datetime.timedelta(hours = (track.duration or 0.5))
start_date = fields.Datetime.from_string(track.date).replace(tzinfo=pytz.utc).astimezone(local_tz)
end_date = start_date + datetime.timedelta(hours=(track.duration or 0.5))
location = track.location_id or False
locations.setdefault(location, [])
@@ -55,13 +53,12 @@ class website_event(http.Controller):
'dates': dates
}
# TODO: not implemented
@http.route(['''/event/<model("event.event", "[('show_tracks','=',1)]"):event>/agenda'''], type='http', auth="public", website=True)
def event_agenda(self, event, tag=None, **post):
days_tracks = collections.defaultdict(lambda: [])
for track in sorted(event.track_ids, key=lambda x: (x.date, bool(x.location_id))):
if not track.date: continue
for track in event.track_ids.sorted(lambda track: (track.date, bool(track.location_id))):
if not track.date:
continue
days_tracks[track.date[:10]].append(track)
days = {}
@@ -70,15 +67,10 @@ class website_event(http.Controller):
days_tracks_count[day] = len(tracks)
days[day] = self._prepare_calendar(event, tracks)
cr, uid, context = request.cr, request.uid, request.context
track_obj = request.registry['event.track']
tracks_ids = track_obj.search(cr, openerp.SUPERUSER_ID, [('event_id', '=', event.id)], context=context)
speakers = dict()
for t in track_obj.browse(cr, openerp.SUPERUSER_ID, tracks_ids, context=context):
acc = ""
for speaker in t.speaker_ids:
acc = speaker.name + u" – " + acc if acc else speaker.name
speakers[t.id] = acc
speakers = {}
for track in event.sudo().track_ids:
speakers_name = u" – ".join(track.speaker_ids.mapped('name'))
speakers[track.id] = speakers_name
return request.website.render("website_event_track.agenda", {
'event': event,
@@ -96,52 +88,40 @@ class website_event(http.Controller):
searches = {}
if tag:
searches.update(tag=tag.id)
track_obj = request.registry.get('event.track')
track_ids = track_obj.search(request.cr, request.uid,
[("id", "in", [track.id for track in event.track_ids]), ("tag_ids", "=", tag.id)], context=request.context)
tracks = track_obj.browse(request.cr, request.uid, track_ids, context=request.context)
tracks = event.track_ids.filtered(lambda track: tag in track.tag_ids)
else:
tracks = event.track_ids
def html2text(html):
return re.sub(r'<[^>]+>', "", html)
values = {
'event': event,
'main_object': event,
'tracks': tracks,
'tags': event.tracks_tag_ids,
'searches': searches,
'html2text': html2text
'html2plaintext': html2plaintext
}
return request.website.render("website_event_track.tracks", values)
@http.route(['''/event/<model("event.event", "[('show_track_proposal','=',1)]"):event>/track_proposal'''], type='http', auth="public", website=True)
def event_track_proposal(self, event, **post):
values = { 'event': event }
return request.website.render("website_event_track.event_track_proposal", values)
return request.website.render("website_event_track.event_track_proposal", {'event': event})
@http.route(['/event/<model("event.event"):event>/track_proposal/post'], type='http', auth="public", methods=['POST'], website=True)
def event_track_proposal_post(self, event, **post):
cr, uid, context = request.cr, request.uid, request.context
tags = []
for tag in event.allowed_track_tag_ids:
if post.get('tag_'+str(tag.id)):
if post.get('tag_' + str(tag.id)):
tags.append(tag.id)
track_obj = request.registry['event.track']
track_id = track_obj.create(cr, openerp.SUPERUSER_ID, {
track = request.env['event.track'].sudo().create({
'name': post['track_name'],
'partner_name': post['partner_name'],
'partner_email': post['email_from'],
'partner_phone': post['phone'],
'partner_biography': html_escape(post['biography']),
'partner_biography': escape(post['biography']),
'event_id': event.id,
'tag_ids': [(6, 0, tags)],
'user_id': False,
'description': html_escape(post['description']),
}, context=context)
track = track_obj.browse(cr, uid, track_id, context=context)
values = {'track': track, 'event': event}
return request.website.render("website_event_track.event_track_proposal_success", values)
'description': escape(post['description'])
})
return request.website.render("website_event_track.event_track_proposal_success", {'track': track, 'event': event})
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<odoo>
<record id="event_track_tag1" model="event.track.tag">
<field name="name">Technical</field>
@@ -34,14 +33,14 @@
<field name="event_id" ref="event.event_0"/>
<field name="sponsor_type_id" ref="event_sponsor_type1"/>
<field name="partner_id" ref="base.res_partner_2"/>
<field name="url">http://openerp.com</field>
<field name="url">http://odoo.com</field>
</record>
<record id="event_sponsor_1" model="event.sponsor">
<field name="event_id" ref="event.event_0"/>
<field name="sponsor_type_id" ref="event_sponsor_type2"/>
<field name="partner_id" ref="base.res_partner_12"/>
<field name="url">http://openerp.com</field>
<field name="url">http://odoo.com</field>
</record>
<record id="event_sponsor_2" model="event.sponsor">
@@ -54,12 +53,12 @@
<field name="event_id" ref="event.event_0"/>
<field name="sponsor_type_id" ref="event_sponsor_type3"/>
<field name="partner_id" ref="base.res_partner_4"/>
<field name="url">http://openerp.com</field>
<field name="url">http://odoo.com</field>
</record>
<!-- Tracks -->
<record id="base.res_partner_address_16" model="res.partner">
<field name="website">http://facebook.com/openerp</field>
<field name="website">http://facebook.com/odoo</field>
<field name="website_description" type="xml">
<p>
Ayaan has in the IT sector <b>since 20 years</b>. He
@@ -73,5 +72,4 @@
</p>
</field>
</record>
</data>
</openerp>
</odoo>
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<odoo>
<data noupdate="1">
<record id="event_sponsor_type1" model="event.sponsor.type">
@@ -24,4 +24,4 @@
</record>
</data>
</openerp>
</odoo>
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<odoo>
<data noupdate="1">
<record id="event_track_location5" model="event.track.location">
<field name="name">Le Foyer du lac</field>
@@ -29,7 +29,7 @@
<field eval="[(4, ref('base.res_partner_2')),(4, ref('base.res_partner_3'))]" name="speaker_ids"/>
<field name="color">3</field>
<field name="state">draft</field>
</record>
<record id="event_track2" model="event.track">
<field name="name">How to integrate hardware materials with the Odoo point of sale.</field>
@@ -322,4 +322,4 @@
<field name="state">confirmed</field>
</record>
</data>
</openerp>
</odoo>
@@ -1,2 +1,5 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import website_event_track
import event
+11 -9
View File
@@ -1,29 +1,31 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from openerp import models, fields, api
from openerp.tools.translate import _
from openerp.addons.website.models.website import slug
class Event(models.Model):
class event_event(models.Model):
_inherit = "event.event"
@api.multi
def _count_tracks(self):
track_data = self.env['event.track'].read_group([('state', '!=', 'cancel')],
['event_id', 'state'], ['event_id'])
track_data = self.env['event.track'].read_group([('state', '!=', 'cancel')], ['event_id', 'state'], ['event_id'])
result = dict((data['event_id'][0], data['event_id_count']) for data in track_data)
for event in self:
event.count_tracks = result.get(event.id, 0)
@api.one
@api.multi
def _count_sponsor(self):
self.count_sponsor = len(self.sponsor_ids)
for event in self:
event.count_sponsor = len(event.sponsor_ids)
@api.one
@api.multi
@api.depends('track_ids.tag_ids')
def _get_tracks_tag_ids(self):
self.tracks_tag_ids = self.track_ids.mapped('tag_ids').ids
for event in self:
event.tracks_tag_ids = event.track_ids.mapped('tag_ids').ids
track_ids = fields.One2many('event.track', 'event_id', 'Tracks')
sponsor_ids = fields.One2many('event.sponsor', 'event_id', 'Sponsors')
@@ -37,7 +39,7 @@ class event_event(models.Model):
@api.multi
def _get_new_menu_pages(self):
self.ensure_one()
result = super(event_event, self)._get_new_menu_pages()
result = super(Event, self)._get_new_menu_pages()
if self.show_tracks:
result.append((_('Talks'), '/event/%s/track' % slug(self)))
result.append((_('Agenda'), '/event/%s/agenda' % slug(self)))
@@ -53,4 +55,4 @@ class event_event(models.Model):
nbr_menu_items = len(event._get_new_menu_pages())
if nbr_menu_items != len(event.menu_id.child_id):
event.menu_id.unlink()
return super(event_event, self)._set_show_menu()
return super(Event, self)._set_show_menu()
@@ -1,11 +1,13 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from openerp import models, fields, api
from openerp.tools.translate import _
from openerp.addons.website.models.website import slug
from odoo import api, fields, models
from odoo.tools.translate import _
from odoo.addons.website.models.website import slug
class event_track_tag(models.Model):
class TrackTag(models.Model):
_name = "event.track.tag"
_description = 'Track Tag'
_order = 'name'
@@ -15,18 +17,20 @@ class event_track_tag(models.Model):
color = fields.Integer(string='Color Index')
_sql_constraints = [
('name_uniq', 'unique (name)', "Tag name already exists !"),
('name_uniq', 'unique (name)', "Tag name already exists !"),
]
class event_track_location(models.Model):
class TrackLocation(models.Model):
_name = "event.track.location"
_description = 'Track Location'
name = fields.Char('Room')
class event_track(models.Model):
class Track(models.Model):
_name = "event.track"
_description = 'Event Track'
_order = 'priority, date'
@@ -59,7 +63,7 @@ class event_track(models.Model):
@api.model
def create(self, vals):
res = super(event_track, self).create(vals)
res = super(Track, self).create(vals)
res.message_subscribe(res.speaker_ids.ids)
res.message_post_with_view(
'website_event_track.event_track_template_new',
@@ -71,7 +75,7 @@ class event_track(models.Model):
def write(self, vals):
if vals.get('state') == 'published':
vals.update({'website_published': True})
res = super(event_track, self).write(vals)
res = super(Track, self).write(vals)
if vals.get('speaker_ids'):
self.message_subscribe([speaker['id'] for speaker in self.resolve_2many_commands('speaker_ids', vals['speaker_ids'], ['id'])])
return res
@@ -79,15 +83,15 @@ class event_track(models.Model):
@api.multi
@api.depends('name')
def _website_url(self, field_name, arg):
res = super(event_track, self)._website_url(field_name, arg)
res = super(Track, self)._website_url(field_name, arg)
res.update({(track.id, '/event/%s/track/%s' % (slug(track.event_id), slug(track))) for track in self})
return res
def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True):
@api.model
def read_group(self, domain, fields, groupby, offset=0, limit=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'), ('cancel', 'Cancelled')]
read_group_all_states = [{
'__context': {'group_by': groupby[1:]},
@@ -96,7 +100,7 @@ class event_track(models.Model):
'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)
read_group_res = super(Track, self).read_group(domain, fields, groupby, offset=offset, limit=limit, orderby=orderby)
# Update standard results with default results
result = []
for state_value, state_name in states:
@@ -109,13 +113,14 @@ class event_track(models.Model):
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)
return super(Track, self).read_group(domain, fields, groupby, offset=offset, limit=limit, orderby=orderby)
def open_track_speakers_list(self, cr, uid, track_id, context=None):
track_id = self.browse(cr, uid, track_id, context=context)
@api.multi
def open_track_speakers_list(self):
self.ensure_one()
return {
'name': _('Speakers'),
'domain': [('id', 'in', [partner.id for partner in track_id.speaker_ids])],
'domain': [('id', 'in', [partner.id for partner in self.speaker_ids])],
'view_type': 'form',
'view_mode': 'kanban,form',
'res_model': 'res.partner',
@@ -124,7 +129,8 @@ class event_track(models.Model):
}
class event_sponsors_type(models.Model):
class SponsorType(models.Model):
_name = "event.sponsor.type"
_order = "sequence"
@@ -132,7 +138,8 @@ class event_sponsors_type(models.Model):
sequence = fields.Integer('Sequence')
class event_sponsors(models.Model):
class Sponsor(models.Model):
_name = "event.sponsor"
_order = "sequence"
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<odoo>
<data noupdate="1">
<record id="event_track_public" model="ir.rule">
@@ -14,4 +14,4 @@
</record>
</data>
</openerp>
</odoo>
@@ -29,7 +29,7 @@
submit talks and speakers. Organize the validation process
of every talk, and schedule easily.
</p><p>
OpenERP's unique frontend and backend integration makes
Odoo's unique frontend and backend integration makes
organization and publication so easy. Easily design beautiful
speaker biographies and talks description.
</p>
@@ -68,7 +68,7 @@
Add sponsors to your events and publish sponsors per level (e.g.
bronze, silver, gold) on the bottom of every page of the event.
</p><p>
Sell sponsorship packages online through the OpenERP eCommerce for
Sell sponsorship packages online through the Odoo eCommerce for
a full sales cycle integration.
</p>
</div>
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<odoo>
<template id="assets_frontend" inherit_id="website.assets_frontend" name="Website Event Track Assets">
<xpath expr="." position="inside">
@@ -145,7 +144,7 @@
</a>
</li>
</ul>
<p class="mt8"><t t-esc="html2text(track.description or '')[0:500]"/><t t-if="track.description">...</t></p>
<p class="mt8"><t t-esc="html2plaintext(track.description or '')[0:500]"/><t t-if="track.description">...</t></p>
</div>
</div>
</div>
@@ -282,7 +281,7 @@
<div t-if="event.twitter_hashtag" class="mt16">
<p><strong>Participate on Twitter</strong></p>
<p class="text-muted">
Find out what people see and say about this event,
Find out what people see and say about this event,
and join the conversation.
</p>
<p><strong>Use this tag:
@@ -460,5 +459,4 @@
</ul>
</template>
</data>
</openerp>
</odoo>
@@ -1,6 +1,5 @@
<?xml version="1.0"?>
<openerp>
<data>
<odoo>
<!-- Event Tracks -->
<record model="ir.ui.view" id="view_event_track_kanban">
@@ -172,11 +171,12 @@
<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>
<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">
@@ -186,14 +186,20 @@ Click to add a track.
<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': '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_main_menu" groups="base.group_no_one"/>
<menuitem
id="menu_event_track"
name="Event Tracks"
action="action_event_track"
parent="event.event_main_menu"
groups="base.group_no_one"/>
<!-- EVENTS/CONFIGURATION/EVENT locations -->
<record model="ir.ui.view" id="view_event_location_form">
@@ -209,6 +215,7 @@ Tracks define the agenda of your event. These can be a talk, a round table, a me
</form>
</field>
</record>
<record model="ir.ui.view" id="view_event_location_tree">
<field name="name">Event Location</field>
<field name="model">event.track.location</field>
@@ -218,12 +225,17 @@ Tracks define the agenda of your event. These can be a talk, a round table, a me
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="action_event_track_location">
<field name="name">Event Locations</field>
<field name="res_model">event.track.location</field>
</record>
<menuitem name="Locations" id="menu_event_track_location"
action="action_event_track_location" parent="event.menu_event_configuration"/>
<menuitem
id="menu_event_track_location"
name="Locations"
action="action_event_track_location"
parent="event.menu_event_configuration"/>
<!-- EVENTS/CONFIGURATION/EVENT Sponsor Types -->
<record model="ir.ui.view" id="view_event_sponsor_type_form">
@@ -240,6 +252,7 @@ Tracks define the agenda of your event. These can be a talk, a round table, a me
</form>
</field>
</record>
<record model="ir.ui.view" id="view_event_sponsor_type_tree">
<field name="name">Sponsor Types</field>
<field name="model">event.sponsor.type</field>
@@ -250,11 +263,15 @@ Tracks define the agenda of your event. These can be a talk, a round table, a me
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="action_event_sponsor_type">
<field name="name">Sponsor Types</field>
<field name="res_model">event.sponsor.type</field>
</record>
<menuitem id="menu_event_sponsor_type" action="action_event_sponsor_type"
<menuitem
id="menu_event_sponsor_type"
action="action_event_sponsor_type"
parent="event.menu_event_configuration"/>
<!-- EVENT.SPONSOR VIEWS -->
@@ -302,6 +319,7 @@ Tracks define the agenda of your event. These can be a talk, a round table, a me
</form>
</field>
</record>
<record model="ir.ui.view" id="view_event_track_tag_tree">
<field name="name">Tracks Tag</field>
<field name="model">event.track.tag</field>
@@ -311,12 +329,15 @@ Tracks define the agenda of your event. These can be a talk, a round table, a me
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="action_event_track_tag">
<field name="name">Track Tags</field>
<field name="res_model">event.track.tag</field>
</record>
<menuitem id="menu_event_track_tag" action="action_event_track_tag"
<menuitem
id="menu_event_track_tag"
action="action_event_track_tag"
parent="event.menu_event_configuration"/>
</data>
</openerp>
</odoo>