From 3f99de09208a8c9a62a0f31c2216bdef73b6f396 Mon Sep 17 00:00:00 2001
From: thibaud <thibaud@le-filament.com>
Date: Wed, 7 Aug 2024 18:14:30 +0200
Subject: [PATCH] [IMP] Added sub total and total line

---
 controllers/main.py | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/controllers/main.py b/controllers/main.py
index 4e3bb04..aa11c01 100644
--- a/controllers/main.py
+++ b/controllers/main.py
@@ -39,25 +39,45 @@ class JournalDatasExport(http.Controller):
             ("date", "<=", date_end),
             ("journal_id", "in", export_id.journal_ids.ids),
             ("company_id", "=", export_id.company_id.id),
-            ("move_id.state", "=", "posted"),
-            ("display_type", "=", False),
         ]
         if export_type == "empty":
             domain += [("date_export", "=", False)]
         if export_id.export_domain:
             domain += safe_eval(export_id.export_domain)
         export_line_ids = request.env["account.move.line"].search(domain)
+        # FIXME: Crappy could refactor to [[]] or {} to group by invoice name as key
+        export_line_grouped_by_invoice = export_line_ids.sorted(lambda l: l.move_id.name)
         lines_to_export = []
-        for line in export_line_ids:
+        initial_sum_line = ['' for _ in range(len(export_id.fields_ids))]
+        sum_line = initial_sum_line[:]
+        big_sum_line = None
+        previous_invoice_name = export_line_grouped_by_invoice[0].move_id.name
+        for line in export_line_grouped_by_invoice:
+            if line.name != previous_invoice_name:
+                lines_to_export.append(sum_line)
+                if not big_sum_line:
+                    # Initialise bigsum to the same size and value of the sum_line
+                    # So it has not to be initialized with list of empty string
+                    big_sum_line = sum_line[:]
+                else:
+                    big_sum_line = [value + sum_line[i] for i,value in enumerate(big_sum_line)]
+                sum_line = initial_sum_line[:]
             row = []
-            for field in export_id.fields_ids:
+            for key,field in enumerate(export_id.fields_ids):
                 if field.is_python:
                     value = safe_eval(field["field_name"], {"line": line}, mode="eval")
+                    if field.is_sum and value:
+                        if sum_line[key] == '':
+                            sum_line[key] = 0
+                        sum_line[key] += float(value)
                 else:
                     value = safe_eval(field["field_name"])
                 row.append(value)
             lines_to_export.append(row)
             line.write({"date_export": datetime.now()})
+            previous_invoice_name = line.name
+        lines_to_export.append(sum_line)
+        lines_to_export.append([value + sum_line[i] for i,value in enumerate(big_sum_line)])
 
         filename_ = (
             export_id.company_id.name.title().replace(" ", "")
-- 
GitLab