From 60092b78e07ee65a9631961568914eeaf1dc1e5f Mon Sep 17 00:00:00 2001 From: Patrick Hoste Date: Wed, 21 Oct 2020 15:19:02 +0000 Subject: [PATCH] [ADD] website_event_booth: add frontend page for booths reservation PURPOSE This module enables the Booths registration on the frontend by adding a dedicated page on the related event. The user will have to first select a booth category and then select one or more booths to book. He will then be asked to provide his contact informations. The booths will directly be set to unavailable... First come, first served. LINKS Task-2318655 Closes : odoo/odoo#71104 --- addons/website_event_booth/__init__.py | 5 + addons/website_event_booth/__manifest__.py | 32 ++++ .../controllers/__init__.py | 4 + .../controllers/event_booth.py | 167 ++++++++++++++++++ .../website_event_booth/data/event_demo.xml | 15 ++ addons/website_event_booth/models/__init__.py | 6 + .../website_event_booth/models/event_event.py | 55 ++++++ .../website_event_booth/models/event_type.py | 17 ++ .../models/website_event_menu.py | 11 ++ .../security/event_booth_security.xml | 15 ++ .../security/ir.model.access.csv | 2 + .../static/src/img/exhibition-map.gif | Bin 0 -> 65375 bytes .../static/src/js/booth_register.js | 137 ++++++++++++++ .../static/src/scss/website_event_booth.scss | 69 ++++++++ .../event_booth_registration_templates.xml | 91 ++++++++++ .../views/event_booth_templates.xml | 124 +++++++++++++ .../views/event_event_views.xml | 19 ++ .../views/event_type_views.xml | 18 ++ 18 files changed, 787 insertions(+) create mode 100644 addons/website_event_booth/__init__.py create mode 100644 addons/website_event_booth/__manifest__.py create mode 100644 addons/website_event_booth/controllers/__init__.py create mode 100644 addons/website_event_booth/controllers/event_booth.py create mode 100644 addons/website_event_booth/data/event_demo.xml create mode 100644 addons/website_event_booth/models/__init__.py create mode 100644 addons/website_event_booth/models/event_event.py create mode 100644 addons/website_event_booth/models/event_type.py create mode 100644 addons/website_event_booth/models/website_event_menu.py create mode 100644 addons/website_event_booth/security/event_booth_security.xml create mode 100644 addons/website_event_booth/security/ir.model.access.csv create mode 100644 addons/website_event_booth/static/src/img/exhibition-map.gif create mode 100644 addons/website_event_booth/static/src/js/booth_register.js create mode 100644 addons/website_event_booth/static/src/scss/website_event_booth.scss create mode 100644 addons/website_event_booth/views/event_booth_registration_templates.xml create mode 100644 addons/website_event_booth/views/event_booth_templates.xml create mode 100644 addons/website_event_booth/views/event_event_views.xml create mode 100644 addons/website_event_booth/views/event_type_views.xml diff --git a/addons/website_event_booth/__init__.py b/addons/website_event_booth/__init__.py new file mode 100644 index 00000000000..7d34c7c054a --- /dev/null +++ b/addons/website_event_booth/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import controllers +from . import models diff --git a/addons/website_event_booth/__manifest__.py b/addons/website_event_booth/__manifest__.py new file mode 100644 index 00000000000..77d04ff55ca --- /dev/null +++ b/addons/website_event_booth/__manifest__.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +{ + 'name': 'Online Event Booths', + 'category': 'Marketing/Events', + 'version': '1.0', + 'summary': 'Events, display your booths on your website', + 'description': """ +Display your booths on your website for the users to register. + """, + 'depends': ['website_event', 'event_booth'], + 'data': [ + 'security/ir.model.access.csv', + 'security/event_booth_security.xml', + 'views/event_type_views.xml', + 'views/event_event_views.xml', + 'views/event_booth_registration_templates.xml', + 'views/event_booth_templates.xml', + ], + 'demo': [ + 'data/event_demo.xml', + ], + 'auto_install': True, + 'assets': { + 'web.assets_frontend': [ + '/website_event_booth/static/src/js/booth_register.js', + '/website_event_booth/static/src/scss/website_event_booth.scss', + ] + }, + 'license': 'LGPL-3', +} diff --git a/addons/website_event_booth/controllers/__init__.py b/addons/website_event_booth/controllers/__init__.py new file mode 100644 index 00000000000..1e9f6c7c1c1 --- /dev/null +++ b/addons/website_event_booth/controllers/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import event_booth diff --git a/addons/website_event_booth/controllers/event_booth.py b/addons/website_event_booth/controllers/event_booth.py new file mode 100644 index 00000000000..2aa7fdf38ab --- /dev/null +++ b/addons/website_event_booth/controllers/event_booth.py @@ -0,0 +1,167 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import json +import werkzeug +from werkzeug.exceptions import Forbidden, NotFound + +from odoo import exceptions, http, _ +from odoo.http import request +from odoo.addons.website_event.controllers.main import WebsiteEventController + + +class WebsiteEventBoothController(WebsiteEventController): + + @http.route('/event//booth', type='http', auth='public', website=True, sitemap=True) + def event_booth_main(self, event): + try: + event.check_access_rights('read') + event.check_access_rule('read') + except exceptions.AccessError: + raise Forbidden() + + event_sudo = event.sudo() + values = { + 'event': event_sudo, + 'event_booths': event_sudo.event_booth_ids, + 'available_booth_category_ids': event_sudo.event_booth_category_available_ids, + 'main_object': event, + } + return request.render('website_event_booth.event_booth_registration', values) + + @http.route('/event//booth/register', + type='http', auth='public', methods=['POST'], website=True, sitemap=False) + def event_booth_register(self, event, booth_category_id): + event_booth_ids = request.httprequest.form.getlist('event_booth_ids') + + return request.redirect(('/event/%s/booth/register_form?' % event.id) + werkzeug.urls.url_encode({ + 'booth_ids': ','.join(event_booth_ids), + 'booth_category_id': int(booth_category_id), + })) + + @http.route('/event//booth/register_form', + type='http', auth='public', methods=['GET'], website=True, sitemap=False) + def event_booth_contact_form(self, event, booth_ids=None, booth_category_id=None): + if not booth_ids or not booth_category_id: + raise NotFound() + + booth_category = request.env['event.booth.category'].sudo().browse(int(booth_category_id)) + event_booths = request.env['event.booth'].sudo().browse([int(booth_id) for booth_id in booth_ids.split(',')]) + default_contact = {} + if not request.env.user._is_public(): + default_contact = { + 'name': request.env.user.partner_id.name, + 'email': request.env.user.partner_id.email, + 'phone': request.env.user.partner_id.phone, + 'mobile': request.env.user.partner_id.mobile, + } + else: + visitor = request.env['website.visitor']._get_visitor_from_request() + if visitor.email: + default_contact = { + 'name': visitor.name, + 'email': visitor.email, + 'mobile': visitor.mobile, + } + return request.render( + 'website_event_booth.event_booth_registration_details', + {'event': event.sudo(), + 'default_contact': default_contact, + 'booth_category': booth_category, + 'event_booths': event_booths, + } + ) + + def _get_requested_booths(self, event, event_booth_ids): + booth_ids = json.loads(event_booth_ids) + booths = request.env['event.booth'].sudo().search([ + ('event_id', '=', event.id), + ('state', '=', 'available'), + ('id', 'in', booth_ids) + ]) + if booth_ids != booths.ids: + raise Forbidden(_('Booth registration failed. Please try again.')) + if len(booths.booth_category_id) != 1: + raise Forbidden(_('Booths should belong to the same category.')) + return booths + + @http.route('/event//booth/confirm', + type='http', auth='public', methods=['POST'], website=True, sitemap=False) + def event_booth_registration_confirm(self, event, booth_category_id, event_booth_ids, **kwargs): + booths = self._get_requested_booths(event, event_booth_ids) + + booth_values = self._prepare_booth_registration_values(event, kwargs) + booths.action_confirm(booth_values) + + return request.redirect(('/event/%s/booth/success?' % event.id) + werkzeug.urls.url_encode({ + 'booths': ','.join([str(id) for id in booths.ids]), + })) + + # This will be removed soon + @http.route('/event//booth/success', + type='http', auth='public', methods=['GET'], website=True, sitemap=False) + def event_booth_registration_complete(self, event, booths): + booth_ids = request.env['event.booth'].sudo().search([ + ('event_id', '=', event.id), + ('state', '=', 'unavailable'), + ('id', 'in', [int(id) for id in booths.split(',')]), + ]) + if len(booth_ids.mapped('partner_id')) > 1: + raise NotFound() + event_sudo = event.sudo() + return request.render( + 'website_event_booth.event_booth_registration_complete', + {'event': event, + 'event_booths': event_sudo.event_booth_ids, + 'main_object': event, + 'contact_name': booth_ids[0].contact_name or booth_ids.partner_id.name, + 'contact_email': booth_ids[0].contact_email or booth_ids.partner_id.email, + 'contact_mobile': booth_ids[0].contact_mobile or booth_ids.partner_id.mobile, + 'contact_phone': booth_ids[0].contact_phone or booth_ids.partner_id.phone, + } + ) + + def _prepare_booth_registration_values(self, event, kwargs): + return self._prepare_booth_registration_partner_values(event, kwargs) + + def _prepare_booth_registration_partner_values(self, event, kwargs): + if request.env.user._is_public(): + contact_email = kwargs['contact_email'] + partner = request.env['res.partner'].sudo().find_or_create(contact_email) + if not partner.name and kwargs.get('contact_name'): + partner.name = kwargs['contact_name'] + if not partner.phone and kwargs.get('contact_phone'): + partner.phone = kwargs['contact_phone'] + if not partner.mobile and kwargs.get('contact_mobile'): + partner.mobile = kwargs['contact_mobile'] + else: + partner = request.env.user.partner_id + return { + 'partner_id': partner.id, + 'contact_name': kwargs.get('contact_name') or partner.name, + 'contact_email': kwargs.get('contact_email') or partner.email, + 'contact_mobile': kwargs.get('contact_mobile') or partner.mobile, + 'contact_phone': kwargs.get('contact_phone') or partner.phone, + } + + @http.route('/event/booth/check_availability', type='json', auth='public', methods=['POST']) + def check_booths_availability(self, event_booth_ids=None): + if not event_booth_ids: + return {} + booths = request.env['event.booth'].sudo().browse(event_booth_ids) + return { + 'unavailable_booths': booths.filtered(lambda booth: not booth.is_available).ids + } + + @http.route(['/event/booth_category/get_available_booths'], type='json', auth='public') + def get_booth_category_available_booths(self, event_id, booth_category_id): + booth_ids = request.env['event.booth'].sudo().search([ + ('event_id', '=', int(event_id)), + ('booth_category_id', '=', int(booth_category_id)), + ('state', '=', 'available') + ]) + + return [ + {'id': booth.id, 'name': booth.name} + for booth in booth_ids + ] diff --git a/addons/website_event_booth/data/event_demo.xml b/addons/website_event_booth/data/event_demo.xml new file mode 100644 index 00000000000..d2a2cb3645b --- /dev/null +++ b/addons/website_event_booth/data/event_demo.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/addons/website_event_booth/models/__init__.py b/addons/website_event_booth/models/__init__.py new file mode 100644 index 00000000000..883289b766b --- /dev/null +++ b/addons/website_event_booth/models/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import event_type +from . import event_event +from . import website_event_menu diff --git a/addons/website_event_booth/models/event_event.py b/addons/website_event_booth/models/event_event.py new file mode 100644 index 00000000000..24d9b34af1b --- /dev/null +++ b/addons/website_event_booth/models/event_event.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models, _ +from odoo.addons.http_routing.models.ir_http import slug + + +class Event(models.Model): + _inherit = 'event.event' + + exhibition_map = fields.Image(string='Exhibition Map', max_width=1024, max_height=1024) + # frontend menu management + booth_menu = fields.Boolean( + string='Booth Register', compute='_compute_booth_menu', + readonly=False, store=True) + booth_menu_ids = fields.One2many( + 'website.event.menu', 'event_id', string='Event Booths Menus', + domain=[('menu_type', '=', 'booth')]) + + @api.depends('event_type_id', 'website_menu') + def _compute_booth_menu(self): + for event in self: + if event.event_type_id and event.event_type_id != event._origin.event_type_id: + event.booth_menu = event.event_type_id.booth_menu + elif event.website_menu and (event.website_menu != event._origin.website_menu or not event.booth_menu): + event.booth_menu = True + elif not event.website_menu: + event.booth_menu = False + + # ------------------------------------------------------------ + # WEBSITE MENU MANAGEMENT + # ------------------------------------------------------------ + + def toggle_booth_menu(self, val): + self.booth_menu = val + + def _get_menu_update_fields(self): + return super(Event, self)._get_menu_update_fields() + ['booth_menu'] + + def _update_website_menus(self, menus_update_by_field=None): + super(Event, self)._update_website_menus(menus_update_by_field=menus_update_by_field) + for event in self: + if event.menu_id and (not menus_update_by_field or event in menus_update_by_field.get('booth_menu')): + event._update_website_menu_entry('booth_menu', 'booth_menu_ids', 'booth') + + def _get_menu_type_field_matching(self): + res = super(Event, self)._get_menu_type_field_matching() + res['booth'] = 'booth_menu' + return res + + def _get_website_menu_entries(self): + self.ensure_one() + return super(Event, self)._get_website_menu_entries() + [ + (_('Get A Booth'), '/event/%s/booth' % slug(self), False, 90, 'booth') + ] diff --git a/addons/website_event_booth/models/event_type.py b/addons/website_event_booth/models/event_type.py new file mode 100644 index 00000000000..6f7808d5d5d --- /dev/null +++ b/addons/website_event_booth/models/event_type.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class EventType(models.Model): + _inherit = 'event.type' + + booth_menu = fields.Boolean( + string='Booths on Website', compute='_compute_booth_menu', + readonly=False, store=True) + + @api.depends('website_menu') + def _compute_booth_menu(self): + for event_type in self: + event_type.booth_menu = event_type.website_menu diff --git a/addons/website_event_booth/models/website_event_menu.py b/addons/website_event_booth/models/website_event_menu.py new file mode 100644 index 00000000000..384cdc78ab2 --- /dev/null +++ b/addons/website_event_booth/models/website_event_menu.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class EventMenu(models.Model): + _inherit = "website.event.menu" + + menu_type = fields.Selection( + selection_add=[('booth', 'Event Booth Menus')], ondelete={'booth': 'cascade'}) diff --git a/addons/website_event_booth/security/event_booth_security.xml b/addons/website_event_booth/security/event_booth_security.xml new file mode 100644 index 00000000000..c3498357f40 --- /dev/null +++ b/addons/website_event_booth/security/event_booth_security.xml @@ -0,0 +1,15 @@ + + + + + Event Booth: public/portal: published read + + [('event_id.website_published', '=', True)] + + + + + + + + diff --git a/addons/website_event_booth/security/ir.model.access.csv b/addons/website_event_booth/security/ir.model.access.csv new file mode 100644 index 00000000000..23e4820a76e --- /dev/null +++ b/addons/website_event_booth/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_event_booth_all,event.booth.public,event_booth.model_event_booth,,1,0,0,0 diff --git a/addons/website_event_booth/static/src/img/exhibition-map.gif b/addons/website_event_booth/static/src/img/exhibition-map.gif new file mode 100644 index 0000000000000000000000000000000000000000..ff618d99af20bd27322ebfb3a2ce21e6b77c5fa4 GIT binary patch literal 65375 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 input[type="checkbox"]': '_onChangeBooth', + 'click .o_wbooth_registration_submit': '_onSubmitClick', + }, + + start() { + this.eventId = parseInt(this.$el.data('event-id')); + this.activeType = false; + this.boothCache = {}; + return this._super.apply(this, arguments).then(() => { + this.$('input[name="booth_category_id"]:enabled:first').click(); + }); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + _check_booths_availability(eventBoothIds) { + const self = this; + return this._rpc({ + route: "/event/booth/check_availability", + params: { + event_booth_ids: eventBoothIds, + }, + }).then(function (result) { + if (result.unavailable_booths.length) { + self.$('input[name="event_booth_ids"]').each(function (i, el) { + if (result.unavailable_booths.includes(parseInt(el.value))) { + $(el).closest('.custom-checkbox').addClass('text-danger'); + } + }); + self.$('.o_wbooth_unavailable_booth_alert').removeClass('d-none'); + return Promise.resolve(false); + } + return Promise.resolve(true); + }) + }, + + _countSelectedBooths() { + return this.$('.custom-checkbox > input[type="checkbox"]:checked').length; + }, + + _fillBooths() { + var $boothElem = this.$('.o_wbooth_booths'); + $boothElem.empty(); + $.each(this.boothCache[this.activeType], function (key, booth) { + let $checkbox = dom.renderCheckbox({ + text: booth.name, + prop: { + name: 'event_booth_ids', + value: booth.id + } + }); + $boothElem.append($checkbox); + }); + }, + + _showBoothCategoryDescription() { + this.$('.o_wbooth_booth_description').addClass('d-none'); + this.$('#o_wbooth_booth_description_' + this.activeType).removeClass('d-none'); + }, + + _updateUiAfterBoothCategoryChange() { + this._fillBooths(); + this._showBoothCategoryDescription(); + this._updateUiAfterBoothChange(this._countSelectedBooths()); + }, + + _updateUiAfterBoothChange(boothCount) { + let $button = this.$('button.o_wbooth_registration_submit'); + $button.attr('disabled', !boothCount); + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + _onChangeBooth(ev) { + $(ev.currentTarget).closest('.custom-checkbox').removeClass('text-danger'); + this._updateUiAfterBoothChange(this._countSelectedBooths()); + }, + + /** + * Load all the booths related to the chosen booth category and + * add them to a local dictionary to avoid making rpc each time the + * user change the booth category. + * + * Then the selection input will be filled with the fetched booth values. + * + * @param ev + * @private + */ + _onChangeBoothType(ev) { + ev.preventDefault(); + this.activeType = parseInt(ev.currentTarget.value); + if (this.boothCache[this.activeType] === undefined) { + var self = this; + this._rpc({ + route: '/event/booth_category/get_available_booths', + params: { + event_id: this.eventId, + booth_category_id: this.activeType, + }, + }).then(function (result) { + self.boothCache[self.activeType] = result; + self._updateUiAfterBoothCategoryChange(); + }); + } else { + this._updateUiAfterBoothCategoryChange(); + } + }, + + async _onSubmitClick(ev) { + ev.preventDefault(); + let $form = this.$('.o_wbooth_registration_form'); + let event_booth_ids = this.$('input[name=event_booth_ids]:checked').map(function () { + return parseInt($(this).val()); + }).get(); + if (await this._check_booths_availability(event_booth_ids)) { + $form.submit(); + } + }, + +}); + +return publicWidget.registry.boothRegistration; +}); diff --git a/addons/website_event_booth/static/src/scss/website_event_booth.scss b/addons/website_event_booth/static/src/scss/website_event_booth.scss new file mode 100644 index 00000000000..569310991d5 --- /dev/null +++ b/addons/website_event_booth/static/src/scss/website_event_booth.scss @@ -0,0 +1,69 @@ +label.o_wbooth_category_unavailable { + opacity: 0.5; + overflow: hidden; +} + +#o_wbooth_contact_details_form { + + .col-form-label { + width: 200px; + } + +} + +.o_wbooth_registration_form label { + + position: relative; + + & > input { + visibility: hidden; + position: absolute; + } + + & > input + div { + padding: 10px; + border: 5px solid #e9ecef; + } + + &:not(.o_wbooth_category_unavailable) > input + div { + cursor: pointer; + } + + &:not(.o_wbooth_category_unavailable):hover > input + div { + border-color: #6c757d; + } + + &:hover > input + div:before { + color: #6c757d; + } + + & > input:checked + div, + &:hover > input:checked + div { + border-color: $o-enterprise-primary-color; + } + + & > input:checked + div:before, + &:hover > input:checked + div:before { + color: $o-enterprise-primary-color; + } + + & > input:checked + div:before, + &:not(.o_wbooth_category_unavailable):hover > input + div:before { + content: "\f058"; + font-family: "FontAwesome"; + width: 40px; + height: 40px; + position: absolute; + line-height: 40px; + top: -16px; + right: -16px; + background-color: white; + font-size: 2em; + text-align: center; + } + + & img { + min-height: 250px; + } + +} diff --git a/addons/website_event_booth/views/event_booth_registration_templates.xml b/addons/website_event_booth/views/event_booth_registration_templates.xml new file mode 100644 index 00000000000..3774f9be108 --- /dev/null +++ b/addons/website_event_booth/views/event_booth_registration_templates.xml @@ -0,0 +1,91 @@ + + + + + + + + \ No newline at end of file diff --git a/addons/website_event_booth/views/event_booth_templates.xml b/addons/website_event_booth/views/event_booth_templates.xml new file mode 100644 index 00000000000..313f6c96b78 --- /dev/null +++ b/addons/website_event_booth/views/event_booth_templates.xml @@ -0,0 +1,124 @@ + + + + + + + + diff --git a/addons/website_event_booth/views/event_event_views.xml b/addons/website_event_booth/views/event_event_views.xml new file mode 100644 index 00000000000..454ecea017a --- /dev/null +++ b/addons/website_event_booth/views/event_event_views.xml @@ -0,0 +1,19 @@ + + + + + event.event.view.form.inherit.website.event.booth + event.event + + + + + + + + + + diff --git a/addons/website_event_booth/views/event_type_views.xml b/addons/website_event_booth/views/event_type_views.xml new file mode 100644 index 00000000000..14c02d21dcc --- /dev/null +++ b/addons/website_event_booth/views/event_type_views.xml @@ -0,0 +1,18 @@ + + + + + event.type.view.form.inherit.website.event.booth + event.type + + + + + + + + + +