Merge PR #1437 into 13.0

Signed-off-by dreispt
This commit is contained in:
OCA-git-bot
2022-08-12 07:00:32 +00:00
4 changed files with 104 additions and 13 deletions

View File

@@ -32,7 +32,12 @@ class ProductCategory(models.Model):
)
def update_product_taxes(self):
for template in self.product_template_ids.filtered(
lambda p: p.taxes_updeatable_from_category
):
template.set_tax_from_category()
products = self.env["product.template"].search(
[
("categ_id", "in", self.ids),
("taxes_updeatable_from_category", "=", True),
]
)
if not products:
return True
return products.set_tax_from_category()

View File

@@ -8,11 +8,21 @@ class ProductProduct(models.Model):
_inherit = "product.product"
@api.onchange("categ_id")
def onchange_categ_id(self):
def _onchange_categ_id_set_taxes(self):
if self.categ_id:
self.set_tax_from_category()
def set_tax_from_category(self):
self.ensure_one()
self.taxes_id = [(6, 0, self.categ_id.taxes_id.ids)]
self.supplier_taxes_id = [(6, 0, self.categ_id.supplier_taxes_id.ids)]
return self.product_tmpl_id.set_tax_from_category()
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
if vals.get("categ_id"):
if "taxes_id" not in vals:
categ = self.env["product.category"].browse(vals["categ_id"])
vals["taxes_id"] = [(6, 0, categ.taxes_id.ids)]
if "supplier_taxes_id" not in vals:
categ = self.env["product.category"].browse(vals["categ_id"])
vals["supplier_taxes_id"] = [(6, 0, categ.supplier_taxes_id.ids)]
return super().create(vals_list)

View File

@@ -1,6 +1,8 @@
# Copyright 2020 ForgeFlow S.L. (https://www.forgeflow.com)
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
from collections import defaultdict
from odoo import api, fields, models
@@ -10,11 +12,31 @@ class ProductTemplate(models.Model):
taxes_updeatable_from_category = fields.Boolean(default=True)
@api.onchange("categ_id")
def onchange_categ_id(self):
def _onchange_categ_id_set_taxes(self):
if self.categ_id:
self.set_tax_from_category()
def set_tax_from_category(self):
self.ensure_one()
self.taxes_id = [(6, 0, self.categ_id.taxes_id.ids)]
self.supplier_taxes_id = [(6, 0, self.categ_id.supplier_taxes_id.ids)]
records_by_categ = defaultdict(lambda: self.browse())
for rec in self:
records_by_categ[rec.categ_id] += rec
for categ, records in records_by_categ.items():
records.write(
{
"taxes_id": [(6, 0, categ.taxes_id.ids)],
"supplier_taxes_id": [(6, 0, categ.supplier_taxes_id.ids)],
}
)
return True
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
if vals.get("categ_id"):
if "taxes_id" not in vals:
categ = self.env["product.category"].browse(vals["categ_id"])
vals["taxes_id"] = [(6, 0, categ.taxes_id.ids)]
if "supplier_taxes_id" not in vals:
categ = self.env["product.category"].browse(vals["categ_id"])
vals["supplier_taxes_id"] = [(6, 0, categ.supplier_taxes_id.ids)]
return super().create(vals_list)

View File

@@ -52,7 +52,7 @@ class ProductCategoryTax(common.SavepointCase):
self.product_test = self.product_obj.create(
{"name": "TEST 01", "categ_id": test_categ.id, "list_price": 155.0}
)
self.product_test.product_tmpl_id.onchange_categ_id()
self.product_test.product_tmpl_id._onchange_categ_id_set_taxes()
self.assertEquals(self.product_test.supplier_taxes_id, self.tax_purchase)
def test_02_update_taxes(self):
@@ -108,3 +108,57 @@ class ProductCategoryTax(common.SavepointCase):
test_categ.update_product_taxes()
self.assertEquals(self.product_test3.supplier_taxes_id, self.tax_purchase)
self.assertNotEquals(self.product_test4.supplier_taxes_id, self.tax_purchase)
def test_04_copy_taxes_during_create_product_product(self):
"""Default taxes taken from the category during product create"""
category = self.env["product.category"].create(
{
"name": "Super Category",
"taxes_id": [(6, 0, self.tax_sale.ids)],
"supplier_taxes_id": [(6, 0, self.tax_purchase.ids)],
}
)
# Case 1: Creating product.product with category
product = self.env["product.product"].create(
{"name": "Test Product", "categ_id": category.id}
)
self.assertEqual(product.taxes_id, category.taxes_id)
self.assertEqual(product.supplier_taxes_id, category.supplier_taxes_id)
# Case 2: Creating product.product with category and values
product = self.env["product.product"].create(
{
"name": "Test Product",
"categ_id": category.id,
"taxes_id": False,
"supplier_taxes_id": [(6, 0, self.tax_purchase2.ids)],
}
)
self.assertFalse(product.taxes_id, False)
self.assertEqual(product.supplier_taxes_id, self.tax_purchase2)
def test_04_copy_taxes_during_create_product_template(self):
"""Default taxes taken from the category during product create"""
category = self.env["product.category"].create(
{
"name": "Super Category",
"taxes_id": [(6, 0, self.tax_sale.ids)],
"supplier_taxes_id": [(6, 0, self.tax_purchase.ids)],
}
)
# Case 1: Creating product.product with category
product = self.env["product.template"].create(
{"name": "Test Product", "categ_id": category.id}
)
self.assertEqual(product.taxes_id, category.taxes_id)
self.assertEqual(product.supplier_taxes_id, category.supplier_taxes_id)
# Case 2: Creating product.product with category and values
product = self.env["product.template"].create(
{
"name": "Test Product",
"categ_id": category.id,
"taxes_id": False,
"supplier_taxes_id": [(6, 0, self.tax_purchase2.ids)],
}
)
self.assertFalse(product.taxes_id, False)
self.assertEqual(product.supplier_taxes_id, self.tax_purchase2)