mirror of
https://github.com/OCA/account-financial-tools.git
synced 2025-02-02 12:47:26 +02:00
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user