[IMP] stock_average_daily_sale: Avoid errors in all searches and return browse record

This commit is contained in:
Denis Roussel
2023-10-10 11:51:30 +02:00
committed by twalter-c2c
parent 13300ee755
commit 8ecd2cd37e
2 changed files with 19 additions and 11 deletions

View File

@@ -101,7 +101,8 @@ class StockAverageDailySale(models.Model):
@api.model @api.model
def _check_view(self): def _check_view(self):
try: try:
self.env.cr.execute("SELECT COUNT(1) FROM %s", (AsIs(self._table),)) with self.env.cr.savepoint():
self.env.cr.execute("SELECT COUNT(1) FROM %s", (AsIs(self._table),))
return True return True
except ObjectNotInPrerequisiteState: except ObjectNotInPrerequisiteState:
_logger.warning( _logger.warning(
@@ -113,18 +114,11 @@ class StockAverageDailySale(models.Model):
# pylint: disable=redefined-outer-name # pylint: disable=redefined-outer-name
@api.model @api.model
def search_read( def search(self, domain, offset=0, limit=None, order=None, count=False):
self, domain=None, fields=None, offset=0, limit=None, order=None, **read_kwargs
):
if not self._check_view(): if not self._check_view():
return self.browse() return self.browse()
return super().search_read( return super().search(
domain=domain, domain=domain, offset=offset, limit=limit, order=order, count=count
fields=fields,
offset=offset,
limit=limit,
order=order,
**read_kwargs
) )
@api.model @api.model

View File

@@ -1,5 +1,6 @@
# Copyright 2022 ACSONE SA/NV # Copyright 2022 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from freezegun import freeze_time from freezegun import freeze_time
@@ -204,3 +205,16 @@ class TestAverageSale(CommonAverageSaleTest, TransactionCase):
self.env["stock.average.daily.sale"].search_read( self.env["stock.average.daily.sale"].search_read(
[("product_id", "=", self.product_1.id)] [("product_id", "=", self.product_1.id)]
) )
def test_view_not_refreshed(self):
with self.assertLogs(
"odoo.addons.stock_average_daily_sale.models.stock_average_daily_sale",
level="WARNING",
) as logger:
self.env["stock.average.daily.sale"].search(
[("product_id", "=", self.product_1.id)]
)
self.assertIn(
str("The materialized view has not been populated. Launch the cron."),
str(logger.output),
)