From fb38f1d81d1498dc228e4c5ce09d4a99a7b42fb3 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Mon, 25 Mar 2013 14:44:10 +0100 Subject: [PATCH 1/4] [FIX] Update partner in associated bank statements when changing partner in pos order bzr revid: jco@openerp.com-20130325134410-ky0akwdcfr805df8 --- addons/point_of_sale/point_of_sale.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 44139f7a499..b47f31a2dad 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -523,6 +523,17 @@ class pos_order(osv.osv): wf_service.trg_validate(uid, 'pos.order', order_id, 'paid', cr) return order_ids + def write(self, cr, uid, ids, vals, context=None): + #If you change the partner of the PoS order, change also the partner of the associated bank statements + res = super(pos_order, self).write(cr, uid, ids, vals, context=context) + bsl_obj = self.pool.get("account.bank.statement.line") + if 'partner_id' in vals: + for posorder in self.browse(cr, uid, ids, context=context): + bsl_ids = [x.id for x in posorder.statement_ids] + part_id = self.pool.get('res.partner')._find_accounting_partner(posorder.partner_id).id + bsl_obj.write(cr, uid, bsl_ids, {'partner_id': part_id}, context=context) + return res + def unlink(self, cr, uid, ids, context=None): for rec in self.browse(cr, uid, ids, context=context): if rec.state not in ('draft','cancel'): From 2d210fce44faa23adce7399de8b5c965353e1191 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Thu, 28 Mar 2013 12:28:29 +0100 Subject: [PATCH 2/4] [FIX] Use accounting partner and take partner into account when group by bzr revid: jco@openerp.com-20130328112829-6sj9eixmkzm3dr1r --- addons/point_of_sale/point_of_sale.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index b47f31a2dad..570168795a7 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -526,11 +526,16 @@ class pos_order(osv.osv): def write(self, cr, uid, ids, vals, context=None): #If you change the partner of the PoS order, change also the partner of the associated bank statements res = super(pos_order, self).write(cr, uid, ids, vals, context=context) + partner_obj = self.pool.get('res.partner') bsl_obj = self.pool.get("account.bank.statement.line") if 'partner_id' in vals: for posorder in self.browse(cr, uid, ids, context=context): bsl_ids = [x.id for x in posorder.statement_ids] - part_id = self.pool.get('res.partner')._find_accounting_partner(posorder.partner_id).id + if vals['partner_id']: + p_id = partner_obj.browse(cr, uid, vals['partner_id'], context=context) + part_id = partner_obj._find_accounting_partner(p_id).id + else: + part_id = False bsl_obj.write(cr, uid, bsl_ids, {'partner_id': part_id}, context=context) return res @@ -962,9 +967,9 @@ class pos_order(osv.osv): }) if data_type == 'product': - key = ('product', values['product_id'],) + key = ('product', values['partner_id'], values['product_id']) elif data_type == 'tax': - key = ('tax', values['tax_code_id'],) + key = ('tax', values['partner_id'], values['tax_code_id'],) elif data_type == 'counter_part': key = ('counter_part', values['partner_id'], values['account_id']) else: @@ -1040,7 +1045,7 @@ class pos_order(osv.osv): 'debit': ((amount<0) and -amount) or 0.0, 'tax_code_id': tax_code_id, 'tax_amount': tax_amount, - 'partner_id': order.partner_id and order.partner_id.id or False + 'partner_id': order.partner_id and self.pool.get("res.partner")._find_accounting_partner(order.partner_id).id or False }) # For each remaining tax with a code, whe create a move line @@ -1082,7 +1087,7 @@ class pos_order(osv.osv): 'account_id': order_account, 'credit': ((order.amount_total < 0) and -order.amount_total) or 0.0, 'debit': ((order.amount_total > 0) and order.amount_total) or 0.0, - 'partner_id': order.partner_id and order.partner_id.id or False + 'partner_id': order.partner_id and self.pool.get("res.partner")._find_accounting_partner(order.partner_id).id or False }) order.write({'state':'done', 'account_move': move_id}) From c0b4f5b714c6804a3747ba090556fd78aacd9a94 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Thu, 28 Mar 2013 13:16:15 +0100 Subject: [PATCH 3/4] [FIX] taxes should have partner too bzr revid: jco@openerp.com-20130328121615-eyoplrrrofrosuay --- addons/point_of_sale/point_of_sale.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 570168795a7..cd3dea7cb66 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -1063,6 +1063,7 @@ class pos_order(osv.osv): 'debit': 0.0, 'tax_code_id': tax_code_id, 'tax_amount': tax_amount, + 'partner_id': order.partner_id and self.pool.get("res.partner")._find_accounting_partner(order.partner_id).id or False }) # Create a move for each tax group @@ -1079,6 +1080,7 @@ class pos_order(osv.osv): 'debit': ((tax_amount<0) and -tax_amount) or 0.0, 'tax_code_id': key[tax_code_pos], 'tax_amount': tax_amount, + 'partner_id': order.partner_id and self.pool.get("res.partner")._find_accounting_partner(order.partner_id).id or False }) # counterpart From 78e94187179b1a62c2699b8f14b6369de10759c6 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Thu, 28 Mar 2013 16:55:49 +0100 Subject: [PATCH 4/4] [FIX] Write all lines at once to the move instead of creating move lines separately bzr revid: jco@openerp.com-20130328155549-pdqg0fgk1timzgfb --- addons/point_of_sale/point_of_sale.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index cd3dea7cb66..253fdea02ef 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -1094,9 +1094,12 @@ class pos_order(osv.osv): order.write({'state':'done', 'account_move': move_id}) + all_lines = [] for group_key, group_data in grouped_data.iteritems(): for value in group_data: - account_move_line_obj.create(cr, uid, value, context=context) + all_lines.append((0, 0, value),) + if move_id: #In case no order was changed + self.pool.get("account.move").write(cr, uid, [move_id], {'line_id':all_lines}, context=context) return True