diff options
Diffstat (limited to 'addons/website_event/static/src/js/website_event.js')
| -rw-r--r-- | addons/website_event/static/src/js/website_event.js | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/addons/website_event/static/src/js/website_event.js b/addons/website_event/static/src/js/website_event.js new file mode 100644 index 00000000..11990e97 --- /dev/null +++ b/addons/website_event/static/src/js/website_event.js @@ -0,0 +1,93 @@ +odoo.define('website_event.website_event', function (require) { + +var ajax = require('web.ajax'); +var core = require('web.core'); +var Widget = require('web.Widget'); +var publicWidget = require('web.public.widget'); + +var _t = core._t; + +// Catch registration form event, because of JS for attendee details +var EventRegistrationForm = Widget.extend({ + + /** + * @override + */ + start: function () { + var self = this; + var res = this._super.apply(this.arguments).then(function () { + $('#registration_form .a-submit') + .off('click') + .click(function (ev) { + self.on_click(ev); + }); + }); + return res; + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * @private + * @param {Event} ev + */ + on_click: function (ev) { + ev.preventDefault(); + ev.stopPropagation(); + var $form = $(ev.currentTarget).closest('form'); + var $button = $(ev.currentTarget).closest('[type="submit"]'); + var post = {}; + $('#registration_form table').siblings('.alert').remove(); + $('#registration_form select').each(function () { + post[$(this).attr('name')] = $(this).val(); + }); + var tickets_ordered = _.some(_.map(post, function (value, key) { return parseInt(value); })); + if (!tickets_ordered) { + $('<div class="alert alert-info"/>') + .text(_t('Please select at least one ticket.')) + .insertAfter('#registration_form table'); + return new Promise(function () {}); + } else { + $button.attr('disabled', true); + return ajax.jsonRpc($form.attr('action'), 'call', post).then(function (modal) { + var $modal = $(modal); + $modal.modal({backdrop: 'static', keyboard: false}); + $modal.find('.modal-body > div').removeClass('container'); // retrocompatibility - REMOVE ME in master / saas-19 + $modal.appendTo('body').modal(); + $modal.on('click', '.js_goto_event', function () { + $modal.modal('hide'); + $button.prop('disabled', false); + }); + $modal.on('click', '.close', function () { + $button.prop('disabled', false); + }); + }); + } + }, +}); + +publicWidget.registry.EventRegistrationFormInstance = publicWidget.Widget.extend({ + selector: '#registration_form', + + /** + * @override + */ + start: function () { + var def = this._super.apply(this, arguments); + this.instance = new EventRegistrationForm(this); + return Promise.all([def, this.instance.attachTo(this.$el)]); + }, + /** + * @override + */ + destroy: function () { + this.instance.setElement(null); + this._super.apply(this, arguments); + this.instance.setElement(this.$el); + }, +}); + +return EventRegistrationForm; +}); |
