101 lines
3.8 KiB
Python
101 lines
3.8 KiB
Python
|
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
|