mirror of
https://github.com/bringout/oca-ocb-sale.git
synced 2026-04-26 23:52:05 +02:00
32 lines
1.3 KiB
Python
32 lines
1.3 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.http import request
|
|
|
|
from odoo.addons.website_sale.controllers.payment import PaymentPortal
|
|
|
|
|
|
class PaymentPortalOnsite(PaymentPortal):
|
|
|
|
def _validate_transaction_for_order(self, transaction, sale_order):
|
|
"""
|
|
Throws a ValidationError if the user tries to pay for a ticket which isn't available
|
|
"""
|
|
super()._validate_transaction_for_order(transaction, sale_order)
|
|
registration_domain = [
|
|
('sale_order_id', '=', sale_order.id),
|
|
('event_ticket_id', '!=', False),
|
|
('state', '!=', 'cancel'),
|
|
]
|
|
registrations_per_event = request.env['event.registration'].sudo()._read_group(
|
|
registration_domain,
|
|
['event_id'], ['id:recordset']
|
|
)
|
|
for event, registrations in registrations_per_event:
|
|
count_per_slot_ticket = request.env['event.registration'].sudo()._read_group(
|
|
[('id', 'in', registrations.ids)],
|
|
['event_slot_id', 'event_ticket_id'], ['__count']
|
|
)
|
|
event._verify_seats_availability([
|
|
(slot, ticket, count)
|
|
for slot, ticket, count in count_per_slot_ticket
|
|
])
|