[FIX][IMP] website_event_track: clean management of track
proposal. Instead of posting a chatter message with the post data + storing a blob on the track store directly the various data on the track object itself. Post a message on the event to warn a new track has been created. Updated the track website view. Instead of storing a blob, rebuild a correct and editable track view on the website.
This commit is contained in:
@@ -9,7 +9,7 @@ import re
|
||||
import openerp
|
||||
from openerp.addons.web import http
|
||||
from openerp.addons.web.http import request
|
||||
from openerp.tools import html_escape as escape
|
||||
from openerp.tools import html_escape
|
||||
|
||||
|
||||
class website_event(http.Controller):
|
||||
@@ -125,44 +125,23 @@ class website_event(http.Controller):
|
||||
def event_track_proposal_post(self, event, **post):
|
||||
cr, uid, context = request.cr, request.uid, request.context
|
||||
|
||||
tobj = request.registry['event.track']
|
||||
|
||||
tags = []
|
||||
for tag in event.allowed_track_tag_ids:
|
||||
if post.get('tag_'+str(tag.id)):
|
||||
tags.append(tag.id)
|
||||
|
||||
track_description = '''<section>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-center">
|
||||
<h2>%s</h2>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<p>%s</p>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<h3>About The Author</h3>
|
||||
<p>%s</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>''' % (escape(post['track_name']),
|
||||
escape(post['description']), escape(post['biography']))
|
||||
|
||||
track_id = tobj.create(cr, openerp.SUPERUSER_ID, {
|
||||
track_obj = request.registry['event.track']
|
||||
track_id = track_obj.create(cr, openerp.SUPERUSER_ID, {
|
||||
'name': post['track_name'],
|
||||
'partner_name': post['partner_name'],
|
||||
'partner_email': post['email_from'],
|
||||
'partner_phone': post['phone'],
|
||||
'partner_biography': html_escape(post['biography']),
|
||||
'event_id': event.id,
|
||||
'tag_ids': [(6, 0, tags)],
|
||||
'user_id': False,
|
||||
'description': track_description
|
||||
'description': html_escape(post['description']),
|
||||
}, context=context)
|
||||
|
||||
tobj.message_post(cr, openerp.SUPERUSER_ID, [track_id], body="""Proposed By: %s<br/>
|
||||
Mail: <a href="mailto:%s">%s</a><br/>
|
||||
Phone: %s""" % (escape(post['partner_name']), escape(post['email_from']),
|
||||
escape(post['email_from']), escape(post['phone'])), context=context)
|
||||
|
||||
track = tobj.browse(cr, uid, track_id, context=context)
|
||||
values = {'track': track, 'event':event}
|
||||
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)
|
||||
|
||||
@@ -14,5 +14,14 @@
|
||||
<field name="name">Gold</field>
|
||||
<field name="sequence">1</field>
|
||||
</record>
|
||||
|
||||
<!-- Event-related subtypes for new track / Chatter -->
|
||||
<record id="mt_event_track" model="mail.message.subtype">
|
||||
<field name="name">New Track</field>
|
||||
<field name="res_model">event.event</field>
|
||||
<field name="description">New Track Created</field>
|
||||
<field name="default" eval="False"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -32,8 +32,12 @@ class event_track(models.Model):
|
||||
_inherit = ['mail.thread', 'ir.needaction_mixin', 'website.seo.metadata', 'website.published.mixin']
|
||||
|
||||
name = fields.Char('Title', required=True, translate=True)
|
||||
|
||||
user_id = fields.Many2one('res.users', 'Responsible', track_visibility='onchange', default=lambda self: self.env.user)
|
||||
partner_id = fields.Many2one('res.partner', 'Proposed by')
|
||||
partner_name = fields.Char('Partner Name')
|
||||
partner_email = fields.Char('Partner Email')
|
||||
partner_phone = fields.Char('Partner Phone')
|
||||
partner_biography = fields.Html('Partner Biography')
|
||||
speaker_ids = fields.Many2many('res.partner', string='Speakers')
|
||||
tag_ids = fields.Many2many('event.track.tag', string='Tags')
|
||||
state = fields.Selection([
|
||||
@@ -63,6 +67,23 @@ class event_track(models.Model):
|
||||
def create(self, vals):
|
||||
res = super(event_track, self).create(vals)
|
||||
res.message_subscribe(res.speaker_ids.ids)
|
||||
res.event_id.message_post(body="""<h3>%(header)s</h3>
|
||||
<ul>
|
||||
<li>%(proposed_by)s</li>
|
||||
<li>%(mail)s</li>
|
||||
<li>%(phone)s</li>
|
||||
<li>%(title)s</li>
|
||||
<li>%(speakers)s</li>
|
||||
<li>%(introduction)s</li>
|
||||
</ul>""" % {
|
||||
'header': _('New Track Proposal'),
|
||||
'proposed_by': '<b>%s</b>: %s' % (_('Proposed By'), (res.partner_id.name or res.partner_name or res.partner_email)),
|
||||
'mail': '<b>%s</b>: %s' % (_('Mail'), '<a href="mailto:%s">%s</a>' % (res.partner_email, res.partner_email)),
|
||||
'phone': '<b>%s</b>: %s' % (_('Phone'), res.partner_phone),
|
||||
'title': '<b>%s</b>: %s' % (_('Title'), res.name),
|
||||
'speakers': '<b>%s</b>: %s' % (_('Speakers Biography'), res.partner_biography),
|
||||
'introduction': '<b>%s</b>: %s' % (_('Talk Introduction'), res.description),
|
||||
}, subtype='event.mt_event_track')
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -113,15 +113,19 @@
|
||||
<group>
|
||||
<group>
|
||||
<field name="user_id"/>
|
||||
<field name="speaker_ids" widget="many2many_tags"/>
|
||||
<field name="location_id"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="partner_name"/>
|
||||
<field name="partner_email"/>
|
||||
<field name="partner_phone"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="speaker_ids" widget="many2many_tags"/>
|
||||
<field name="date"/>
|
||||
<label for="duration"/>
|
||||
<div>
|
||||
<field name="duration" class="oe_inline" widget="float_time"/> hours
|
||||
</div>
|
||||
<field name="location_id"/>
|
||||
<field name="tag_ids" widget="many2many_tags"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
@@ -207,14 +207,28 @@
|
||||
|
||||
<section class="row mt32">
|
||||
<div class="col-md-8">
|
||||
<div t-field="track.description"/>
|
||||
<section>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-center">
|
||||
<h2 t-field="track.name"/>
|
||||
<small>Proposed by <span t-field="track.partner_name"/></small>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<p t-field="track.description"/>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<h3>About The Author</h3>
|
||||
<p t-field="track.partner_biography"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div t-foreach="track.speaker_ids" t-as="speaker" class="well mt32">
|
||||
<div class="row">
|
||||
<div class="col-sm-2">
|
||||
<span t-field="speaker.sudo().image_medium"
|
||||
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">
|
||||
|
||||
Reference in New Issue
Block a user