From 9511cb2bb0fe41d2759dc504c7f5cae7f6ed0c99 Mon Sep 17 00:00:00 2001 From: "Lucas Perais (lpe)" Date: Thu, 13 Sep 2018 15:28:46 +0200 Subject: [PATCH] [FIX] point_of_sale: param for reconcile orders and payment It has been argued that a regression took place because of e2efec8e544917e8524f75739eaf7cfabc1e23ae Before that commit, everything was reconciled together After, only payments and orders with a partner set were While that commit improved performances (there are much less move lines to reconcile), it introduced an inconvenience business wise because of the noise created by the unreconciled lines This commit proposes to cut the pear in half by introducing an ir parameter to choose between the two options OPW 1883594 closes #26971 --- addons/point_of_sale/models/pos_order.py | 6 ++++++ addons/point_of_sale/models/pos_session.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) 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(