diff options
| -rw-r--r-- | addons/website_event/models/event.py | 64 | ||||
| -rw-r--r-- | addons/website_event_track/controllers/main.py | 14 | ||||
| -rw-r--r-- | addons/website_event_track/data/event_demo.xml | 122 | ||||
| -rw-r--r-- | addons/website_event_track/data/event_track_data.xml | 71 | ||||
| -rw-r--r-- | addons/website_event_track/models/event.py | 69 | ||||
| -rw-r--r-- | addons/website_event_track/models/event_track.py | 145 | ||||
| -rw-r--r-- | addons/website_event_track/security/ir.model.access.csv | 2 | ||||
| -rw-r--r-- | addons/website_event_track/views/event_track_templates.xml | 38 | ||||
| -rw-r--r-- | addons/website_event_track/views/event_track_views.xml | 119 | ||||
| -rw-r--r-- | addons/website_event_track/views/event_views.xml | 19 |
10 files changed, 434 insertions, 229 deletions
diff --git a/addons/website_event/models/event.py b/addons/website_event/models/event.py index 6c1e1ddf809..b6596223e3b 100644 --- a/addons/website_event/models/event.py +++ b/addons/website_event/models/event.py @@ -25,9 +25,10 @@ class Event(models.Model): ) is_participating = fields.Boolean("Is Participating", compute="_compute_is_participating") - show_menu = fields.Boolean('Dedicated Menu', compute='_get_show_menu', inverse='_set_show_menu', - help="Creates menus Introduction, Location and Register on the page " - " of the event on the website.", store=True) + website_menu = fields.Boolean( + 'Dedicated Menu', compute='_compute_website_menu', inverse='_set_website_menu', + help="Creates menus Introduction, Location and Register on the page " + " of the event on the website.", store=True) menu_id = fields.Many2one('website.menu', 'Event Menu') def _compute_is_participating(self): @@ -46,46 +47,41 @@ class Event(models.Model): if event.id: # avoid to perform a slug on a not yet saved record in case of an onchange. event.website_url = '/event/%s' % slug(event) - @api.multi - def _get_new_menu_pages(self): - """ Retuns a list of tuple ('Page name', 'relative page url') for the event """ + def _get_menu_entries(self): self.ensure_one() - todo = [ - (_('Introduction'), 'website_event.template_intro'), - (_('Location'), 'website_event.template_location') + return [ + (_('Introduction'), False, 'website_event.template_intro'), + (_('Location'), False, 'website_event.template_location'), + (_('Register'), '/event/%s/register' % slug(self), False), ] - result = [] - for name, path in todo: - complete_name = name + ' ' + self.name - newpath = self.env['website'].new_page(complete_name, path, ispage=False) - url = "/event/" + slug(self) + "/page/" + newpath - result.append((name, url)) - result.append((_('Register'), '/event/%s/register' % slug(self))) - return result @api.multi - def _set_show_menu(self): + def _set_website_menu(self): for event in self: - if event.menu_id and not event.show_menu: + if event.menu_id and not event.website_menu: event.menu_id.unlink() - elif event.show_menu and not event.menu_id: - root_menu = self.env['website.menu'].create({'name': event.name}) - to_create_menus = event._get_new_menu_pages() - seq = 0 - for name, url in to_create_menus: - self.env['website.menu'].create({ - 'name': name, - 'url': url, - 'parent_id': root_menu.id, - 'sequence': seq, - }) - seq += 1 - event.menu_id = root_menu + elif event.website_menu: + if not event.menu_id: + root_menu = self.env['website.menu'].create({'name': event.name}) + event.menu_id = root_menu + + for sequence, (name, url, xml_id) in enumerate(self._get_menu_entries()): + existing_pages = event.menu_id.child_id.mapped('name') + if name not in existing_pages: + if not url: + newpath = self.env['website'].new_page(name + ' ' + self.name, xml_id, ispage=False) + url = "/event/" + slug(self) + "/page/" + newpath + self.env['website.menu'].create({ + 'name': name, + 'url': url, + 'parent_id': event.menu_id.id, + 'sequence': sequence, + }) @api.multi - def _get_show_menu(self): + def _compute_website_menu(self): for event in self: - event.show_menu = bool(event.menu_id) + event.website_menu = bool(event.menu_id) @api.multi def google_map_img(self, zoom=8, width=298, height=298): diff --git a/addons/website_event_track/controllers/main.py b/addons/website_event_track/controllers/main.py index 544c749c635..5a5a096127c 100644 --- a/addons/website_event_track/controllers/main.py +++ b/addons/website_event_track/controllers/main.py @@ -65,7 +65,7 @@ class WebsiteEventTrackController(http.Controller): 'dates': dates } - @http.route(['''/event/<model("event.event", "[('show_tracks','=',1)]"):event>/agenda'''], type='http', auth="public", website=True) + @http.route(['''/event/<model("event.event", "[('website_track','=',1)]"):event>/agenda'''], type='http', auth="public", website=True) def event_agenda(self, event, tag=None, **post): days_tracks = collections.defaultdict(lambda: []) for track in event.track_ids.sorted(lambda track: (track.date, bool(track.location_id))): @@ -79,22 +79,16 @@ class WebsiteEventTrackController(http.Controller): tracks_by_days[day] = tracks days[day] = self._prepare_calendar(event, tracks) - speakers = {} - for track in event.sudo().track_ids: - speakers_name = u" – ".join(track.speaker_ids.mapped('name')) - speakers[track.id] = speakers_name - return request.render("website_event_track.agenda", { 'event': event, 'days': days, 'tracks_by_days': tracks_by_days, - 'speakers': speakers, 'tag': tag }) @http.route([ - '''/event/<model("event.event", "[('show_tracks','=',1)]"):event>/track''', - '''/event/<model("event.event", "[('show_tracks','=',1)]"):event>/track/tag/<model("event.track.tag"):tag>''' + '''/event/<model("event.event", "[('website_track','=',1)]"):event>/track''', + '''/event/<model("event.event", "[('website_track','=',1)]"):event>/track/tag/<model("event.track.tag"):tag>''' ], type='http', auth="public", website=True) def event_tracks(self, event, tag=None, **post): searches = {} @@ -114,7 +108,7 @@ class WebsiteEventTrackController(http.Controller): } return request.render("website_event_track.tracks", values) - @http.route(['''/event/<model("event.event", "[('show_track_proposal','=',1)]"):event>/track_proposal'''], type='http', auth="public", website=True) + @http.route(['''/event/<model("event.event", "[('website_track_proposal','=',1)]"):event>/track_proposal'''], type='http', auth="public", website=True) def event_track_proposal(self, event, **post): return request.render("website_event_track.event_track_proposal", {'event': event}) diff --git a/addons/website_event_track/data/event_demo.xml b/addons/website_event_track/data/event_demo.xml index 02fa5a6cd64..35573323586 100644 --- a/addons/website_event_track/data/event_demo.xml +++ b/addons/website_event_track/data/event_demo.xml @@ -17,14 +17,14 @@ This should be done at the end so that the menu is complete --> <record id="event.event_0" model="event.event"> - <field name="show_tracks">True</field> - <field name="show_track_proposal">True</field> + <field name="website_track">True</field> + <field name="website_track_proposal">True</field> </record> <!-- Show menu after so that the menu is created with tracks --> <record id="event.event_0" model="event.event"> - <field name="show_menu">True</field> + <field name="website_menu">True</field> </record> <!-- Sponsorships --> @@ -98,11 +98,11 @@ <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="1"/> - <field eval="[(4, ref('base.res_partner_2')),(4, ref('base.res_partner_3'))]" name="speaker_ids"/> + <field name="partner_id" ref="base.res_partner_2"/> <field name="color">3</field> - <field name="state">draft</field> + <field name="stage_id" ref="event_track_stage0"/> + <field name="kanban_state">blocked</field> </record> - <record id="event_track2" model="event.track"> <field name="name">How to integrate hardware materials with the Odoo point of sale.</field> <field name="website_published" eval="True"/> @@ -110,8 +110,9 @@ <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="0.25"/> - <field eval="[(4, ref('base.res_partner_3'))]" name="speaker_ids"/> - <field name="state">confirmed</field> + <field name="partner_id" ref="base.res_partner_3"/> + <field name="stage_id" ref="event_track_stage1"/> + <field name="kanban_state">done</field> </record> <record id="event_track3" model="event.track"> <field name="name">How to develop real time apps, the website live chat module explained.</field> @@ -120,8 +121,8 @@ <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="0.3"/> - <field eval="[(4, ref('base.res_partner_4'))]" name="speaker_ids"/> - <field name="state">confirmed</field> + <field name="partner_id" ref="base.res_partner_4"/> + <field name="stage_id" ref="event_track_stage1"/> </record> <record id="event_track4" model="event.track"> <field name="name">How to develop automated tests in the Odoo web client.</field> @@ -130,8 +131,8 @@ <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="0.5"/> - <field eval="[(4, ref('base.res_partner_2'))]" name="speaker_ids"/> - <field name="state">published</field> + <field name="partner_id" ref="base.res_partner_2"/> + <field name="stage_id" ref="event_track_stage3"/> </record> <record id="event_track5" model="event.track"> <field name="name">The new way to promote your modules in the Apps platform and Odoo website.</field> @@ -140,8 +141,8 @@ <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="0.5"/> - <field eval="[(4, ref('base.res_partner_4'))]" name="speaker_ids"/> - <field name="state">announced</field> + <field name="partner_id" ref="base.res_partner_4"/> + <field name="stage_id" ref="event_track_stage2"/> </record> <record id="event_track6" model="event.track"> <field name="name">Detailed roadmap of accounting new modules and improvements for version 8.</field> @@ -150,8 +151,8 @@ <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="0.5"/> - <field eval="[(4, ref('base.res_partner_3'))]" name="speaker_ids"/> - <field name="state">announced</field> + <field name="partner_id" ref="base.res_partner_3"/> + <field name="stage_id" ref="event_track_stage2"/> </record> <record id="event_track7" model="event.track"> <field name="name">A technical explanation of Odoo as a CMS and a eCommerce platform for version 8.</field> @@ -160,8 +161,8 @@ <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="1"/> - <field eval="[(4, ref('base.res_partner_1'))]" name="speaker_ids"/> - <field name="state">published</field> + <field name="partner_id" ref="base.res_partner_1"/> + <field name="stage_id" ref="event_track_stage3"/> </record> <record id="event_track8" model="event.track"> <field name="name">Discover Odoo CRM: How to optimize your sales, from leads to sales orders.</field> @@ -171,8 +172,9 @@ <field name="location_id" ref="website_event_track.event_track_location7"/> <field name="duration" eval="0.5"/> <field name="color">2</field> - <field eval="[(4, ref('base.res_partner_4'))]" name="speaker_ids"/> - <field name="state">published</field> + <field name="partner_id" ref="base.res_partner_4"/> + <field name="stage_id" ref="event_track_stage3"/> + <field name="kanban_state">blocked</field> </record> <record id="event_track9" model="event.track"> <field name="name">How to use Odoo for your HR process: recruitment, leaves management, appraisals, expenses, etc.</field> @@ -183,8 +185,8 @@ <field name="location_id" ref="website_event_track.event_track_location7"/> <field name="duration" eval="1"/> <field name="color">2</field> - <field eval="[(4, ref('base.res_partner_12'))]" name="speaker_ids"/> - <field name="state">published</field> + <field name="partner_id" ref="base.res_partner_12"/> + <field name="stage_id" ref="event_track_stage3"/> </record> <record id="event_track10" model="event.track"> <field name="name">Raising qualitive insights with the survey app</field> @@ -194,7 +196,7 @@ <field name="location_id" ref="website_event_track.event_track_location7"/> <field name="duration" eval="0.5"/> <field name="color">5</field> - <field name="state">draft</field> + <field name="stage_id" ref="event_track_stage0"/> </record> <record id="event_track11" model="event.track"> <field name="name">Discover Odoo Point-of-Sale: Your shop ready to use in 30 minutes.</field> @@ -203,8 +205,8 @@ <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="0.5"/> - <field eval="[(4, ref('base.res_partner_4'))]" name="speaker_ids"/> - <field name="state">confirmed</field> + <field name="partner_id" ref="base.res_partner_4"/> + <field name="stage_id" ref="event_track_stage1"/> </record> <record id="event_track12" model="event.track"> <field name="name">Manage your events with Odoo, the new training modules.</field> @@ -213,8 +215,8 @@ <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="0.5"/> - <field eval="[(4, ref('base.res_partner_2')),(4, ref('base.res_partner_12'))]" name="speaker_ids"/> - <field name="state">announced</field> + <field name="partner_id" ref="base.res_partner_2"/> + <field name="stage_id" ref="event_track_stage2"/> </record> <record id="event_track13" model="event.track"> <field name="name">Advanced reporting with Google Spreadsheets integration.</field> @@ -223,8 +225,8 @@ <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="0.25"/> - <field eval="[(4, ref('base.res_partner_12'))]" name="speaker_ids"/> - <field name="state">published</field> + <field name="partner_id" ref="base.res_partner_12"/> + <field name="stage_id" ref="event_track_stage3"/> </record> <record id="event_track14" model="event.track"> <field name="name">New Paypal modules (portal, handling, installments).</field> @@ -233,8 +235,8 @@ <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="0.5"/> - <field eval="[(4, ref('base.res_partner_10'))]" name="speaker_ids"/> - <field name="state">published</field> + <field name="partner_id" ref="base.res_partner_10"/> + <field name="stage_id" ref="event_track_stage3"/> </record> <record id="event_track15" model="event.track"> <field name="name">Odoo Mobile for Notes, Meetings and Messages.</field> @@ -243,8 +245,8 @@ <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="0.5"/> - <field eval="[(4, ref('base.res_partner_3'))]" name="speaker_ids"/> - <field name="state">announced</field> + <field name="partner_id" ref="base.res_partner_3"/> + <field name="stage_id" ref="event_track_stage3"/> </record> <record id="event_track16" model="event.track"> <field name="name">Odoo as your Enterprise Social Network.</field> @@ -253,8 +255,8 @@ <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="0.5"/> - <field eval="[(4, ref('base.res_partner_12'))]" name="speaker_ids"/> - <field name="state">draft</field> + <field name="partner_id" ref="base.res_partner_12"/> + <field name="stage_id" ref="event_track_stage0"/> </record> <record id="event_track17" model="event.track"> <field name="name">The Art of Making an Odoo Demo.</field> @@ -263,8 +265,8 @@ <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="0.5"/> - <field eval="[(4, ref('base.res_partner_10'))]" name="speaker_ids"/> - <field name="state">draft</field> + <field name="partner_id" ref="base.res_partner_10"/> + <field name="stage_id" ref="event_track_stage0"/> </record> <record id="event_track18" model="event.track"> <field name="name">How to build your marketing strategy for the purpose of generating leads with Odoo.</field> @@ -274,8 +276,8 @@ <field name="location_id" ref="website_event_track.event_track_location9"/> <field name="duration" eval="0.5"/> <field name="color">5</field> - <field eval="[(4, ref('base.res_partner_2'))]" name="speaker_ids"/> - <field name="state">confirmed</field> + <field name="partner_id" ref="base.res_partner_2"/> + <field name="stage_id" ref="event_track_stage1"/> </record> <record id="event_track19" model="event.track"> <field name="name">Advanced lead management with Odoo: tips and tricks from the fields</field> @@ -285,8 +287,8 @@ <field name="location_id" ref="website_event_track.event_track_location9"/> <field name="duration" eval="0.5"/> <field name="color">5</field> - <field eval="[(4, ref('base.res_partner_4'))]" name="speaker_ids"/> - <field name="state">confirmed</field> + <field name="partner_id" ref="base.res_partner_4"/> + <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> @@ -295,8 +297,8 @@ <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="0.5"/> - <field eval="[(4, ref('base.res_partner_3'))]" name="speaker_ids"/> - <field name="state">confirmed</field> + <field name="partner_id" ref="base.res_partner_3"/> + <field name="stage_id" ref="event_track_stage1"/> </record> <record id="event_track21" model="event.track"> <field name="name">Recruiting high skilled talents with Odoo HR apps</field> @@ -306,7 +308,7 @@ <field name="location_id" ref="website_event_track.event_track_location9"/> <field name="duration" eval="0.5"/> <field name="color">7</field> - <field name="state">confirmed</field> + <field name="stage_id" ref="event_track_stage1"/> </record> <record id="event_track22" model="event.track"> <field name="name">Manage your KPIs (recomended to openERP partners).</field> @@ -315,8 +317,8 @@ <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="0.5"/> - <field eval="[(4, ref('base.res_partner_3'))]" name="speaker_ids"/> - <field name="state">draft</field> + <field name="partner_id" ref="base.res_partner_3"/> + <field name="stage_id" ref="event_track_stage0"/> </record> <record id="event_track23" model="event.track"> <field name="name">Key Success factors selling Odoo.</field> @@ -325,8 +327,8 @@ <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="0.5"/> - <field eval="[(4, ref('base.res_partner_1'))]" name="speaker_ids"/> - <field name="state">announced</field> + <field name="partner_id" ref="base.res_partner_1"/> + <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> @@ -335,8 +337,8 @@ <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="1.5"/> - <field eval="[(4, ref('base.res_partner_12')),(4, ref('base.res_partner_18'))]" name="speaker_ids"/> - <field name="state">announced</field> + <field name="partner_id" ref="base.res_partner_18"/> + <field name="stage_id" ref="event_track_stage3"/> </record> <record id="event_track25" model="event.track"> <field name="name">Merge proposals review, code sprint (entire afternoon)</field> @@ -345,8 +347,8 @@ <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="2.5"/> - <field eval="[(4, ref('base.res_partner_12')),(4, ref('base.res_partner_18'))]" name="speaker_ids"/> - <field name="state">announced</field> + <field name="partner_id" ref="base.res_partner_18"/> + <field name="stage_id" ref="event_track_stage3"/> </record> <record id="event_track27" model="event.track"> <field name="name">Odoo in 2014</field> @@ -354,8 +356,8 @@ <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="1"/> - <field eval="[(4, ref('base.res_partner_1'))]" name="speaker_ids"/> - <field name="state">published</field> + <field name="partner_id" ref="base.res_partner_1"/> + <field name="stage_id" ref="event_track_stage3"/> <field name="color">3</field> </record> <record id="event_track28" model="event.track"> @@ -364,8 +366,8 @@ <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="0.5"/> - <field eval="[(4, ref('base.res_partner_2'))]" name="speaker_ids"/> - <field name="state">published</field> + <field name="partner_id" ref="base.res_partner_2"/> + <field name="stage_id" ref="event_track_stage2"/> </record> <record id="event_track29" model="event.track"> <field name="name">The new marketing strategy.</field> @@ -373,8 +375,8 @@ <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="0.25"/> - <field eval="[(4, ref('base.res_partner_2'))]" name="speaker_ids"/> - <field name="state">published</field> + <field name="partner_id" ref="base.res_partner_2"/> + <field name="stage_id" ref="event_track_stage2"/> <field name="color">6</field> </record> <record id="event_track30" model="event.track"> @@ -383,7 +385,7 @@ <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="0.25"/> - <field name="state">confirmed</field> + <field name="stage_id" ref="event_track_stage1"/> </record> <record id="event_track31" model="event.track"> <field name="name">Lunch</field> @@ -391,7 +393,7 @@ <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="1"/> - <field name="state">confirmed</field> + <field name="stage_id" ref="event_track_stage1"/> </record> </odoo> diff --git a/addons/website_event_track/data/event_track_data.xml b/addons/website_event_track/data/event_track_data.xml index 7979921cbb5..88af18033e2 100644 --- a/addons/website_event_track/data/event_track_data.xml +++ b/addons/website_event_track/data/event_track_data.xml @@ -1,6 +1,32 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> <data noupdate="1"> + <!-- Email templates --> + <record id="mail_template_data_track_confirmation" model="mail.template"> + <field name="name">Track: Confirmation</field> + <field name="subject">Confirmation of ${object.name}</field> + <field name="model_id" ref="website_event_track.model_event_track"/> + <field name="use_default_to" eval="True"/> + <field name="body_html" type="xml"> +<div> + <p> + Dear <t t-esc="object.partner_name"/> + </p><p> + We are pleased to inform you that your proposal ${object.name} has been accepted and confirmed for the event ${object.event_id.name}. + </p><p> + You will find more details here: + <div style="margin-top: 16px;"> + <a href="/event/${object.event_id.id}/" + style="padding: 8px 12px; font-size: 12px; color: #FFFFFF; text-decoration: none !important; font-weight: 400; background-color: #875A7B; border: 0px solid #875A7B; border-radius:3px"> + View Event + </a> + </div> + </p> + <p>Sincerely,</p> +</div> + </field> + <field name="auto_delete" eval="True"/> + </record> <record id="event_sponsor_type1" model="event.sponsor.type"> <field name="name">Bronze</field> @@ -15,6 +41,36 @@ <field name="sequence">1</field> </record> + <record id="event_track_stage0" model="event.track.stage"> + <field name="name">Proposal</field> + <field name="sequence">1</field> + </record> + <record id="event_track_stage1" model="event.track.stage"> + <field name="name">Confirmed</field> + <field name="sequence">2</field> + <field name="mail_template_id" ref="mail_template_data_track_confirmation"/> + </record> + <record id="event_track_stage2" model="event.track.stage"> + <field name="name">Announced</field> + <field name="sequence">3</field> + </record> + <record id="event_track_stage3" model="event.track.stage"> + <field name="name">Published</field> + <field name="sequence">4</field> + <field name="is_done" eval="True"/> + </record> + <record id="event_track_stage4" model="event.track.stage"> + <field name="name">Refused</field> + <field name="sequence">5</field> + <field name="fold" eval="True"/> + </record> + <record id="event_track_stage5" model="event.track.stage"> + <field name="name">Cancelled</field> + <field name="sequence">6</field> + <field name="fold" eval="True"/> + <field name="is_cancel" eval="True"/> + </record> + <!-- Event-related subtypes for new track / Chatter --> <record id="mt_event_track" model="mail.message.subtype"> <field name="name">New Track</field> @@ -23,5 +79,20 @@ <field name="default" eval="False"/> </record> + <!-- Track subtypes --> + <record id="mt_track_blocked" model="mail.message.subtype"> + <field name="name">Track Blocked</field> + <field name="res_model">event.track</field> + <field name="default" eval="False"/> + <field name="internal" eval="True"/> + <field name="description">Track blocked</field> + </record> + <record id="mt_track_ready" model="mail.message.subtype"> + <field name="name">Track Ready</field> + <field name="res_model">event.track</field> + <field name="default" eval="True"/> + <field name="internal" eval="True"/> + <field name="description">Track Ready for Next Stage</field> + </record> </data> </odoo> diff --git a/addons/website_event_track/models/event.py b/addons/website_event_track/models/event.py index 08d8cd35b6c..6bcf0f1a757 100644 --- a/addons/website_event_track/models/event.py +++ b/addons/website_event_track/models/event.py @@ -9,49 +9,58 @@ class Event(models.Model): _inherit = "event.event" track_ids = fields.One2many('event.track', 'event_id', 'Tracks') + track_count = fields.Integer('Tracks', compute='_compute_track_count') + sponsor_ids = fields.One2many('event.sponsor', 'event_id', 'Sponsors') - show_track_proposal = fields.Boolean('Tracks Proposals', compute='_get_show_menu', inverse='_set_show_menu', store=True) - show_tracks = fields.Boolean('Show Tracks on Website', compute='_get_show_menu', inverse='_set_show_menu', store=True) - count_tracks = fields.Integer('Tracks', compute='_count_tracks') + sponsor_count = fields.Integer('Sponsors', compute='_compute_sponsor_count') + + website_track = fields.Boolean('Tracks on Website', compute='_compute_website_track', inverse='_set_website_menu') + website_track_proposal = fields.Boolean('Proposals on Website', compute='_compute_website_track_proposal', inverse='_set_website_menu') + allowed_track_tag_ids = fields.Many2many('event.track.tag', relation='event_allowed_track_tags_rel', string='Available Track Tags') - tracks_tag_ids = fields.Many2many('event.track.tag', relation='event_track_tags_rel', string='Track Tags', compute='_get_tracks_tag_ids', store=True) - count_sponsor = fields.Integer('# Sponsors', compute='_count_sponsor') + tracks_tag_ids = fields.Many2many( + 'event.track.tag', relation='event_track_tags_rel', string='Track Tags', + compute='_compute_tracks_tag_ids', store=True) @api.multi - def _get_new_menu_pages(self): - self.ensure_one() - result = super(Event, self)._get_new_menu_pages() - if self.show_tracks: - result.append((_('Talks'), '/event/%s/track' % slug(self))) - result.append((_('Agenda'), '/event/%s/agenda' % slug(self))) - if self.show_track_proposal: - result.append((_('Talk Proposals'), '/event/%s/track_proposal' % slug(self))) - return result + def _compute_track_count(self): + data = self.env['event.track'].read_group([('stage_id.is_cancel', '!=', True)], ['event_id'], ['event_id']) + result = dict((data['event_id'][0], data['event_id_count']) for data in data) + for event in self: + event.track_count = result.get(event.id, 0) @api.multi - def _set_show_menu(self): + def _compute_sponsor_count(self): + data = self.env['event.sponsor'].read_group([], ['event_id'], ['event_id']) + result = dict((data['event_id'][0], data['event_id_count']) for data in data) for event in self: - # if the number of menu items have changed, then menu items must be regenerated - if event.menu_id: - nbr_menu_items = len(event._get_new_menu_pages()) - if nbr_menu_items != len(event.menu_id.child_id): - event.menu_id.unlink() - return super(Event, self)._set_show_menu() + event.sponsor_count = result.get(event.id, 0) @api.multi - def _count_tracks(self): - track_data = self.env['event.track'].read_group([('state', '!=', 'cancel')], ['event_id', 'state'], ['event_id']) - result = dict((data['event_id'][0], data['event_id_count']) for data in track_data) + def _compute_website_track(self): for event in self: - event.count_tracks = result.get(event.id, 0) + existing_pages = event.menu_id.child_id.mapped('name') + event.website_track = _('Talks') in existing_pages @api.multi - @api.depends('track_ids.tag_ids') - def _get_tracks_tag_ids(self): + def _compute_website_track_proposal(self): for event in self: - event.tracks_tag_ids = event.track_ids.mapped('tag_ids').ids + existing_pages = event.menu_id.child_id.mapped('name') + event.website_track_proposal = _('Talk Proposals') in existing_pages @api.multi - def _count_sponsor(self): + @api.depends('track_ids.tag_ids') + def _compute_tracks_tag_ids(self): for event in self: - event.count_sponsor = len(event.sponsor_ids) + event.tracks_tag_ids = event.track_ids.mapped('tag_ids').ids + + def _get_menu_entries(self): + self.ensure_one() + res = super(Event, self)._get_menu_entries() + if self.website_track: + res += [ + (_('Talks'), '/event/%s/track' % slug(self), False), + (_('Agenda'), '/event/%s/agenda' % slug(self), False)] + if self.website_track_proposal: + res += [(_('Talk Proposals'), '/event/%s/track_proposal' % slug(self), False)] + return res diff --git a/addons/website_event_track/models/event_track.py b/addons/website_event_track/models/event_track.py index 7560077da61..9b46b618d6e 100644 --- a/addons/website_event_track/models/event_track.py +++ b/addons/website_event_track/models/event_track.py @@ -27,26 +27,58 @@ class TrackLocation(models.Model): name = fields.Char('Room') +class TrackStage(models.Model): + _name = 'event.track.stage' + _description = 'Track Stage' + _order = 'sequence, id' + + name = fields.Char(string='Stage Name', required=True, translate=True) + sequence = fields.Integer(string='Sequence', default=1) + mail_template_id = fields.Many2one( + 'mail.template', string='Email Template', + domain=[('model', '=', 'event.track')], + help="If set an email will be sent to the customer when the track reaches this step.") + fold = fields.Boolean( + string='Folded in Kanban', + help='This stage is folded in the kanban view when there are no records in that stage to display.') + is_done = fields.Boolean(string='Accepted Stage') + is_cancel = fields.Boolean(string='Canceled Stage') + + class Track(models.Model): _name = "event.track" _description = 'Event Track' _order = 'priority, date' - _inherit = ['mail.thread', 'website.seo.metadata', 'website.published.mixin'] + _inherit = ['mail.thread', 'mail.activity.mixin', 'website.seo.metadata', 'website.published.mixin'] _mail_mass_mailing = _('Track Speakers') + @api.model + def _get_default_stage_id(self): + return self.env['event.track.stage'].search([], limit=1).id + name = fields.Char('Title', required=True, translate=True) active = fields.Boolean(default=True) user_id = fields.Many2one('res.users', 'Responsible', track_visibility='onchange', default=lambda self: self.env.user) - partner_id = fields.Many2one('res.partner', 'Proposed by') - partner_name = fields.Char('Partner Name') - partner_email = fields.Char('Partner Email') - partner_phone = fields.Char('Partner Phone') - partner_biography = fields.Html('Partner Biography') - speaker_ids = fields.Many2many('res.partner', string='Speakers') + partner_id = fields.Many2one('res.partner', 'Speaker') + partner_name = fields.Char('Speaker Name') + partner_email = fields.Char('Speaker Email') + partner_phone = fields.Char('Speaker Phone') + partner_biography = fields.Html('Speaker Biography') tag_ids = fields.Many2many('event.track.tag', string='Tags') - state = fields.Selection([ - ('draft', 'Proposal'), ('confirmed', 'Confirmed'), ('announced', 'Announced'), ('published', 'Published'), ('refused', 'Refused'), ('cancel', 'Cancelled')], - 'Status', default='draft', required=True, copy=False, track_visibility='onchange') + stage_id = fields.Many2one( + 'event.track.stage', string='Stage', + index=True, copy=False, default=_get_default_stage_id, + group_expand='_read_group_stage_ids', + required=True, track_visibility='onchange') + kanban_state = fields.Selection([ + ('normal', 'Grey'), + ('done', 'Green'), + ('blocked', 'Red')], string='Kanban State', + copy=False, default='normal', required=True, track_visibility='onchange', + help="A track's kanban state indicates special situations affecting it:\n" + " * Grey is the default situation\n" + " * Red indicates something is preventing the progress of this track\n" + " * Green indicates the track is ready to be pulled to the next stage") description = fields.Html('Track Description', translate=html_translate, sanitize_attributes=False) date = fields.Datetime('Track Date') duration = fields.Float('Duration', default=1.5) @@ -57,7 +89,7 @@ class Track(models.Model): ('0', 'Low'), ('1', 'Medium'), ('2', 'High'), ('3', 'Highest')], 'Priority', required=True, default='1') - image = fields.Binary('Image', related='speaker_ids.image_medium', store=True, attachment=True) + image = fields.Binary('Image', related='partner_id.image_medium', store=True, attachment=True) @api.multi @api.depends('name') @@ -67,59 +99,72 @@ class Track(models.Model): if not isinstance(track.id, models.NewId): track.website_url = '/event/%s/track/%s' % (slug(track.event_id), slug(track)) + @api.onchange('partner_id') + def _onchange_partner_id(self): + if self.partner_id: + self.partner_name = self.partner_id.name + self.partner_email = self.partner_id.email + self.partner_phone = self.partner_id.phone + self.partner_biography = self.partner_id.website_description + @api.model def create(self, vals): - res = super(Track, self).create(vals) - res.message_subscribe(res.speaker_ids.ids) - res.message_post_with_view( + track = super(Track, self).create(vals) + + track.event_id.message_post_with_view( 'website_event_track.event_track_template_new', - subject=res.name, - subtype_id=self.env['ir.model.data'].xmlid_to_res_id('website_event_track.mt_event_track')) - return res + values={'track': track}, + subject=track.name, + subtype_id=self.env.ref('website_event_track.mt_event_track').id, + ) + + return track @api.multi def write(self, vals): - if vals.get('state') == 'published': - vals.update({'website_published': True}) + if 'stage_id' in vals and 'kanban_state' not in vals: + vals['kanban_state'] = 'normal' res = super(Track, self).write(vals) - if vals.get('speaker_ids'): - self.message_subscribe([speaker['id'] for speaker in self.resolve_2many_commands('speaker_ids', vals['speaker_ids'], ['id'])]) + if vals.get('partner_id'): + self.message_subscribe(vals['partner_id']) return res @api.model - def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True): - """ Override read_group to always display all states. """ - if groupby and groupby[0] == "state": - # Default result structure - states = [('draft', 'Proposal'), ('confirmed', 'Confirmed'), ('announced', 'Announced'), ('published', 'Published'), ('cancel', 'Cancelled')] - read_group_all_states = [{ - '__context': {'group_by': groupby[1:]}, - '__domain': domain + [('state', '=', state_value)], - 'state': state_value, - 'state_count': 0, - } for state_value, state_name in states] - # Get standard results - read_group_res = super(Track, self).read_group(domain, fields, groupby, offset=offset, limit=limit, orderby=orderby) - # Update standard results with default results - result = [] - for state_value, state_name in states: - res = filter(lambda x: x['state'] == state_value, read_group_res) - if not res: - res = filter(lambda x: x['state'] == state_value, read_group_all_states) - if state_value == 'cancel': - res[0]['__fold'] = True - res[0]['state'] = [state_value, state_name] - result.append(res[0]) - return result - else: - return super(Track, self).read_group(domain, fields, groupby, offset=offset, limit=limit, orderby=orderby) + def _read_group_stage_ids(self, stages, domain, order): + """ Always display all stages """ + return stages.search([], order=order) @api.multi - def open_track_speakers_list(self): + def _track_template(self, tracking): + res = super(Track, self)._track_template(tracking) + track = self[0] + changes, tracking_value_ids = tracking[track.id] + if 'stage_id' in changes and track.stage_id.mail_template_id: + res['stage_id'] = (track.stage_id.mail_template_id, {'composition_mode': 'mass_mail'}) + return res + + @api.multi + def _track_subtype(self, init_values): self.ensure_one() + if 'kanban_state' in init_values and self.kanban_state == 'blocked': + return 'website_event_track.mt_track_blocked' + elif 'kanban_state' in init_values and self.kanban_state == 'done': + return 'website_event_track.mt_track_ready' + return super(Track, self)._track_subtype(init_values) + + @api.multi + def message_get_suggested_recipients(self): + recipients = super(Track, self).message_get_suggested_recipients() + for track in self: + if track.partner_email != track.partner_id.email: + track._message_add_suggested_recipient(recipients, email=track.partner_email, reason=_('Speaker Email')) + return recipients + + @api.multi + def open_track_speakers_list(self): return { 'name': _('Speakers'), - 'domain': [('id', 'in', [partner.id for partner in self.speaker_ids])], + 'domain': [('id', 'in', self.mapped('partner_id').ids)], 'view_type': 'form', 'view_mode': 'kanban,form', 'res_model': 'res.partner', @@ -130,6 +175,7 @@ class Track(models.Model): class SponsorType(models.Model): _name = "event.sponsor.type" + _description = 'Event Sponsor Type' _order = "sequence" name = fields.Char('Sponsor Type', required=True, translate=True) @@ -138,6 +184,7 @@ class SponsorType(models.Model): class Sponsor(models.Model): _name = "event.sponsor" + _description = 'Event Sponsor' _order = "sequence" event_id = fields.Many2one('event.event', 'Event', required=True) diff --git a/addons/website_event_track/security/ir.model.access.csv b/addons/website_event_track/security/ir.model.access.csv index 88b9061d615..729a0bc42df 100644 --- a/addons/website_event_track/security/ir.model.access.csv +++ b/addons/website_event_track/security/ir.model.access.csv @@ -10,3 +10,5 @@ access_event_track_sponsor_type_manager,event.track.sponsor.type.public,model_ev access_event_track_sponsor_type_public,event.track.sponsor.type.public,model_event_sponsor_type,,1,0,0,0
access_event_track_sponsor_manager,event.track.sponsor.type.public,model_event_sponsor,event.group_event_manager,1,1,1,1
access_event_track_sponsor_public,event.track.sponsor.public,model_event_sponsor,,1,0,0,0
+access_event_track_stage_all,event.track.stage.all,model_event_track_stage,,1,0,0,0
+access_event_track_stage_event_manager,event.track.stage.event.manager,model_event_track_stage,event.group_event_manager,1,1,1,1
\ No newline at end of file diff --git a/addons/website_event_track/views/event_track_templates.xml b/addons/website_event_track/views/event_track_templates.xml index 585527f3b27..9e6e86b0c63 100644 --- a/addons/website_event_track/views/event_track_templates.xml +++ b/addons/website_event_track/views/event_track_templates.xml @@ -80,9 +80,10 @@ <t t-if="track"> <a t-attf-href="/event/#{ slug(event) }/track/#{ slug(track) }"> <span t-esc="track and track.name"/> + <span t-if="not track.website_published" class="label label-warning">unpublished</span> </a> <div class="text-muted"> - <small t-esc="speakers[track.id]"/> + <small t-esc="track.partner_id.sudo().name"/> </div> </t> </td> @@ -97,7 +98,7 @@ <span t-esc="track.name"/> </a> <div class="text-muted"> - <small t-esc="speakers[track.id]"/> + <small t-esc="track.partner_id.sudo()"/> </div> </td> </t> @@ -129,8 +130,8 @@ <small t-if="not track.website_published" class="label label-danger">unpublished</small> </h3> <ul class="list-inline mb0"> - <li t-if="track.speaker_ids" class="text-muted fa fa-user"> - <t t-esc="', '.join([speaker.name for speaker in track.speaker_ids])"></t> + <li t-if="track.partner_id" class="text-muted fa fa-user"> + <t t-esc="track.partner_id.sudo().name"/> </li> <li t-if="track.date" class="text-muted fa fa-calendar"> <span t-field="track.date" t-options='{"hide_seconds":"True"}'/></li> <li class="text-muted fa fa-map-marker" t-if="track.location_id"> @@ -224,17 +225,17 @@ </div> </div> </section> - <div t-foreach="track.speaker_ids" t-as="speaker" class="well mt32"> + <div t-if="track.partner_id" class="well mt32"> <div class="row"> <div class="col-sm-2"> - <span t-field="speaker.sudo().image_medium" + <span t-field="track.partner_id.sudo().image_medium" t-options='{"widget": "image", "class": "img-circle"}'/> </div><div class="col-sm-10"> - <h4 t-field="speaker.name" class="mb4"/> - <div class="fa fa-home mb16" t-if="speaker.website"> - <a t-att-href="speaker.website"><span t-field="speaker.website"/></a> + <h4 t-field="track.partner_id.name" class="mb4"/> + <div class="fa fa-home mb16" t-if="track.partner_id.website"> + <a t-att-href="track.partner_id.website"><span t-field="track.partner_id.website"/></a> </div> - <div t-field="speaker.website_description"/> + <div t-field="track.partner_id.website_description"/> </div> </div> </div> @@ -301,7 +302,7 @@ <h1 class="text-center mb0">Call for Proposals</h1> <h2 class="text-center text-muted mb32" t-esc="event.name"></h2> </section> - <section id="forms" t-if="not event.show_track_proposal"> + <section id="forms" t-if="not event.website_track_proposal"> <h1>Proposals are closed!</h1> <p> This event does not accept proposals. @@ -332,7 +333,7 @@ </p> </section> </div> - <section id="forms" t-if="event.show_track_proposal"> + <section id="forms" t-if="event.website_track_proposal"> <form class="form-horizontal mt32 js_website_submit_form" t-attf-action="/event/#{event.id}/track_proposal/post" method="post" enctype="multipart/form-data"> <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/> <div class="form-group"> @@ -448,14 +449,13 @@ <!-- Chatter templates --> <template id="event_track_template_new"> - <h3>New track proposal</h3> + <p>New track proposal <a href="#" t-att-data-oe-model="track._name" t-att-data-oe-id="track.id"> <t t-esc="track.name"/></a></p> <ul> - <li><b>Proposed By</b>: <t t-esc="object.partner_id.name or object.partner_name or object.partner_email"/></li> - <li><b>Mail</b>: <a t-attf-href="mailto:#{object.partner_email}"><t t-esc="object.partner_email"/></a></li> - <li><b>Phone</b>: <t t-esc="object.partner_phone"/></li> - <li><b>Title</b>: <t t-esc="object.name"/></li> - <li><b>Speakers Biography</b>: <t t-esc="object.partner_biography"/></li> - <li><b>Talk Introduction</b>: <t t-esc="object.description"/></li> + <li><b>Proposed By</b>: <t t-esc="track.partner_name or track.partner_email"/></li> + <li><b>Mail</b>: <a t-attf-href="mailto:#{track.partner_email}"><t t-esc="track.partner_email"/></a></li> + <li><b>Phone</b>: <t t-esc="track.partner_phone"/></li> + <li><b>Speakers Biography</b>: <t t-esc="track.partner_biography"/></li> + <li><b>Talk Introduction</b>: <t t-esc="track.description"/></li> </ul> </template> diff --git a/addons/website_event_track/views/event_track_views.xml b/addons/website_event_track/views/event_track_views.xml index f10c2c12ce5..7a9e740a673 100644 --- a/addons/website_event_track/views/event_track_views.xml +++ b/addons/website_event_track/views/event_track_views.xml @@ -6,11 +6,14 @@ <field name="name">event.track.kanban</field> <field name="model">event.track</field> <field name="arch" type="xml"> - <kanban default_group_by="state"> + <kanban default_group_by="stage_id"> <templates> <field name="color"/> - <field name="speaker_ids"/> + <field name="partner_id"/> + <field name="stage_id"/> <field name="website_url"/> + <field name="activity_ids"/> + <field name="activity_state"/> <t t-name="kanban-box"> <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click"> <div class="o_dropdown_kanban dropdown" groups="base.group_user"> @@ -31,16 +34,17 @@ <div> <t t-if="duration"><field name="duration" widget="float_time"/> hours</t> </div> - <div class="oe_kanban_bottom_right"> + <div class="oe_kanban_bottom_left"> <field name="priority" widget="priority"/> </div> - <div class="oe_kanban_footer_left"> - <t t-foreach="record.speaker_ids.raw_value.slice(0,11)" t-as="speaker"> - <img t-att-src="kanban_image('res.partner', 'image_small', speaker)" t-att-data-member_id="speaker" width="30px" height="30px"/> - </t> - <t t-if="record.speaker_ids.raw_value.length > 11 "> - <a name="open_track_speakers_list" type="object"><t t-esc="record.speaker_ids.raw_value.length - 11"> More</t></a> - </t> + <div class="oe_kanban_bottom_right"> + <img t-att-src="kanban_image('res.partner', 'image_small', record.partner_id.raw_value)" + t-att-title="record.partner_id.value" width="24" height="24" + class="oe_kanban_avatar pull-right"/> + <div class="pull-left mr4"> + <field name="activity_ids" widget="kanban_activity"/> + <field name="kanban_state" widget="kanban_state_selection" groups="base.group_user"/> + </div> </div> <div class="oe_clear"/> </div> @@ -71,14 +75,26 @@ <field name="name"/> <field name="event_id"/> <field name="location_id"/> - <field name="state"/> - <field name="speaker_ids"/> + <field name="stage_id"/> + <field name="partner_id"/> <filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/> <separator/> <filter string="Archived" name="inactive" domain="[('active','=',False)]"/> + <separator/> + <filter string="My Activities" name="activities_my" + domain="[('activity_ids.user_id', '=', uid)]"/> + <filter string="Today Activities" name="activities_today" + domain="[('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/> + <filter string="Upcoming Activities (7 days)" name="activities_week" + domain="['&', ('activity_ids.date_deadline', '>=', context_today().strftime('%Y-%m-%d')), + ('activity_ids.date_deadline', '<=', (context_today()+datetime.timedelta(days=7)).strftime('%Y-%m-%d')) + ]"/> + <filter string="Overdue Activities" name="activities_overdue" + domain="[('activity_ids.date_deadline', '<', context_today().strftime('%Y-%m-%d'))]" + help="Show all records which has next action date is before today"/> <group expand="0" string="Group By"> <filter string="Responsible" context="{'group_by': 'user_id'}"/> - <filter string="Status" context="{'group_by':'state'}"/> + <filter string="Stage" context="{'group_by':'stage_id'}"/> <filter string="Date" context="{'group_by':'date'}"/> <filter string="Event" context="{'group_by':'event_id'}"/> </group> @@ -92,7 +108,7 @@ <field name="arch" type="xml"> <form string="Event Track"> <header> - <field name="state" widget="statusbar" clickable="True"/> + <field name="stage_id" widget="statusbar" clickable="True"/> </header> <sheet string="Track"> <div class="oe_button_box" name="button_box"> @@ -124,7 +140,6 @@ <field name="partner_phone"/> </group> <group> - <field name="speaker_ids" widget="many2many_tags"/> <field name="date"/> <label for="duration"/> <div> @@ -137,6 +152,7 @@ </sheet> <div class="oe_chatter"> <field name="message_follower_ids" widget="mail_followers"/> + <field name="activity_ids" widget="mail_activity"/> <field name="message_ids" widget="mail_thread"/> </div> </form> @@ -184,7 +200,7 @@ <field name="name">Event Tracks</field> <field name="view_type">form</field> <field name="view_mode">kanban,tree,form,calendar,graph</field> - <field name="context">{'search_default_event_id': active_id, 'default_event_id': active_id, 'group_by': 'state'}</field> + <field name="context">{'search_default_event_id': active_id, 'default_event_id': active_id, 'group_by': 'stage_id'}</field> <field name="help" type="html"> <p class="oe_view_nocontent_create"> Click to add a track. @@ -272,7 +288,8 @@ <menuitem id="menu_event_sponsor_type" action="action_event_sponsor_type" - parent="event.menu_event_configuration"/> + parent="event.menu_event_configuration" + groups="base.group_no_one"/> <!-- EVENT.SPONSOR VIEWS --> <record model="ir.ui.view" id="view_event_sponsor_tree"> @@ -338,6 +355,74 @@ <menuitem id="menu_event_track_tag" action="action_event_track_tag" + parent="event.menu_event_configuration" + groups="base.group_no_one"/> + + <!-- EVENTS TRACK STAGES--> + <record id="event_track_stage_view_search" model="ir.ui.view"> + <field name="name">event.track.stage.view.search</field> + <field name="model">event.track.stage</field> + <field name="arch" type="xml"> + <search string="Track Stage"> + <field name="name" string="Track Stages"/> + </search> + </field> + </record> + + <record id="event_track_stage_view_form" model="ir.ui.view"> + <field name="name">event.track.stage.view.form</field> + <field name="model">event.track.stage</field> + <field name="arch" type="xml"> + <form string="Track Stage"> + <sheet> + <group> + <group> + <field name="name"/> + <field name="mail_template_id"/> + <field name="sequence" groups="base.group_no_one"/> + </group> + <group> + <field name="fold"/> + <field name="is_done"/> + <field name="is_cancel"/> + </group> + </group> + </sheet> + </form> + </field> + </record> + + <record id="event_track_stage_view_tree" model="ir.ui.view"> + <field name="name">event.track.stage.view.tree</field> + <field name="model">event.track.stage</field> + <field name="arch" type="xml"> + <tree string="Track Stage"> + <field name="sequence" widget="handle"/> + <field name="name"/> + <field name="fold"/> + </tree> + </field> + </record> + + <record id="event_track_stage_action" model="ir.actions.act_window"> + <field name="name">Track Stages</field> + <field name="res_model">event.track.stage</field> + <field name="view_type">form</field> + <field name="view_id" ref="event_track_stage_view_tree"/> + <field name="help" type="html"> +<p class="oe_view_nocontent_create"> + Click to add a stage in the task pipeline. +</p><p> + Define the steps that will be used in the event from the + creation of the track, up to the closing of the track. + You will use these stages in order to track the progress in + solving an event track. +</p></field> + </record> + + <menuitem name="Track Stages" + id="event_track_stage_menu" + action="event_track_stage_action" parent="event.menu_event_configuration"/> </odoo> diff --git a/addons/website_event_track/views/event_views.xml b/addons/website_event_track/views/event_views.xml index e28d5d13a5b..a46d73b7ba4 100644 --- a/addons/website_event_track/views/event_views.xml +++ b/addons/website_event_track/views/event_views.xml @@ -10,25 +10,24 @@ <button name="%(action_event_track_from_event)d" type="action" class="oe_stat_button" - icon="fa-inbox" - attrs="{'invisible': [('show_tracks', '=', False), ('show_track_proposal', '=', False)]}"> - <field name="count_tracks" widget="statinfo"/> + icon="fa-inbox"> + <field name="track_count" widget="statinfo"/> </button> <button name="%(action_event_sponsor_from_event)d" type="action" class="oe_stat_button" icon="fa-users"> - <field name="count_sponsor" widget="statinfo" string="Sponsors"/> + <field name="sponsor_count" widget="statinfo"/> </button> </button> <xpath expr="//div[@class='oe_title']" position="inside"> <div name="event_checkboxes"> - <field name="show_menu"/> - <label for="show_menu"/> - <field name="show_tracks" attrs="{'invisible': [('show_menu', '=', False)]}"/> - <label for="show_tracks" attrs="{'invisible': [('show_menu', '=', False)]}"/> - <field name="show_track_proposal" attrs="{'invisible': [('show_menu', '=', False)]}"/> - <label for="show_track_proposal" attrs="{'invisible': [('show_menu', '=', False)]}"/> + <field name="website_menu"/> + <label for="website_menu"/> + <field name="website_track" attrs="{'invisible': [('website_menu', '=', False)]}"/> + <label for="website_track" attrs="{'invisible': [('website_menu', '=', False)]}"/> + <field name="website_track_proposal" attrs="{'invisible': [('website_menu', '=', False)]}"/> + <label for="website_track_proposal" attrs="{'invisible': [('website_menu', '=', False)]}"/> </div> </xpath> </field> |
