diff options
| author | Fabien Pinckaers <fp@tinyerp.com> | 2014-04-09 19:26:00 +0200 |
|---|---|---|
| committer | Fabien Pinckaers <fp@tinyerp.com> | 2014-04-09 19:26:00 +0200 |
| commit | 65908c769b2211f175e87dbc0e70c4a3b9e862cd (patch) | |
| tree | 098d61f399fe0bf0b665829e91d595f3a62d6acf /addons | |
| parent | 35d6a6f8a8bb4b116e03d5781c89379bfa02feb2 (diff) | |
| parent | 9776b9e0bddc621b2da4eca38f51abe529cd32b7 (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__.py | 3 | ||||
| -rw-r--r-- | addons/website_event_track/controllers/event.py | 62 | ||||
| -rw-r--r-- | addons/website_event_track/data/event_demo.xml | 106 | ||||
| -rw-r--r-- | addons/website_event_track/data/website_event_track_demo.xml | 325 | ||||
| -rw-r--r-- | addons/website_event_track/models/event.py | 9 | ||||
| -rw-r--r-- | addons/website_event_track/static/src/css/website_event_track.css | 40 | ||||
| -rw-r--r-- | addons/website_event_track/static/src/js/website_event_track.js | 24 | ||||
| -rw-r--r-- | addons/website_event_track/views/event_backend.xml | 5 | ||||
| -rw-r--r-- | addons/website_event_track/views/website_event.xml | 138 |
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 & 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> |
