From 65ae2090ac637ff917b3ff2383f4f81ba459d6f1 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@necronda.net>
Date: Wed, 8 Nov 2023 17:57:17 +0100
Subject: [PATCH] SeasonFinishWindow: Add table in export csv for deliveries
 and area coms

---
 Elwig/Windows/SeasonFinishWindow.xaml.cs | 47 +++++++++++++++++++++++-
 1 file changed, 46 insertions(+), 1 deletion(-)

diff --git a/Elwig/Windows/SeasonFinishWindow.xaml.cs b/Elwig/Windows/SeasonFinishWindow.xaml.cs
index 65fc337..63298d7 100644
--- a/Elwig/Windows/SeasonFinishWindow.xaml.cs
+++ b/Elwig/Windows/SeasonFinishWindow.xaml.cs
@@ -120,7 +120,7 @@ namespace Elwig.Windows {
                     FROM member m
                         LEFT JOIN AT_plz_dest p ON p.id = m.postal_dest
                         LEFT JOIN AT_ort o ON o.okz = p.okz
-                        LEFT JOIN v_area_commitment_bucket_strict c ON (c.mgnr, c.year) = (m.mgnr, s.year)
+                        LEFT JOIN v_area_commitment_bucket_strict c ON c.mgnr = m.mgnr AND c.year = {year}
                         JOIN v_under_delivery u ON (u.mgnr, u.bucket, u.year) = (m.mgnr, c.bucket, c.year)
                     WHERE m.active = 1
                     ORDER BY m.mgnr, c.bucket
@@ -141,6 +141,51 @@ namespace Elwig.Windows {
                     }
                 }
 
+                await file.WriteLineAsync($";;;;;;;;;;;");
+                await file.WriteLineAsync($"Lieferungen pro Mitglied und Sorte;;;;;;;;;;;");
+                await file.WriteLineAsync($"MgNr;Name;Vorname;Adresse;PLZ;Ort;Sorte;Attribut;Geliefert;Fläche;Ertrag");
+                using (var cmd = cnx.CreateCommand()) {
+                    cmd.CommandText = $"""
+                    SELECT m.mgnr, m.family_name, m.given_name, p.plz, o.name, m.address,
+                           v.bucket, v.weight, v.area
+                    FROM (
+                            SELECT c.year AS year,
+                                   c.mgnr AS mgnr,
+                                   c.bucket AS bucket,
+                                   COALESCE(d.weight, 0) AS weight,
+                                   COALESCE(c.area, 0) AS area
+                            FROM v_area_commitment_bucket_strict c
+                                LEFT JOIN v_delivery_bucket_strict d ON (d.year, d.mgnr, d.bucket) = (c.year, c.mgnr, c.bucket)
+                            WHERE c.year = {year}
+                            UNION
+                            SELECT d.year,
+                                   d.mgnr,
+                                   d.bucket,
+                                   COALESCE(d.weight, 0),
+                                   COALESCE(c.area, 0)
+                            FROM v_delivery_bucket_strict d
+                                LEFT JOIN v_area_commitment_bucket_strict c ON (c.year, c.mgnr, c.bucket) = (d.year, d.mgnr, d.bucket)
+                            WHERE d.year = {year}
+                        ) v
+                        LEFT JOIN member m ON m.mgnr = v.mgnr
+                        LEFT JOIN AT_plz_dest p ON p.id = m.postal_dest
+                        LEFT JOIN AT_ort o ON o.okz = p.okz
+                    ORDER BY m.mgnr, v.bucket
+                    """;
+                    using var reader = await cmd.ExecuteReaderAsync();
+                    while (await reader.ReadAsync()) {
+                        var mgnr = reader.GetInt32(0);
+                        var familyName = reader.GetString(1);
+                        var givenName = reader.GetString(2);
+                        var plz = reader.GetInt32(3);
+                        var ort = reader.GetString(4).Split(',')[0];
+                        var addr = reader.GetString(5);
+                        var id = reader.GetString(6);
+                        var sum = reader.GetInt32(7);
+                        var area = reader.GetInt32(8);
+                        await file.WriteLineAsync($"{mgnr};{familyName};{givenName};{addr};{plz};{ort};{id[..2]};{id[2..]};{sum};{area};{(area > 0 ? sum * 10000 / area : "")}");
+                    }
+                }
             } catch (Exception exc) {
                 MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
             }