mirror of
https://github.com/OCA/account-financial-tools.git
synced 2025-02-02 12:47:26 +02:00
[IMP] product_category_tax: set tax performance on large recordsets
1) database searching is much more efficient than py filtering 2) writing on multiple products at once is more efficient
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -13,6 +13,4 @@ class ProductProduct(models.Model):
|
||||
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()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -15,6 +17,14 @@ class ProductTemplate(models.Model):
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user