diff --git a/addons/stock/wizard/procurement_orderpoint_compute.py b/addons/stock/wizard/procurement_orderpoint_compute.py index d62d94ab054..da4f6969d89 100644 --- a/addons/stock/wizard/procurement_orderpoint_compute.py +++ b/addons/stock/wizard/procurement_orderpoint_compute.py @@ -6,10 +6,12 @@ # - Order if the virtual stock of today is bellow the min of the defined order point # -from odoo import api, models +from odoo import api, models, tools +import logging import threading +_logger = logging.getLogger(__name__) class ProcurementOrderpointConfirm(models.TransientModel): _name = 'procurement.orderpoint.compute' @@ -20,6 +22,17 @@ class ProcurementOrderpointConfirm(models.TransientModel): # As this function is in a new thread, I need to open a new cursor, because the old one may be closed new_cr = self.pool.cursor() self = self.with_env(self.env(cr=new_cr)) + scheduler_cron = self.sudo().env.ref('procurement.ir_cron_scheduler_action') + # Avoid to run the scheduler multiple times in the same time + try: + with tools.mute_logger('odoo.sql_db'): + self._cr.execute("SELECT id FROM ir_cron WHERE id = %s FOR UPDATE NOWAIT", (scheduler_cron.id,)) + except Exception: + _logger.info('Attempt to run procurement scheduler aborted, as already running') + self._cr.rollback() + self._cr.close() + return {} + self.env['procurement.order']._procure_orderpoint_confirm( use_new_cursor=new_cr.dbname, company_id=self.env.user.company_id.id)