From d2f275c49fe85ed659b75b952c4ed09eeb49a636 Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Mon, 19 Feb 2024 16:44:37 +0100
Subject: [PATCH] Results: Add export function.

---
 src/View/Results/Window.py | 57 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 56 insertions(+), 1 deletion(-)

diff --git a/src/View/Results/Window.py b/src/View/Results/Window.py
index a1b4d086..662db395 100644
--- a/src/View/Results/Window.py
+++ b/src/View/Results/Window.py
@@ -17,6 +17,7 @@
 # -*- coding: utf-8 -*-
 
 import os
+import csv
 import logging
 
 from datetime import datetime
@@ -284,7 +285,8 @@ class ResultsWindow(PamhyrWindow):
         # Action
         actions = {
             "action_reload": self._reload,
-            "action_add": self._add_custom_plot
+            "action_add": self._add_custom_plot,
+            "action_export": self.export,
         }
 
         for action in actions:
@@ -564,3 +566,56 @@ class ResultsWindow(PamhyrWindow):
             self._button_first.setEnabled(True)
             self._button_last.setEnabled(True)
             self._button_play.setIcon(self._icon_start)
+
+    def export(self):
+        self.file_dialog(
+            select_file=False,
+            callback=lambda d: self.export_to(d[0])
+        )
+
+    def export_to(self, directory):
+        for reach in self._results.river.reachs:
+            self.export_reach(reach, directory)
+
+    def export_reach(self, reach, directory):
+        name = reach.name
+        name = name.replace(" ", "-")
+
+        file_name = os.path.join(
+            directory,
+            f"reach_{name}.csv"
+        )
+
+        with open(file_name, 'w', newline='') as csvfile:
+            writer = csv.writer(csvfile, delimiter=',',
+                                quotechar='|', quoting=csv.QUOTE_MINIMAL)
+            writer.writerow(["name", "kp", "data-file"])
+            for profile in reach.profiles:
+                p_file_name = os.path.join(
+                    directory,
+                    f"cs_{profile.geometry.id}.csv"
+                )
+
+                writer.writerow([
+                    profile.name,
+                    profile.kp,
+                    p_file_name
+                ])
+
+                self.export_profile(reach, profile, p_file_name)
+
+    def export_profile(self, reach, profile, file_name):
+        with open(file_name, 'w', newline='') as csvfile:
+            writer = csv.writer(csvfile, delimiter=',',
+                                quotechar='|', quoting=csv.QUOTE_MINIMAL)
+
+            writer.writerow(["timestamp", "z", "q"])
+            for profile in reach.profiles:
+                timestamps = self._results.get("timestamps")
+
+                for ts in timestamps:
+                    writer.writerow([
+                        ts,
+                        profile.get_ts_key(ts, "Z"),
+                        profile.get_ts_key(ts, "Q"),
+                    ])
-- 
GitLab