[FIX] events

bzr revid: fp@tinyerp.com-20140130163321-f86eq7obsua6x6z9
This commit is contained in:
Fabien Pinckaers 2014-01-30 17:33:21 +01:00
parent 78fefd54f0
commit 3b48a82af5
9 changed files with 59 additions and 51 deletions

View File

@ -23,5 +23,3 @@ import event
import wizard import wizard
import report import report
import res_partner import res_partner
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -7,8 +7,6 @@
'version': '1.0', 'version': '1.0',
'description': """ 'description': """
Online Events Online Events
=============
""", """,
'author': 'OpenERP SA', 'author': 'OpenERP SA',
'depends': ['website', 'website_partner', 'website_mail', 'event'], 'depends': ['website', 'website_partner', 'website_mail', 'event'],

View File

@ -145,6 +145,8 @@ class website_event(http.Controller):
events_ids = event_obj.browse(request.cr, request.uid, obj_ids, events_ids = event_obj.browse(request.cr, request.uid, obj_ids,
context=request.context) context=request.context)
for d in dates:
print '***', d
values = { values = {
'current_date': current_date, 'current_date': current_date,
'current_country': current_country, 'current_country': current_country,
@ -184,7 +186,6 @@ class website_event(http.Controller):
'event': event, 'event': event,
'main_object': event, 'main_object': event,
'range': range, 'range': range,
'main_object': event,
} }
return request.website.render("website_event.event_description_full", values) return request.website.render("website_event.event_description_full", values)
@ -202,25 +203,15 @@ class website_event(http.Controller):
@http.route('/event/add_event/', type='http', auth="user", multilang=True, methods=['POST'], website=True) @http.route('/event/add_event/', type='http', auth="user", multilang=True, methods=['POST'], website=True)
def add_event(self, event_name="New Event", **kwargs): def add_event(self, event_name="New Event", **kwargs):
Event = request.registry.get('event.event') return self._add_event(event_name, request.context, **kwargs)
date_begin = datetime.today() + timedelta(days=(15)) # FIXME: better defaults
def _add_event(self, event_name="New Event", context={}, **kwargs):
Event = request.registry.get('event.event')
date_begin = datetime.today() + timedelta(days=(14))
vals = { vals = {
'name': event_name, 'name': event_name,
'date_begin': date_begin.strftime('%Y-%m-%d'), 'date_begin': date_begin.strftime('%Y-%m-%d'),
'date_end': (date_begin + timedelta(days=(1))).strftime('%Y-%m-%d'), 'date_end': (date_begin + timedelta(days=(1))).strftime('%Y-%m-%d'),
} }
try: event_id = Event.create(request.cr, request.uid, vals, context=context)
dummy, res_id = request.registry.get('ir.model.data').get_object_reference(request.cr, request.uid, 'event_sale', 'product_product_event')
vals['event_ticket_ids'] = [[0,0,{
'name': _('Subscription'),
'product_id': res_id,
'deadline' : vals.get('date_begin'),
'price': 0,
}]]
except ValueError:
pass
event_id = Event.create(request.cr, request.uid, vals, context=request.context)
return request.redirect("/event/%s/?enable_editor=1" % event_id) return request.redirect("/event/%s/?enable_editor=1" % event_id)

View File

