diff --git a/erpnext/regional/italy/e-invoice.xml b/erpnext/regional/italy/e-invoice.xml
index 9a588d1666b..9978dc0da2e 100644
--- a/erpnext/regional/italy/e-invoice.xml
+++ b/erpnext/regional/italy/e-invoice.xml
@@ -1,5 +1,5 @@
-{%- macro format_float(value) -%}
-{{ "%.2f" % value|abs }}
+{%- macro format_float(value, precision=2) -%}
+{{ value|round(frappe.utils.cint(precision)) }}
{%- endmacro -%}
{%- macro render_address(address) %}
@@ -182,10 +182,10 @@
{{ html2text(item.description or '') or item.item_name }}
{{ format_float(item.qty) }}
{{ item.stock_uom }}
- {{ format_float(item.price_list_rate or item.rate) }}
+ {{ format_float(item.price_list_rate or item.rate, item_meta.get_field("rate").precision) }}
{{ render_discount_or_margin(item) }}
- {{ format_float(item.amount) }}
- {{ format_float(item.tax_rate) }}
+ {{ format_float(item.amount, item_meta.get_field("amount").precision) }}
+ {{ format_float(item.tax_rate, item_meta.get_field("tax_rate").precision) }}
{%- if item.tax_exemption_reason %}
{{ item.tax_exemption_reason.split("-")[0] }}
{%- endif %}
@@ -197,8 +197,8 @@
{%- if data.tax_exemption_reason %}
{{ data.tax_exemption_reason.split("-")[0] }}
{%- endif %}
- {{ format_float(data.taxable_amount) }}
- {{ format_float(data.tax_amount) }}
+ {{ format_float(data.taxable_amount, item_meta.get_field("tax_amount").precision) }}
+ {{ format_float(data.tax_amount, item_meta.get_field("tax_amount").precision) }}
{{ doc.vat_collectability.split("-")[0] }}
{%- if data.tax_exemption_law %}
{{ data.tax_exemption_law }}
diff --git a/erpnext/regional/italy/utils.py b/erpnext/regional/italy/utils.py
index caaf80129b9..9a14a35dbab 100644
--- a/erpnext/regional/italy/utils.py
+++ b/erpnext/regional/italy/utils.py
@@ -291,7 +291,11 @@ def prepare_and_attach_invoice(doc, replace=False):
progressive_name, progressive_number = get_progressive_name_and_number(doc, replace)
invoice = prepare_invoice(doc, progressive_number)
- invoice_xml = frappe.render_template('erpnext/regional/italy/e-invoice.xml', context={"doc": invoice}, is_path=True)
+ item_meta = frappe.get_meta("Sales Invoice Item")
+
+ invoice_xml = frappe.render_template('erpnext/regional/italy/e-invoice.xml',
+ context={"doc": invoice, "item_meta": item_meta}, is_path=True)
+
invoice_xml = invoice_xml.replace("&", "&")
xml_filename = progressive_name + ".xml"