nuevo addon product_state desde OCA/product_attribute

This commit is contained in:
santiky 2021-11-10 13:54:45 +01:00
parent ada6c142c9
commit 2954c8694f
Signed by: snt
GPG key ID: A9FD34930EADBE71
23 changed files with 2254 additions and 0 deletions

View file

@ -0,0 +1,4 @@
# Copyright 2017 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import product_template

View file

@ -0,0 +1,79 @@
# Copyright 2017 ACSONE SA/NV (<http://acsone.eu>)
# Copyright 2020 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import api, models, fields
class ProductState(models.Model):
_name = "product.state"
_description = "Product State"
_order = "sequence, id"
name = fields.Char("State Name", required=True, translate=True)
code = fields.Char("State Code", required=True)
sequence = fields.Integer("Sequence", help="Used to order the States", default=25)
description = fields.Text(translate=True)
product_ids = fields.One2many(
"product.template", "product_state_id", string="State Products",
)
products_count = fields.Integer(
string="Number of products", compute="_compute_products_count",
)
_sql_constraints = [
("code_unique", "UNIQUE(code)", "Product State Code must be unique.")
]
@api.depends("product_ids")
def _compute_products_count(self):
data = self.env["product.template"].read_group(
[("product_state_id", "in", self.ids)],
["product_state_id"],
["product_state_id"],
)
mapped_data = {
record["product_state_id"][0]: record["product_state_id_count"]
for record in data
}
for state in self:
state.products_count = mapped_data.get(state.id, 0)
class ProductTemplate(models.Model):
_inherit = "product.template"
state = fields.Char(
string="Product Status",
index=True,
compute="_compute_product_state",
inverse="_inverse_product_state",
store=True,
)
product_state_id = fields.Many2one(
"product.state", string="State", help="Select a state for this product",
)
@api.depends("product_state_id")
def _compute_product_state(self):
for product_tmpl in self:
product_tmpl.state = product_tmpl.product_state_id.code
def _inverse_product_state(self):
ProductState = self.env["product.state"]
state_mapping = {}
for product_tmpl in self.filtered("state"):
product_state = state_mapping.get(product_tmpl.state)
if not product_state:
product_state = ProductState.search(
[("code", "=", product_tmpl.state)], limit=1
)
if not product_state:
product_state = ProductState.create({
"name": product_tmpl.state,
"code": product_tmpl.state,
})
state_mapping[product_tmpl.state] = product_state
if product_tmpl.product_state_id != product_state:
product_tmpl.product_state_id = product_state
self.filtered(lambda x: not x.state).write({'product_state_id': False})