diff options
Diffstat (limited to 'addons/account_edi_facturx/models/account_edi_format.py')
| -rw-r--r-- | addons/account_edi_facturx/models/account_edi_format.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/addons/account_edi_facturx/models/account_edi_format.py b/addons/account_edi_facturx/models/account_edi_format.py index 032675fc132..54751a5da4d 100644 --- a/addons/account_edi_facturx/models/account_edi_format.py +++ b/addons/account_edi_facturx/models/account_edi_format.py @@ -41,7 +41,50 @@ class AccountEdiFormat(models.Model): 'record': invoice, 'format_date': format_date, 'format_monetary': format_monetary, + 'invoice_line_values': [], } + + # Tax lines. + aggregated_taxes_details = {line.tax_line_id.id: { + 'line': line, + 'tax_amount': -line.amount_currency if line.currency_id else -line.balance, + 'tax_base_amount': 0.0, + } for line in invoice.line_ids.filtered('tax_line_id')} + + # Invoice lines. + for i, line in enumerate(invoice.invoice_line_ids.filtered(lambda l: not l.display_type)): + price_unit_with_discount = line.price_unit * (1 - (line.discount / 100.0)) + taxes_res = line.tax_ids.compute_all( + price_unit_with_discount, + currency=line.currency_id, + quantity=line.quantity, + product=line.product_id, + partner=invoice.partner_id, + is_refund=line.move_id.move_type in ('in_refund', 'out_refund'), + ) + + line_template_values = { + 'line': line, + 'index': i + 1, + 'tax_details': [], + 'net_price_subtotal': taxes_res['total_excluded'], + } + + for tax_res in taxes_res['taxes']: + tax = self.env['account.tax'].browse(tax_res['id']) + line_template_values['tax_details'].append({ + 'tax': tax, + 'tax_amount': tax_res['amount'], + 'tax_base_amount': tax_res['base'], + }) + + if tax.id in aggregated_taxes_details: + aggregated_taxes_details[tax.id]['tax_base_amount'] += tax_res['base'] + + template_values['invoice_line_values'].append(line_template_values) + + template_values['tax_details'] = list(aggregated_taxes_details.values()) + xml_content = b"<?xml version='1.0' encoding='UTF-8'?>" xml_content += self.env.ref('account_edi_facturx.account_invoice_facturx_export')._render(template_values) xml_name = '%s_facturx.xml' % (invoice.name.replace('/', '_')) |
