91 lines
2.7 KiB
ReStructuredText
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')]
|