diff options
| author | Paramjit Singh Sahota <psa@tinyerp.com> | 2013-12-24 11:01:25 +0530 |
|---|---|---|
| committer | Paramjit Singh Sahota <psa@tinyerp.com> | 2013-12-24 11:01:25 +0530 |
| commit | 18d8368ee11eef0a74bacdb8f293414331bfa8da (patch) | |
| tree | fc21df70cbd2901396c2bcf2fee0b52d750abd43 /addons/website_event | |
| parent | 5900672160c2bd5ae1d9257f20dbb5c51a193996 (diff) | |
| parent | 123185757f51ee7e146d7295864556999d2a6938 (diff) | |
[MERGE] Merged lp:~openerp-dev/openobject-addons/trunk-website-al
bzr revid: psa@tinyerp.com-20131224053125-3lrogsrgd3ccp0i6
Diffstat (limited to 'addons/website_event')
| -rw-r--r-- | addons/website_event/controllers/main.py | 70 | ||||
| -rw-r--r-- | addons/website_event/data/event_data.xml | 19 | ||||
| -rw-r--r-- | addons/website_event/data/event_demo.xml | 27 | ||||
| -rw-r--r-- | addons/website_event/models/__init__.py | 1 | ||||
| -rw-r--r-- | addons/website_event/models/event.py | 63 | ||||
| -rw-r--r-- | addons/website_event/models/website.py | 10 | ||||
| -rw-r--r-- | addons/website_event/static/src/js/website.tour.event.js | 163 | ||||
| -rw-r--r-- | addons/website_event/static/src/js/website_event.editor.js | 16 | ||||
| -rw-r--r-- | addons/website_event/static/src/xml/website_event.xml | 2 | ||||
| -rw-r--r-- | addons/website_event/views/website_event.xml | 670 | ||||
| -rw-r--r-- | addons/website_event/views/website_event_sale_backend.xml | 24 |
11 files changed, 685 insertions, 380 deletions
diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index e811c13c5b0..638c5ded6e5 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -23,10 +23,8 @@ from openerp import SUPERUSER_ID from openerp.addons.web import http from openerp.addons.web.http import request from openerp.tools.translate import _ -from openerp.addons import website_sale from openerp.addons.website.models import website from openerp.addons.website.controllers.main import Website as controllers -from openerp.addons.website_sale.controllers.main import Ecommerce as Ecommerce controllers = controllers() @@ -36,7 +34,7 @@ from openerp import tools import urllib class website_event(http.Controller): - @website.route(['/event/', '/event/page/<int:page>/'], type='http', auth="public", multilang=True) + @website.route(['/event/', '/event/page/<int:page>'], type='http', auth="public", multilang=True) def events(self, page=1, **searches): cr, uid, context = request.cr, request.uid, request.context event_obj = request.registry['event.event'] @@ -163,27 +161,47 @@ class website_event(http.Controller): return request.website.render("website_event.index", values) - @website.route(['/event/<int:event_id>'], type='http', auth="public", multilang=True) - def event(self, event_id=None, **post): - event_obj = request.registry['event.event'] - event = event_obj.browse(request.cr, request.uid, event_id, dict(request.context, show_address_only=1)) + @website.route(['/event/<model("event.event"):event>/page/<page:page>'], type='http', auth="public", multilang=True) + def event_page(self, event, page, **post): + website.preload_records(event, on_error="website_event.404") + values = { + 'event': event, + 'main_object': event + } + return request.website.render(page, values) + + @website.route(['/event/<model("event.event"):event>'], type='http', auth="public", multilang=True) + def event(self, event, **post): + website.preload_records(event, on_error="website_event.404") + if event.menu_id and event.menu_id.child_id: + target_url = event.menu_id.child_id[0].url + else: + target_url = '/event/%s/register' % str(event.id) + if post.get('enable_editor') == '1': + target_url += '?enable_editor=1' + return request.redirect(target_url); + + @website.route(['/event/<model("event.event"):event>/register'], type='http', auth="public", multilang=True) + def event_register(self, event, **post): + website.preload_records(event, on_error="website_event.404") values = { - 'event_id': event, + 'event': event, 'main_object': event, 'range': range, - 'float': float, + 'main_object': event, } return request.website.render("website_event.event_description_full", values) - @website.route(['/event/<int:event_id>/add_cart'], type='http', auth="public", multilang=True) - def add_cart(self, event_id=None, **post): + @website.route(['/event/add_cart'], type='http', auth="public", multilang=True) + def add_cart(self, event_id, **post): user_obj = request.registry['res.users'] order_line_obj = request.registry.get('sale.order.line') ticket_obj = request.registry.get('event.event.ticket') + order_obj = request.registry.get('sale.order') - order = request.context['website_sale_order'] + order = request.registry['website'].get_current_order(request.cr, request.uid, context=request.context) if not order: - order = website_sale.controllers.main.get_order() + order = request.registry['website']._get_order(request.cr, request.uid, context=request.context) partner_id = user_obj.browse(request.cr, SUPERUSER_ID, request.uid, context=request.context).partner_id.id @@ -221,9 +239,8 @@ class website_event(http.Controller): partner_id=partner_id, context=request.context)['value'] _values.update(values) - order_line_id = order_line_obj.create(request.cr, SUPERUSER_ID, - _values, context=request.context) - order.write({'order_line': [(4, order_line_id)]}, context=request.context) + order_line_id = order_line_obj.create(request.cr, SUPERUSER_ID, _values, context=request.context) + order_obj.write(request.cr, SUPERUSER_ID, [order.id], {'order_line': [(4, order_line_id)]}, context=request.context) if not _values: return request.redirect("/event/%s/" % event_id) @@ -242,13 +259,26 @@ class website_event(http.Controller): return controllers.publish(id, object) @website.route('/event/add_event/', type='http', auth="user", multilang=True, methods=['POST']) - def add_event(self, **kwargs): + def add_event(self, event_name="New Event", **kwargs): Event = request.registry.get('event.event') date_begin = datetime.today() + timedelta(days=(15)) # FIXME: better defaults - event_id = Event.create(request.cr, request.uid, { - 'name': 'New Event', + + vals = { + 'name': event_name, 'date_begin': date_begin.strftime('%Y-%m-%d'), 'date_end': (date_begin + timedelta(days=(1))).strftime('%Y-%m-%d'), - }, context=request.context) + } + try: + 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) diff --git a/addons/website_event/data/event_data.xml b/addons/website_event/data/event_data.xml index baf732b781b..f46d18001ed 100644 --- a/addons/website_event/data/event_data.xml +++ b/addons/website_event/data/event_data.xml @@ -6,32 +6,17 @@ <field name="name">Events</field> <field name="url">/event</field> <field name="parent_id" ref="website.main_menu"/> - <field name="sequence" type="int">40</field> + <field name="sequence" type="int">30</field> </record> <record id="action_open_website" model="ir.actions.act_url"> <field name="name">Website Home</field> <field name="target">self</field> - <field name="url">/event</field> + <field name="url">/event?tutorial.event=true</field> </record> <record id="base.open_menu" model="ir.actions.todo"> <field name="action_id" ref="action_open_website"/> <field name="state">open</field> </record> - - <record id="view_event_twitter_form" model="ir.ui.view"> - <field name="name">view_event_twitter_form</field> - <field name="model">event.event</field> - <field name="inherit_id" ref="event.view_event_form"/> - <field name="arch" type="xml"> - <data> - <xpath expr="//field[@name='speaker_confirmed']" position="after"> - <field name="twitter_hashtag"/> - </xpath> - </data> - </field> - </record> - - </data> </openerp> diff --git a/addons/website_event/data/event_demo.xml b/addons/website_event/data/event_demo.xml index 35654f0282e..1b1576eef0c 100644 --- a/addons/website_event/data/event_demo.xml +++ b/addons/website_event/data/event_demo.xml @@ -5,6 +5,7 @@ <record id="base.res_partner_6" model="res.partner"> <field name="website_published">True</field> </record> + <record id="event.event_0" model="event.event"> <field name="website_published">True</field> <field name="twitter_hashtag">openerp</field> @@ -17,8 +18,7 @@ <h4>to learn .JS development</h4> </div> - -<div class="carousel-image hidden-xs"><img alt="Banner OpenERP Image" src="/website/static/src/img/banner/banner_picture.png"></div> +<img class="carousel-image hidden-xs" alt="Banner OpenERP Image" src="/website/static/src/img/banner/banner_picture.png"> </div> </div> </div> @@ -115,7 +115,7 @@ <div class="col-md-12 mb16 mt16" data-snippet-id="colmd"> <p><strong>Objectives:</strong></p> -<p>Having attended this course, participants should be able to:</p> +<p><strong>Having attended this course, participants should be able to:</strong></p> <ul><li>Understand the development concepts and architecture;</li> <li>Install and administer your own server;</li> @@ -142,10 +142,10 @@ </div> -<div class="container dark"> +<div class="container oe_dark"> <div class="row"> <div class="col-md-12" data-snippet-id="colmd"> -<h1 class="text-center">A great content...</h1> +<h1 class="text-center">Read Great Contents</h1> <h3 class="text-muted text-center">What do people say about this course?</h3> </div> @@ -180,8 +180,7 @@ <h4>to learn .JS development</h4> </div> - -<div class="carousel-image hidden-xs"><img alt="Banner OpenERP Image" src="/website/static/src/img/banner/banner_picture.png"></div> +<img class="carousel-image hidden-xs" alt="Banner OpenERP Image" src="/website/static/src/img/banner/banner_picture.png"> </div> </div> </div> @@ -278,7 +277,7 @@ <div class="col-md-12 mb16 mt16" data-snippet-id="colmd"> <p><strong>Objectives:</strong></p> -<p>Having attended this course, participants should be able to:</p> +<p><strong>Having attended this course, participants should be able to:</strong></p> <ul><li>Understand the development concepts and architecture;</li> <li>Install and administer your own server;</li> @@ -305,10 +304,10 @@ </div> -<div class="container dark"> +<div class="container oe_dark"> <div class="row"> <div class="col-md-12" data-snippet-id="colmd"> -<h1 class="text-center">A great content...</h1> +<h1 class="text-center">Read Great Contents</h1> <h3 class="text-muted text-center">What do people say about this course?</h3> </div> @@ -356,7 +355,7 @@ <h4>to learn .JS development</h4> </div> -<div class="carousel-image hidden-xs"><img alt="Banner OpenERP Image" src="/website/static/src/img/banner/banner_picture.png"></div> +<img class="carousel-image hidden-xs" alt="Banner OpenERP Image" src="/website/static/src/img/banner/banner_picture.png"> </div> </div> </div> @@ -453,7 +452,7 @@ <div class="col-md-12 mb16 mt16" data-snippet-id="colmd"> <p><strong>Objectives:</strong></p> -<p>Having attended this course, participants should be able to:</p> +<p><strong>Having attended this course, participants should be able to:</strong></p> <ul><li>Understand the development concepts and architecture;</li> <li>Install and administer your own server;</li> @@ -480,10 +479,10 @@ </div> -<div class="container dark"> +<div class="container oe_dark"> <div class="row"> <div class="col-md-12" data-snippet-id="colmd"> -<h1 class="text-center">A great content...</h1> +<h1 class="text-center">Read Great Contents</h1> <h3 class="text-muted text-center">What do people say about this course?</h3> </div> diff --git a/addons/website_event/models/__init__.py b/addons/website_event/models/__init__.py index e7c003730cf..cb598ddaa69 100644 --- a/addons/website_event/models/__init__.py +++ b/addons/website_event/models/__init__.py @@ -1 +1,2 @@ import event +import website diff --git a/addons/website_event/models/event.py b/addons/website_event/models/event.py index b405c73b291..5d42243a053 100644 --- a/addons/website_event/models/event.py +++ b/addons/website_event/models/event.py @@ -19,9 +19,12 @@ # ############################################################################## -from openerp.osv import osv, fields +from openerp.osv import orm, osv, fields from openerp import SUPERUSER_ID +from openerp.tools.translate import _ +import re + # defined for access rules class product(osv.osv): @@ -35,6 +38,51 @@ class event(osv.osv): _name = 'event.event' _inherit = ['event.event','website.seo.metadata'] + def _get_new_menu_pages(self, cr, uid, event, context=None): + context = context or {} + todo = [ + (_('Introduction'), 'website_event.template_intro'), + (_('Location'), 'website_event.template_location') + ] + web = self.pool.get('website') + result = [] + for name,path in todo: + name2 = name+' '+event.name + newpath = web.new_page(cr, uid, name2, path, ispage=False, context=context) + url = "/event/"+str(event.id)+"/page/" + newpath + result.append((name, url)) + return result + + def _set_show_menu(self, cr, uid, ids, name, value, arg, context=None): + menuobj = self.pool.get('website.menu') + eventobj = self.pool.get('event.event') + for event in self.browse(cr, uid, [ids], context=context): + if event.menu_id and not value: + menuobj.unlink(cr, uid, [event.menu_id.id], context=context) + elif value and not event.menu_id: + root = menuobj.create(cr, uid, { + 'name': event.name + }, context=context) + tocreate = self._get_new_menu_pages(cr, uid, event, context) + tocreate.append((_('Register'), '/event/%s/register' % str(event.id))) + sequence = 0 + for name,url in tocreate: + menuobj.create(cr, uid, { + 'name': name, + 'url': url, + 'parent_id': root, + 'sequence': sequence + }, context=context) + sequence += 1 + eventobj.write(cr, uid, [event.id], {'menu_id': root}, context=context) + return True + + def _get_show_menu(self, cr, uid, ids, field_name, arg, context=None): + res = dict.fromkeys(ids, '') + for event in self.browse(cr, uid, ids, context=context): + res[event.id] = bool(event.menu_id) + return res + def _website_url(self, cr, uid, ids, field_name, arg, context=None): res = dict.fromkeys(ids, '') base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url') @@ -42,9 +90,13 @@ class event(osv.osv): res[event.id] = "%s/event/%s/" % (base_url, event.id) return res + def _default_hashtag(self, cr, uid, context={}): + name = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.name + return re.sub("[- \\.\\(\\)]+", "", name).lower() + _columns = { 'twitter_hashtag': fields.char('Twitter Hashtag'), - 'website_published': fields.boolean('Available in the website'), + 'website_published': fields.boolean('Visible in Website'), # TDE TODO FIXME: when website_mail/mail_thread.py inheritance work -> this field won't be necessary 'website_message_ids': fields.one2many( 'mail.message', 'res_id', @@ -54,10 +106,13 @@ class event(osv.osv): string='Website Messages', help="Website communication history", ), - 'website_url': fields.function(_website_url, string="Website url"), + 'website_url': fields.function(_website_url, string="Website url", type="char"), + 'show_menu': fields.function(_get_show_menu, fnct_inv=_set_show_menu, type='boolean', string='Dedicated Menu'), + 'menu_id': fields.many2one('website.menu', 'Event Menu'), } _defaults = { - 'website_published': False, + 'show_menu': False, + 'twitter_hashtag': _default_hashtag } def google_map_img(self, cr, uid, ids, zoom=8, width=298, height=298, context=None): diff --git a/addons/website_event/models/website.py b/addons/website_event/models/website.py new file mode 100644 index 00000000000..e41a7092404 --- /dev/null +++ b/addons/website_event/models/website.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +from openerp.osv import orm + + +class Website(orm.Model): + _inherit = 'website' + + def ecommerce_get_product_domain(self): + # remove product event from the website content grid and list view (not removed in detail view) + return ['&'] + super(Website, self).ecommerce_get_product_domain() + [('event_ok', '=', False)] diff --git a/addons/website_event/static/src/js/website.tour.event.js b/addons/website_event/static/src/js/website.tour.event.js new file mode 100644 index 00000000000..23b8a2c1bc5 --- /dev/null +++ b/addons/website_event/static/src/js/website.tour.event.js @@ -0,0 +1,163 @@ +(function () { + 'use strict'; + + var website = openerp.website; + + website.EditorBar.include({ + start: function () { + this.registerTour(new website.EventTour(this)); + return this._super(); + }, + }); + + website.EventTour = website.Tour.extend({ + id: 'event', + name: "Create an event", + init: function (editor) { + var self = this; + self.steps = [ + { + stepId: 'welcome-event', + title: "Create an Event", + content: "Let's go through the firsts step to publish a new event.", + template: self.popover({ next: "Start Tutorial", end: "Skip It" }), + backdrop: true, + }, + { + stepId: 'content-menu', + element: '#content-menu-button', + placement: 'left', + title: "Add Content", + content: "The <em>Content</em> menu allows to create new pages, events, menus, etc.", + trigger: 'click', + }, + { + stepId: 'new-post-entry', + element: 'a[data-action=new_event]', + placement: 'left', + title: "New Event", + content: "Click here to create a new event.", + trigger: { + modal: { + stopOnClose: true, + afterSubmit: 'event-page', + } + }, + }, + { + stepId: 'choose-name', + element: '.modal input', + placement: 'right', + title: "Choose an Event Name", + content: "Choose a name for your new event and click <em>'Continue'</em>. e.g: Technical Training", + }, + { + stepId: 'event-page', + title: "New Event Created", + content: "This is your new event page. We will edit the event presentation page.", + template: self.popover({ next: "OK" }), + }, + { + stepId: 'event-price', + element: '[data-oe-field=price]', + placement: 'top', + title: "Ticket price", + content: "Edit your ticket price.", + template: self.popover({ next: "OK" }), + }, + { + stepId: 'add-banner', + element: 'button[data-action=snippet]', + placement: 'bottom', + title: "Layout your event", + content: "Insert blocks like 'Banner' to layout the body of your event.", + trigger: 'click', + }, + { + stepId: 'drag-banner', + snippet: 'carousel', + placement: 'bottom', + title: "Drag & Drop a block", + content: "Drag the 'Banner' block and drop it in your page.", + trigger: 'drag', + }, + { + stepId: 'add-text-block', + element: 'button[data-action=snippet]', + placement: 'bottom', + title: "Layout your event", + content: "Insert another block to your event.", + trigger: 'click', + }, + { + stepId: 'drag-text-block', + snippet: 'text-block', + placement: 'bottom', + title: "Drag & Drop a block", + content: "Drag the 'Text Block' block below the banner.", + trigger: 'drag', + }, + { + stepId: 'add-three-columns', + element: 'button[data-action=snippet]', + placement: 'bottom', + title: "Layout your event", + content: "Insert a last block to your event.", + trigger: 'click', + }, + { + stepId: 'drag-three-columns', + snippet: 'three-columns', + placement: 'bottom', + title: "Drag & Drop a block", + content: "Drag the 'Three Columns' block at the bottom.", + trigger: 'drag', + }, + { + stepId: 'save-changes', + element: 'button[data-action=save]', + placement: 'right', + title: "Save your modifications", + content: "Once you click on save, your event is updated.", + trigger: 'click', + }, + { + stepId: 'publish-event', + element: 'button.btn-danger.js_publish_btn', + placement: 'top', + title: "Publish your event", + content: "Click to publish your event.", + trigger: 'click', + }, + { + stepId: 'customize-event', + element: '.js_publish_management button#dopprod-8', + placement: 'left', + title: "Customize your event", + content: "Click here to customize your event further.", + trigger: 'click', + }, + { + stepId: 'edit-event-backend', + element: '.js_publish_management ul>li>a', + placement: 'left', + title: "Customize your event", + content: "Click here to edit your event in the backend.", + trigger: 'click', + }, + { + stepId: 'end-tutorial', + title: "Thanks!", + content: "This tutorial is finished. Congratulations on creating your first event.", + template: self.popover({ end: "Close Tutorial" }), + backdrop: true, + }, + ]; + return this._super(); + }, + trigger: function () { + return (this.resume() && this.testUrl(/^\/event\/[0-9]+\/register/)) || this._super(); + }, + }); + +}()); diff --git a/addons/website_event/static/src/js/website_event.editor.js b/addons/website_event/static/src/js/website_event.editor.js index 0fb9ad24c3c..6b2336d9689 100644 --- a/addons/website_event/static/src/js/website_event.editor.js +++ b/addons/website_event/static/src/js/website_event.editor.js @@ -3,4 +3,20 @@ var website = openerp.website; website.add_template_file('/website_event/static/src/xml/website_event.xml'); + + website.EditorBar.include({ + events: _.extend({}, website.EditorBar.prototype.events, { + 'click a[data-action=new_event]': function (ev) { + ev.preventDefault(); + website.prompt({ + window_title: "New Event", + input: "Event Name", + }).then(function (event_name) { + website.form('/event/add_event', 'POST', { + event_name: event_name + }); + }); + } + }), + }); })(); diff --git a/addons/website_event/static/src/xml/website_event.xml b/addons/website_event/static/src/xml/website_event.xml index 2481f3d16c9..918d4ab9c5d 100644 --- a/addons/website_event/static/src/xml/website_event.xml +++ b/addons/website_event/static/src/xml/website_event.xml @@ -1,7 +1,7 @@ <templates id="template" xml:space="preserve"> <t t-extend="website.editorbar"> <t t-jquery="ul.oe_content_menu" t-operation="append"> - <li><a href="/event/add_event" class="js_link2post">New Event</a></li> + <li><a href="#" data-action="new_event">New Event</a></li> </t> </t> </templates> diff --git a/addons/website_event/views/website_event.xml b/addons/website_event/views/website_event.xml index 1b438c895cf..ed2dff1ea51 100644 --- a/addons/website_event/views/website_event.xml +++ b/addons/website_event/views/website_event.xml @@ -2,342 +2,396 @@ <openerp> <data> - <template id="website_event_script" inherit_id="website.layout" name="Website Event script"> - <xpath expr="//t[@id='editable_scripts_hook']" position="inside"> - <script type="text/javascript" src="/website_event/static/src/js/website_event.editor.js" t-ignore="true"></script> - </xpath> - </template> +<template id="editor_head" inherit_id="website.editor_head" name="Event Editor" groups="base.group_website_designer"> + <xpath expr="//script[last()]" position="after"> + <script type="text/javascript" src="/website_event/static/src/js/website_event.editor.js"></script> + <script type="text/javascript" src="/website_event/static/src/js/website.tour.event.js"></script> + </xpath> +</template> - <!-- Layout add nav and footer --> - <template id="header_footer_custom" inherit_id="website.layout" name="Footer Events Link"> - <xpath expr="//footer//ul[@name='products']" position="inside"> - <li><a href="/event">Events</a></li> - </xpath> - </template> +<!-- Layout add nav and footer --> +<template id="header_footer_custom" inherit_id="website.layout" name="Footer Events Link"> + <xpath expr="//footer//ul[@name='products']" position="inside"> + <li><a href="/event">Events</a></li> + </xpath> +</template> - <!-- Page --> - <template id="index" name="Events"> - <t t-call="website.layout"> - <div id="wrap"> - <div class="oe_structure"/> - <div class="container"> - <h1 class="text-center"> - Next Events - </h1> - <h3 class="text-center text-muted"> - <t t-esc="current_date or ''"/><span t-if="current_type"><t t-if="current_date">,</t> - <t t-esc="current_type.name"/></span><span t-if="current_country"><t t-if="current_type or current_date">,</t> - <t t-esc="current_country.name"/> - </span> - </h3> - <div class="row mt32 mb32"> - <div class="col-md-3 col-sm-4 css_noprint" id="left_column"> - <ul class="nav nav-pills nav-stacked"> - <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'))"> - <a t-href="/event/#{ search_path }&date=#{ date[0] }"><t t-esc="date[1]"/> - <span t-if="date[3]" class="badge pull-right"><t t-esc="date[3]"/></span> - </a> - </li> - </t> - </ul> - </div> - <div class="col-sm-7 col-md-6" id="middle_column"> - <t t-call="website.pager" > - <t t-set="classname">pull-left</t> - </t> - <div class="oe_structure"> - </div> - <t t-if="not event_ids"> - <p t-if="current_date or current_country or current_type"> - No event found in this category, check <a href="/event">all events</a>. - </p> - <p t-if="(current_date is None) and (current_country is None) and (current_type is None)"> - No events are planned for now on. - </p> - </t> - <ul class="media-list"> - <li t-foreach="event_ids" t-as="event" class="media"> - <div class="media-body"> - <t t-if="event.event_ticket_ids"> - <span t-if="not event.register_avail" class="label label-danger pull-right">Sold Out</span> - <span t-if="event.register_avail and event.register_avail <= ((event.register_max or 0) / 4)" class="label pull-right label-info"> - Only <t t-esc="event.register_avail"/> Remaining - </span> +<!-- Page --> +<template id="index" name="Events"> + <t t-call="website.layout"> + <div id="wrap"> + <div class="oe_structure"/> + <div class="container"> + <div class="row mt8"> + <div class="col-sm-5"> + <ol class="breadcrumb mb0"> + <li class="active"> + Our Events + </li> + </ol> + </div><div class="col-sm-7"> + <t t-call="website.pager" > + <t t-set="classname">pull-right</t> + </t> + </div> + </div> + <h3 class="text-center text-muted"> + <t t-esc="current_date or ''"/><span t-if="current_type"><t t-if="current_date">,</t> + <t t-esc="current_type.name"/></span><span t-if="current_country"><t t-if="current_type or current_date">,</t> + <t t-esc="current_country.name"/> + </span> + </h3> + <div class="row mt32 mb32"> + <div class="col-md-9" id="middle_column"> + <t t-if="not event_ids"> + <p t-if="current_date or current_country or current_type"> + No event found in this category, check <a href="/event">all events</a>. + </p> + <p t-if="(current_date is None) and (current_country is None) and (current_type is None)"> + No events are planned for now on. + </p> + </t> + <ul class="media-list"> + <li t-foreach="event_ids" t-as="event" class="media"> + <div class="media-body"> + <t t-if="event.event_ticket_ids"> + <span t-if="not event.register_avail" class="label label-danger pull-right">Sold Out</span> + <span t-if="event.register_avail and event.register_avail <= ((event.register_max or 0) / 4)" class="label pull-right label-info"> + Only <t t-esc="event.register_avail"/> Remaining + </span> + </t> + <h4 class="media-heading"> + <a t-href="/event/#{ slug(event) }/#{(not event.menu_id) and 'register/' or ''}"><span t-field="event.name"> </span></a> + <small t-if="not event.website_published" class="label label-danger">not published</small> + </h4> + <div> + <t t-if="event.organizer_id"> + Organized by: <span t-field="event.organizer_id"> </span> </t> - <h4 class="media-heading"> - <a t-href="/event/#{ event.id }/"><span t-field="event.name"> </span></a> - <small t-if="not event.website_published" class="label label-danger">not published</small> - </h4> - <div> - <t t-if="event.organizer_id"> - Organized by: <span t-field="event.organizer_id"> </span> - </t> - </div> - <div> - <i class="icon-time"></i> <span t-field="event.date_begin"> </span> <i>to</i> <span t-field="event.date_end"> </span> - </div> - <div t-if="event.country_id"> - <i class="icon-map-marker"></i> <span t-field="event.city"/>, <span t-field="event.country_id"/> - </div> - <div class="text-muted"> - <i class="icon-tag"></i> <span t-field="event.type"/> - </div> </div> - </li> - </ul> - </div> - <div class="col-sm-2 col-md-3 oe_structure" id="right_column"> - - - </div> - <div class="col-md-8 col-lg-offset-4 text-center"> - <t t-call="website.pager" /> - </div> + <div> + <i class="fa fa-clock-o"></i> <span t-field="event.date_begin"> </span> <i>to</i> <span t-field="event.date_end"> </span> + </div> + <div t-if="event.country_id"> + <i class="fa fa-map-marker"></i> <span t-field="event.city"/>, <span t-field="event.country_id"/> + </div> + <div class="text-muted"> + <i class="fa fa-tag"></i> <span t-field="event.type"/> + </div> + </div> + </li> + </ul> + </div> + <div class="col-md-3 oe_structure" id="right_column"> </div> </div> - <div class="oe_structure"/> - </div> - </t> - </template> + </div> + <div class="oe_structure"/> + </div> + </t> +</template> - <template id="event_right_photos" inherit_id="website_event.index" inherit_option_id="website_event.index" name="Photos"> - <xpath expr="//div[@id='right_column']" position="inside"> - <div class="row"> - <div class="col-md-12 mb16"> - <div class="oe_demo"> - <img src="/website_event/static/src/img/openerp_enterprise_of_the_year.png" class="img-rounded"/> - <div class="text-center"><a href="/event">Photos of Past Events</a></div> - </div> +<template id="event_right_photos" inherit_id="website_event.index" inherit_option_id="website_event.index" name="Photos"> + <xpath expr="//div[@id='right_column']" position="inside"> + <div class="row"> + <div class="col-md-12 mb16"> + <div class="oe_demo"> + <img src="/website_event/static/src/img/openerp_enterprise_of_the_year.png" class="img-rounded"/> + <div class="text-center"><a href="/event">Photos of Past Events</a></div> </div> - <div class="col-md-12 mb16"> - <div class="oe_demo"> - <img src="/website_event/static/src/img/training.jpg" class="img-rounded"/> - <div class="text-center"><a href="/event">Our Trainings</a></div> - </div> + </div> + <div class="col-md-12 mb16"> + <div class="oe_demo"> + <img src="/website_event/static/src/img/training.jpg" class="img-rounded"/> + <div class="text-center"><a href="/event">Our Trainings</a></div> </div> </div> - </xpath> - </template> + </div> + </xpath> +</template> - <template id="event_right_quotes" inherit_id="website_event.index" inherit_option_id="website_event.index" name="Quotes"> - <xpath expr="//div[@id='right_column']" position="inside"> - <div class="row"> - <div class="col-md-12 mb16"> - <blockquote class="oe_snippet_body"> - <p> - Write here a quote from one of your attendees. - It gives confidence in your - events. - </p> - <small>Author</small> - </blockquote> - </div> +<template id="event_right_quotes" inherit_id="website_event.index" inherit_option_id="website_event.index" name="Quotes"> + <xpath expr="//div[@id='right_column']" position="inside"> + <div class="row"> + <div class="col-md-12 mb16"> + <blockquote class="oe_snippet_body"> + <p> + Write here a quote from one of your attendees. + It gives confidence in your + events. + </p> + <small>Author</small> + </blockquote> </div> - </xpath> - </template> + </div> + </xpath> +</template> - <template id="event_category" inherit_id="website_event.index" inherit_option_id="website_event.index" name="Filter by Category"> - <xpath expr="//div[@id='left_column']" position="inside"> - <ul class="nav nav-pills nav-stacked mt32"> - <t t-foreach="types"> - <li t-if="type" t-att-class="searches.get('type') == str(type and type[0]) and 'active' or ''"> - <a t-href="/event/#{ search_path }&type=#{ type[0] }"><t t-esc="type[1]"/> - <span class="badge pull-right"><t t-esc="type_count"/></span> - </a> - </li> - </t> - </ul> - </xpath> - </template> - <template id="event_location" inherit_id="website_event.index" inherit_option_id="website_event.index" name="Filter by Country"> - <xpath expr="//div[@id='left_column']" position="inside"> - <ul class="nav nav-pills nav-stacked mt32"> - <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 ''"> - <a t-href="/event/#{ search_path }&country=#{ country_id[0] }"><t t-esc="country_id[1]"/> - <span class="badge pull-right"><t t-esc="country_id_count"/></span> +<template id="event_left_column" inherit_option_id="website_event.index" name="Filters"> + <xpath expr="//div[@id='middle_column']" position="attributes"> + <attribute name="class">col-md-6</attribute> + </xpath> + <xpath expr="//div[@id='middle_column']" position="before"> + <div class="col-md-3 css_noprint" id="left_column"> + <ul class="nav nav-pills nav-stacked"> + <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'))"> + <a t-href="/event/#{ search_path }&date=#{ date[0] }"><t t-esc="date[1]"/> + <span t-if="date[3]" class="badge pull-right"><t t-esc="date[3]"/></span> </a> </li> </t> </ul> - </xpath> - </template> + </div> + </xpath> +</template> - <template id="event_description_full"> - <t t-call="website.layout"> - <t t-set="additional_title">Events</t> - <div id="wrap"> - <div class="container"> - <div class="row mt8"> - <div class="col-sm-7"> - <ol class="breadcrumb mb0"> - <li t-if="not event_id.type"><a href="/event">All Events</a></li> - <li t-if="event_id.type"> - <a t-href="/event?type=#{event_id.type.id}" t-esc="event_id.type.name"/> - </li> - <li t-if="event_id.country_id"> - <a t-href="/event?country=#{event_id.country_id.id}" t-esc="event_id.country_id.name"/> - </li> - <li class="active"> - <span t-field="event_id.name"/> - </li> - </ol> - </div><div class="col-sm-5"> - <t t-call="website.publish_management"> - <t t-set="object" t-value="event_id"/> - <t t-set="publish_edit" t-value="True"/> - <t t-set="publish_controller">/event/publish</t> +<template id="event_category" inherit_option_id="website_event.event_left_column" name="Filter by Category"> + <xpath expr="//div[@id='left_column']" position="inside"> + <ul class="nav nav-pills nav-stacked mt32"> + <t t-foreach="types"> + <li t-if="type" t-att-class="searches.get('type') == str(type and type[0]) and 'active' or ''"> + <a t-href="/event/#{ search_path }&type=#{ type[0] }"><t t-esc="type[1]"/> + <span class="badge pull-right"><t t-esc="type_count"/></span> + </a> + </li> + </t> + </ul> + </xpath> +</template> +<template id="event_location" inherit_option_id="website_event.event_left_column" name="Filter by Country"> + <xpath expr="//div[@id='left_column']" position="inside"> + <ul class="nav nav-pills nav-stacked mt32"> + <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 ''"> + <a t-href="/event/#{ search_path }&country=#{ country_id[0] }"><t t-esc="country_id[1]"/> + <span class="badge pull-right"><t t-esc="country_id_count"/></span> + </a> + </li> + </t> + </ul> + </xpath> +</template> + +<template id="layout"> + <t t-call="website.layout"> + <div id="wrap"> + <div class="oe_structure"/> + <div class="container"> + <div class="row mt8"> + <div class="col-sm-7" id="event_menu"> + <ol class="breadcrumb mb0" t-if="not event.menu_id"> + <li><a href="/event">All Events</a></li> + <li t-if="event.type"> + <a t-href="/event?type=#{event.type.id}" t-esc="event.type.name"/> + </li> + <li t-if="event.country_id"> + <a t-href="/event?country=#{event.country_id.id}" t-esc="event.country_id.name"/> + </li> + <li class="active"> + <span t-field="event.name"/> + </li> + </ol> + <ol class="breadcrumb mb0" id="event_menu" t-if="event.menu_id"> + <t t-foreach="event.menu_id.child_id" t-as="submenu"> + <t t-call="website.submenu"/> </t> - </div> + </ol> + </div> + <div class="col-sm-5"> + <t t-call="website.publish_management"> + <t t-set="object" t-value="event"/> + <t t-set="publish_edit" t-value="True"/> + <t t-set="publish_controller">/event/publish</t> + </t> </div> + </div> + </div> + <t t-raw="0"/> + <div class="oe_structure"/> + </div> + </t> +</template> - <h1 class="text-center" t-field="event_id.name"></h1> - <h4 class="text-center text-muted"> - <i class="icon-time"></i> <span t-field="event_id.date_begin"/> to - <span t-field="event_id.date_end"/> - </h4> - <h4 t-if="event_id.city and event_id.country_id" class="text-center text-muted"> - <i class="icon-map-marker"/> - <span t-field="event_id.city"/>, - <span t-field="event_id.country_id"/> - </h4> +<template id="template_location"> + <t t-call="website_event.layout"> + <section class="container" data-snippet-id="title"> + <h1 class="text-center">Event Location</h1> + </section> + <div class="oe_structure oe_empty"/> + </t> +</template> - <div class="row mt32 mb32"> - <div class="col-md-8"> - <form t-action="/event/#{ event_id.id }/add_cart" method="post" t-if="event_id.event_ticket_ids"> - <table class="table table-striped"> - <thead> - <tr> - <th>Ticket Type</th> - <th style="min-width: 100px">Sales End</th> - <th style="min-width: 100px">Price</th> - <th></th> - <th>Quantity</th> - </tr> - </thead> - <tbody> - <tr t-foreach="event_id.event_ticket_ids" t-as="ticket"> - <td> - <div t-field="ticket.name"/> - <div><small t-field="ticket.product_id.description_sale"/></div> - </td> - <td><span t-field="ticket.deadline"/></td> - <td><span t-field="ticket.price"/></td> - <td> - <span t-if="ticket.register_max and (float(ticket.register_current or 0) / ticket.register_max)<=0.2" class="text-muted"> - <t t-esc="ticket.register_max - ticket.register_current"/> <span>left</span> - </span> - </td> - <td> - <select t-if="ticket.register_avail" t-attf-name="ticket-#{ ticket.id }" class="form-control"> - <t t-foreach="range(0, ticket.register_avail > 9 and 10 or ticket.register_avail+1 )" t-as="nb"><option t-esc="nb"/></t> - </select> - <span t-if="not ticket.register_avail">Sold Out</span> - </td> - </tr> - </tbody> - </table> - <button type="submit" class="btn btn-primary btn-lg pull-right" t-if="event_id.register_avail">Order Now</button> - <div class="clearfix"/> - <hr/> - </form> - <div t-field="event_id.description"></div> - <div class="clearfix"/> - <ul class="media-list" id="comment"> - <li t-foreach="event_id.website_message_ids" t-as="comment" class="media"> - <div class="media-body"> - <t t-call="website.publish_management"> - <t t-set="object" t-value="comment"/> - <t t-set="publish_edit" t-value="True"/> - <t t-set="publish_controller">/event/publish</t> - </t> - <t t-raw="comment.body"/> - <small class="pull-right muted text-right"> - <div t-field="comment.author_id"/> - <div t-field="comment.date"/> - </small> - </div> - </li> - </ul> - </div> - <div class="col-md-4 css_noprint"> - <div class="clearfix"/> +<template id="template_intro"> + <t t-call="website_event.layout"> + <section class="container" data-snippet-id="title"> + <h1 class="text-center">Event Introduction</h1> + </section> + <div class="oe_structure oe_empty"/> + </t> +</template> - <div class="panel panel-default" t-if="event_id.address_id"> - <div class="panel-heading"> - <h4>Where</h4> - </div> - <div class="panel-body"> - <a t-att-href="event_id.google_map_link()" target="_BLANK"> - <img t-att-src="event_id.google_map_img()" width="100%%"/> - </a> - <address class="mt16 mb8" t-field="event_id.address_id"> <!-- TODO: use widget contact --> - <!-- <strong t-field="event_id.address_id"/> - <p t-field="event_id.address_id"/> - <div t-if="event_id.address_id.phone"> - <span class="icon-phone"/> <span t-field="event_id.address_id.phone"/> - </div> - <div t-if="event_id.address_id.email"> - <span class="icon-envelope"/> - <a t-att-href="'mailto:'+event_id.address_id.email"> - <span t-field="event_id.address_id.email"/> - </a> - </div> --> - </address> - </div> - </div> +<template id="event_details"> + <t t-call="website_event.layout"> + <div class="container"> + <h1 class="text-center" t-field="event.name"></h1> + <h4 class="text-center text-muted"> + <i class="fa fa-clock-o"></i> <span t-field="event.date_begin"/> to + <span t-field="event.date_end"/> + </h4> + <h4 t-if="event.city and event.country_id" class="text-center text-muted"> + <i class="fa fa-map-marker"/> + <span t-field="event.city"/>, + <span t-field="event.country_id"/> + </h4> + <div class="row mt32 mb32"> + <t t-raw="0"/> + </div> + </div> + </t> +</template> - <div class="panel panel-default"> - <div class="panel-heading"> - <h4>When</h4> - </div> - <div class="panel-body"> - <i class="icon-time"></i> <span t-field="event_id.date_begin"> </span><br/> - <i class="icon-time"></i> <span t-field="event_id.date_end"> </span> - </div> - </div> +<template id="404"> + <t t-call="website.layout"> + <div id="wrap"> + <div class="oe_structure oe_empty"> + <div class="container"> + <h1 class="mt32">Event not found!</h1> + <p>Sorry, the requested event is not available anymore.</p> + <p><a t-href="/event/">Return to the event list.</a></p> + </div> + </div> + </div> + </t> +</template> - <div class="panel panel-default" t-if="event_id.organizer_id"> - <div class="panel-heading"> - <h4>Organizer</h4> - </div> - <div class="panel-body" t-field="event_id.organizer_id"> <!-- TODO: use widget contact --> - <!-- <p><strong t-field="event_id.organizer_id.display_name"/></p> - <div t-if="event_id.phone"> - <span class="icon-phone"/> <span t-field="event_id.phone"/> - </div> - <div t-if="event_id.email"> - <i class="icon-envelope"/> <span t-field="event_id.email"/> - </div> --> - </div> - </div> +<template id="event_description_full"> + <t t-call="website_event.event_details"> + <div class="col-md-8"> + <form t-action="/event/add_cart?event_id=#{ event.id }" method="post" t-if="event.event_ticket_ids"> + <table class="table table-striped"> + <thead> + <tr> + <th>Ticket Type</th> + <th style="min-width: 100px">Sales End</th> + <th style="min-width: 100px">Price</th> + <th></th> + <th>Quantity</th> + </tr> + </thead> + <tbody> + <tr t-foreach="event.event_ticket_ids" t-as="ticket"> + <td> + <div t-field="ticket.name"/> + <div><small t-field="ticket.product_id.description_sale"/></div> + </td> + <td><span t-field="ticket.deadline"/></td> + <td> + <t t-if="ticket.price or editable"><span t-field="ticket.price" t-field-options='{ + "widget": "monetary", + "display_currency": "website.pricelist_id.currency_id" + }'/> + </t> + <t t-if="not ticket.price and not editable"> + <span>Free</span> + </t> + </td> + <td> + <span t-if="ticket.register_max and ((ticket.register_current or 0)*100 / ticket.register_max)>75" class="text-muted"> + <t t-esc="ticket.register_max - ticket.register_current"/> <span>left</span> + </span> + </td> + <td> + <select t-if="ticket.register_avail" t-attf-name="ticket-#{ ticket.id }" class="form-control"> + <t t-foreach="range(0, ticket.register_avail > 9 and 10 or ticket.register_avail+1 )" t-as="nb"><option t-esc="nb"/></t> + </select> + <span t-if="not ticket.register_avail">Sold Out</span> + </td> + </tr> + </tbody> + </table> + <button type="submit" class="btn btn-primary btn-lg pull-right" t-if="event.register_avail">Order Now</button> + <div class="clearfix"/> + <hr/> + </form> + <div t-field="event.description"></div> + <div class="clearfix"/> + <ul class="media-list" id="comment"> + <li t-foreach="event.website_message_ids" t-as="comment" class="media"> + <div class="media-body"> + <t t-call="website.publish_management"> + <t t-set="object" t-value="comment"/> + <t t-set="publish_edit" t-value="True"/> + <t t-set="publish_controller">/event/publish</t> + </t> + <t t-raw="comment.body"/> + <small class="pull-right muted text-right"> + <div t-field="comment.author_id"/> + <div t-field="comment.date"/> + </small> + </div> + </li> + </ul> + </div> + <div class="col-md-4 css_noprint"> + <div class="clearfix"/> - <div class="panel panel-default"> - <div class="panel-heading"> - <h4>Social Stream</h4> - </div> - <div class="panel-body"> - <t t-call="website_mail.follow"><t t-set="object" t-value="event_id"/></t> - <div t-if="event_id.twitter_hashtag" class="mt16"> - <p><strong>Participate on Twitter</strong></p> - <p class="text-muted"> - Find out what others are seeing and - saying about this event, and join the - conversation. - </p> - <p><strong>Use this tag: - <a t-att-href="'http://twitter.com/search?q=#'+event_id.twitter_hashtag" class="label label-primary">#<span t-field="event_id.twitter_hashtag"/></a> - </strong></p> - </div> - </div> - </div> + <div class="panel panel-default" t-if="event.address_id"> + <div class="panel-heading"> + <h4>Where</h4> + </div> + <div class="panel-body"> + <a t-att-href="event.google_map_link()" target="_BLANK"> + <img t-att-src="event.google_map_img()" width="100%%"/> + </a> + <div class="mt16 mb8" t-field="event.address_id" t-field-options='{ + "widget": "contact", + "fields": ["address", "phone", "mobile", "fax", "email"] + }'/> + </div> + </div> + + <div class="panel panel-default"> + <div class="panel-heading"> + <h4>When</h4> + </div> + <div class="panel-body"> + <i class="fa fa-clock-o"></i> <span t-field="event.date_begin"> </span><br/> + <i class="fa fa-clock-o"></i> <span t-field="event.date_end"> </span> + </div> + </div> + + <div class="panel panel-default" t-if="event.organizer_id"> + <div class="panel-heading"> + <h4>Organizer</h4> + </div> + <div class="panel-body" t-field="event.organizer_id" t-field-options='{ + "widget": "contact", + "fields": ["name", "phone", "mobile", "fax", "email"] + }'/> + </div> + <div class="panel panel-default"> + <div class="panel-heading"> + <h4>Social Stream</h4> + </div> + <div class="panel-body"> + <t t-call="website_mail.follow"><t t-set="object" t-value="event"/></t> + <div t-if="event.twitter_hashtag" class="mt16"> + <p><strong>Participate on Twitter</strong></p> + <p class="text-muted"> + Find out what others are seeing and + saying about this event, and join the + conversation. + </p> + <p><strong>Use this tag: + <a t-att-href="'http://twitter.com/search?q=#'+event.twitter_hashtag" class="label label-primary">#<span t-field="event.twitter_hashtag"/></a> + </strong></p> </div> </div> </div> - </div> - </t> - </template> - </data> + </div> + </t> +</template> +</data> </openerp> diff --git a/addons/website_event/views/website_event_sale_backend.xml b/addons/website_event/views/website_event_sale_backend.xml index 5c247c98c0c..3b3a28149cb 100644 --- a/addons/website_event/views/website_event_sale_backend.xml +++ b/addons/website_event/views/website_event_sale_backend.xml @@ -2,27 +2,19 @@ <openerp> <data> - <record model="ir.ui.view" id="view_event_form"> + <record model="ir.ui.view" id="view_event_sale_form"> <field name="name">event.event.website.form</field> <field name="model">event.event</field> - <field name="inherit_id" ref="event_sale.view_event_form"/> + <field name="inherit_id" ref="event.view_event_form"/> <field name="arch" type="xml"> <!-- add state field in header --> - <xpath expr="//sheet" position="before"> - <div class="oe_form_box_info oe_text_center"> - <p attrs="{'invisible': [('website_published', '=', True)]}"> - This event is <b>not available</b> for public user in your website. - </p> - <p attrs="{'invisible': [('website_published', '=', False)]}"> - This event is <b>available</b> for public user in your website. - </p> - <p>Website view: <field class="oe_inline" name="website_url" widget="url"/></p> - </div> + <xpath expr="//sheet/div" position="before"> + <field name="website_url" invisible="1"/> + <field name="website_published" class="pull-right" widget="website_button"/> + </xpath> + <xpath expr="//field[@name='organizer_id']" position="after"> + <field name="twitter_hashtag"/> </xpath> - - <field name="organizer_id" position="after"> - <field name="website_published"/> - </field> </field> </record> |
