Odoo18-Base/addons/l10n_jo_edi/tests/jo_edi_common.py

101 lines
3.8 KiB
Python
Raw Permalink Normal View History

2025-01-06 10:57:38 +07:00
from odoo import Command
from odoo.tools import misc
from odoo.addons.account_reports.tests.common import TestAccountReportsCommon
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
class JoEdiCommon(AccountTestInvoicingCommon):
@classmethod
@TestAccountReportsCommon.setup_country('jo')
def setUpClass(cls):
super().setUpClass()
cls.company_data['company'].write({
'name': 'Jordan Company',
'vat': '8000514',
})
def _get_general_tax(amount):
return cls.env['account.tax'].search([
('amount', '=', amount),
('amount_type', '=', 'percent'),
('type_tax_use', '=', 'sale'),
('company_id', '=', cls.company_data['company'].id)
], limit=1)
def _create_special_tax(amount):
return cls.env['account.tax'].create(
{
'name': f'Fixed {amount}',
'amount_type': 'fixed',
'amount': amount,
'company_id': cls.company_data['company'].id,
'include_base_amount': True,
'is_base_affected': False,
'sequence': 0,
})
cls.jo_general_tax_10 = _get_general_tax(10)
cls.jo_special_tax_10 = _create_special_tax(10)
cls.jo_special_tax_5 = _create_special_tax(5)
cls.jo_general_tax_16_included = _get_general_tax(16)
cls.jo_general_tax_16_included.price_include_override = 'tax_included'
cls.partner_jo = cls.env['res.partner'].create({
'name': 'Ahmad',
'ref': 'Jordan Partner',
'city': 'Amman',
'vat': '54321',
'zip': '94538',
'country_id': cls.env.ref('base.jo').id,
'state_id': cls.env.ref('base.state_jo_az').id,
'phone': '+962 795-5585-949',
'company_type': 'company',
})
# The rate of 1 USD = 2 JOD is meant to simplify tests
cls.usd = cls.env.ref('base.USD')
cls.setup_currency_rate(cls.usd, 0.5)
@classmethod
def setup_currency_rate(cls, currency, rate):
currency.sudo().update({
'rate_ids': [Command.clear()],
'active': True,
})
return cls.env['res.currency.rate'].create({
'name': '2019-01-01',
'rate': rate,
'currency_id': currency.id,
'company_id': cls.company_data['company'].id,
})
def _l10n_jo_create_invoice(self, invoice_vals):
invoice_vals.update({
'move_type': 'out_invoice',
'company_id': self.company.id,
'partner_id': self.partner_jo.id,
'invoice_date': invoice_vals.get('invoice_date', '2019-01-01'),
})
move = self.env['account.move'].create(invoice_vals)
move.action_post()
return move
def _l10n_jo_create_refund(self, invoice_vals, return_reason, refund_vals):
invoice = self._l10n_jo_create_invoice(invoice_vals)
reversal = self.env['account.move.reversal'].with_context(active_model="account.move", active_ids=invoice.ids).create({
'reason': return_reason,
'journal_id': invoice.journal_id.id,
}).refund_moves()
reverse_move = self.env['account.move'].browse(reversal['res_id'])
if 'invoice_line_ids' in refund_vals:
# because they will be set by refund_vals
reverse_move.invoice_line_ids = [Command.clear()]
reverse_move.update(refund_vals)
reverse_move.action_post()
return reverse_move
def _read_xml_test_file(self, file_name):
with misc.file_open(f'l10n_jo_edi/tests/test_files/{file_name}.xml', 'rb') as file:
result_file = file.read()
return result_file