Files
public/rsbu_kudir/tests/test_kudir.py

117 lines
5.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from odoo.tests import TransactionCase, tagged
@tagged('post_install', '-at_install')
class TestRsbuKudir(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.company = cls.env.company
cls.partner = cls.env['res.partner'].create({'name': 'Kudir Клиент'})
cls.journal_bank = cls.env['account.journal'].search(
[('type', '=', 'bank'), ('company_id', '=', cls.company.id)],
limit=1)
cls.Kudir = cls.env['rsbu.kudir.line']
def _acc(self, code):
return self.env['rsbu.account'].search([
('code', '=', code),
('company_id', '=', self.env.company.id)], limit=1)
def _advance_template(self, recognition='income'):
return self.env['rsbu.operation.template'].create({
'code': 'ADV_IN_K',
'name': 'Аванс',
'resolver_key': 'advance_received',
'usn_recognition': recognition,
'role_ids': [
(0, 0, {'role': 'bank', 'account_id': self._acc('51').id}),
(0, 0, {'role': 'advance_received',
'account_id': self._acc('62.АВ').id}),
(0, 0, {'role': 'vat_advance',
'account_id': self._acc('76.АВ').id}),
(0, 0, {'role': 'vat_output',
'account_id': self._acc('68.НДС').id}),
],
})
def _matrix(self, template):
return self.env['rsbu.operation.matrix'].create({
'name': 'Входящий → аванс',
'doc_kind': 'payment_inbound',
'template_id': template.id,
})
def _post_advance(self, amount=1050.0, vat=50.0):
pay = self.env['account.payment'].create({
'payment_type': 'inbound',
'partner_type': 'customer',
'partner_id': self.partner.id,
'amount': amount,
'rsbu_vat_amount': vat,
'journal_id': self.journal_bank.id,
})
pay.action_post()
return pay
def test_recognition_carried_to_move(self):
tmpl = self._advance_template('income')
self._matrix(tmpl)
pay = self._post_advance()
self.assertEqual(pay.rsbu_move_id.usn_recognition, 'income')
def test_kudir_income_recognized(self):
tmpl = self._advance_template('income')
self._matrix(tmpl)
pay = self._post_advance(amount=1050.0, vat=50.0)
move = pay.rsbu_move_id
# НДС платежа (rsbu_vat_amount) исключается из дохода КУДиР:
# на УСН+НДС доход отражается без предъявленного налога.
self.assertEqual(move.kudir_income_vat, 50.0)
self.Kudir.recompute_period(move.date, move.date, self.company)
lines = self.Kudir.search([
('company_id', '=', self.company.id),
('section', '=', 'section_1')])
self.assertTrue(lines)
# Доход = поступление минус предъявленный НДС (1050 − 50 = 1000).
total_income = sum(lines.mapped('income_amount'))
self.assertEqual(total_income, 1000.0)
def test_kudir_recompute_idempotent(self):
tmpl = self._advance_template('income')
self._matrix(tmpl)
pay = self._post_advance()
move = pay.rsbu_move_id
self.Kudir.recompute_period(move.date, move.date, self.company)
first = self.Kudir.search_count([('company_id', '=', self.company.id)])
self.Kudir.recompute_period(move.date, move.date, self.company)
second = self.Kudir.search_count([('company_id', '=', self.company.id)])
self.assertEqual(first, second)
def test_none_recognition_not_in_kudir(self):
tmpl = self._advance_template('none')
self._matrix(tmpl)
pay = self._post_advance()
move = pay.rsbu_move_id
self.Kudir.recompute_period(move.date, move.date, self.company)
lines = self.Kudir.search([('move_id', '=', move.id)])
self.assertFalse(lines)
def test_kudir_income_no_vat_full_amount(self):
"""Необлагаемое поступление (нет НДС, нет облагаемой реализации)
признаётся доходом в полной сумме — НДС не исключается."""
tmpl = self._advance_template('income')
self._matrix(tmpl)
pay = self._post_advance(amount=1000.0, vat=0.0)
move = pay.rsbu_move_id
# НДС платежа не задан и облагаемой реализации у партнёра нет —
# исключать нечего.
self.assertEqual(move.kudir_income_vat, 0.0)
self.Kudir.recompute_period(move.date, move.date, self.company)
lines = self.Kudir.search([
('company_id', '=', self.company.id),
('section', '=', 'section_1'),
('move_id', '=', move.id)])
self.assertEqual(sum(lines.mapped('income_amount')), 1000.0)