From 69cd13a0841fa81f881a616aa28424af7ce6a4c8 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Tue, 26 Aug 2014 14:31:42 +0200 Subject: [PATCH] [FIX] point_of_sale: incorrect sequences for orders A new ir.sequence is generated at pos.config creation for the orders. However it was not used as the type was not set. The fallback was done on the general sequence. In addition to the sequences being shared, it was not possible to create a pos.order in multicompany (no sequence found for user company, name was null). Same issue for the pos.order.line. This patch generates correctly pos.order and pos.order.line sequences at pos.config creation. Instead of using the pos.config sequence to generate session number (not what this field was intended to), use the existing sequence for pos.session. Remove company_id value on default pos.session sequence to make sure it's shared between companies and correctly set the prefix. --- addons/point_of_sale/__openerp__.py | 2 +- addons/point_of_sale/point_of_sale.py | 39 +++++++++++++------ .../point_of_sale/point_of_sale_sequence.xml | 17 ++------ 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/addons/point_of_sale/__openerp__.py b/addons/point_of_sale/__openerp__.py index 4e378d0a494..9a7c48d7574 100644 --- a/addons/point_of_sale/__openerp__.py +++ b/addons/point_of_sale/__openerp__.py @@ -63,9 +63,9 @@ Main Features 'views/templates.xml', 'point_of_sale_report.xml', 'point_of_sale_view.xml', + 'point_of_sale_sequence.xml', 'point_of_sale_data.xml', 'report/pos_order_report_view.xml', - 'point_of_sale_sequence.xml', 'point_of_sale_workflow.xml', 'account_statement_view.xml', 'account_statement_report.xml', diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 9d731e677d2..1e074975391 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -186,14 +186,26 @@ class pos_config(osv.osv): return self.write(cr, uid, ids, {'state' : 'deprecated'}, context=context) def create(self, cr, uid, values, context=None): - proxy = self.pool.get('ir.sequence') - sequence_values = dict( - name='PoS %s' % values['name'], - padding=5, - prefix="%s/" % values['name'], - ) - sequence_id = proxy.create(cr, uid, sequence_values, context=context) - values['sequence_id'] = sequence_id + ir_sequence = self.pool.get('ir.sequence') + # force sequence_id field to new pos.order sequence + values['sequence_id'] = ir_sequence.create(cr, uid, { + 'name': 'POS Order %s' % values['name'], + 'padding': 4, + 'prefix': "%s/" % values['name'], + 'code': "pos.order", + 'company_id': values.get('company_id', False), + }, context=context) + + # TODO master: add field sequence_line_id on model + # this make sure we always have one available per company + ir_sequence.create(cr, uid, { + 'name': 'POS order line %s' % values['name'], + 'padding': 4, + 'prefix': "%s/" % values['name'], + 'code': "pos.order.line", + 'company_id': values.get('company_id', False), + }, context=context) + return super(pos_config, self).create(cr, uid, values, context=context) def unlink(self, cr, uid, ids, context=None): @@ -399,7 +411,7 @@ class pos_session(osv.osv): bank_statement_ids.append(statement_id) values.update({ - 'name' : pos_config.sequence_id._next(), + 'name': self.pool['ir.sequence'].get(cr, uid, 'pos.session'), 'statement_ids' : [(6, 0, bank_statement_ids)], 'config_id': config_id }) @@ -464,7 +476,6 @@ class pos_session(osv.osv): def wkf_action_close(self, cr, uid, ids, context=None): # Close CashBox - bsl = self.pool.get('account.bank.statement.line') for record in self.browse(cr, uid, ids, context=context): for st in record.statement_ids: if abs(st.difference) > st.journal_id.amount_authorized_diff: @@ -722,7 +733,13 @@ class pos_order(osv.osv): } def create(self, cr, uid, values, context=None): - values['name'] = self.pool.get('ir.sequence').get(cr, uid, 'pos.order') + if values.get('session_id'): + # set name based on the sequence specified on the config + session = self.pool['pos.session'].browse(cr, uid, values['session_id'], context=context) + values['name'] = session.config_id.sequence_id._next() + else: + # fallback on any pos.order sequence + values['name'] = self.pool.get('ir.sequence').get_id(cr, uid, 'pos.order', 'code', context=context) return super(pos_order, self).create(cr, uid, values, context=context) def test_paid(self, cr, uid, ids, context=None): diff --git a/addons/point_of_sale/point_of_sale_sequence.xml b/addons/point_of_sale/point_of_sale_sequence.xml index 4bcab244c56..6ac1d003d98 100644 --- a/addons/point_of_sale/point_of_sale_sequence.xml +++ b/addons/point_of_sale/point_of_sale_sequence.xml @@ -10,23 +10,11 @@ POS Order pos.order - - POS Order - pos.order - POS - 4 - POS order line pos.order.line - - POS order line - pos.order.line - POSL - 4 - POS Session @@ -36,8 +24,9 @@ POS Session pos.session - POS/%(day)s/(month)s/%(year)s/ - 4 + POS/%(year)s/%(month)s/%(day)s/ + 2 +