diff --git a/Elwig/Documents/WineQualityStatistics.cs b/Elwig/Documents/WineQualityStatistics.cs index cf18723..9481622 100644 --- a/Elwig/Documents/WineQualityStatistics.cs +++ b/Elwig/Documents/WineQualityStatistics.cs @@ -17,6 +17,7 @@ namespace Elwig.Documents { public string Filter; public WineQualityStatisticsData Data; + public bool UseOe => Data.UseOe; public WineQualityStatistics(string filter, WineQualityStatisticsData data) : base($"{Name} {filter}") { Filter = filter; diff --git a/Elwig/Documents/WineQualityStatistics.cshtml b/Elwig/Documents/WineQualityStatistics.cshtml index 5cb1fb2..8eb0db9 100644 --- a/Elwig/Documents/WineQualityStatistics.cshtml +++ b/Elwig/Documents/WineQualityStatistics.cshtml @@ -26,15 +26,15 @@ @foreach (var qualIds in Model.QualIds) {
- [°Oe] + [@(Model.UseOe ? "°Oe" : "°KMW")] [#] [kg]
@foreach (var qualId in qualIds) {

@(Model.QualityLevels.GetValueOrDefault(qualId, qualId))

- @foreach (var (oe, num, weight) in sec.Data.GetValueOrDefault(qualId, Array.Empty<(int, int, int)>())) { + @foreach (var (grad, num, weight) in sec.Data.GetValueOrDefault(qualId, Array.Empty<(double, int, int)>())) {
- @oe + @(Model.UseOe ? $"{grad:N0}" : $"{grad:N1}") @($"{num:N0}") @($"{weight:N0}")
@@ -45,13 +45,13 @@ @foreach (var qualIds in Model.QualIds) { - var quals = qualIds.Select(q => sec.Data.GetValueOrDefault(q, Array.Empty<(int Oe, int Num, int Weight)>())); + var quals = qualIds.Select(q => sec.Data.GetValueOrDefault(q, Array.Empty<(double Grad, int Num, int Weight)>())); var weight = quals.Sum(q => q.Sum(kv => kv.Weight)); var num = quals.Sum(q => q.Sum(kv => kv.Num)); - var oe = quals.Sum(q => q.Sum(kv => (double)kv.Oe * kv.Weight)) / weight; + var grad = quals.Sum(q => q.Sum(kv => kv.Grad * kv.Weight)) / weight;
- @(weight == 0 ? "-" : $"{oe:N0}") + @(weight == 0 ? "-" : Model.UseOe ? $"{grad:N0}" : $"{grad:N1}") @($"{num:N0}") @($"{weight:N0}")
@@ -64,11 +64,11 @@ @{ var totalWeight = sec.Data.Values.Sum(q => q.Sum(kv => kv.Weight)); var totalNum = sec.Data.Values.Sum(q => q.Sum(kv => kv.Num)); - var totalOe = sec.Data.Values.Sum(q => q.Sum(kv => (double)kv.Oe * kv.Weight)) / totalWeight; + var totalGrad = sec.Data.Values.Sum(q => q.Sum(kv => kv.Grad * kv.Weight)) / totalWeight; }
- @(totalWeight == 0 ? "-" : $"{totalOe:N0}") + @(totalWeight == 0 ? "-" : Model.UseOe ? $"{totalGrad:N0}" : $"{totalGrad:N1}") @($"{totalNum:N0}") @($"{totalWeight:N0}")
diff --git a/Elwig/Documents/WineQualityStatistics.css b/Elwig/Documents/WineQualityStatistics.css index 5f40e75..c875176 100644 --- a/Elwig/Documents/WineQualityStatistics.css +++ b/Elwig/Documents/WineQualityStatistics.css @@ -85,7 +85,7 @@ table .footer.green { padding: 1mm; } -.oe { +.gradation { text-align: center; } diff --git a/Elwig/Models/Dtos/WineQualityStatisticsData.cs b/Elwig/Models/Dtos/WineQualityStatisticsData.cs index c4a503e..ba7a892 100644 --- a/Elwig/Models/Dtos/WineQualityStatisticsData.cs +++ b/Elwig/Models/Dtos/WineQualityStatisticsData.cs @@ -5,14 +5,14 @@ using System.Collections.Generic; using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder; using System.Linq; using System.Threading.Tasks; -using System.Windows; namespace Elwig.Models.Dtos { public class WineQualityStatisticsData { - public record struct QualityRow(string? Variety, string? Attribute, string? Cultivation, string? Type, string QualId, int Oe, int Num, int Weight); - public record struct QualitySection(string Name, string? Type, Dictionary Data); + public record struct QualityRow(string? Variety, string? Attribute, string? Cultivation, string? Type, string QualId, double Grad, int Num, int Weight); + public record struct QualitySection(string Name, string? Type, Dictionary Data); + public bool UseOe = true; public QualitySection[] Sections; public WineQualityStatisticsData(QualitySection[] sections) { @@ -21,8 +21,8 @@ namespace Elwig.Models.Dtos { private static QualitySection[] GetQualitySections(IEnumerable rows) { var data = new List(); - var currentQual = new Dictionary(); - var current = new Dictionary(); + var currentQual = new Dictionary(); + var current = new Dictionary(); string? lastSection = null; string? lastType = null; string? lastQual = null; @@ -43,7 +43,7 @@ namespace Elwig.Models.Dtos { current = []; currentQual.Clear(); } - currentQual[row.Oe] = (row.Num, row.Weight); + currentQual[row.Grad] = (row.Num, row.Weight); lastSection = sec; lastType = row.Type; lastQual = row.QualId; @@ -60,7 +60,7 @@ namespace Elwig.Models.Dtos { return [.. data]; } - public static async Task FromQuery(IQueryable query) { + public static async Task FromQuery(IQueryable query, bool useOe = true) { var rows = (await query .GroupBy(p => new { p.Variety.Type, @@ -68,7 +68,7 @@ namespace Elwig.Models.Dtos { Attribute = p.Attribute!.Name, Cultivation = p.Cultivation!.Name, p.QualId, - Oe = (int)Math.Round(p.Kmw * (4.54 + 0.022 * p.Kmw), 0), + Oe = useOe ? Math.Round(p.Kmw * (4.54 + 0.022 * p.Kmw), 0) : Math.Round(p.Kmw, 1), }, (k, g) => new { Key = k, Num = g.Count(), Weight = g.Sum(p => p.Weight) }) .OrderBy(g => g.Key.Variety) .ThenBy(g => g.Key.Attribute) @@ -84,22 +84,22 @@ namespace Elwig.Models.Dtos { return new(data); var typeRows = rows - .GroupBy(s => new { s.Type, s.QualId, s.Oe }, (k, g) => new QualityRow(null, null, null, k.Type, k.QualId, k.Oe, g.Sum(g => g.Num), g.Sum(p => p.Weight))) + .GroupBy(s => new { s.Type, s.QualId, s.Grad }, (k, g) => new QualityRow(null, null, null, k.Type, k.QualId, k.Grad, g.Sum(g => g.Num), g.Sum(p => p.Weight))) .OrderBy(g => g.Type) .ThenBy(g => g.QualId) - .ThenBy(g => g.Oe) + .ThenBy(g => g.Grad) .ToList(); var typeData = GetQualitySections(typeRows); if (typeData.Length <= 1) return new([.. typeData, .. data]); var totalRows = rows - .GroupBy(s => new { s.QualId, s.Oe }, (k, g) => new QualityRow(null, null, null, null, k.QualId, k.Oe, g.Sum(p => p.Num), g.Sum(p => p.Weight))) + .GroupBy(s => new { s.QualId, s.Grad }, (k, g) => new QualityRow(null, null, null, null, k.QualId, k.Grad, g.Sum(p => p.Num), g.Sum(p => p.Weight))) .OrderBy(g => g.QualId) - .ThenBy(g => g.Oe) + .ThenBy(g => g.Grad) .ToList(); var totalData = GetQualitySections(totalRows); - return new([.. totalData, .. typeData, .. data]); + return new([.. totalData, .. typeData, .. data]) { UseOe = useOe }; } } }