Add wine quality level in DeliveryAdminWindow

This commit is contained in:
2023-05-22 23:45:47 +02:00
parent dc236bab62
commit 2281ec80ae
5 changed files with 58 additions and 16 deletions

View File

@ -56,6 +56,26 @@
</StackPanel> </StackPanel>
</DataTemplate> </DataTemplate>
<ControlTemplate x:Key="WineQualityLevelTemplateSimple">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</ControlTemplate>
<ControlTemplate x:Key="WineQualityLevelTemplateExtended">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" MinWidth="100" Margin="0,0,10,0"/>
<TextBlock Text="{Binding MinKmwStr}"/>
</StackPanel>
</ControlTemplate>
<DataTemplate x:Key="WineQualityLevelTemplate">
<Control x:Name="Control" Focusable="False" Template="{StaticResource WineQualityLevelTemplateExtended}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ComboBoxItem}}, Path=IsSelected}" Value="{x:Null}">
<Setter TargetName="Control" Property="Template" Value="{StaticResource WineQualityLevelTemplateSimple}"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
<ControlTemplate x:Key="WineOriginTemplateSimple"> <ControlTemplate x:Key="WineOriginTemplateSimple">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/> <TextBlock Text="{Binding Name}"/>

View File

@ -542,7 +542,7 @@ namespace Elwig.Helpers {
} }
var oe = double.Parse(input.Text); var oe = double.Parse(input.Text);
if (oe < 10 || oe >= 200) { if (oe < 10 || oe >= 300) {
return new(false, "Ungültiger Oechsle-Wert"); return new(false, "Ungültiger Oechsle-Wert");
} }
@ -558,7 +558,7 @@ namespace Elwig.Helpers {
} }
var kmw = double.Parse(input.Text); var kmw = double.Parse(input.Text);
if (kmw < 0 || kmw >= 50) { if (kmw < 5 || kmw >= 50) {
return new(false, "Ungültiger KMW-Wert"); return new(false, "Ungültiger KMW-Wert");
} }

View File

