using Elwig.Models.Entities; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Threading.Tasks; namespace Elwig.Models.Dtos { public class WeightBreakdownData : DataTable { private static readonly (string, string, string?, int?)[] FieldNames = [ ("Type", "R/W", null, 10), ("SortId", "Sorte", null, 10), ("AttrId", "Attr.", null, 10), ("CultId", "Bewirt.", null, 15), ("QualId", "Qual.", null, 15), ("Geb", "gebunden", null, 20), ("Weight", "Gewicht", "kg", 20), ]; public WeightBreakdownData(IEnumerable rows, int year, string name) : base(name, $"Sorten-/Qualitätsaufschlüsselung {year}", name, rows, FieldNames) { } public static async Task ForSeason(DbSet table, int year, Branch? branch = null) { return new(await FromDbSet(table, year, branch?.ZwstId), year, branch?.Name ?? "Gesamt"); } private static async Task> FromDbSet(DbSet table, int year, string? zwstid) { zwstid = zwstid == null ? "NULL" : $"'{zwstid}'"; return await table.FromSqlRaw($""" SELECT type, sortid, attrid, cultid, v.qualid, geb, SUM(weight) AS weight FROM v_stat_total v LEFT JOIN wine_quality_level q ON q.qualid = v.qualid WHERE year = {year} AND ({zwstid} IS NULL OR zwstid = {zwstid}) GROUP BY type, sortid, attrid, cultid, v.qualid, geb ORDER BY type DESC, sortid, attrid, cultid, q.min_kmw, geb """).ToListAsync(); } } [Keyless] public class WeightBreakdownRow { [Column("type")] public required string Type { get; set; } [Column("sortid")] public required string SortId { get; set; } [Column("attrid")] public string? AttrId { get; set; } [Column("cultid")] public string? CultId { get; set; } [Column("qualid")] public required string QualId { get; set; } [Column("geb")] public required string Geb { get; set; } [Column("weight")] public int Weight { get; set; } } }