@ -25,6 +25,8 @@ from openerp import SUPERUSER_ID
from openerp.tools.translate import _ from openerp.tools.translate import _
import re import re
from openerp.addons.website.models.website import slug
class event(osv.osv): class event(osv.osv):
_name = 'event.event' _name = 'event.event'
@ -41,7 +43,7 @@ class event(osv.osv):
for name,path in todo: for name,path in todo:
name2 = name+' '+event.name name2 = name+' '+event.name
newpath = web.new_page(cr, uid, name2, path, ispage=False, context=context) newpath = web.new_page(cr, uid, name2, path, ispage=False, context=context)
url = "/event/"+str(event.id)+"/page/" + newpath url = "/event/"+slug(event)+"/page/" + newpath
result.append((name, url)) result.append((name, url))
return result return result
@ -56,7 +58,7 @@ class event(osv.osv):
'name': event.name 'name': event.name
}, context=context) }, context=context)
tocreate = self._get_new_menu_pages(cr, uid, event, context) tocreate = self._get_new_menu_pages(cr, uid, event, context)
tocreate.append((_('Register'), '/event/%s/register' % str(event.id))) tocreate.append((_('Register'), '/event/%s/register' % slug(event)))
sequence = 0 sequence = 0
for name,url in tocreate: for name,url in tocreate:
menuobj.create(cr, uid, { menuobj.create(cr, uid, {
@ -77,14 +79,13 @@ class event(osv.osv):
def _website_url(self, cr, uid, ids, field_name, arg, context=None): def _website_url(self, cr, uid, ids, field_name, arg, context=None):
res = dict.fromkeys(ids, '') res = dict.fromkeys(ids, '')
base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
for event in self.browse(cr, uid, ids, context=context): for event in self.browse(cr, uid, ids, context=context):
res[event.id] = "%s/event/%s/" % (base_url, event.id) res[event.id] = "/event/" + slug(event)
return res return res
def _default_hashtag(self, cr, uid, context={}): def _default_hashtag(self, cr, uid, context={}):
name = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.name name = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.name
return re.sub("[- \\.\\(\\)]+", "", name).lower() return re.sub("[- \\.\\(\\)\\@\\#\\&]+", "", name).lower()
_columns = { _columns = {
'twitter_hashtag': fields.char('Twitter Hashtag'), 'twitter_hashtag': fields.char('Twitter Hashtag'),
@ -108,12 +109,14 @@ class event(osv.osv):
} }
def google_map_img(self, cr, uid, ids, zoom=8, width=298, height=298, context=None): def google_map_img(self, cr, uid, ids, zoom=8, width=298, height=298, context=None):
partner = self.browse(cr, uid, ids[0], context=context) event = self.browse(cr, uid, ids[0], context=context)
if partner.address_id: if event.address_id:
return self.browse(cr, SUPERUSER_ID, ids[0], context=context).address_id.google_map_img() return self.browse(cr, SUPERUSER_ID, ids[0], context=context).address_id.google_map_img()
return None
def google_map_link(self, cr, uid, ids, zoom=8, context=None): def google_map_link(self, cr, uid, ids, zoom=8, context=None):
partner = self.browse(cr, uid, ids[0], context=context) event = self.browse(cr, uid, ids[0], context=context)
if partner.address_id: if event.address_id:
return self.browse(cr, SUPERUSER_ID, ids[0], context=context).address_id.google_map_link() return self.browse(cr, SUPERUSER_ID, ids[0], context=context).address_id.google_map_link()
return None

View File

@ -127,7 +127,7 @@
</xpath> </xpath>
</template> </template>
<template id="event_left_column" inherit_option_id="website_event.index" name="Filters"> <template id="event_left_column" inherit_option_id="website_event.index" inherit_id="website_event.index" name="Filters">
<xpath expr="//div[@id='middle_column']" position="attributes"> <xpath expr="//div[@id='middle_column']" position="attributes">
<attribute name="class">col-md-6</attribute> <attribute name="class">col-md-6</attribute>
</xpath> </xpath>
@ -136,7 +136,7 @@
<ul class="nav nav-pills nav-stacked"> <ul class="nav nav-pills nav-stacked">
<t t-foreach="dates" t-as="date"> <t t-foreach="dates" t-as="date">
<li t-att-class="searches.get('date') == date[0] and 'active' or ''" t-if="date[3] or (date[0] in ('old','all'))"> <li t-att-class="searches.get('date') == date[0] and 'active' or ''" t-if="date[3] or (date[0] in ('old','all'))">
<a t-attf-href="/event/?{{ keep_query('country', 'type', date=date[0] }}"><t t-esc="date[1]"/> <a t-attf-href="/event/?{{ keep_query('country', 'type', date=date[0]) }}"><t t-esc="date[1]"/>
<span t-if="date[3]" class="badge pull-right"><t t-esc="date[3]"/></span> <span t-if="date[3]" class="badge pull-right"><t t-esc="date[3]"/></span>
</a> </a>
</li> </li>
@ -151,7 +151,7 @@
<ul class="nav nav-pills nav-stacked mt32"> <ul class="nav nav-pills nav-stacked mt32">
<t t-foreach="types"> <t t-foreach="types">
<li t-if="type" t-att-class="searches.get('type') == str(type and type[0]) and 'active' or ''"> <li t-if="type" t-att-class="searches.get('type') == str(type and type[0]) and 'active' or ''">
<a t-attf-href="/event/?{{ keep_query('country', 'date', type=type[0] }}"><t t-esc="type[1]"/> <a t-attf-href="/event/?{{ keep_query('country', 'date', type=type[0]) }}"><t t-esc="type[1]"/>
<span class="badge pull-right"><t t-esc="type_count"/></span> <span class="badge pull-right"><t t-esc="type_count"/></span>
</a> </a>
</li> </li>
@ -159,12 +159,13 @@
</ul> </ul>
</xpath> </xpath>
</template> </template>
<template id="event_location" inherit_option_id="website_event.event_left_column" name="Filter by Country"> <template id="event_location" inherit_option_id="website_event.event_left_column" name="Filter by Country">
<xpath expr="//div[@id='left_column']" position="inside"> <xpath expr="//div[@id='left_column']" position="inside">
<ul class="nav nav-pills nav-stacked mt32"> <ul class="nav nav-pills nav-stacked mt32">
<t t-foreach="countries"> <t t-foreach="countries">
<li t-if="country_id" t-att-class="searches.get('country') == str(country_id and country_id[0]) and 'active' or ''"> <li t-if="country_id" t-att-class="searches.get('country') == str(country_id and country_id[0]) and 'active' or ''">
<a t-attf-href="/event/?{{ keep_query('type', 'data', country=country_id[0] }}"><t t-esc="country_id[1]"/> <a t-attf-href="/event/?{{ keep_query('type', 'data', country=country_id[0]) }}"><t t-esc="country_id[1]"/>
<span class="badge pull-right"><t t-esc="country_id_count"/></span> <span class="badge pull-right"><t t-esc="country_id_count"/></span>
</a> </a>
</li> </li>

View File

@ -79,3 +79,19 @@ class website_event(website_event):
if not _values: if not _values:
return request.redirect("/event/%s/" % event_id) return request.redirect("/event/%s/" % event_id)
return request.redirect("/shop/checkout") return request.redirect("/shop/checkout")
def _add_event(self, event_name="New Event", context={}, **kwargs):
try:
dummy, res_id = request.registry.get('ir.model.data').get_object_reference(request.cr, request.uid, 'event_sale', 'product_product_event')
context['default_event_ticket_ids'] = [[0,0,{
'name': _('Subscription'),
'product_id': res_id,
'deadline' : vals.get('date_begin'),
'price': 0,
}]]
except ValueError:
pass
return super(website_event, self)._add_event(event_name, context, **kwargs)

View File

@ -6,9 +6,16 @@
'summary': 'Sponsors, Tracks, Agenda, Event News', 'summary': 'Sponsors, Tracks, Agenda, Event News',
'version': '1.0', 'version': '1.0',
'description': """ 'description': """
Online Events Online Advanced Events
============= ======================
Adds support for:
- sponsors
- dedicated menu per event
- news per event
- tracks
- agenda
- call for proposals
""", """,
'author': 'OpenERP SA', 'author': 'OpenERP SA',
'depends': ['website_event', 'website_blog'], 'depends': ['website_event', 'website_blog'],

View File

@ -31,10 +31,10 @@ controllers = controllers()
class website_event(http.Controller): class website_event(http.Controller):
@http.route(['/event/<model("event.event"):event>/track/<model("event.track"):track>'], type='http', auth="public", website=True, multilang=True) @http.route(['/event/<model("event.event"):event>/track/<model("event.track"):track>'], type='http', auth="public", website=True, multilang=True)
def event_track_view(self, event, track, **post): def event_track_view(self, event, track, **post):
# TODO: not implemented
values = { 'track': track, 'event': track.event_id, 'main_object': track } values = { 'track': track, 'event': track.event_id, 'main_object': track }
return request.website.render("website_event_track.track_view", values) return request.website.render("website_event_track.track_view", values)
# TODO: not implemented
@http.route(['/event/<model("event.event"):event>/agenda/'], type='http', auth="public", website=True, multilang=True) @http.route(['/event/<model("event.event"):event>/agenda/'], type='http', auth="public", website=True, multilang=True)
def event_agenda(self, event, tag=None, **post): def event_agenda(self, event, tag=None, **post):
values = { values = {
@ -49,7 +49,6 @@ class website_event(http.Controller):
], type='http', auth="public", website=True, multilang=True) ], type='http', auth="public", website=True, multilang=True)
def event_tracks(self, event, tag=None, **post): def event_tracks(self, event, tag=None, **post):
searches = {} searches = {}
if tag: if tag:
searches.update(tag=tag.id) searches.update(tag=tag.id)
track_obj = request.registry.get('event.track') track_obj = request.registry.get('event.track')
@ -72,8 +71,6 @@ class website_event(http.Controller):
} }
return request.website.render("website_event_track.tracks", values) return request.website.render("website_event_track.tracks", values)
@http.route(['/event/<model("event.event"):event>/track_proposal/'], type='http', auth="public", website=True, multilang=True) @http.route(['/event/<model("event.event"):event>/track_proposal/'], type='http', auth="public", website=True, multilang=True)
def event_track_proposal(self, event, **post): def event_track_proposal(self, event, **post):
values = { 'event': event } values = { 'event': event }

