SeasonFinishWindow: Fix area commitment under delivery export
This commit is contained in:
@ -4,11 +4,12 @@ using System;
|
|||||||
namespace Elwig.Helpers {
|
namespace Elwig.Helpers {
|
||||||
public static class AppDbUpdater {
|
public static class AppDbUpdater {
|
||||||
|
|
||||||
public static readonly int RequiredSchemaVersion = 6;
|
public static readonly int RequiredSchemaVersion = 7;
|
||||||
|
|
||||||
private static int _versionOffset = 0;
|
private static int _versionOffset = 0;
|
||||||
private static readonly Action<SqliteConnection>[] _updaters = new[] {
|
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) {
|
private static void ExecuteNonQuery(SqliteConnection cnx, string sql) {
|
||||||
@ -492,5 +493,52 @@ namespace Elwig.Helpers {
|
|||||||
ORDER BY year, mgnr, bucket;
|
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($";;;;;;;;;;;");
|
||||||
await file.WriteLineAsync($"Unterlieferungen lt. Flächenbindungen;;;;;;;;;;;");
|
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()) {
|
using (var cmd = cnx.CreateCommand()) {
|
||||||
cmd.CommandText = $"""
|
cmd.CommandText = $"""
|
||||||
SELECT m.mgnr, m.family_name, m.given_name, p.plz, o.name, m.address,
|
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
|
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_plz_dest p ON p.id = m.postal_dest
|
||||||
LEFT JOIN AT_ort o ON o.okz = p.okz
|
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_area_commitment_bucket_strict c ON (c.mgnr, c.year) = (m.mgnr, s.year)
|
||||||
LEFT JOIN v_payment_bucket b ON (b.mgnr, b.bucket) = (m.mgnr, c.bucket) AND b.year = {year}
|
LEFT JOIN wine_attribute a ON a.attrid = c.attrid
|
||||||
WHERE m.active = 1 AND b.weight < c.min_kg
|
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
|
ORDER BY m.mgnr, c.bucket
|
||||||
""";
|
""";
|
||||||
using var reader = await cmd.ExecuteReaderAsync();
|
using var reader = await cmd.ExecuteReaderAsync();
|
||||||
@ -134,10 +136,11 @@ namespace Elwig.Windows {
|
|||||||
var ort = reader.GetString(4).Split(',')[0];
|
var ort = reader.GetString(4).Split(',')[0];
|
||||||
var addr = reader.GetString(5);
|
var addr = reader.GetString(5);
|
||||||
var id = reader.GetString(6);
|
var id = reader.GetString(6);
|
||||||
var minKg = reader.GetInt32(7);
|
var area = reader.GetInt32(7);
|
||||||
var maxKg = reader.GetInt32(8);
|
var maxKgPerHa = reader.GetInt32(8);
|
||||||
var sum = reader.GetInt32(9);
|
var minKg = 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 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