diff --git a/addons/point_of_sale/models/pos_order.py b/addons/point_of_sale/models/pos_order.py index fcb8cf25222..e43200dbc4d 100644 --- a/addons/point_of_sale/models/pos_order.py +++ b/addons/point_of_sale/models/pos_order.py @@ -407,6 +407,12 @@ class PosOrder(models.Model): # for debugging and support purposes _logger.exception('Reconciliation did not work for order %s', order.name) + def _filtered_for_reconciliation(self): + filter_states = ['invoiced', 'done'] + if self.env['ir.config_parameter'].get_param('point_of_sale.order_reconcile_mode', 'all') == 'partner_only': + return self.filtered(lambda order: order.state in filter_states and order.partner_id) + return self.filtered(lambda order: order.state in filter_states) + def _default_session(self): return self.env['pos.session'].search([('state', '=', 'opened'), ('user_id', '=', self.env.uid)], limit=1) diff --git a/addons/point_of_sale/models/pos_session.py b/addons/point_of_sale/models/pos_session.py index 4ff493ee377..15ce31b6876 100644 --- a/addons/point_of_sale/models/pos_session.py +++ b/addons/point_of_sale/models/pos_session.py @@ -29,7 +29,7 @@ class PosSession(models.Model): if order.state not in ('paid'): raise UserError(_("You cannot confirm all orders of this session, because they have not the 'paid' status")) order.action_pos_order_done() - orders_to_reconcile = session.order_ids.filtered(lambda order: order.state in ['invoiced', 'done'] and order.partner_id) + orders_to_reconcile = session.order_ids._filtered_for_reconciliation() orders_to_reconcile.sudo()._reconcile_payments() config_id = fields.Many2one(