sale_management/models/sale_order_template_option.py

80 lines
2.4 KiB
Python

# -*- 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,
}