diff --git a/Elwig/App.xaml b/Elwig/App.xaml index 2e32df6..e600f81 100644 --- a/Elwig/App.xaml +++ b/Elwig/App.xaml @@ -35,7 +35,7 @@ - + diff --git a/Elwig/Helpers/AppDbContext.cs b/Elwig/Helpers/AppDbContext.cs index adcfa44..ec15c2b 100644 --- a/Elwig/Helpers/AppDbContext.cs +++ b/Elwig/Helpers/AppDbContext.cs @@ -248,9 +248,10 @@ namespace Elwig.Helpers { return c + 1; } - public async Task GetWineQualityLevel(double kmw) { + public async Task GetWineQualityLevel(double kmw, string? maxQualId = null) { return await WineQualityLevels .Where(q => !q.IsPredicate && (q.MinKmw == null || q.MinKmw <= kmw)) + .Where(q => maxQualId == null || q.QualId == "WEI" || q.QualId == maxQualId) .OrderBy(q => q.MinKmw) .LastAsync(); } diff --git a/Elwig/Helpers/AppDbUpdater.cs b/Elwig/Helpers/AppDbUpdater.cs index c1981ba..2186739 100644 --- a/Elwig/Helpers/AppDbUpdater.cs +++ b/Elwig/Helpers/AppDbUpdater.cs @@ -9,7 +9,7 @@ namespace Elwig.Helpers { public static class AppDbUpdater { // Don't forget to update value in Tests/fetch-resources.bat! - public static readonly int RequiredSchemaVersion = 32; + public static readonly int RequiredSchemaVersion = 33; private static int VersionOffset = 0; diff --git a/Elwig/Models/Entities/WineVar.cs b/Elwig/Models/Entities/WineVar.cs index 7436e75..08710d8 100644 --- a/Elwig/Models/Entities/WineVar.cs +++ b/Elwig/Models/Entities/WineVar.cs @@ -11,16 +11,24 @@ namespace Elwig.Models.Entities { [Column("type")] public string Type { get; private set; } = null!; + [Column("max_qualid")] + public string MaxQualId { get; private set; } = null!; + + [ForeignKey("MaxQualId")] + public virtual WineQualLevel MaxQualityLevel { get; private set; } = null!; + [Column("name")] public string Name { get; private set; } = null!; [Column("comment")] public string? Comment { get; private set; } + public string SortIdFormat => IsQuw ? SortId : $"({SortId})"; public string CommentFormat => (Comment != null) ? $" ({Comment})" : ""; public bool IsRed => Type == "R"; public bool IsWhite => Type == "W"; + public bool IsQuw => MaxQualId == "QUW"; public Brush? Color => IsWhite ? Brushes.DarkGreen : IsRed ? Brushes.DarkRed : null; public WineVar() { } @@ -28,6 +36,7 @@ namespace Elwig.Models.Entities { public WineVar(string sortId, string name) { SortId = sortId; Name = name; + MaxQualId = "QUW"; } public override string ToString() { diff --git a/Elwig/Resources/Sql/32-33.sql b/Elwig/Resources/Sql/32-33.sql new file mode 100644 index 0000000..2c76e57 --- /dev/null +++ b/Elwig/Resources/Sql/32-33.sql @@ -0,0 +1,17 @@ +-- schema version 32 to 33 + +ALTER TABLE wine_variety ADD COLUMN max_qualid TEXT NOT NULL DEFAULT 'QUW'; +UPDATE wine_quality_level SET qualid = 'ALW' WHERE qualid = 'AUL'; +UPDATE wine_variety SET comment = 'Muscato' WHERE sortid = 'MO'; + +INSERT INTO wine_variety (sortid, type, max_qualid, name, comment) VALUES +('DR', 'W', 'QUW', 'Donauriesling', NULL), +('DV', 'W', 'QUW', 'Donauveltliner', NULL), +('BN', 'W', 'RSW', 'Bronner', NULL), +('CB', 'W', 'RSW', 'Cabernet Blanc', NULL), +('CJ', 'R', 'RSW', 'Cabernet Jura', NULL), +('JO', 'W', 'RSW', 'Johanniter', NULL), +('OR', 'W', 'RSW', 'Orangetraube', NULL), +('PI', 'R', 'RSW', 'Pinot Nova', NULL), +('RE', 'R', 'RSW', 'Regent', NULL), +('SI', 'W', 'RSW', 'Solaris', NULL); diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs index 6e551ee..1af9add 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs +++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs @@ -1207,6 +1207,7 @@ namespace Elwig.Windows { AttributeInput.SelectedIndex = 0; CultivationInput.SelectedIndex = 0; } + UpdateWineQualityLevels(); } private void SortIdInput_TextChanged(object sender, TextChangedEventArgs evt) { @@ -1220,6 +1221,13 @@ namespace Elwig.Windows { private void WineVarietyInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) { if (WineVarietyInput.SelectedItem is WineVar s) ViewModel.SortId = s.SortId; + UpdateWineQualityLevels(); + if (!ViewModel.WineVar?.IsQuw ?? false) { + App.MainDispatcher.BeginInvoke(() => { + MessageBox.Show("Die eingegebene Sorte darf nicht als Qualitätswein\nübernommen werden!", "Kein Qualitätswein", + MessageBoxButton.OK, MessageBoxImage.Warning); + }); + } } private void UpdateWineQualityLevels() { @@ -1227,12 +1235,17 @@ namespace Elwig.Windows { if (!GetInputValid(GradationKmwInput)) { UnsetDefaultValue(WineQualityLevelInput); ComboBox_SelectionChanged(WineQualityLevelInput, null); - WineQualityLevelInput.ItemsSource = ctx.WineQualityLevels.Where(q => q.QualId == "WEI").ToList(); + WineQualityLevelInput.ItemsSource = ctx.WineQualityLevels.ToList(); return; } var kmw = (double)ViewModel.GradationKmw!; - WineQualityLevelInput.ItemsSource = ctx.WineQualityLevels.Where(q => q.MinKmw == null || q.MinKmw <= kmw).ToList(); - var qual = ctx.GetWineQualityLevel(kmw).GetAwaiter().GetResult(); + var max = ViewModel.WineVar?.MaxQualId; + var quw = ViewModel.WineVar?.IsQuw ?? true; + WineQualityLevelInput.ItemsSource = ctx.WineQualityLevels + .Where(q => q.MinKmw == null || q.MinKmw <= kmw) + .Where(q => quw || q.QualId == "WEI" || q.QualId == max) + .ToList(); + var qual = ctx.GetWineQualityLevel(kmw, !quw ? max : null).GetAwaiter().GetResult(); SetDefaultValue(WineQualityLevelInput, qual); if (WineQualityLevelInput.SelectedItem == null || (WineQualityLevelInput.SelectedItem is WineQualLevel selected && !selected.IsPredicate)) { ControlUtils.SelectItem(WineQualityLevelInput, qual); @@ -1373,7 +1386,7 @@ namespace Elwig.Windows { return; } using var ctx = new AppDbContext(); - var defQual = ctx.GetWineQualityLevel(double.Parse(GradationKmwInput.Text)).GetAwaiter().GetResult(); + var defQual = ctx.GetWineQualityLevel(ViewModel.GradationKmw!.Value, !(ViewModel.WineVar?.IsQuw ?? true) ? ViewModel.WineVar?.MaxQualId : null).GetAwaiter().GetResult(); AbgewertetInput.IsChecked = !qual.IsPredicate && defQual != qual; } diff --git a/Tests/fetch-resources.bat b/Tests/fetch-resources.bat index 4c12a93..0430933 100644 --- a/Tests/fetch-resources.bat +++ b/Tests/fetch-resources.bat @@ -1 +1 @@ -curl --fail -s -L "https://elwig.at/files/create.sql?v=32" -u "elwig:ganzGeheim123!" -o "Resources\Sql\Create.sql" +curl --fail -s -L "https://elwig.at/files/create.sql?v=33" -u "elwig:ganzGeheim123!" -o "Resources\Sql\Create.sql"