[FIX] point_of_sale: fixed errors that avoid closing a pos session + [IMP] account: added back the account_id field on statement.line obj to ease the reconciliation process when importing statements (or creating them through pos.orders). Fix #932
This commit is contained in:
parent
b1f1596aef
commit
5ae60d8a2d
|
@ -326,16 +326,26 @@ class account_bank_statement(osv.osv):
|
||||||
or (not st.journal_id.default_debit_account_id):
|
or (not st.journal_id.default_debit_account_id):
|
||||||
raise osv.except_osv(_('Configuration Error!'), _('Please verify that an account is defined in the journal.'))
|
raise osv.except_osv(_('Configuration Error!'), _('Please verify that an account is defined in the journal.'))
|
||||||
for line in st.move_line_ids:
|
for line in st.move_line_ids:
|
||||||
if line.state <> 'valid':
|
if line.state != 'valid':
|
||||||
raise osv.except_osv(_('Error!'), _('The account entries lines are not in valid state.'))
|
raise osv.except_osv(_('Error!'), _('The account entries lines are not in valid state.'))
|
||||||
move_ids = []
|
move_ids = []
|
||||||
for st_line in st.line_ids:
|
for st_line in st.line_ids:
|
||||||
if not st_line.amount:
|
if not st_line.amount:
|
||||||
continue
|
continue
|
||||||
if not st_line.journal_entry_id.id:
|
if st_line.account_id and not st_line.journal_entry_id.id:
|
||||||
|
#make an account move as before
|
||||||
|
vals = {
|
||||||
|
'debit': st_line.amount < 0 and -st_line.amount or 0.0,
|
||||||
|
'credit': st_line.amount > 0 and st_line.amount or 0.0,
|
||||||
|
'account_id': st_line.account_id.id,
|
||||||
|
'name': st_line.name
|
||||||
|
}
|
||||||
|
self.pool.get('account.bank.statement.line').process_reconciliation(cr, uid, st_line.id, [vals], context=context)
|
||||||
|
elif not st_line.journal_entry_id.id:
|
||||||
raise osv.except_osv(_('Error!'), _('All the account entries lines must be processed in order to close the statement.'))
|
raise osv.except_osv(_('Error!'), _('All the account entries lines must be processed in order to close the statement.'))
|
||||||
move_ids.append(st_line.journal_entry_id.id)
|
move_ids.append(st_line.journal_entry_id.id)
|
||||||
self.pool.get('account.move').post(cr, uid, move_ids, context=context)
|
if move_ids:
|
||||||
|
self.pool.get('account.move').post(cr, uid, move_ids, context=context)
|
||||||
self.message_post(cr, uid, [st.id], body=_('Statement %s confirmed, journal items were created.') % (st.name,), context=context)
|
self.message_post(cr, uid, [st.id], body=_('Statement %s confirmed, journal items were created.') % (st.name,), context=context)
|
||||||
self.link_bank_to_partner(cr, uid, ids, context=context)
|
self.link_bank_to_partner(cr, uid, ids, context=context)
|
||||||
return self.write(cr, uid, ids, {'state': 'confirm'}, context=context)
|
return self.write(cr, uid, ids, {'state': 'confirm'}, context=context)
|
||||||
|
@ -728,7 +738,9 @@ class account_bank_statement_line(osv.osv):
|
||||||
move_id = am_obj.create(cr, uid, move_vals, context=context)
|
move_id = am_obj.create(cr, uid, move_vals, context=context)
|
||||||
|
|
||||||
# Create the move line for the statement line
|
# Create the move line for the statement line
|
||||||
amount = currency_obj.compute(cr, uid, st_line.statement_id.currency.id, company_currency.id, st_line.amount, context=context)
|
ctx = context.copy()
|
||||||
|
ctx['date'] = st_line.date
|
||||||
|
amount = currency_obj.compute(cr, uid, st_line.statement_id.currency.id, company_currency.id, st_line.amount, context=ctx)
|
||||||
bank_st_move_vals = bs_obj._prepare_bank_move_line(cr, uid, st_line, move_id, amount, company_currency.id, context=context)
|
bank_st_move_vals = bs_obj._prepare_bank_move_line(cr, uid, st_line, move_id, amount, company_currency.id, context=context)
|
||||||
aml_obj.create(cr, uid, bank_st_move_vals, context=context)
|
aml_obj.create(cr, uid, bank_st_move_vals, context=context)
|
||||||
# Complete the dicts
|
# Complete the dicts
|
||||||
|
@ -810,6 +822,7 @@ class account_bank_statement_line(osv.osv):
|
||||||
'amount': fields.float('Amount', digits_compute=dp.get_precision('Account')),
|
'amount': fields.float('Amount', digits_compute=dp.get_precision('Account')),
|
||||||
'partner_id': fields.many2one('res.partner', 'Partner'),
|
'partner_id': fields.many2one('res.partner', 'Partner'),
|
||||||
'bank_account_id': fields.many2one('res.partner.bank','Bank Account'),
|
'bank_account_id': fields.many2one('res.partner.bank','Bank Account'),
|
||||||
|
'account_id': fields.many2one('account.account', 'Account', help="This technical field can be used at the statement line creation/import time in order to avoid the reconciliation process on it later on. The statement line will simply create a counterpart on this account"),
|
||||||
'statement_id': fields.many2one('account.bank.statement', 'Statement', select=True, required=True, ondelete='cascade'),
|
'statement_id': fields.many2one('account.bank.statement', 'Statement', select=True, required=True, ondelete='cascade'),
|
||||||
'journal_id': fields.related('statement_id', 'journal_id', type='many2one', relation='account.journal', string='Journal', store=True, readonly=True),
|
'journal_id': fields.related('statement_id', 'journal_id', type='many2one', relation='account.journal', string='Journal', store=True, readonly=True),
|
||||||
'ref': fields.char('Structured Communication'),
|
'ref': fields.char('Structured Communication'),
|
||||||
|
|
|
@ -139,7 +139,7 @@ openerp.account = function (instance) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retreive statement infos and reconciliation data from the model
|
// Retreive statement infos and reconciliation data from the model
|
||||||
var lines_filter = [['journal_entry_id', '=', false]];
|
var lines_filter = [['journal_entry_id', '=', false], ['account_id', '=', false]];
|
||||||
var deferred_promises = [];
|
var deferred_promises = [];
|
||||||
|
|
||||||
if (self.statement_id) {
|
if (self.statement_id) {
|
||||||
|
|
|
@ -492,6 +492,8 @@ class pos_session(osv.osv):
|
||||||
pos_order_obj._create_account_move_line(cr, uid, order_ids, session, move_id, context=local_context)
|
pos_order_obj._create_account_move_line(cr, uid, order_ids, session, move_id, context=local_context)
|
||||||
|
|
||||||
for order in session.order_ids:
|
for order in session.order_ids:
|
||||||
|
if order.state == 'done':
|
||||||
|
continue
|
||||||
if order.state not in ('paid', 'invoiced'):
|
if order.state not in ('paid', 'invoiced'):
|
||||||
raise osv.except_osv(
|
raise osv.except_osv(
|
||||||
_('Error!'),
|
_('Error!'),
|
||||||
|
@ -811,6 +813,16 @@ class pos_order(osv.osv):
|
||||||
'name': order.name + ': ' + (data.get('payment_name', '') or ''),
|
'name': order.name + ': ' + (data.get('payment_name', '') or ''),
|
||||||
'partner_id': order.partner_id and order.partner_id.id or None,
|
'partner_id': order.partner_id and order.partner_id.id or None,
|
||||||
}
|
}
|
||||||
|
account_def = property_obj.get(cr, uid, 'property_account_receivable', 'res.partner', context=context)
|
||||||
|
args['account_id'] = (order.partner_id and order.partner_id.property_account_receivable \
|
||||||
|
and order.partner_id.property_account_receivable.id) or (account_def and account_def.id) or False
|
||||||
|
|
||||||
|
if not args['account_id']:
|
||||||
|
if not args['partner_id']:
|
||||||
|
msg = _('There is no receivable account defined to make payment.')
|
||||||
|
else:
|
||||||
|
msg = _('There is no receivable account defined to make payment for the partner: "%s" (id:%d).') % (order.partner_id.name, order.partner_id.id,)
|
||||||
|
raise osv.except_osv(_('Configuration Error!'), msg)
|
||||||
|
|
||||||
context.pop('pos_session_id', False)
|
context.pop('pos_session_id', False)
|
||||||
|
|
||||||
|
@ -830,10 +842,10 @@ class pos_order(osv.osv):
|
||||||
raise osv.except_osv(_('Error!'), _('You have to open at least one cashbox.'))
|
raise osv.except_osv(_('Error!'), _('You have to open at least one cashbox.'))
|
||||||
|
|
||||||
args.update({
|
args.update({
|
||||||
'statement_id' : statement_id,
|
'statement_id': statement_id,
|
||||||
'pos_statement_id' : order_id,
|
'pos_statement_id': order_id,
|
||||||
'journal_id' : journal_id,
|
'journal_id': journal_id,
|
||||||
'ref' : order.session_id.name,
|
'ref': order.session_id.name,
|
||||||
})
|
})
|
||||||
|
|
||||||
statement_line_obj.create(cr, uid, args, context=context)
|
statement_line_obj.create(cr, uid, args, context=context)
|
||||||
|
|
Loading…
Reference in New Issue