The party of the invoice must have the invoice's company in the context to correctly set the account when calling on_change_party. Closes #15049 (grafted from 9b78bdacf182dfa9e5ab3c5206fb8fb5adfb2868) --HG-- branch : 8.0
102 lines
3.2 KiB
ReStructuredText
102 lines
3.2 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', 'bank', '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, 'company': None})
|
|
|
|
>>> 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')
|
|
>>> assertEqual(invoice.source_untaxed_amount, Decimal('1436.50'))
|
|
>>> assertEqual(invoice.source_tax_amount, Decimal('292.20'))
|
|
>>> assertEqual(
|
|
... invoice.source_total_amount,
|
|
... Decimal('1729.00') if cash_rounding else Decimal('1728.70'))
|
|
>>> len(invoice.lines)
|
|
7
|
|
|
|
>>> payment_mean, = invoice.payment_means
|
|
>>> account_number, = payment_mean.instrument.numbers
|
|
>>> account_number.number
|
|
'DK1212341234123412'
|
|
>>> assertEqual(payment_mean.instrument.owners, invoice.alternative_payees)
|
|
|
|
>>> 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')]
|