@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
namespace Elwig.Models { namespace Elwig.Models {
[Table("wine_quality"), PrimaryKey("QualId")] [Table("wine_quality_level"), PrimaryKey("QualId")]
public class WineQualLevel { public class WineQualLevel {
[Column("qualid")] [Column("qualid")]
public string QualId { get; private set; } public string QualId { get; private set; }
@ -22,5 +22,7 @@ namespace Elwig.Models {
[Column("name")] [Column("name")]
public string Name { get; private set; } public string Name { get; private set; }
public string MinKmwStr => (MinKmw == null) ? "" : $"(mind. {MinKmw:#.0} °KMW)";
} }
} }

View File

@ -112,17 +112,23 @@
<GroupBox Header="Gradation" Grid.Column="2" Grid.Row="2" Margin="5,5,5,5"> <GroupBox Header="Gradation" Grid.Column="2" Grid.Row="2" Margin="5,5,5,5">
<Grid> <Grid>
<TextBox x:Name="GradationOeInput" Width="80" Grid.Row="1" Grid.Column="1" Margin="10,10,10,10" HorizontalAlignment="Left" <Grid Grid.Row="1" Grid.Column="1" Width="56" Height="25" Margin="10,10,10,10" HorizontalAlignment="Left" VerticalAlignment="Top">
<TextBox x:Name="GradationOeInput" TextAlignment="Right" Padding="2,1,25,2"
IsReadOnly="False" IsEnabled="True" IsReadOnly="False" IsEnabled="True"
TextAlignment="Right" Padding="2,2,25,2"
TextChanged="GradationOeInput_TextChanged" LostFocus="GradationOeInput_LostFocus"/> TextChanged="GradationOeInput_TextChanged" LostFocus="GradationOeInput_LostFocus"/>
<Label Content="°Oe" Margin="63,11,10,10"/> <Label Content="°Oe" Margin="0,1,3,0" HorizontalAlignment="Right"/>
<Label Content="=" Margin="94,10,10,10"/> </Grid>
<TextBox x:Name="GradationKmwInput" Width="80" Grid.Row="1" Grid.Column="1" Margin="110,10,10,10" HorizontalAlignment="Left" <Label Content="=" Margin="72,10,10,10"/>
<Grid Grid.Row="1" Grid.Column="1" Width="72" Height="25" Margin="90,10,10,10" HorizontalAlignment="Left" VerticalAlignment="Top">
<TextBox x:Name="GradationKmwInput" TextAlignment="Right" Padding="2,1,38,2"
IsReadOnly="False" IsEnabled="True" IsReadOnly="False" IsEnabled="True"
TextAlignment="Right" Padding="2,2,38,2"
TextChanged="GradationKmwInput_TextChanged" LostFocus="GradationKmwInput_LostFocus"/> TextChanged="GradationKmwInput_TextChanged" LostFocus="GradationKmwInput_LostFocus"/>
<Label Content="°KMW" Margin="150,11,10,10"/> <Label Content="°KMW" Margin="0,1,3,0" HorizontalAlignment="Right"/>
</Grid>
<Label Content="Qualitätsstufe:" Margin="10,40,10,10"/>
<ComboBox x:Name="WineQualityLevelInput" IsEnabled="True" Margin="100,40,10,10"
ItemTemplate="{StaticResource WineQualityLevelTemplate}"/>
</Grid> </Grid>
</GroupBox> </GroupBox>
@ -137,7 +143,7 @@
<GroupBox Header="Herkunft" Grid.Column="2" Grid.Row="4" Margin="5,5,5,5"> <GroupBox Header="Herkunft" Grid.Column="2" Grid.Row="4" Margin="5,5,5,5">
<Grid> <Grid>
<ComboBox x:Name="WineOriginInput" IsEnabled="True" Margin="10,10,10,10" <ComboBox x:Name="WineOriginInput" IsEnabled="True" Margin="10,10,10,10"
ItemTemplate="{StaticResource WineOriginTemplate}" SelectedValuePath="Name"/> ItemTemplate="{StaticResource WineOriginTemplate}"/>
</Grid> </Grid>
</GroupBox> </GroupBox>
</Grid> </Grid>

View File

@ -16,7 +16,8 @@ namespace Elwig.Windows {
MgNrInput, MemberInput, MgNrInput, MemberInput,
SortIdInput, WineVarietyInput, SortIdInput, WineVarietyInput,
GradationOeInput, GradationKmwInput, GradationOeInput, GradationKmwInput,
WineOriginInput WineQualityLevelInput,
WineOriginInput,
}; };
ExemptInputs = new Control[] { ExemptInputs = new Control[] {
MgNrInput, MemberInput, MgNrInput, MemberInput,
@ -28,6 +29,7 @@ namespace Elwig.Windows {
MemberInput.ItemsSource = Context.Members.OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToList(); MemberInput.ItemsSource = Context.Members.OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToList();
WineVarietyInput.ItemsSource = Context.WineVarieties.OrderBy(v => v.Name).ToList(); WineVarietyInput.ItemsSource = Context.WineVarieties.OrderBy(v => v.Name).ToList();
AttributesInput.ItemsSource = Context.WineAttributes.OrderBy(a => a.Name).ToList(); AttributesInput.ItemsSource = Context.WineAttributes.OrderBy(a => a.Name).ToList();
WineQualityLevelInput.ItemsSource = Context.WineQualityLevels.ToList();
ModifiersInput.ItemsSource = Context.Modifiers.Where(m => m.Season.Year == 2022).OrderBy(m => m.Name).ToList(); ModifiersInput.ItemsSource = Context.Modifiers.Where(m => m.Season.Year == 2022).OrderBy(m => m.Name).ToList();
WineOriginInput.ItemsSource = Context.WineOrigins.ToList().OrderByDescending(o => o.SortKey).ThenBy(o => o.HkId); WineOriginInput.ItemsSource = Context.WineOrigins.ToList().OrderByDescending(o => o.SortKey).ThenBy(o => o.HkId);
} }
@ -80,12 +82,22 @@ namespace Elwig.Windows {
if (s != null) SortIdInput.Text = s.SortId; if (s != null) SortIdInput.Text = s.SortId;
} }
private void UpdateWineQualityLevels() {
var kmw = double.Parse(GradationKmwInput.Text);
WineQualityLevelInput.ItemsSource = Context.WineQualityLevels.Where(q => q.MinKmw == null || q.MinKmw <= kmw).ToList();
if (WineQualityLevelInput.SelectedItem == null || (WineQualityLevelInput.SelectedItem is WineQualLevel selected && !selected.IsPredicate)) {
var qual = Context.WineQualityLevels.Where(q => !q.IsPredicate && (q.MinKmw == null || q.MinKmw <= kmw)).OrderBy(q => q.MinKmw).LastOrDefault();
WineQualityLevelInput.SelectedItem = qual;
}
}
private void UpdateGradationKmw() { private void UpdateGradationKmw() {
IsUpdatingGradation = true; IsUpdatingGradation = true;
var caret = GradationKmwInput.CaretIndex; var caret = GradationKmwInput.CaretIndex;
GradationKmwInput.Text = $"{Utils.OeToKmw(double.Parse(GradationOeInput.Text)):#.0}"; GradationKmwInput.Text = $"{Utils.OeToKmw(double.Parse(GradationOeInput.Text)):#.0}";
GradationKmwInput.CaretIndex = caret; GradationKmwInput.CaretIndex = caret;
IsUpdatingGradation = false; IsUpdatingGradation = false;
UpdateWineQualityLevels();
} }
private void UpdateGradationOe() { private void UpdateGradationOe() {
@ -94,6 +106,7 @@ namespace Elwig.Windows {
GradationOeInput.Text = $"{Utils.KmwToOe(double.Parse(GradationKmwInput.Text)):#}"; GradationOeInput.Text = $"{Utils.KmwToOe(double.Parse(GradationKmwInput.Text)):#}";
GradationOeInput.CaretIndex = caret; GradationOeInput.CaretIndex = caret;
IsUpdatingGradation = false; IsUpdatingGradation = false;
UpdateWineQualityLevels();
} }
private void GradationOeInput_TextChanged(object sender, TextChangedEventArgs evt) { private void GradationOeInput_TextChanged(object sender, TextChangedEventArgs evt) {
@ -112,6 +125,7 @@ namespace Elwig.Windows {
private void GradationKmwInput_LostFocus(object sender, RoutedEventArgs evt) { private void GradationKmwInput_LostFocus(object sender, RoutedEventArgs evt) {
InputLostFocus((TextBox)sender, Validator.CheckGradationKmw); InputLostFocus((TextBox)sender, Validator.CheckGradationKmw);
if (!GradationKmwInput.Text.Contains(',')) GradationKmwInput.Text += ",0";
} }
private void AttributesInput_SelectionChanged(object sender, ItemSelectionChangedEventArgs evt) { private void AttributesInput_SelectionChanged(object sender, ItemSelectionChangedEventArgs evt) {