Stéphane Bidoul
9 years ago
3 changed files with 158 additions and 0 deletions
@ -0,0 +1,155 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>) |
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
|||
|
|||
import datetime |
|||
|
|||
from openerp import fields |
|||
import openerp.tests.common as common |
|||
from openerp.tools.safe_eval import safe_eval |
|||
|
|||
from ..models.aep import AccountingExpressionProcessor as AEP |
|||
from ..models.accounting_none import AccountingNone |
|||
|
|||
|
|||
class TestAEP(common.TransactionCase): |
|||
|
|||
def setUp(self): |
|||
super(TestAEP, self).setUp() |
|||
self.account_model = self.env['account.account'] |
|||
self.move_model = self.env['account.move'] |
|||
self.journal_model = self.env['account.journal'] |
|||
self.curr_year = datetime.date.today().year |
|||
self.prev_year = self.curr_year - 1 |
|||
# create receivable bs account |
|||
type_ar = self.browse_ref('account.data_account_type_receivable') |
|||
self.account_ar = self.account_model.create({ |
|||
'code': '400AR', |
|||
'name': 'Receivable', |
|||
'user_type_id': type_ar.id, |
|||
'reconcile': True}) |
|||
# create income pl account |
|||
type_in = self.browse_ref('account.data_account_type_revenue') |
|||
self.account_in = self.account_model.create({ |
|||
'code': '700IN', |
|||
'name': 'Income', |
|||
'user_type_id': type_in.id}) |
|||
# create journal |
|||
self.journal = self.journal_model.create({ |
|||
'name': 'Sale journal', |
|||
'code': 'VEN', |
|||
'type': 'sale'}) |
|||
# create the AEP, and prepare the expressions we'll need |
|||
self.aep = AEP(self.env) |
|||
self.aep.parse_expr("bali[]") |
|||
self.aep.parse_expr("bale[]") |
|||
self.aep.parse_expr("balp[]") |
|||
self.aep.parse_expr("balu[]") |
|||
self.aep.done_parsing(self.env.user.company_id) |
|||
|
|||
def _create_move(self, date, amount, debit_acc, credit_acc): |
|||
move = self.move_model.create({ |
|||
'journal_id': self.journal.id, |
|||
'date': fields.Date.to_string(date), |
|||
'line_ids': [(0, 0, { |
|||
'name': '/', |
|||
'debit': amount, |
|||
'account_id': debit_acc.id, |
|||
}), (0, 0, { |
|||
'name': '/', |
|||
'credit': amount, |
|||
'account_id': credit_acc.id, |
|||
}) |
|||
]}) |
|||
move.post() |
|||
return move |
|||
|
|||
def _do_queries(self, date_from, date_to): |
|||
self.aep.do_queries( |
|||
date_from=fields.Date.to_string(date_from), |
|||
date_to=fields.Date.to_string(date_to), |
|||
target_move='posted', |
|||
company=self.env.user.company_id |
|||
) |
|||
|
|||
def _eval(self, expr, acc=None): |
|||
eval_dict = {'AccountingNone': AccountingNone} |
|||
if acc: |
|||
return safe_eval( |
|||
self.aep.replace_expr(expr, account_ids_filter=[acc.id]), |
|||
eval_dict) |
|||
else: |
|||
return safe_eval( |
|||
self.aep.replace_expr(expr), |
|||
eval_dict) |
|||
|
|||
def test_sanity_check(self): |
|||
self.assertEquals(self.env.user.company_id.fiscalyear_last_day, 31) |
|||
self.assertEquals(self.env.user.company_id.fiscalyear_last_month, 12) |
|||
|
|||
def test_aep_1(self): |
|||
# create move in december last year |
|||
self._create_move( |
|||
date=datetime.date(self.prev_year, 12, 1), |
|||
amount=100, |
|||
debit_acc=self.account_ar, |
|||
credit_acc=self.account_in) |
|||
# create move in january this year |
|||
self._create_move( |
|||
date=datetime.date(self.curr_year, 1, 1), |
|||
amount=300, |
|||
debit_acc=self.account_ar, |
|||
credit_acc=self.account_in) |
|||
# create move in february this year |
|||
self._create_move( |
|||
date=datetime.date(self.curr_year, 3, 1), |
|||
amount=500, |
|||
debit_acc=self.account_ar, |
|||
credit_acc=self.account_in) |
|||
|
|||
# let's query for december |
|||
self._do_queries( |
|||
datetime.date(self.prev_year, 12, 1), |
|||
datetime.date(self.prev_year, 12, 31)) |
|||
# initial balance must be None |
|||
self.assertIs(self._eval('bali[]', self.account_in), AccountingNone) |
|||
self.assertIs(self._eval('bali[]', self.account_ar), AccountingNone) |
|||
# check variation |
|||
self.assertEquals(self._eval('balp[]', self.account_in), -100) |
|||
self.assertEquals(self._eval('balp[]', self.account_ar), 100) |
|||
# check ending balance |
|||
self.assertEquals(self._eval('bale[]', self.account_in), -100) |
|||
self.assertEquals(self._eval('bale[]', self.account_ar), 100) |
|||
|
|||
# let's query for January |
|||
self._do_queries( |
|||
datetime.date(self.curr_year, 1, 1), |
|||
datetime.date(self.curr_year, 1, 31)) |
|||
# initial balance is None for income account (it's not carried over) |
|||
self.assertIs(self._eval('bali[]', self.account_in), AccountingNone) |
|||
self.assertEquals(self._eval('bali[]', self.account_ar), 100) |
|||
# check variation |
|||
self.assertEquals(self._eval('balp[]', self.account_in), -300) |
|||
self.assertEquals(self._eval('balp[]', self.account_ar), 300) |
|||
# check ending balance |
|||
self.assertEquals(self._eval('bale[]', self.account_in), -300) |
|||
self.assertEquals(self._eval('bale[]', self.account_ar), 400) |
|||
|
|||
# let's query for March |
|||
self._do_queries( |
|||
datetime.date(self.curr_year, 3, 1), |
|||
datetime.date(self.curr_year, 3, 31)) |
|||
# initial balance is the ending balance fo January |
|||
self.assertEquals(self._eval('bali[]', self.account_in), -300) |
|||
self.assertEquals(self._eval('bali[]', self.account_ar), 400) |
|||
# check variation |
|||
self.assertEquals(self._eval('balp[]', self.account_in), -500) |
|||
self.assertEquals(self._eval('balp[]', self.account_ar), 500) |
|||
# check ending balance |
|||
self.assertEquals(self._eval('bale[]', self.account_in), -800) |
|||
self.assertEquals(self._eval('bale[]', self.account_ar), 900) |
|||
|
|||
# unallocated p&l from previous year |
|||
self.assertEquals(self._eval('balu[]'), -100) |
|||
|
|||
# TODO allocate profits, and then... |
Write
Preview
Loading…
Cancel
Save
Reference in new issue