|
|
# Copyright 2017 ACSONE SA/NV # Copyright 2019-20 ForgeFlow S.L. (https://www.forgeflow.com) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from datetime import datetime from dateutil.relativedelta import relativedelta
from odoo.fields import Date from odoo.tests.common import TransactionCase
class TestJournalReport(TransactionCase):
def setUp(self): super(TestJournalReport, self).setUp() self.AccountObj = self.env['account.account'] self.InvoiceObj = self.env['account.invoice'] self.JournalObj = self.env['account.journal'] self.MoveObj = self.env['account.move'] self.TaxObj = self.env['account.tax']
self.JournalLedgerReportWizard = self.env[ 'journal.ledger.report.wizard'] self.JournalLedgerReport = \ self.env['report.account_financial_report.journal_ledger'] self.company = self.env.ref('base.main_company')
today = datetime.today() last_year = today - relativedelta(years=1)
self.previous_fy_date_start = Date.to_string( last_year.replace(month=1, day=1)) self.previous_fy_date_end = Date.to_string( last_year.replace(month=12, day=31)) self.fy_date_start = Date.to_string( today.replace(month=1, day=1)) self.fy_date_end = Date.to_string( today.replace(month=12, day=31))
self.receivable_account = self.AccountObj.search([ ('user_type_id.name', '=', 'Receivable') ], limit=1) self.income_account = self.AccountObj.search([ ('user_type_id.name', '=', 'Income') ], limit=1) self.payable_account = self.AccountObj.search([ ('user_type_id.name', '=', 'Payable') ], limit=1)
self.journal_sale = self.JournalObj.create({ 'name': "Test journal sale", 'code': "TST-JRNL-S", 'type': 'sale', 'company_id': self.company.id, }) self.journal_purchase = self.JournalObj.create({ 'name': "Test journal purchase", 'code': "TST-JRNL-P", 'type': 'sale', 'company_id': self.company.id, })
self.tax_15_s = self.TaxObj.create({ 'sequence': 30, 'name': 'Tax 15.0% (Percentage of Price)', 'amount': 15.0, 'amount_type': 'percent', 'include_base_amount': False, 'type_tax_use': 'sale', })
self.tax_20_s = self.TaxObj.create({ 'sequence': 30, 'name': 'Tax 20.0% (Percentage of Price)', 'amount': 20.0, 'amount_type': 'percent', 'include_base_amount': False, 'type_tax_use': 'sale', })
self.tax_15_p = self.TaxObj.create({ 'sequence': 30, 'name': 'Tax 15.0% (Percentage of Price)', 'amount': 15.0, 'amount_type': 'percent', 'include_base_amount': False, 'type_tax_use': 'purchase', })
self.tax_20_p = self.TaxObj.create({ 'sequence': 30, 'name': 'Tax 20.0% (Percentage of Price)', 'amount': 20.0, 'amount_type': 'percent', 'include_base_amount': False, 'type_tax_use': 'purchase', })
self.partner_2 = self.env.ref('base.res_partner_2')
def _add_move( self, date, journal, receivable_debit, receivable_credit, income_debit, income_credit): move_name = 'move name' move_vals = { 'journal_id': journal.id, 'date': date, 'line_ids': [ (0, 0, { 'name': move_name, 'debit': receivable_debit, 'credit': receivable_credit, 'account_id': self.receivable_account.id }), (0, 0, { 'name': move_name, 'debit': income_debit, 'credit': income_credit, 'account_id': self.income_account.id }), ] } return self.MoveObj.create(move_vals)
def check_report_journal_debit_credit( self, res_data, expected_debit, expected_credit): self.assertEqual( expected_debit, sum([rec['debit'] for rec in res_data['Journal_Ledgers']]) )
self.assertEqual( expected_credit, sum([rec['credit'] for rec in res_data['Journal_Ledgers']]) )
def check_report_journal_debit_credit_taxes( self, res_data, expected_base_debit, expected_base_credit, expected_tax_debit, expected_tax_credit): for rec in res_data['Journal_Ledgers']: self.assertEqual( expected_base_debit, sum([ tax_line['base_debit'] for tax_line in rec['tax_lines'] ]) ) self.assertEqual( expected_base_credit, sum([ tax_line['base_credit'] for tax_line in rec['tax_lines'] ]) ) self.assertEqual( expected_tax_debit, sum([ tax_line['tax_debit'] for tax_line in rec['tax_lines'] ]) ) self.assertEqual( expected_tax_credit, sum([ tax_line['tax_credit'] for tax_line in rec['tax_lines'] ]) )
def test_01_test_total(self): today_date = Date.today() last_year_date = Date.to_string( datetime.today() - relativedelta(years=1))
move1 = self._add_move( today_date, self.journal_sale, 0, 100, 100, 0) move2 = self._add_move( last_year_date, self.journal_sale, 0, 100, 100, 0)
wiz = self.JournalLedgerReportWizard.create({ 'date_from': self.fy_date_start, 'date_to': self.fy_date_end, 'company_id': self.company.id, 'journal_ids': [(6, 0, self.journal_sale.ids)] }) data = wiz._prepare_report_journal_ledger() res_data = self.JournalLedgerReport._get_report_values(wiz, data) self.check_report_journal_debit_credit(res_data, 100, 100)
move3 = self._add_move( today_date, self.journal_sale, 0, 100, 100, 0)
res_data = self.JournalLedgerReport._get_report_values(wiz, data) self.check_report_journal_debit_credit(res_data, 200, 200) wiz.move_target = 'posted' data = wiz._prepare_report_journal_ledger() res_data = self.JournalLedgerReport._get_report_values(wiz, data) self.check_report_journal_debit_credit(res_data, 0, 0)
move1.post() res_data = self.JournalLedgerReport._get_report_values(wiz, data) self.check_report_journal_debit_credit(res_data, 100, 100)
move2.post() res_data = self.JournalLedgerReport._get_report_values(wiz, data) self.check_report_journal_debit_credit(res_data, 100, 100)
move3.post() res_data = self.JournalLedgerReport._get_report_values(wiz, data) self.check_report_journal_debit_credit(res_data, 200, 200)
wiz.date_from = self.previous_fy_date_start data = wiz._prepare_report_journal_ledger() res_data = self.JournalLedgerReport._get_report_values(wiz, data) self.check_report_journal_debit_credit(res_data, 300, 300)
def test_02_test_taxes_out_invoice(self): invoice_values = { 'journal_id': self.journal_sale.id, 'partner_id': self.partner_2.id, 'type': 'out_invoice', 'invoice_line_ids': [ (0, 0, { 'quantity': 1.0, 'price_unit': 100, 'account_id': self.receivable_account.id, 'name': "Test", 'invoice_line_tax_ids': [(6, 0, [self.tax_15_s.id])], }), (0, 0, { 'quantity': 1.0, 'price_unit': 100, 'account_id': self.receivable_account.id, 'name': "Test", 'invoice_line_tax_ids': [(6, 0, [ self.tax_15_s.id, self.tax_20_s.id ])], }) ] } invoice = self.InvoiceObj.create(invoice_values) invoice.action_invoice_open()
wiz = self.JournalLedgerReportWizard.create({ 'date_from': self.fy_date_start, 'date_to': self.fy_date_end, 'company_id': self.company.id, 'journal_ids': [(6, 0, self.journal_sale.ids)] }) data = wiz._prepare_report_journal_ledger() res_data = self.JournalLedgerReport._get_report_values(wiz, data) self.check_report_journal_debit_credit(res_data, 250, 250) self.check_report_journal_debit_credit_taxes(res_data, 0, 300, 0, 50)
def test_03_test_taxes_in_invoice(self): invoice_values = { 'journal_id': self.journal_sale.id, 'partner_id': self.partner_2.id, 'type': 'in_invoice', 'invoice_line_ids': [ (0, 0, { 'quantity': 1.0, 'price_unit': 100, 'account_id': self.payable_account.id, 'name': "Test", 'invoice_line_tax_ids': [(6, 0, [self.tax_15_p.id])], }), (0, 0, { 'quantity': 1.0, 'price_unit': 100, 'account_id': self.payable_account.id, 'name': "Test", 'invoice_line_tax_ids': [(6, 0, [ self.tax_15_p.id, self.tax_20_p.id ])], }) ] } invoice = self.InvoiceObj.create(invoice_values) invoice.action_invoice_open()
wiz = self.JournalLedgerReportWizard.create({ 'date_from': self.fy_date_start, 'date_to': self.fy_date_end, 'company_id': self.company.id, 'journal_ids': [(6, 0, self.journal_sale.ids)] }) data = wiz._prepare_report_journal_ledger() res_data = self.JournalLedgerReport._get_report_values(wiz, data)
self.check_report_journal_debit_credit(res_data, 250, 250) self.check_report_journal_debit_credit_taxes(res_data, 300, 0, 50, 0)
|