SeasonFinishWindow: Add table in export csv for deliveries and area coms

This commit is contained in:
2023-11-08 17:57:17 +01:00
parent 73b3ddbcff
commit 65ae2090ac

View File

@ -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);
}