[FIX] point_of_sale: payment method selection
When giving back change, prioritize the same cache method as the one that was use for the transaction. This prevents cases where cash input is registered in journal B and change in journal A. Fixes #6975, closes #6976
This commit is contained in:
parent
39d17c2580
commit
4b548d98d1
|
@ -588,9 +588,10 @@ class pos_order(osv.osv):
|
|||
|
||||
def _process_order(self, cr, uid, order, context=None):
|
||||
order_id = self.create(cr, uid, self._order_fields(cr, uid, order, context=context),context)
|
||||
|
||||
journal_ids = set()
|
||||
for payments in order['statement_ids']:
|
||||
self.add_payment(cr, uid, order_id, self._payment_fields(cr, uid, payments[2], context=context), context=context)
|
||||
journal_ids.add(payments[2]['journal_id'])
|
||||
|
||||
session = self.pool.get('pos.session').browse(cr, uid, order['pos_session_id'], context=context)
|
||||
if session.sequence_number <= order['sequence_number']:
|
||||
|
@ -600,16 +601,26 @@ class pos_order(osv.osv):
|
|||
if not float_is_zero(order['amount_return'], self.pool.get('decimal.precision').precision_get(cr, uid, 'Account')):
|
||||
cash_journal = session.cash_journal_id
|
||||
if not cash_journal:
|
||||
cash_journal_ids = filter(lambda st: st.journal_id.type=='cash', session.statement_ids)
|
||||
if not len(cash_journal_ids):
|
||||
raise osv.except_osv( _('error!'),
|
||||
_("No cash statement found for this session. Unable to record returned cash."))
|
||||
cash_journal = cash_journal_ids[0].journal_id
|
||||
# Select for change one of the cash journals used in this payment
|
||||
cash_journal_ids = self.pool['account.journal'].search(cr, uid, [
|
||||
('type', '=', 'cash'),
|
||||
('id', 'in', list(journal_ids)),
|
||||
], limit=1, context=context)
|
||||
if not cash_journal_ids:
|
||||
# If none, select for change one of the cash journals of the POS
|
||||
# This is used for example when a customer pays by credit card
|
||||
# an amount higher than total amount of the order and gets cash back
|
||||
cash_journal_ids = [statement.journal_id.id for statement in session.statement_ids
|
||||
if statement.journal_id.type == 'cash']
|
||||
if not cash_journal_ids:
|
||||
raise osv.except_osv( _('error!'),
|
||||
_("No cash statement found for this session. Unable to record returned cash."))
|
||||
cash_journal = cash_journal_ids[0]
|
||||
self.add_payment(cr, uid, order_id, {
|
||||
'amount': -order['amount_return'],
|
||||
'payment_date': time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'payment_name': _('return'),
|
||||
'journal': cash_journal.id,
|
||||
'journal': cash_journal,
|
||||
}, context=context)
|
||||
return order_id
|
||||
|
||||
|
|
Loading…
Reference in New Issue