export xrechnung 2.1 ok + test

This commit is contained in:
Frederik Jaeckel 2022-10-19 17:15:56 +02:00
parent 7e35688043
commit 1306f2a339
6 changed files with 152 additions and 60 deletions

View file

@ -15,25 +15,88 @@ class Invoice(Invoice):
'EDocument XRechnung'
__name__ = 'edocument.xrechnung.invoice'
def sales_order_nums(self):
""" get string of sale-numbers
"""
if getattr(self.invoice, 'sales', None) is not None:
return ', '.join([x.number for x in self.invoice.sales])
def prepaid_amount(self, invoice):
""" compute already paid amount
"""
return invoice.total_amount - invoice.amount_to_pay
def invoice_note(self):
""" get 'description' + 'comment'
"""
notes = []
if self.invoice.description:
notes.append(self.invoice.description)
if self.invoice.comment:
notes.extend(self.invoice.comment.split('\n'))
if len(notes) > 0:
return '; '.join(notes)
def invoice_line_tax(self, line):
""" get tax of invoice-line,
fire exception if no/multiple taxes exists
"""
if len(line.invoice_taxes) != 1:
raise UserError(gettext(
'edocument_xrechnung.msg_linetax_invalid_number',
linename = line.rec_name,
numtax = len(line.invoice_taxes),
))
allowed_cat = ['AE', 'L', 'M', 'E', 'S', 'Z', 'G', 'O', 'K', 'B']
if not line.invoice_taxes[0].tax.unece_category_code in allowed_cat:
raise UserError(gettext(
'edocument_xrechnung.msg_linetax_invalid_catcode',
taxname = line.invoice_taxes[0].tax.rec_name,
allowed = ', '.join(allowed_cat),
))
return line.invoice_taxes[0].tax
def taxident_data(self, tax_identifier):
""" get tax-scheme-id and codes
"""
result = {
'code': None,
'id': None,
}
if tax_identifier:
if tax_identifier.type == 'de_vat':
result['code'] = 'DE%s' % tax_identifier.code
result['id'] = 'VAT'
return result
def tax_rate(self, tax):
""" get tax-rate in procent
"""
return (tax.tax.rate * Decimal('100.0')).quantize(Decimal('0.01'))
return (tax.rate * Decimal('100.0')).quantize(Decimal('0.01'))
def uom_unece_code(self, line):
""" 'line': invoice.line
"""
if len(line.unit.unece_code or '') == 0:
raise UserError(gettext(
'edocument_xrechnung.msg_uom_code_missing',
uomname = line.unit.rec_name,
))
return line.unit.unece_code
def tax_category_code(self, tax):
""" read tax-category, fire exception if missing
"""
if len(tax.tax.unece_category_code or '') == 0:
if len(tax.unece_category_code or '') == 0:
raise UserError(gettext(
'edocument_xrechnung.mds_tax_category_missing',
taxname = tax.rec_name,
))
return tax.tax.unece_category_code
return tax.unece_category_code
def quote_text(self, text):
""" replace critical chars