summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorFabien Pinckaers <fp@tinyerp.com>2014-04-09 19:26:00 +0200
committerFabien Pinckaers <fp@tinyerp.com>2014-04-09 19:26:00 +0200
commit65908c769b2211f175e87dbc0e70c4a3b9e862cd (patch)
tree098d61f399fe0bf0b665829e91d595f3a62d6acf /addons
parent35d6a6f8a8bb4b116e03d5781c89379bfa02feb2 (diff)
parent9776b9e0bddc621b2da4eca38f51abe529cd32b7 (diff)
[IMP] Event Agenda: merge with cleaning
bzr revid: fp@tinyerp.com-20140409172600-bwy97j8kr8dzrgg9
Diffstat (limited to 'addons')
-rw-r--r--addons/website_event_track/__openerp__.py3
-rw-r--r--addons/website_event_track/controllers/event.py62
-rw-r--r--addons/website_event_track/data/event_demo.xml106
-rw-r--r--addons/website_event_track/data/website_event_track_demo.xml325
-rw-r--r--addons/website_event_track/models/event.py9
-rw-r--r--addons/website_event_track/static/src/css/website_event_track.css40
-rw-r--r--addons/website_event_track/static/src/js/website_event_track.js24
-rw-r--r--addons/website_event_track/views/event_backend.xml5
-rw-r--r--addons/website_event_track/views/website_event.xml138
9 files changed, 524 insertions, 188 deletions
diff --git a/addons/website_event_track/__openerp__.py b/addons/website_event_track/__openerp__.py
index 338477eeb8e..418e049cec9 100644
--- a/addons/website_event_track/__openerp__.py
+++ b/addons/website_event_track/__openerp__.py
@@ -28,7 +28,8 @@ Adds support for:
],
'qweb': ['static/src/xml/*.xml'],
'demo': [
- 'data/event_demo.xml'
+ 'data/event_demo.xml',
+ 'data/website_event_track_demo.xml'
],
'installable': True,
}
diff --git a/addons/website_event_track/controllers/event.py b/addons/website_event_track/controllers/event.py
index 466e3d37a40..86c9fd4862a 100644
--- a/addons/website_event_track/controllers/event.py
+++ b/addons/website_event_track/controllers/event.py
@@ -23,11 +23,14 @@ import openerp
from openerp.addons.web import http
from openerp.addons.web.http import request
from openerp.addons.website.controllers.main import Website as controllers
+import datetime
import re
import werkzeug.utils
controllers = controllers()
+import pytz
+from pytz import timezone
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)
@@ -37,14 +40,65 @@ class website_event(http.Controller):
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):
+ local_tz = pytz.timezone(event.timezone_of_event or 'UTC')
+ locations = {} # { location: [track, start_date, end_date, rowspan]}
+ dates = [] # [ (date, {}) ]
+ for track in event_track_ids:
+ locations.setdefault(track.location_id or False, [])
+
+ 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(minutes = (track.duration or 30))
+ location = track.location_id or False
+ locations.setdefault(location, [])
+
+ # New TR, align all events
+ if forcetr or (start_date>dates[-1][0]) or not location:
+ dates.append((start_date, {}, bool(location)))
+ for loc in locations.keys():
+ if locations[loc] and (locations[loc][-1][2] > start_date):
+ locations[loc][-1][3] += 1
+ elif not locations[loc] or locations[loc][-1][2] < start_date:
+ locations[loc].append([False, locations[loc] and locations[loc][-1][2] or dates[0][0], start_date, 1])
+ dates[-1][1][loc] = locations[loc][-1]
+ forcetr = not bool(location)
+
+ # Add event
+ if locations[location] and locations[location][-1][1] > start_date:
+ locations[location][-1][3] -= 1
+ locations[location].append([track, start_date, end_date, 1])
+ dates[-1][1][location] = locations[location][-1]
+ return {
+ 'locations': locations,
+ 'dates': dates
+ }
+
+
# TODO: not implemented
@http.route(['/event/<model("event.event"):event>/agenda'], type='http', auth="public", website=True, multilang=True)
def event_agenda(self, event, tag=None, **post):
- values = {
+ comp = lambda x: (x.date, bool(x.location_id))
+ event.track_ids.sort(lambda x,y: cmp(comp(x), comp(y)))
+
+ days = {}
+ days_nbr = {}
+ for track in event.track_ids:
+ if not track.date: continue
+ days.setdefault(track.date[:10], [])
+ days[track.date[:10]].append(track)
+
+ for d in days:
+ days_nbr[d] = len(days[d])
+ days[d] = self._prepare_calendar(event, days[d])
+
+ return request.website.render("website_event_track.agenda", {
'event': event,
- 'main_object': event,
- }
- return request.website.render("website_event_track.agenda", values)
+ 'days': days,
+ 'days_nbr': days_nbr,
+ 'tag': tag
+ })
@http.route([
'/event/<model("event.event"):event>/track',
diff --git a/addons/website_event_track/data/event_demo.xml b/addons/website_event_track/data/event_demo.xml
index 5bdd302649b..784d962e471 100644
--- a/addons/website_event_track/data/event_demo.xml
+++ b/addons/website_event_track/data/event_demo.xml
@@ -24,20 +24,6 @@
<record id="event_track_tag4" model="event.track.tag">
<field name="name">Round Table</field>
</record>
-
- <record id="event_track_location1" model="event.track.location">
- <field name="name">Room 1</field>
- </record>
- <record id="event_track_location2" model="event.track.location">
- <field name="name">Room 2</field>
- </record>
- <record id="event_track_location3" model="event.track.location">
- <field name="name">Room 3</field>
- </record>
- <record id="event_track_location4" model="event.track.location">
- <field name="name">Room 4</field>
- </record>
-
<!--
This should be done at the end so that the menu is complete
-->
@@ -83,68 +69,6 @@
</record>
<!-- Tracks -->
-
- <record id="track_1" model="event.track">
- <field name="name">A Better Future With OpenERP eCommerce</field>
- <field name="event_id" ref="event.event_0"/>
- <field name="website_published" eval="True"/>
- <field name="duration" eval="60"/>
- <field eval="(DateTime.now() + timedelta(days=2)).strftime('%Y-%m-%d 10:00:00')" name="date"/>
- <field name="speaker_ids" eval="[(6, 0, [ref('base.res_partner_address_4')])]"/>
- <field name="location_id" ref="website_event_track.event_track_location2"/>
- <field name="stage_id" ref="website_event_track.event_track_stage3"/>
- <field name="tag_ids" eval="[(6, 0, [ref('website_event_track.event_track_tag1')])]"/>
- <field name="description" type="xml">
- <section data-snippet-id="text-block">
- <div class="container">
- <div class="row">
- <div class="col-md-12">
- <p>
- Apart from being an enterprise management software, OpenERP is
- used nowadays for a great variety of enterprise frontends.
- </p><p>
- The talk illustrates the impact of OpenERP in areas such as the
- company website, online events management, eCommerce, online
- recruitments, social media marketing, etc.
- </p>
- </div>
- </div>
- </div>
- </section>
- </field>
- </record>
-
- <record id="track_2" model="event.track">
- <field name="name">How To Drive Sales With OpenERP CRM</field>
- <field name="event_id" ref="event.event_0"/>
- <field name="website_published" eval="True"/>
- <field name="duration" eval="60"/>
- <field name="priority">1</field>
- <field eval="(DateTime.now() + timedelta(days=2)).strftime('%Y-%m-%d 11:00:00')" name="date"/>
- <field name="speaker_ids" eval="[(6, 0, [ref('base.res_partner_address_13')])]"/>
- <field name="location_id" ref="website_event_track.event_track_location2"/>
- <field name="stage_id" ref="website_event_track.event_track_stage3"/>
- <field name="tag_ids" eval="[(6, 0, [ref('website_event_track.event_track_tag2'), ref('website_event_track.event_track_tag3')])]"/>
- <field name="description" type="xml">
- <section data-snippet-id="text-block">
- <div class="container">
- <div class="row">
- <div class="col-md-12">
- <p>
- Apart from being an enterprise management software, OpenERP is
- used nowadays for a great variety of enterprise frontends.
- </p><p>
- The talk illustrates the impact of OpenERP in areas such as the
- company website, online events management, eCommerce, online
- recruitments, social media marketing, etc.
- </p>
- </div>
- </div>
- </div>
- </section>
- </field>
- </record>
-
<record id="base.res_partner_address_16" model="res.partner">
<field name="website">http://facebook.com/openerp</field>
<field name="website_description" type="xml">
@@ -160,35 +84,5 @@
</p>
</field>
</record>
-
- <record id="track_3" model="event.track">
- <field name="name">Social Marketing As a Source of Leads</field>
- <field name="event_id" ref="event.event_0"/>
- <field name="website_published" eval="True"/>
- <field name="duration" eval="40"/>
- <field name="priority">0</field>
- <field eval="(DateTime.now() + timedelta(days=2)).strftime('%Y-%m-%d 14:00:00')" name="date"/>
- <field name="speaker_ids" eval="[(6, 0, [ref('base.res_partner_address_16')])]"/>
- <field name="location_id" ref="website_event_track.event_track_location1"/>
- <field name="stage_id" ref="website_event_track.event_track_stage4"/>
- <field name="tag_ids" eval="[(6, 0, [ref('website_event_track.event_track_tag4')])]"/>
- <field name="description" type="xml">
- <section data-snippet-id="text-block">
- <div class="row">
- <div class="col-md-12">
- <p>
- Apart from being an enterprise management software, OpenERP is
- used nowadays for a great variety of enterprise frontends.
- </p><p>
- The talk illustrates the impact of OpenERP in areas such as the
- company website, online events management, eCommerce, online
- recruitments, social media marketing, etc.
- </p>
- </div>
- </div>
- </section>
- </field>
- </record>
-
</data>
</openerp>
diff --git a/addons/website_event_track/data/website_event_track_demo.xml b/addons/website_event_track/data/website_event_track_demo.xml
new file mode 100644
index 00000000000..6d62cc5aaf6
--- /dev/null
+++ b/addons/website_event_track/data/website_event_track_demo.xml
@@ -0,0 +1,325 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+<data noupdate="1">
+ <record id="event_track_location5" model="event.track.location">
+ <field name="name">Le Foyer du lac</field>
+ </record>
+ <record id="event_track_location6" model="event.track.location">
+ <field name="name">Theatre</field>
+ </record>
+ <record id="event_track_location7" model="event.track.location">
+ <field name="name">Lauzelle</field>
+ </record>
+ <record id="event_track_location8" model="event.track.location">
+ <field name="name">Foyer Royal</field>
+ </record>
+ <record id="event_track_location9" model="event.track.location">
+ <field name="name">Biereau</field>
+ </record>
+ <record id="event_track_location10" model="event.track.location">
+ <field name="name">Bruyère</field>
+ </record>
+ <record id="event_track1" model="event.track">
+ <field name="name">How to develop a website module.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 06:00:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location5"/>
+ <field name="duration" eval="80"/>
+ <field eval="[(4, ref('base.res_partner_2')),(4, ref('base.res_partner_3'))]" name="speaker_ids"/>
+ <field name="color">3</field>
+ <field name="stage_id" ref="event_track_stage1"/>
+
+ </record>
+ <record id="event_track2" model="event.track">
+ <field name="name">How to integrate hardware materials with the OpenERP point of sale.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 8:30:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location5"/>
+ <field name="duration" eval="15"/>
+ <field eval="[(4, ref('base.res_partner_3'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage2"/>
+ </record>
+ <record id="event_track3" model="event.track">
+ <field name="name">How to develop real time apps, the live chat module explained.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 10:30:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location5"/>
+ <field name="duration" eval="20"/>
+ <field eval="[(4, ref('base.res_partner_4'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage3"/>
+ </record>
+ <record id="event_track4" model="event.track">
+ <field name="name">How to develop automated tests in the OpenERP web client.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 9:00:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location5"/>
+ <field name="duration" eval="20"/>
+ <field eval="[(4, ref('base.res_partner_2'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage4"/>
+ </record>
+ <record id="event_track5" model="event.track">
+ <field name="name">The new way to promote your modules in the Apps platform and OpenERP website.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 6:00:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location6"/>
+ <field name="duration" eval="20"/>
+ <field eval="[(4, ref('base.res_partner_4'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage5"/>
+ </record>
+ <record id="event_track6" model="event.track">
+ <field name="name">Detailed roadmap of accounting new modules and improvements for version 8.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 6:30:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location6"/>
+ <field name="duration" eval="20"/>
+ <field eval="[(4, ref('base.res_partner_5'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage2"/>
+ </record>
+ <record id="event_track7" model="event.track">
+ <field name="name">A technical explanation of OpenERP as a CMS and a eCommerce platform for version 8.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 8:30:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location6"/>
+ <field name="duration" eval="50"/>
+ <field eval="[(4, ref('base.res_partner_6'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage4"/>
+ </record>
+ <record id="event_track8" model="event.track">
+ <field name="name">Discover OpenERP CRM: How to optimize your sales, from leads to sales orders.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 6:00:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location7"/>
+ <field name="duration" eval="20"/>
+ <field name="color">2</field>
+ <field eval="[(4, ref('base.res_partner_7'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage3"/>
+ </record>
+ <record id="event_track9" model="event.track">
+ <field name="name">How to use OpenERP for your HR process: recruitment, leaves management, appraisals, expenses, etc.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="user_id" ref="base.user_root"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 8:30:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location7"/>
+ <field name="duration" eval="50"/>
+ <field name="color">2</field>
+ <field eval="[(4, ref('base.res_partner_8'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage2"/>
+ </record>
+ <record id="event_track10" model="event.track">
+ <field name="name">Raising qualitive insights with the survey app</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 6:30:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location7"/>
+ <field name="duration" eval="20"/>
+ <field name="color">5</field>
+ <field name="stage_id" ref="event_track_stage1"/>
+ </record>
+ <record id="event_track11" model="event.track">
+ <field name="name">Discover OpenERP Point-of-Sale: Your shop ready to use in 30 minutes.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 10:30:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location7"/>
+ <field name="duration" eval="20"/>
+ <field eval="[(4, ref('base.res_partner_4'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage2"/>
+ </record>
+ <record id="event_track12" model="event.track">
+ <field name="name">Manage your events with OpenERP, the new training modules.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 11:00:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location7"/>
+ <field name="duration" eval="20"/>
+ <field eval="[(4, ref('base.res_partner_2')),(4, ref('base.res_partner_8'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage3"/>
+ </record>
+ <record id="event_track13" model="event.track">
+ <field name="name">Advanced reporting with Google Spreadsheets integration.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 6:30:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location8"/>
+ <field name="duration" eval="15"/>
+ <field eval="[(4, ref('base.res_partner_9'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage5"/>
+ </record>
+ <record id="event_track14" model="event.track">
+ <field name="name">New Paypal modules (portal, handling, installments).</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 7:00:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location8"/>
+ <field name="duration" eval="20"/>
+ <field eval="[(4, ref('base.res_partner_10'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage5"/>
+ </record>
+ <record id="event_track15" model="event.track">
+ <field name="name">OpenERP Mobile for Notes, Meetings and Messages.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 10:30:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location8"/>
+ <field name="duration" eval="20"/>
+ <field eval="[(4, ref('base.res_partner_11'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage4"/>
+ </record>
+ <record id="event_track16" model="event.track">
+ <field name="name">OpenERP as your Enterprise Social Network.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 11:00:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location8"/>
+ <field name="duration" eval="20"/>
+ <field eval="[(4, ref('base.res_partner_12'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage3"/>
+ </record>
+ <record id="event_track17" model="event.track">
+ <field name="name">The Art of Making an OpenERP Demo.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 6:00:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location9"/>
+ <field name="duration" eval="20"/>
+ <field eval="[(4, ref('base.res_partner_10'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage2"/>
+ </record>
+ <record id="event_track18" model="event.track">
+ <field name="name">How to build your marketing strategy for the purpose of generating leads with OpenERP.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 8:30:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location9"/>
+ <field name="duration" eval="20"/>
+ <field name="color">5</field>
+ <field eval="[(4, ref('base.res_partner_13'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage4"/>
+ </record>
+ <record id="event_track19" model="event.track">
+ <field name="name">Advanced lead management with OpenERP: tips and tricks from the fields</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 9:00:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location9"/>
+ <field name="duration" eval="20"/>
+ <field name="color">5</field>
+ <field eval="[(4, ref('base.res_partner_14'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage1"/>
+ </record>
+ <record id="event_track20" model="event.track">
+ <field name="name">New Certification Program (valid from Oct. 2013).</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 10:00:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location9"/>
+ <field name="duration" eval="20"/>
+ <field eval="[(4, ref('base.res_partner_15'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage2"/>
+ </record>
+ <record id="event_track21" model="event.track">
+ <field name="name">Recruiting high skilled talents with OpenERP HR apps</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 10:30:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location9"/>
+ <field name="duration" eval="20"/>
+ <field name="color">7</field>
+ <field name="stage_id" ref="event_track_stage2"/>
+ </record>
+ <record id="event_track22" model="event.track">
+ <field name="name">Manage your KPIs (recomended to openERP partners).</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 11:00:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location9"/>
+ <field name="duration" eval="20"/>
+ <field eval="[(4, ref('base.res_partner_15'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage1"/>
+ </record>
+ <record id="event_track23" model="event.track">
+ <field name="name">Key Success factors selling OpenERP.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 7:00:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location9"/>
+ <field name="duration" eval="20"/>
+ <field eval="[(4, ref('base.res_partner_16'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage3"/>
+ </record>
+ <record id="event_track24" model="event.track">
+ <field name="name">Merge proposals review, code sprint (entire day).</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 6:00:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location10"/>
+ <field name="duration" eval="80"/>
+ <field eval="[(4, ref('base.res_partner_17')),(4, ref('base.res_partner_18'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage2"/>
+ </record>
+ <record id="event_track25" model="event.track">
+ <field name="name">Merge proposals review, code sprint (entire afternoon)</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 8:30:00')"></field>
+ <field name="location_id" ref="website_event_track.event_track_location10"/>
+ <field name="duration" eval="170"/>
+ <field eval="[(4, ref('base.res_partner_17')),(4, ref('base.res_partner_18'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage4"/>
+ </record>
+ <record id="event_track27" model="event.track">
+ <field name="name">OpenERP in 2014</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 04:00:00')"></field>
+ <field name="duration" eval="60"/>
+ <field eval="[(4, ref('base.res_partner_1'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage2"/>
+ <field name="color">3</field>
+ </record>
+ <record id="event_track28" model="event.track">
+ <field name="name">OpenERP Status &amp; Strategy 2014</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 5:00:00')"></field>
+ <field name="duration" eval="30"/>
+ <field eval="[(4, ref('base.res_partner_2'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage4"/>
+ </record>
+ <record id="event_track29" model="event.track">
+ <field name="name">The new marketing strategy.</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 5:30:00')"></field>
+ <field name="duration" eval="15"/>
+ <field eval="[(4, ref('base.res_partner_19'))]" name="speaker_ids"/>
+ <field name="stage_id" ref="event_track_stage1"/>
+ <field name="color">6</field>
+ </record>
+ <record id="event_track30" model="event.track">
+ <field name="name">Morning break</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 5:45:00')"></field>
+ <field name="duration" eval="15"/>
+ <field name="stage_id" ref="event_track_stage2"/>
+ </record>
+ <record id="event_track31" model="event.track">
+ <field name="name">Lunch</field>
+ <field name="website_published" eval="True"/>
+ <field name="event_id" ref="event.event_0"/>
+ <field name="date" eval="time.strftime(str(DateTime.today().year) + '-06-04 7:30:00')"></field>
+ <field name="duration" eval="60"/>
+ <field name="stage_id" ref="event_track_stage2"/>
+ </record>
+</data>
+</openerp>
diff --git a/addons/website_event_track/models/event.py b/addons/website_event_track/models/event.py
index 359b7df0067..ee9877a523c 100644
--- a/addons/website_event_track/models/event.py
+++ b/addons/website_event_track/models/event.py
@@ -23,6 +23,8 @@ from openerp.osv import fields, osv
from openerp.tools.translate import _
from openerp.addons.website.models.website import slug
+import pytz
+
class event_track_tag(osv.osv):
_name = "event.track.tag"
_order = 'name'
@@ -103,6 +105,7 @@ class event_track(osv.osv):
'stage_id': _default_stage_id,
'priority': '2'
}
+
def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
stage_obj = self.pool.get('event.track.stage')
result = stage_obj.name_search(cr, uid, '', context=context)
@@ -117,6 +120,10 @@ class event_track(osv.osv):
#
class event_event(osv.osv):
_inherit = "event.event"
+ def _tz_get(self,cr,uid, context=None):
+ # put POSIX 'Etc/*' entries at the end to avoid confusing users - see bug 1086728
+ return [(tz,tz) for tz in sorted(pytz.all_timezones, key=lambda tz: tz if not tz.startswith('Etc/') else '_')]
+
def _get_tracks_tag_ids(self, cr, uid, ids, field_names, arg=None, context=None):
res = dict.fromkeys(ids, [])
for event in self.browse(cr, uid, ids, context=context):
@@ -134,11 +141,13 @@ class event_event(osv.osv):
'show_blog': fields.boolean('News'),
'tracks_tag_ids': fields.function(_get_tracks_tag_ids, type='one2many', relation='event.track.tag', string='Tags of Tracks'),
'allowed_track_tag_ids': fields.many2many('event.track.tag', string='Accepted Tags', help="List of available tags for track proposals."),
+ 'timezone_of_event': fields.selection(_tz_get, 'Event Timezone', size=64),
}
_defaults = {
'show_track_proposal': False,
'show_tracks': False,
'show_blog': False,
+ 'timezone_of_event':lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).tz,
}
def _get_new_menu_pages(self, cr, uid, event, context=None):
context = context or {}
diff --git a/addons/website_event_track/static/src/css/website_event_track.css b/addons/website_event_track/static/src/css/website_event_track.css
index 7862175ec27..f6c01f8f19e 100644
--- a/addons/website_event_track/static/src/css/website_event_track.css
+++ b/addons/website_event_track/static/src/css/website_event_track.css
@@ -52,3 +52,43 @@
background-image: -ms-linear-gradient(top, #C2792A, #DB9141);
background-image: -o-linear-gradient(top, #C2792A, #DB9141);
}
+.event_color_0 {
+ background-color: white;
+ color: #5a5a5a;
+}
+.event_color_1 {
+ background-color: #cccccc;
+ color: #424242;
+}
+.event_color_2 {
+ background-color: #ffc7c7;
+ color: #7a3737;
+}
+.event_color_3 {
+ background-color: #fff1c7;
+ color: #756832;
+}
+.event_color_4 {
+ background-color: #e3ffc7;
+ color: #5d6937;
+}
+.event_color_5 {
+ background-color: #c7ffd5;
+ color: #1a7759;
+}
+.event_color_6 {
+ background-color: #c7ffff;
+ color: #1a5d83;
+}
+.event_color_7 {
+ background-color: #c7d5ff;
+ color: #3b3e75;
+}
+.event_color_8 {
+ background-color: #e3c7ff;
+ color: #4c3668;
+}
+.event_color_9 {
+ background-color: #ffc7f1;
+ color: #6d2c70;
+}
diff --git a/addons/website_event_track/static/src/js/website_event_track.js b/addons/website_event_track/static/src/js/website_event_track.js
new file mode 100644
index 00000000000..8093b9e7bca
--- /dev/null
+++ b/addons/website_event_track/static/src/js/website_event_track.js
@@ -0,0 +1,24 @@
+$(document).ready(function() {
+
+ jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
+ return function( elem ) {
+ return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
+ };
+ });
+
+ $("#event_track_search").bind('keyup', function(e){
+ var change_text = $(this).val();
+ $('.event_track').removeClass('invisible');
+
+ $("#search_summary").removeClass('invisible');
+ if (change_text) {
+ $("#search_number").text($(".event_track:Contains("+change_text+")").length);
+ $(".event_track:not(:Contains("+change_text+"))").addClass('invisible');
+ } else {
+ $("#search_number").text(30);
+ }
+
+ event.preventDefault();
+ });
+
+});
diff --git a/addons/website_event_track/views/event_backend.xml b/addons/website_event_track/views/event_backend.xml
index ad262b6122e..eb30f1fa423 100644
--- a/addons/website_event_track/views/event_backend.xml
+++ b/addons/website_event_track/views/event_backend.xml
@@ -162,6 +162,9 @@
<xpath expr="//div[@class='oe_right oe_button_box']" position="inside">
<button name="%(website_event_track.act_event_list_tracks)d" type="action" string="Tracks"/>
</xpath>
+ <xpath expr="//field[@name='organizer_id']" position="after">
+ <field name="timezone_of_event" />
+ </xpath>
<xpath expr="//div[@class='oe_title']" position="inside">
<label for="tag_ids" class="oe_edit_only"/>
<field name="tag_ids" widget="many2many_tags"/>
@@ -319,6 +322,7 @@
<field name="duration" class="oe_inline"/> minutes
</div>
<field name="tag_ids" widget="many2many_tags"/>
+ <field name="color"/>
</group>
</group>
<label for="description" class="oe_edit_only"/>
@@ -357,6 +361,7 @@
<record model="ir.actions.act_window" id="action_event_track">
<field name="name">Event Tracks</field>
<field name="res_model">event.track</field>
+ <field name="view_mode">tree,form,calendar</field>
</record>
<menuitem name="Event Tracks" id="menu_event_track" action="action_event_track" parent="event.event_configuration" groups="base.group_no_one"/>
diff --git a/addons/website_event_track/views/website_event.xml b/addons/website_event_track/views/website_event.xml
index f7c018bead1..3d4923751d0 100644
--- a/addons/website_event_track/views/website_event.xml
+++ b/addons/website_event_track/views/website_event.xml
@@ -42,85 +42,69 @@
<template id="agenda">
<t t-call="website_event.layout">
- <section data-snippet-id="title">
- <h1 class="text-center mb0" t-field="event.name"/>
- </section>
+ <t t-set="head">
+ <script type="text/javascript" src="/website_event_track/static/src/js/website_event_track.js"></script>
+ <t t-raw="head or ''"/>
+ </t>
<section class="container">
- <div class="row">
- <div id="left_column">
+ <h1 class="text-center" t-field="event.name"/>
+ <div class="form-inline pull-right">
+ <label class="invisible text-muted" id="search_summary"><span id="search_number">0</span> Found </label>
+ <input type="text" class="form-control" placeholder="Filter Tracks..." id="event_track_search"/>
</div>
- <div class="col-md-12" id="right_column">
- <p class="text-muted fa fa-info-circle"> You can click on cells to highlight your interests.</p>
- <h3 class="page-header mt0">
- Monday, 3rd June
- <small>23 talks</small>
- </h3>
- <table class="table table-bordered table-condensed">
- <tr>
- <th></th>
- <th class="active"><a href="#">Room 1</a></th>
- <th class="active"><a href="#">Room 2</a></th>
- <th class="active"><a href="#">Room 3</a></th>
- <th class="active"><a href="#">Room 5</a></th>
- <th class="active"><a href="#">Room 6</a></th>
- </tr>
- <tr>
- <td class="active"><b>09:00</b><br/><span class="text-muted">10:00</span></td>
- <th colspan="5" class="success text-center">
- <a href="#">Plenary Session</a><br/>
- Room 5
- </th>
- </tr>
- <tr>
- <td class="active"><b>10:00</b><br/><span class="text-muted">10:30</span></td>
- <td><a href="#">fkdsj kl jkl sdfjksdfj kl</a></td>
- <td rowspan="2" class="danger"><a href="#">Learning Python</a></td>
- <td></td>
- <td><a href="#">Learning Pytdon</a></td>
- <td><a href="#">Boost your Sales Witd OpenERP CRM</a></td>
- </tr>
- <tr>
- <th class="active">10:30<br/><span class="text-muted">11:00</span></th>
- <td></td>
- <td>Boost your Sales Witd OpenERP CRM</td>
- <td>Learning Pytdon</td>
- <td rowspan="2">fkdsj kl jkl sdfjksdfj kl</td>
- </tr>
- <tr>
- <th class="active">11:00<br/><span class="text-muted">12:00</span></th>
- <td class="danger">Learning Pytdon</td>
- <td>Boost your Sales Witd OpenERP CRM</td>
- <td>Learning Pytdon</td>
- <td>this is a test</td>
- </tr>
- <tr class="active">
- <td colspan="6" class="text-center text-muted"><span class="fa fa-clock-o"/></td>
- </tr>
- <tr>
- <th class="active">14:00<br/><span class="text-muted">15:00</span></th>
- <td>Boost your Sales Witd OpenERP CRM</td>
- <td class="danger">Learning Pytdon</td>
- <td></td>
- <td>fkdsj kl jkl sdfjksdfj kl</td>
- <td>fkdsj kl jkl sdfjksdfj kl</td>
- </tr><tr>
- <td class="active"><b>10:00</b><br/><span class="text-muted">10:30</span></td>
- <td>fkdsj kl jkl sdfjksdfj kl</td>
- <td rowspan="2" class="danger">Learning Python</td>
- <td></td>
- <td>Learning Pytdon</td>
- <td>Boost your Sales Witd OpenERP CRM</td>
- </tr>
- <tr>
- <th class="active">10:30<br/><span class="text-muted">11:00</span></th>
- <td></td>
- <td>Boost your Sales Witd OpenERP CRM</td>
- <td>Learning Pytdon</td>
- <td rowspan="2">fkdsj kl jkl sdfjksdfj kl</td>
- </tr>
- </table>
- </div>
- </div>
+ </section>
+ <section class="container" t-foreach="days.keys()" t-as="day">
+ <t t-set="locations" t-value="days[day]['locations']"/>
+ <t t-set="dates" t-value="days[day]['dates']"/>
+ <h3 class="page-header mt0">
+ <t t-esc="day"/>
+ <small><t t-esc="days_nbr[day]"/> talks</small>
+ </h3>
+ <table id="table_search" class="table table-bordered table-condensed">
+ <tr>
+ <th/>
+ <t t-foreach="locations.keys()" t-as="location">
+ <th t-if="location" class="active">
+ <span t-esc="location and location.name or 'Unknown'"/>
+ </th>
+ </t>
+ </tr>
+ <tr t-foreach="dates" t-as="dt">
+ <td class="active">
+ <b t-esc="dt[0].strftime('%H:%M')"/>
+ </td>
+ <t t-if="dt[2]"> <!-- Not a multi location -->
+ <t t-foreach="locations" t-as="location">
+ <t t-if="location and dt[1].get(location, False)">
+ <t t-set="track" t-value="dt[1][location][0]"/>
+ <t t-if="track">
+ <td t-att-rowspan="dt[1][location][3]" t-attf-class="event_color_#{track.color} #{track and 'event_track' or ''}">
+ <t t-if="track">
+ <a t-attf-href="/event/#{ slug(event) }/track/#{ slug(track) }">
+ <span t-esc="track and track.name"/>
+ </a>
+ <div class="text-muted" t-foreach="track.speaker_ids" t-as="speaker">
+ <small t-esc="speaker.display_name"/>
+ </div>
+ </t>
+ </td>
+ </t>
+ <td t-if="not track" t-att-rowspan="dt[1][location][3]" class="event_track"/>
+ </t>
+ </t>
+ </t><t t-if="not dt[2]">
+ <t t-set="track" t-value="dt[1][False][0]"/>
+ <td t-att-colspan="len(locations)-1" t-attf-class="text-center event_color_#{track.color} #{track and 'event_track' or ''}">
+ <a t-attf-href="/event/#{ slug(event) }/track/#{ slug(track) }">
+ <span t-esc="track.name"/><br/>
+ <div class="text-muted" t-foreach="track.speaker_ids" t-as="speaker">
+ <small t-esc="speaker.display_name"/>
+ </div>
+ </a>
+ </td>
+ </t>
+ </tr>
+ </table>
</section>
</t>
</template>