Add an easy way to not post the entries in the future when calling post() on it, but rather set it to be auto-posted at accounting date. This is useful when we are creating a lot of entries in batch and some might be in the future, some in the past, and we don't want to separate that in two batch every time. (asset, accrual, transfer,... )
129 lines
5.0 KiB
Python
129 lines
5.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
|
|
from odoo.tests import tagged
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestAccountAccount(AccountTestInvoicingCommon):
|
|
|
|
def test_changing_account_company(self):
|
|
''' Ensure you can't change the company of an account.account if there are some journal entries '''
|
|
|
|
self.env['account.move'].create({
|
|
'move_type': 'entry',
|
|
'date': '2019-01-01',
|
|
'line_ids': [
|
|
(0, 0, {
|
|
'name': 'line_debit',
|
|
'account_id': self.company_data['default_account_revenue'].id,
|
|
}),
|
|
(0, 0, {
|
|
'name': 'line_credit',
|
|
'account_id': self.company_data['default_account_revenue'].id,
|
|
}),
|
|
],
|
|
})
|
|
|
|
with self.assertRaises(UserError), self.cr.savepoint():
|
|
self.company_data['default_account_revenue'].company_id = self.company_data_2['company']
|
|
|
|
def test_toggle_reconcile(self):
|
|
''' Test the feature when the user sets an account as reconcile/not reconcile with existing journal entries. '''
|
|
account = self.company_data['default_account_revenue']
|
|
|
|
move = self.env['account.move'].create({
|
|
'move_type': 'entry',
|
|
'date': '2019-01-01',
|
|
'line_ids': [
|
|
(0, 0, {
|
|
'account_id': account.id,
|
|
'currency_id': self.currency_data['currency'].id,
|
|
'debit': 100.0,
|
|
'credit': 0.0,
|
|
'amount_currency': 200.0,
|
|
}),
|
|
(0, 0, {
|
|
'account_id': account.id,
|
|
'currency_id': self.currency_data['currency'].id,
|
|
'debit': 0.0,
|
|
'credit': 100.0,
|
|
'amount_currency': -200.0,
|
|
}),
|
|
],
|
|
})
|
|
move.action_post()
|
|
|
|
self.assertRecordValues(move.line_ids, [
|
|
{'reconciled': False, 'amount_residual': 0.0, 'amount_residual_currency': 0.0},
|
|
{'reconciled': False, 'amount_residual': 0.0, 'amount_residual_currency': 0.0},
|
|
])
|
|
|
|
# Set the account as reconcile and fully reconcile something.
|
|
account.reconcile = True
|
|
self.env['account.move.line'].invalidate_cache()
|
|
|
|
self.assertRecordValues(move.line_ids, [
|
|
{'reconciled': False, 'amount_residual': 100.0, 'amount_residual_currency': 200.0},
|
|
{'reconciled': False, 'amount_residual': -100.0, 'amount_residual_currency': -200.0},
|
|
])
|
|
|
|
move.line_ids.reconcile()
|
|
self.assertRecordValues(move.line_ids, [
|
|
{'reconciled': True, 'amount_residual': 0.0, 'amount_residual_currency': 0.0},
|
|
{'reconciled': True, 'amount_residual': 0.0, 'amount_residual_currency': 0.0},
|
|
])
|
|
|
|
# Set back to a not reconcile account and check the journal items.
|
|
move.line_ids.remove_move_reconcile()
|
|
account.reconcile = False
|
|
self.env['account.move.line'].invalidate_cache()
|
|
|
|
self.assertRecordValues(move.line_ids, [
|
|
{'reconciled': False, 'amount_residual': 0.0, 'amount_residual_currency': 0.0},
|
|
{'reconciled': False, 'amount_residual': 0.0, 'amount_residual_currency': 0.0},
|
|
])
|
|
|
|
def test_toggle_reconcile_with_partials(self):
|
|
''' Test the feature when the user sets an account as reconcile/not reconcile with partial reconciliation. '''
|
|
account = self.company_data['default_account_revenue']
|
|
|
|
move = self.env['account.move'].create({
|
|
'move_type': 'entry',
|
|
'date': '2019-01-01',
|
|
'line_ids': [
|
|
(0, 0, {
|
|
'account_id': account.id,
|
|
'currency_id': self.currency_data['currency'].id,
|
|
'debit': 100.0,
|
|
'credit': 0.0,
|
|
'amount_currency': 200.0,
|
|
}),
|
|
(0, 0, {
|
|
'account_id': account.id,
|
|
'currency_id': self.currency_data['currency'].id,
|
|
'debit': 0.0,
|
|
'credit': 50.0,
|
|
'amount_currency': -100.0,
|
|
}),
|
|
(0, 0, {
|
|
'account_id': self.company_data['default_account_expense'].id,
|
|
'currency_id': self.currency_data['currency'].id,
|
|
'debit': 0.0,
|
|
'credit': 50.0,
|
|
'amount_currency': -100.0,
|
|
}),
|
|
],
|
|
})
|
|
move.action_post()
|
|
|
|
# Set the account as reconcile and partially reconcile something.
|
|
account.reconcile = True
|
|
self.env['account.move.line'].invalidate_cache()
|
|
|
|
move.line_ids.filtered(lambda line: line.account_id == account).reconcile()
|
|
|
|
# Try to set the account as a not-reconcile one.
|
|
with self.assertRaises(UserError), self.cr.savepoint():
|
|
account.reconcile = False
|