Files
event-tools/event_generate_quotation_from_registration/models/event_registration.py

46 lines
2.0 KiB
Python

# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models, api, Command
import logging
_logger = logging.getLogger(__name__)
class EventRegistration(models.Model):
_inherit = "event.registration"
financier_ids = fields.One2many('event.registration.financier', 'registration_id', string="Financements")
def name_get(self):
result = []
for registration in self:
if registration.partner_id and registration.event_id:
name = f"{registration.partner_id.name} ({registration.event_id.name})"
result.append((registration.id, name))
return result
@api.depends("partner_id", "event_id")
def _compute_display_name(self):
for registration in self:
if registration.partner_id and registration.event_id:
registration.display_name = f"{registration.partner_id.name} ({registration.event_id.name})"
else:
registration.display_name = super(EventRegistration, registration)._compute_display_name()
def generate_quotation(self):
for registration in self:
for financier in registration.financier_ids:
if not financier.quotation_id:
so_values = financier.get_sale_order_values()
so_values['order_line'] = financier.get_sale_order_line_values()
sale_order = self.env['sale.order'].create(so_values)
financier.quotation_id = sale_order
else:
order_lines = self.env['sale.order.line'].search([
('order_id','=',financier.quotation_id.id),
('product_id','=',financier.get_product_id()),
('state', '!=', 'done'),
])
if order_lines:
order_lines[0].price_unit = financier.amount
financier.quotation_id.write(financier.get_sale_order_values())