AppDbContext: Add v_area_commitment_bin
This commit is contained in:
@ -215,17 +215,7 @@ namespace Elwig.Helpers {
|
|||||||
cnx ??= await ConnectAsync();
|
cnx ??= await ConnectAsync();
|
||||||
var bins = new Dictionary<int, Dictionary<string, (int, int)>>();
|
var bins = new Dictionary<int, Dictionary<string, (int, int)>>();
|
||||||
using (var cmd = cnx.CreateCommand()) {
|
using (var cmd = cnx.CreateCommand()) {
|
||||||
cmd.CommandText = $"""
|
cmd.CommandText = $"SELECT mgnr, bin, min_kg, max_kg FROM v_area_commitment_bin WHERE year = {year}";
|
||||||
SELECT mgnr, t.vtrgid,
|
|
||||||
ROUND(SUM(COALESCE(area * min_kg_per_ha, 0)) / 10000.0) AS min_kg,
|
|
||||||
ROUND(SUM(COALESCE(area * max_kg_per_ha, 0)) / 10000.0) AS max_kg
|
|
||||||
FROM area_commitment c
|
|
||||||
JOIN area_commitment_type t ON t.vtrgid = c.vtrgid
|
|
||||||
WHERE (year_from IS NULL OR year_from <= {year}) AND
|
|
||||||
(year_to IS NULL OR year_to >= {year})
|
|
||||||
GROUP BY mgnr, t.vtrgid
|
|
||||||
ORDER BY LENGTH(t.vtrgid) DESC, t.vtrgid
|
|
||||||
""";
|
|
||||||
using var reader = await cmd.ExecuteReaderAsync();
|
using var reader = await cmd.ExecuteReaderAsync();
|
||||||
while (await reader.ReadAsync()) {
|
while (await reader.ReadAsync()) {
|
||||||
var mgnr = reader.GetInt32(0);
|
var mgnr = reader.GetInt32(0);
|
||||||
|
@ -4,11 +4,11 @@ using System;
|
|||||||
namespace Elwig.Helpers {
|
namespace Elwig.Helpers {
|
||||||
public static class AppDbUpdater {
|
public static class AppDbUpdater {
|
||||||
|
|
||||||
public static readonly int RequiredSchemaVersion = 3;
|
public static readonly int RequiredSchemaVersion = 4;
|
||||||
|
|
||||||
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_1_To_2, UpdateDbSchema_2_To_3, UpdateDbSchema_3_To_4
|
||||||
};
|
};
|
||||||
|
|
||||||
private static void ExecuteNonQuery(SqliteConnection cnx, string sql) {
|
private static void ExecuteNonQuery(SqliteConnection cnx, string sql) {
|
||||||
@ -184,5 +184,34 @@ namespace Elwig.Helpers {
|
|||||||
|
|
||||||
ExecuteNonQuery(cnx, "ALTER TABLE wine_attribute ADD COLUMN fill_lower_bins INTEGER NOT NULL CHECK (fill_lower_bins IN (0, 1, 2)) DEFAULT 0");
|
ExecuteNonQuery(cnx, "ALTER TABLE wine_attribute ADD COLUMN fill_lower_bins INTEGER NOT NULL CHECK (fill_lower_bins IN (0, 1, 2)) DEFAULT 0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void UpdateDbSchema_3_To_4(SqliteConnection cnx) {
|
||||||
|
ExecuteNonQuery(cnx, "DROP VIEW v_payment_bin");
|
||||||
|
ExecuteNonQuery(cnx, """
|
||||||
|
CREATE VIEW v_payment_bin AS
|
||||||
|
SELECT d.year, d.mgnr,
|
||||||
|
sortid || discr AS bin,
|
||||||
|
SUM(value) AS weight
|
||||||
|
FROM v_delivery d
|
||||||
|
JOIN delivery_part_bin b ON (b.year, b.did, b.dpnr) = (d.year, d.did, d.dpnr)
|
||||||
|
GROUP BY d.year, d.mgnr, bin
|
||||||
|
HAVING SUM(value) > 0
|
||||||
|
ORDER BY d.year, d.mgnr, LENGTH(bin) DESC, bin;
|
||||||
|
""");
|
||||||
|
|
||||||
|
ExecuteNonQuery(cnx, """
|
||||||
|
CREATE VIEW v_area_commitment_bin AS
|
||||||
|
SELECT s.year, c.mgnr,
|
||||||
|
c.vtrgid AS bin,
|
||||||
|
CAST(ROUND(SUM(COALESCE(area * min_kg_per_ha, 0)) / 10000.0, 0) AS INTEGER) AS min_kg,
|
||||||
|
CAST(ROUND(SUM(COALESCE(area * max_kg_per_ha, 0)) / 10000.0, 0) AS INTEGER) AS max_kg
|
||||||
|
FROM area_commitment c, season s
|
||||||
|
JOIN area_commitment_type t ON t.vtrgid = c.vtrgid
|
||||||
|
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, c.vtrgid
|
||||||
|
ORDER BY s.year, c.mgnr, LENGTH(c.vtrgid) DESC, c.vtrgid;
|
||||||
|
""");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user