# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, fields, models class SaleOrderTemplateOption(models.Model): _name = "sale.order.template.option" _description = "Quotation Template Option" _check_company_auto = True sale_order_template_id = fields.Many2one( comodel_name='sale.order.template', string="Quotation Template Reference", index=True, required=True, ondelete='cascade') company_id = fields.Many2one( related='sale_order_template_id.company_id', store=True, index=True) product_id = fields.Many2one( comodel_name='product.product', required=True, check_company=True, domain=lambda self: self._product_id_domain()) name = fields.Text( string="Description", compute='_compute_name', store=True, readonly=False, precompute=True, required=True, translate=True) uom_id = fields.Many2one( comodel_name='uom.uom', string="Unit of Measure", compute='_compute_uom_id', store=True, readonly=False, required=True, precompute=True, domain="[('category_id', '=', product_uom_category_id)]") product_uom_category_id = fields.Many2one(related='product_id.uom_id.category_id') quantity = fields.Float( string="Quantity", required=True, digits='Product Unit of Measure', default=1) #=== COMPUTE METHODS ===# @api.depends('product_id') def _compute_name(self): for option in self: if not option.product_id: continue option.name = option.product_id.get_product_multiline_description_sale() @api.depends('product_id') def _compute_uom_id(self): for option in self: option.uom_id = option.product_id.uom_id #=== BUSINESS METHODS ===# @api.model def _product_id_domain(self): """Returns the domain of the products that can be added as a template option.""" return [('sale_ok', '=', True)] def _prepare_option_line_values(self): """ Give the values to create the corresponding option line. :return: `sale.order.option` create values :rtype: dict """ self.ensure_one() return { 'name': self.name, 'product_id': self.product_id.id, 'quantity': self.quantity, 'uom_id': self.uom_id.id, }