You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
3.5 KiB
87 lines
3.5 KiB
from odoo import models, fields, api
|
|
|
|
|
|
class ProductTemplate(models.Model):
|
|
_inherit = "product.template"
|
|
|
|
is_event_deposit = fields.Boolean(
|
|
string="Event deposit",
|
|
compute="_compute_is_event_deposit",
|
|
inverse="_set_is_event_deposit",
|
|
search="_search_is_event_deposit",
|
|
)
|
|
balance_variant_id = fields.Many2one(
|
|
comodel_name="product.product",
|
|
string="Balance variant",
|
|
compute="_compute_balance_variant_id",
|
|
inverse="_set_balance_variant_id",
|
|
search="_search_balance_variant_id",
|
|
)
|
|
|
|
@api.depends("product_variant_ids.is_event_deposit")
|
|
def _compute_is_event_deposit(self):
|
|
self.is_event_deposit = False
|
|
for template in self:
|
|
variant_count = len(template.product_variant_ids)
|
|
if variant_count == 1:
|
|
template.is_event_deposit = (
|
|
template.product_variant_ids.is_event_deposit
|
|
)
|
|
elif variant_count == 0:
|
|
archived_variants = template.with_context(
|
|
active_test=False
|
|
).product_variant_ids
|
|
if len(archived_variants) == 1:
|
|
template.is_event_deposit = archived_variants.is_event_deposit
|
|
|
|
def _search_is_event_deposit(self, operator, value):
|
|
query = self.with_context(active_test=False)._search(
|
|
[("product_variant_ids.is_event_deposit", operator, value)]
|
|
)
|
|
return [("id", "in", query)]
|
|
|
|
def _set_is_event_deposit(self):
|
|
variant_count = len(self.product_variant_ids)
|
|
if variant_count == 1:
|
|
self.product_variant_ids.is_event_deposit = self.is_event_deposit
|
|
elif variant_count == 0:
|
|
archived_variants = self.with_context(active_test=False).product_variant_ids
|
|
if len(archived_variants) == 1:
|
|
archived_variants.is_event_deposit = self.is_event_deposit
|
|
|
|
@api.depends("product_variant_ids.balance_variant_id")
|
|
def _compute_balance_variant_id(self):
|
|
self.balance_variant_id = False
|
|
for template in self:
|
|
variant_count = len(template.product_variant_ids)
|
|
if variant_count == 1:
|
|
template.balance_variant_id = (
|
|
template.product_variant_ids.balance_variant_id
|
|
)
|
|
elif variant_count == 0:
|
|
archived_variants = template.with_context(
|
|
active_test=False
|
|
).product_variant_ids
|
|
if len(archived_variants) == 1:
|
|
template.balance_variant_id = archived_variants.balance_variant_id
|
|
|
|
def _search_balance_variant_id(self, operator, value):
|
|
query = self.with_context(active_test=False)._search(
|
|
[("product_variant_ids.balance_variant_id", operator, value)]
|
|
)
|
|
return [("id", "in", query)]
|
|
|
|
def _set_balance_variant_id(self):
|
|
variant_count = len(self.product_variant_ids)
|
|
if variant_count == 1:
|
|
self.product_variant_ids.balance_variant_id = self.balance_variant_id
|
|
elif variant_count == 0:
|
|
archived_variants = self.with_context(active_test=False).product_variant_ids
|
|
if len(archived_variants) == 1:
|
|
archived_variants.balance_variant_id = self.balance_variant_id
|
|
|
|
def _get_related_fields_variant_template(self):
|
|
return super()._get_related_fields_variant_template() + [
|
|
"is_event_deposit",
|
|
"balance_variant_id",
|
|
]
|