SeasonFinishWindow: Fix area commitment under delivery export
This commit is contained in:
@ -4,11 +4,12 @@ using System;
|
||||
namespace Elwig.Helpers {
|
||||
public static class AppDbUpdater {
|
||||
|
||||
public static readonly int RequiredSchemaVersion = 6;
|
||||
public static readonly int RequiredSchemaVersion = 7;
|
||||
|
||||
private static int _versionOffset = 0;
|
||||
private static readonly Action<SqliteConnection>[] _updaters = new[] {
|
||||
UpdateDbSchema_1_To_2, UpdateDbSchema_2_To_3, UpdateDbSchema_3_To_4, UpdateDbSchema_4_To_5, UpdateDbSchema_5_To_6
|
||||
UpdateDbSchema_1_To_2, UpdateDbSchema_2_To_3, UpdateDbSchema_3_To_4, UpdateDbSchema_4_To_5,
|
||||
UpdateDbSchema_5_To_6, UpdateDBSchema_6_To_7
|
||||
};
|
||||
|
||||
private static void ExecuteNonQuery(SqliteConnection cnx, string sql) {
|
||||
@ -492,5 +493,52 @@ namespace Elwig.Helpers {
|
||||
ORDER BY year, mgnr, bucket;
|
||||
""");
|
||||
}
|
||||
|
||||
private static void UpdateDBSchema_6_To_7(SqliteConnection cnx) {
|
||||
ExecuteNonQuery(cnx, "DROP VIEW v_area_commitment_bucket_strict");
|
||||
ExecuteNonQuery(cnx, """
|
||||
CREATE VIEW v_area_commitment_bucket_strict AS
|
||||
SELECT s.year, c.mgnr, c.vtrgid,
|
||||
t.sortid || COALESCE(a.attrid, '') AS bucket,
|
||||
t.sortid, a.attrid,
|
||||
SUM(area) AS area,
|
||||
CAST(ROUND(SUM(area) * COALESCE(t.min_kg_per_ha, 0) / 10000.0, 0) AS INTEGER) AS min_kg,
|
||||
CAST(ROUND(SUM(area) * MIN(COALESCE(a.max_kg_per_ha, s.max_kg_per_ha), s.max_kg_per_ha) / 10000.0, 0) AS INTEGER) AS max_kg,
|
||||
CAST(ROUND(SUM(area) * s.max_kg_per_ha / 10000.0, 0) AS INTEGER) AS upper_max_kg
|
||||
FROM season s, area_commitment c
|
||||
JOIN area_commitment_type t ON t.vtrgid = c.vtrgid
|
||||
LEFT JOIN wine_attribute a ON a.attrid = t.attrid
|
||||
WHERE (year_from IS NULL OR year_from <= s.year) AND
|
||||
(year_to IS NULL OR year_to >= s.year)
|
||||
GROUP BY s.year, c.mgnr, bucket
|
||||
ORDER BY s.year, c.mgnr, bucket;
|
||||
""");
|
||||
|
||||
ExecuteNonQuery(cnx, """
|
||||
CREATE VIEW v_under_delivery_bucket_strict AS
|
||||
SELECT c.year, c.mgnr, c.bucket, c.min_kg, COALESCE(p.weight, 0) AS weight
|
||||
FROM v_area_commitment_bucket_strict c
|
||||
LEFT JOIN v_payment_bucket_strict p ON (p.year, p.mgnr, p.bucket) = (c.year, c.mgnr, c.bucket)
|
||||
ORDER BY c.year, c.mgnr, c.bucket;
|
||||
""");
|
||||
ExecuteNonQuery(cnx, """
|
||||
CREATE VIEW v_under_delivery_bucket AS
|
||||
SELECT u.year, u.mgnr, u.bucket, u.min_kg,
|
||||
u.weight + SUM(MAX(COALESCE(p.weight - s.min_kg, 0), 0)) AS weight
|
||||
FROM v_under_delivery_bucket_strict u
|
||||
LEFT JOIN v_payment_bucket_strict p ON (p.year, p.mgnr, p.sortid) = (u.year, u.mgnr, u.bucket) AND p.attrid IS NOT NULL
|
||||
LEFT JOIN wine_attribute a ON a.attrid = p.attrid
|
||||
LEFT JOIN v_area_commitment_bucket_strict s ON (s.year, s.mgnr, s.bucket) = (p.year, p.mgnr, p.bucket)
|
||||
WHERE (p.gebunden IS NULL OR p.gebunden) AND (a.strict IS NULL OR a.strict = FALSE)
|
||||
GROUP BY u.year, u.mgnr, u.bucket
|
||||
ORDER BY u.year, u.mgnr, u.bucket;
|
||||
""");
|
||||
ExecuteNonQuery(cnx, """
|
||||
CREATE VIEW v_under_delivery AS
|
||||
SELECT year, mgnr, bucket, min_kg, weight, weight - min_kg AS diff
|
||||
FROM v_under_delivery_bucket
|
||||
WHERE diff < 0;
|
||||
""");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -112,17 +112,19 @@ namespace Elwig.Windows {
|
||||
|
||||
await file.WriteLineAsync($";;;;;;;;;;;");
|
||||
await file.WriteLineAsync($"Unterlieferungen lt. Flächenbindungen;;;;;;;;;;;");
|
||||
await file.WriteLineAsync($"MgNr;Name;Vorname;Adresse;PLZ;Ort;Vertrag;Lieferpflicht;Lieferrecht;Geliefert;Unterliefert;Prozent");
|
||||
await file.WriteLineAsync($"MgNr;Name;Vorname;Adresse;PLZ;Ort;Vertrag;Fläche;Max. Ertrag;Lieferpflicht;Geliefert;Unterliefert;Prozent");
|
||||
using (var cmd = cnx.CreateCommand()) {
|
||||
cmd.CommandText = $"""
|
||||
SELECT m.mgnr, m.family_name, m.given_name, p.plz, o.name, m.address,
|
||||
c.bucket, c.min_kg, c.max_kg, b.weight
|
||||
c.bucket, c.area, COALESCE(a.max_kg_per_ha, s.max_kg_per_ha), u.min_kg, u.weight
|
||||
FROM member m
|
||||
LEFT JOIN season s ON s.year = {year}
|
||||
LEFT JOIN AT_plz_dest p ON p.id = m.postal_dest
|
||||
LEFT JOIN AT_ort o ON o.okz = p.okz
|
||||
JOIN v_area_commitment_bucket c ON c.mgnr = m.mgnr AND c.year = {year}
|
||||
LEFT JOIN v_payment_bucket b ON (b.mgnr, b.bucket) = (m.mgnr, c.bucket) AND b.year = {year}
|
||||
WHERE m.active = 1 AND b.weight < c.min_kg
|
||||
LEFT JOIN v_area_commitment_bucket_strict c ON (c.mgnr, c.year) = (m.mgnr, s.year)
|
||||
LEFT JOIN wine_attribute a ON a.attrid = c.attrid
|
||||
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
|
||||
""";
|
||||
using var reader = await cmd.ExecuteReaderAsync();
|
||||
@ -134,10 +136,11 @@ namespace Elwig.Windows {
|
||||
var ort = reader.GetString(4).Split(',')[0];
|
||||
var addr = reader.GetString(5);
|
||||
var id = reader.GetString(6);
|
||||
var minKg = reader.GetInt32(7);
|
||||
var maxKg = reader.GetInt32(8);
|
||||
var sum = reader.GetInt32(9);
|
||||
await file.WriteLineAsync($"{mgnr};{familyName};{givenName};{addr};{plz};{ort};{id};{minKg};{maxKg};{sum};{sum - minKg};{sum * 100.0 / minKg - 100.0:0.0}");
|
||||
var area = reader.GetInt32(7);
|
||||
var maxKgPerHa = reader.GetInt32(8);
|
||||
var minKg = reader.GetInt32(9);
|
||||
var sum = reader.GetInt32(10);
|
||||
await file.WriteLineAsync($"{mgnr};{familyName};{givenName};{addr};{plz};{ort};{id};{area};{maxKgPerHa};{minKg};{sum};{sum - minKg};{sum * 100.0 / minKg - 100.0:0.0}");
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user