Files
stock-logistics-warehouse/stock_picking_product_interchangeable/models/product.py

67 lines
2.2 KiB
Python

from odoo import fields, models
class ProductTemplate(models.Model):
_inherit = "product.template"
product_tmpl_interchangeable_ids = fields.Many2many(
comodel_name="product.product",
compute="_compute_product_tmpl_interchangeable_ids",
inverse="_inverse_product_tmpl_interchangeable_ids",
)
def _compute_product_tmpl_interchangeable_ids(self):
"""Compute interchangeable products"""
for rec in self:
rec.product_tmpl_interchangeable_ids = (
rec.product_variant_ids.product_interchangeable_ids
)
def _inverse_product_tmpl_interchangeable_ids(self):
"""Set new interchangeable product"""
for rec in self:
rec.product_variant_id.product_replaces_ids = (
rec.product_tmpl_interchangeable_ids
)
class Product(models.Model):
_inherit = "product.product"
product_interchangeable_ids = fields.Many2many(
comodel_name="product.product",
string="Replaces",
help="Products that can be substituted by current product",
inverse="_inverse_product_interchangeable_ids",
compute="_compute_product_interchangeable_ids",
)
product_replaces_ids = fields.Many2many(
comodel_name="product.product",
string="Replaces",
relation="product_substitute_rel",
column1="product_id",
column2="product_replaced_id",
help="Products that can be substituted by current product",
)
product_replaced_by_ids = fields.Many2many(
comodel_name="product.product",
string="Replaces",
relation="product_substitute_rel",
column1="product_replaced_id",
column2="product_id",
help="Products that can substitute current current product",
)
def _compute_product_interchangeable_ids(self):
"""Compute interchangeable products"""
for rec in self:
rec.product_interchangeable_ids = (
rec.product_replaces_ids | rec.product_replaced_by_ids
) - rec
def _inverse_product_interchangeable_ids(self):
"""Set new interchangeable product"""
for rec in self:
rec.product_replaces_ids = rec.product_interchangeable_ids