Skip to content
Snippets Groups Projects
Commit bdbda19b authored by Nicolas Martinelli's avatar Nicolas Martinelli
Browse files

[FIX] stock: prevent concurrent procurement creation

When the user clicks on "Run Reordering Rules", it might create
procurements. However, the cron "Run mrp scheduler" will also create
procurements and might already be running in the background. Therefore,
we need to make sure that both actions don't run concurrently.

Note that the same check is done for the wizard "Run Schedulers".

opw-695607
parent 22fb76a0
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment