53 lines
2.5 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import json
from odoo.http import request, route
from odoo.addons.website_event.controllers.main import WebsiteEventController
class WebsiteEventBoothController(WebsiteEventController):
@route()
def event_booth_registration_confirm(self, event, booth_category_id, event_booth_ids, **kwargs):
"""Override: Doesn't call the parent method because we go through the checkout
process which will confirm the booths when receiving the payment."""
booths = self._get_requested_booths(event, event_booth_ids)
if not booths:
return json.dumps({'error': 'boothError'})
booth_category = request.env['event.booth.category'].sudo().browse(int(booth_category_id))
if not booth_category.exists():
return json.dumps({'error': 'boothCategoryError'})
booth_values = self._prepare_booth_registration_values(event, kwargs)
order_sudo = request.website.sale_get_order(force_create=True)
order_sudo._cart_update(
product_id=booth_category.product_id.id,
set_qty=1,
event_booth_pending_ids=booths.ids,
registration_values=booth_values,
)
if order_sudo.amount_total:
if request.env.user._is_public():
order_sudo.partner_id = booth_values['partner_id']
return json.dumps({'redirect': '/shop/cart'})
elif order_sudo:
order_sudo.action_confirm()
request.website.sale_reset()
return self._prepare_booth_registration_success_values(event.name, booth_values)
def _prepare_booth_contact_form_values(self, event, booth_ids, booth_category_id):
values = super()._prepare_booth_contact_form_values(event, booth_ids, booth_category_id)
values['has_payment_step'] = request.website.sale_get_order().amount_total or \
values.get('booth_category', request.env['event.booth.category']).price
return values
def _prepare_booth_main_values(self, event, booth_category_id=False, booth_ids=False):
values = super()._prepare_booth_main_values(event, booth_category_id=booth_category_id, booth_ids=booth_ids)
values['has_payment_step'] = request.website.sale_get_order().amount_total or \
any(booth_category.price for booth_category in values.get('available_booth_category_ids', request.env['event.booth.category']))
return values