[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.
This commit is contained in:
Martin Trigaux 2014-08-26 14:31:42 +02:00
parent f6dceb2ef6
commit 69cd13a084
3 changed files with 32 additions and 26 deletions

View File

@ -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',

View File

@ -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):

View File

@ -10,23 +10,11 @@
<field name="name">POS Order</field>
<field name="code">pos.order</field>
</record>
<record model="ir.sequence" id="seq_pos_order">
<field name="name">POS Order</field>
<field name="code">pos.order</field>
<field name="prefix">POS</field>
<field name="padding">4</field>
</record>
<record model="ir.sequence.type" id="seq_type_pos_order_line">
<field name="name">POS order line</field>
<field name="code">pos.order.line</field>
</record>
<record model="ir.sequence" id="seq_pos_order_line">
<field name="name">POS order line</field>
<field name="code">pos.order.line</field>
<field name="prefix">POSL</field>
<field name="padding">4</field>
</record>
<record model="ir.sequence.type" id="seq_type_pos_session">
<field name="name">POS Session</field>
@ -36,8 +24,9 @@
<record model="ir.sequence" id="seq_pos_session">
<field name="name">POS Session</field>
<field name="code">pos.session</field>
<field name="prefix">POS/%(day)s/(month)s/%(year)s/</field>
<field name="padding">4</field>
<field name="prefix">POS/%(year)s/%(month)s/%(day)s/</field>
<field name="padding">2</field>
<field name="company_id" eval="False" />
</record>
</data>