77 lines
2.9 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import Command
from odoo import models, _
class SaleOrder(models.Model):
_inherit = 'sale.order'
def _cart_find_product_line(
self, product_id=None, line_id=None,
event_booth_pending_ids=None, **kwargs
):
"""Check if there is another sale order line which already contains the requested event_booth_pending_ids
to overwrite it with the newly requested booths to avoid having multiple so_line related to the same booths"""
lines = super()._cart_find_product_line(product_id, line_id, **kwargs)
if not event_booth_pending_ids or line_id:
return lines
return lines.filtered(
lambda line: any(booth.id in event_booth_pending_ids for booth in line.event_booth_pending_ids)
)
def _verify_updated_quantity(self, order_line, product_id, new_qty, **kwargs):
"""Forbid quantity updates on event booth lines."""
product = self.env['product.product'].browse(product_id)
if product.detailed_type == 'event_booth' and new_qty > 1:
return 1, _('You cannot manually change the quantity of an Event Booth product.')
return super()._verify_updated_quantity(order_line, product_id, new_qty, **kwargs)
def _prepare_order_line_values(
self, product_id, quantity, event_booth_pending_ids=False, registration_values=None,
**kwargs
):
"""Add corresponding event to the SOline creation values (if booths are provided)."""
values = super()._prepare_order_line_values(product_id, quantity, **kwargs)
if not event_booth_pending_ids:
return values
booths = self.env['event.booth'].browse(event_booth_pending_ids)
values['event_id'] = booths.event_id.id
values['event_booth_registration_ids'] = [
Command.create({
'event_booth_id': booth.id,
**registration_values,
}) for booth in booths
]
return values
# FIXME VFE investigate if it ever happens.
# Probably not
def _prepare_order_line_update_values(
self, order_line, quantity, event_booth_pending_ids=False, registration_values=None,
**kwargs
):
"""Delete existing booth registrations and create new ones with the update values."""
values = super()._prepare_order_line_update_values(order_line, quantity, **kwargs)
if not event_booth_pending_ids:
return values
booths = self.env['event.booth'].browse(event_booth_pending_ids)
values['event_booth_registration_ids'] = [
Command.delete(registration.id)
for registration in order_line.event_booth_registration_ids
] + [
Command.create({
'event_booth_id': booth.id,
**registration_values,
}) for booth in booths
]