diff --git a/addons/mrp/models/stock_rule.py b/addons/mrp/models/stock_rule.py index d2bcdbbbafe..fb51b6d7aa0 100644 --- a/addons/mrp/models/stock_rule.py +++ b/addons/mrp/models/stock_rule.py @@ -5,6 +5,7 @@ from dateutil.relativedelta import relativedelta from odoo import api, fields, models, _ from odoo.exceptions import UserError +from odoo.osv import expression class StockRule(models.Model): @@ -88,3 +89,12 @@ class StockRule(models.Model): new_move_vals = super(StockRule, self)._push_prepare_move_copy_values(move_to_copy, new_date) new_move_vals['production_id'] = False return new_move_vals + +class ProcurementGroup(models.Model): + _inherit = 'procurement.group' + + @api.model + def _get_moves_to_assign_domain(self): + domain = super(ProcurementGroup, self)._get_moves_to_assign_domain() + domain = expression.AND([domain, [('production_id', '=', False)]]) + return domain diff --git a/addons/stock/models/stock_rule.py b/addons/stock/models/stock_rule.py index 5dc9132834c..c13e5da3cb7 100644 --- a/addons/stock/models/stock_rule.py +++ b/addons/stock/models/stock_rule.py @@ -356,15 +356,22 @@ class ProcurementGroup(models.Model): ('picking_id.backorder_id', '=', False), ('product_id', '=', values['product_id'].id)] + @api.model + def _get_moves_to_assign_domain(self): + return expression.AND([ + [('state', 'in', ['confirmed', 'partially_available'])], + [('product_uom_qty', '!=', 0.0)] + ]) + @api.model def _run_scheduler_tasks(self, use_new_cursor=False, company_id=False): # Minimum stock rules self.sudo()._procure_orderpoint_confirm(use_new_cursor=use_new_cursor, company_id=company_id) # Search all confirmed stock_moves and try to assign them - moves_to_assign = self.env['stock.move'].search([ - ('state', 'in', ['confirmed', 'partially_available']), ('product_uom_qty', '!=', 0.0) - ], limit=None, order='priority desc, date_expected asc') + domain = self._get_moves_to_assign_domain() + moves_to_assign = self.env['stock.move'].search(domain, limit=None, + order='priority desc, date_expected asc') for moves_chunk in split_every(100, moves_to_assign.ids): self.env['stock.move'].browse(moves_chunk)._action_assign() if use_new_cursor: