From 94aac2ed5a5f021ab4eadde2efb5e6d0e97403ab Mon Sep 17 00:00:00 2001
From: Julien Van Roy <juvr@odoo.com>
Date: Wed, 30 Aug 2023 12:01:38 +0200
Subject: [PATCH] [FIX] account_edi_ubl_cii: line id start at 1 in UBL

In Saudi Arabia, the InvoiceLine/ID should not be greater than 6 digits.
Using the move.line_id, this limit can be exceeded.

Simply count the invoice line ids starting from 1 instead.

In master, add a parameter `line_id` to `_get_invoice_line_vals`.

closes odoo/odoo#133590

Signed-off-by: Josse Colpaert <jco@odoo.com>
---
 .../models/account_edi_xml_ubl_20.py                   | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py b/addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py
index 1f1082e93453..0fae3fe1088a 100644
--- a/addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py
+++ b/addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py
@@ -327,15 +327,9 @@ class AccountEdiXmlUBL20(models.AbstractModel):
         return {
             'currency': line.currency_id,
             'currency_dp': line.currency_id.decimal_places,
-
-            # The requirement is the id has to be unique by invoice line.
-            'id': line.id,
-
             'invoiced_quantity': line.quantity,
             'invoiced_quantity_attrs': {'unitCode': uom},
-
             'line_extension_amount': line.price_subtotal + total_fixed_tax_amount,
-
             'allowance_charge_vals': allowance_charge_vals_list,
             'tax_total_vals': self._get_invoice_tax_totals_vals_list(line.move_id, taxes_vals),
             'item_vals': self._get_invoice_line_item_vals(line, taxes_vals),
@@ -382,9 +376,11 @@ class AccountEdiXmlUBL20(models.AbstractModel):
         invoice_lines = invoice.invoice_line_ids.filtered(lambda line: not line.display_type)
         document_allowance_charge_vals_list = self._get_document_allowance_charge_vals_list(invoice)
         invoice_line_vals_list = []
-        for line in invoice_lines:
+        for line_id, line in enumerate(invoice_lines):
             line_taxes_vals = taxes_vals['invoice_line_tax_details'][line]
             line_vals = self._get_invoice_line_vals(line, line_taxes_vals)
+            if not line_vals.get('id'):
+                line_vals['id'] = line_id + 1
             invoice_line_vals_list.append(line_vals)
 
             line_extension_amount += line_vals['line_extension_amount']
-- 
GitLab