View File

@ -21,6 +21,7 @@
from openerp.osv import fields, osv from openerp.osv import fields, osv
from openerp.tools.translate import _ from openerp.tools.translate import _
from openerp.addons.website.models.website import slug
class event_track_tag(osv.osv): class event_track_tag(osv.osv):
_name = "event.track.tag" _name = "event.track.tag"
@ -63,22 +64,20 @@ class event_track(osv.osv):
def _website_url(self, cr, uid, ids, field_name, arg, context=None): def _website_url(self, cr, uid, ids, field_name, arg, context=None):
res = dict.fromkeys(ids, '') res = dict.fromkeys(ids, '')
base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
for track in self.browse(cr, uid, ids, context=context): for track in self.browse(cr, uid, ids, context=context):
res[track.id] = "%s/event/%d/track/%d" % (base_url, track.event_id.id, track.id) res[track.id] = "/event/%s/track/%s" % (slug(track.event_id), slug(track))
return res return res
_columns = { _columns = {
'name': fields.char('Track Title', required=True), 'name': fields.char('Track Title', required=True, translate=True),
'user_id': fields.many2one('res.users', 'Responsible'), 'user_id': fields.many2one('res.users', 'Responsible'),
'speaker_ids': fields.many2many('res.partner', string='Speakers'), 'speaker_ids': fields.many2many('res.partner', string='Speakers'),
'tag_ids': fields.many2many('event.track.tag', string='Tags'), 'tag_ids': fields.many2many('event.track.tag', string='Tags'),
'stage_id': fields.many2one('event.track.stage'), 'stage_id': fields.many2one('event.track.stage', 'Stage'),
'description': fields.html('Track Description'), 'description': fields.html('Track Description', translate=True),
'date': fields.datetime('Track Date'), 'date': fields.datetime('Track Date'),
'duration': fields.integer('Duration'), 'duration': fields.integer('Duration'),
'location_id': fields.many2one('event.track.location', 'Location'), 'location_id': fields.many2one('event.track.location', 'Location'),
'show_attachments': fields.boolean('Show Documents'),
'event_id': fields.many2one('event.event', 'Event', required=True), 'event_id': fields.many2one('event.event', 'Event', required=True),
'color': fields.integer('Color Index'), 'color': fields.integer('Color Index'),
'priority': fields.selection([('3','Low'),('2','Medium (*)'),('1','High (**)'),('0','Highest (***)')], 'Priority', required=True), 'priority': fields.selection([('3','Low'),('2','Medium (*)'),('1','High (**)'),('0','Highest (***)')], 'Priority', required=True),
@ -97,7 +96,6 @@ class event_track(osv.osv):
_defaults = { _defaults = {
'user_id': lambda self, cr, uid, ctx: uid, 'user_id': lambda self, cr, uid, ctx: uid,
'website_published': lambda self, cr, uid, ctx: False, 'website_published': lambda self, cr, uid, ctx: False,
'show_attachments': lambda self, cr, uid, ctx: True,
'duration': lambda *args: 60, 'duration': lambda *args: 60,
'stage_id': _default_stage_id, 'stage_id': _default_stage_id,
'priority': '2' 'priority': '2'
@ -116,7 +114,6 @@ class event_track(osv.osv):
# #
class event_event(osv.osv): class event_event(osv.osv):
_inherit = "event.event" _inherit = "event.event"
def _get_tracks_tag_ids(self, cr, uid, ids, field_names, arg=None, context=None): def _get_tracks_tag_ids(self, cr, uid, ids, field_names, arg=None, context=None):
res = dict.fromkeys(ids, []) res = dict.fromkeys(ids, [])
for event in self.browse(cr, uid, ids, context=context): for event in self.browse(cr, uid, ids, context=context):
@ -144,12 +141,12 @@ class event_event(osv.osv):
context = context or {} context = context or {}
result = super(event_event, self)._get_new_menu_pages(cr, uid, event, context=context) result = super(event_event, self)._get_new_menu_pages(cr, uid, event, context=context)
if event.show_tracks: if event.show_tracks:
result.append( (_('Talks'), '/event/%s/track/' % event.id)) result.append( (_('Talks'), '/event/%s/track/' % slug(event)))
result.append( (_('Agenda'), '/event/%s/agenda/' % event.id)) result.append( (_('Agenda'), '/event/%s/agenda/' % slug(event)))
if event.blog_id: if event.blog_id:
result.append( (_('News'), '/blogpost/'+str(event.blog_ig.id))) result.append( (_('News'), '/blogpost/'+slug(event.blog_ig)))
if event.show_track_proposal: if event.show_track_proposal:
result.append( (_('Talk Proposals'), '/event/%s/track_proposal/' % event.id)) result.append( (_('Talk Proposals'), '/event/%s/track_proposal/' % slug(event)))
return result return result
# #