Files
tradon/modules/edocument_ubl/tests/scenario_ubl_2_invoice_parse.rst
2026-03-14 09:42:12 +00:00

91 lines
2.7 KiB
ReStructuredText

===================
UBL 2 Invoice Parse
===================
Imports::
>>> import datetime as dt
>>> from decimal import Decimal
>>> from proteus import Model
>>> from trytond.modules.account.tests.tools import create_chart, create_tax
>>> from trytond.modules.company.tests.tools import create_company, get_company
>>> from trytond.modules.currency.tests.tools import get_currency
>>> from trytond.tests.tools import activate_modules, assertEqual
>>> from trytond.tools import file_open
>>> cash_rounding = globals().get('cash_rounding', False)
Activate modules::
>>> modules = ['edocument_ubl', 'account_invoice', 'purchase']
>>> if cash_rounding:
... modules.append('account_cash_rounding')
>>> config = activate_modules(modules, create_company, create_chart)
>>> Attachment = Model.get('ir.attachment')
>>> EInvoice = Model.get('edocument.ubl.invoice')
>>> Invoice = Model.get('account.invoice')
Setup company::
>>> company = get_company()
>>> company.party.name = 'Buyercompany ltd'
>>> company.party.save()
Create currency::
>>> eur = get_currency('EUR')
>>> if cash_rounding:
... eur.cash_rounding = Decimal('1')
>>> eur.save()
Create tax::
>>> tax20 = create_tax(Decimal('.2'))
>>> tax20.unece_category_code = 'S'
>>> tax20.unece_code = 'VAT'
>>> tax20.save()
>>> tax10 = create_tax(Decimal('.1'))
>>> tax10.unece_category_code = 'AA'
>>> tax10.unece_code = 'VAT'
>>> tax10.save()
>>> tax0 = create_tax(Decimal('0'))
>>> tax0.unece_category_code = 'E'
>>> tax0.unece_code = 'VAT'
>>> tax0.save()
Parse the UBL invoice::
>>> with file_open(
... 'edocument_ubl/tests/UBL-Invoice-2.1-Example.xml',
... mode='rb') as fp:
... invoice_id = EInvoice.parse(fp.read(), config.context)
>>> invoice = Invoice(invoice_id)
>>> invoice.reference
'TOSL108'
>>> assertEqual(invoice.invoice_date, dt.date(2009, 12, 15))
>>> invoice.party.name
'The Sellercompany Incorporated'
>>> invoice.invoice_address.rec_name
'The Sellercompany Incorporated, Main street 1 5467, 54321, Big city'
>>> assertEqual(invoice.company, company)
>>> assertEqual(
... invoice.total_amount,
... Decimal('1729.00') if cash_rounding else Decimal('1728.70'))
>>> invoice.tax_amount
Decimal('292.20')
>>> len(invoice.lines)
7
>>> attachments = Attachment.find([])
>>> len(attachments)
3
>>> assertEqual({a.resource for a in attachments}, {invoice})
>>> sorted((a.name, a.type) for a in attachments)
[('Drawing Doc2.pdf', 'data'), ('Framework agreement Contract321', 'data'), ('Timesheet Doc1', 'link')]