details:   https://code.tryton.org/tryton/commit/6b2455dc2c19
branch:    default
user:      Cédric Krier <[email protected]>
date:      Fri Apr 17 10:01:31 2026 +0200
description:
        Abstract the iteration for line items and vat taxes feedback for Typless

        The generators can be extended for other type of result.

        Closes #14781
diffstat:

 modules/document_incoming_ocr_typless/document.py |  24 +++++++++++++++++++++-
 1 files changed, 22 insertions(+), 2 deletions(-)

diffs (66 lines):

diff -r 4a6e16fdbcc2 -r 6b2455dc2c19 
modules/document_incoming_ocr_typless/document.py
--- a/modules/document_incoming_ocr_typless/document.py Thu Apr 16 23:00:54 
2026 +0200
+++ b/modules/document_incoming_ocr_typless/document.py Fri Apr 17 10:01:31 
2026 +0200
@@ -196,7 +196,7 @@
             lines = []
             getter = getattr(
                 self, f'_typless_feedback_payload_line_items_{document.type}')
-            for line in source.line_lines:
+            for line in self._typless_feedback_payload_line_items(source):
                 line_item = []
                 for name in line_items:
                     value = getter(line, name)
@@ -210,7 +210,7 @@
             taxes = []
             getter = getattr(
                 self, f'_typless_feedback_payload_vat_rates_{document.type}')
-            for tax_line in source.taxes:
+            for tax_line in self._typless_feedback_payload_vat_rates(source):
                 percentage = getter(tax_line, 'vat_rate_percentage')
                 net = getter(tax_line, 'vat_rate_net')
                 if percentage and net:
@@ -228,10 +228,16 @@
         if name == 'document_type':
             return document.type
 
+    def _typless_feedback_payload_line_items(self, record):
+        yield from []
+
     def _typless_feedback_payload_line_items_document_incoming(
             self, line, name):
         pass
 
+    def _typless_feedback_payload_vat_rates(self, record):
+        yield from []
+
     def _typless_feedback_payload_vat_rates_document_incoming(
             self, tax_line, name):
         pass
@@ -354,6 +360,13 @@
         elif name == 'purchase_orders':
             return invoice.origins
 
+    def _typless_feedback_payload_line_items(self, record):
+        pool = Pool()
+        Invoice = pool.get('account.invoice')
+        yield from super()._typless_feedback_payload_line_items(record)
+        if isinstance(record, Invoice):
+            yield from record.line_lines
+
     def _typless_feedback_payload_line_items_supplier_invoice(
             self, line, name):
         if name == 'product_name':
@@ -377,6 +390,13 @@
         elif name == 'purchase_order':
             return line.origin_name
 
+    def _typless_feedback_payload_vat_rates(self, record):
+        pool = Pool()
+        Invoice = pool.get('account.invoice')
+        yield from super()._typless_feedback_payload_vat_rates(record)
+        if isinstance(record, Invoice):
+            yield from record.taxes
+
     def _typless_feedback_payload_vat_rates_supplier_invoice(
             self, tax_line, name):
         if name == 'vat_rate_percentage':

Reply via email to