summaryrefslogtreecommitdiff
path: root/addons/account_edi_facturx/models/account_edi_format.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/account_edi_facturx/models/account_edi_format.py')
-rw-r--r--addons/account_edi_facturx/models/account_edi_format.py43
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('/', '_'))