diff --git a/Elwig/Dialogs/ManualWeighingDialog.xaml b/Elwig/Dialogs/ManualWeighingDialog.xaml new file mode 100644 index 0000000..5ad9043 --- /dev/null +++ b/Elwig/Dialogs/ManualWeighingDialog.xaml @@ -0,0 +1,57 @@ +<Window x:Class="Elwig.Dialogs.ManualWeighingDialog" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:local="clr-namespace:Elwig.Dialogs" + mc:Ignorable="d" + ResizeMode="NoResize" + ShowInTaskbar="False" + Topmost="True" + WindowStartupLocation="CenterOwner" + FocusManager.FocusedElement="{Binding ElementName=WeightInput}" + Title="Handwiegung" Height="170" Width="400"> + <Window.Resources> + <Style TargetType="Label"> + <Setter Property="HorizontalAlignment" Value="Left"/> + <Setter Property="VerticalAlignment" Value="Top"/> + <Setter Property="Padding" Value="2,4,2,4"/> + <Setter Property="Height" Value="25"/> + </Style> + <Style TargetType="TextBox"> + <Setter Property="HorizontalAlignment" Value="Stretch"/> + <Setter Property="VerticalAlignment" Value="Top"/> + <Setter Property="FontSize" Value="14"/> + <Setter Property="Padding" Value="2"/> + <Setter Property="Height" Value="25"/> + <Setter Property="TextWrapping" Value="NoWrap"/> + </Style> + <Style TargetType="Button"> + <Setter Property="HorizontalAlignment" Value="Right"/> + <Setter Property="VerticalAlignment" Value="Bottom"/> + <Setter Property="Width" Value="100"/> + <Setter Property="Height" Value="25"/> + </Style> + </Window.Resources> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="70"/> + <ColumnDefinition/> + </Grid.ColumnDefinitions> + + <Label Content="Gewicht:" Margin="10,20,10,10"/> + <Grid Grid.Column="1" Width="70" Height="25" Margin="0,20,10,10" HorizontalAlignment="Left" VerticalAlignment="Top"> + <TextBox x:Name="WeightInput" TextAlignment="Right" Padding="2,2,17,2" + TextChanged="WeightInput_TextChanged"/> + <Label Content="kg" Margin="0,4,3,0" HorizontalAlignment="Right" FontSize="10" Padding="2,4,2,4"/> + </Grid> + + <Label Content="Grund:" Margin="10,50,10,10"/> + <TextBox x:Name="ReasonInput" Grid.Column="1" Margin="0,50,10,10" + TextChanged="ReasonInput_TextChanged"/> + + <Button x:Name="ConfirmButton" Content="Bestätigen" Margin="10,10,115,10" Grid.Column="1" IsEnabled="False" IsDefault="True" + Click="ConfirmButton_Click"/> + <Button x:Name="CancelButton" Content="Abbrechen" Margin="10,10,10,10" Grid.Column="1" IsCancel="True"/> + </Grid> +</Window> diff --git a/Elwig/Dialogs/ManualWeighingDialog.xaml.cs b/Elwig/Dialogs/ManualWeighingDialog.xaml.cs new file mode 100644 index 0000000..5c4d036 --- /dev/null +++ b/Elwig/Dialogs/ManualWeighingDialog.xaml.cs @@ -0,0 +1,41 @@ +using Elwig.Helpers; +using System.Text.RegularExpressions; +using System.Windows; +using System.Windows.Controls; + +namespace Elwig.Dialogs { + public partial class ManualWeighingDialog : Window { + + public int Weight = 0; + public string? Reason = null; + + public ManualWeighingDialog() { + InitializeComponent(); + } + + private void ConfirmButton_Click(object sender, RoutedEventArgs evt) { + DialogResult = true; + Weight = int.Parse(WeightInput.Text.Replace(".", "")); + Reason = Regex.Replace(ReasonInput.Text, @"\s+", "").Trim(); + if (Reason == "") { + Reason = null; + } else if (!Reason.EndsWith(".") || !Reason.EndsWith("!") || !Reason.EndsWith("?")) { + Reason += "."; + } + Close(); + } + + private void UpdateButtons() { + ConfirmButton.IsEnabled = WeightInput.Text.Length > 0 && ReasonInput.Text.Trim().Length > 0; + } + + private void WeightInput_TextChanged(object sender, TextChangedEventArgs evt) { + Validator.CheckInteger(WeightInput, true, 5); + UpdateButtons(); + } + + private void ReasonInput_TextChanged(object sender, TextChangedEventArgs evt) { + UpdateButtons(); + } + } +} diff --git a/Elwig/Helpers/Utils.cs b/Elwig/Helpers/Utils.cs index 71521ca..4ac0f5c 100644 --- a/Elwig/Helpers/Utils.cs +++ b/Elwig/Helpers/Utils.cs @@ -7,6 +7,7 @@ using System.Diagnostics; using System.Text.RegularExpressions; using System.IO.Ports; using System.Net.Sockets; +using Elwig.Dialogs; namespace Elwig.Helpers { public static partial class Utils { @@ -134,5 +135,10 @@ namespace Elwig.Helpers { } return i; } + + public static (int, string?)? ShowManualWeighingDialog() { + var d = new ManualWeighingDialog(); + return d.ShowDialog() == true ? (d.Weight, d.Reason) : null; + } } } diff --git a/Elwig/Windows/AdministrationWindow.cs b/Elwig/Windows/AdministrationWindow.cs index f929687..11e4e79 100644 --- a/Elwig/Windows/AdministrationWindow.cs +++ b/Elwig/Windows/AdministrationWindow.cs @@ -252,6 +252,10 @@ namespace Elwig.Windows { }; } + protected bool InputTextChanged(TextBox input) { + return InputTextChanged(input, new ValidationResult(true, null)); + } + protected bool InputTextChanged(TextBox input, Func<TextBox, bool, ValidationResult> checker) { return InputTextChanged(input, (tb, required, ctx) => checker(tb, required)); } diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml b/Elwig/Windows/DeliveryAdminWindow.xaml index 29f7935..203bd95 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml +++ b/Elwig/Windows/DeliveryAdminWindow.xaml @@ -248,8 +248,8 @@ <Label Content="Gewicht:" Margin="10,10,10,10"/> <Grid Grid.Column="1" Width="70" Height="25" Margin="0,10,10,10" HorizontalAlignment="Left" VerticalAlignment="Top"> - <TextBox x:Name="WeightInput" TextAlignment="Right" Padding="2,2,17,2" - IsReadOnly="True"/> + <TextBox x:Name="WeightInput" TextAlignment="Right" Padding="2,2,17,2" IsReadOnly="True" + TextChanged="WeightInput_TextChanged"/> <Label Content="kg" Margin="0,4,3,0" HorizontalAlignment="Right" FontSize="10"/> </Grid> @@ -260,6 +260,7 @@ VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,75,10,10" Grid.Column="0" Grid.ColumnSpan="2"/> <Button x:Name="WeighingManualButton" Content="Handwiegung" Width="120" + Click="WeighingManualButton_Click" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="10,10,10,10" Grid.Column="2"/> <Button x:Name="WeighingAButton" Content="Wiegen A" Width="120" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="10,42,10,10" Grid.Column="2"/> diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs index 1729d4d..59df322 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs +++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs @@ -1,3 +1,4 @@ +using Elwig.Dialogs; using Elwig.Helpers; using Elwig.Models; using Microsoft.EntityFrameworkCore; @@ -22,6 +23,8 @@ namespace Elwig.Windows { private List<string> TextFilter = new(); private readonly RoutedCommand CtrlF = new(); + private string? ManualWeighingReason = null; + public DeliveryAdminWindow(bool receipt = false) { InitializeComponent(); CtrlF.InputGestures.Add(new KeyGesture(Key.F, ModifierKeys.Control)); @@ -216,7 +219,7 @@ namespace Elwig.Windows { ControlUtils.SelectComboBoxItem(WineKgInput, k => (k as AT_Kg)?.KgNr, p?.KgNr); ControlUtils.SelectComboBoxItem(WineRdInput, r => (r as WbRd)?.RdNr, p?.RdNr); ControlUtils.SelectComboBoxItem(WineOriginInput, r => (r as WineOrigin)?.HkId, p?.HkId); - WeightInput.Text = p?.Weight.ToString() ?? ""; + WeightInput.Text = (p != null) ? $"{p.Weight:N0}" : ""; ManualWeighingInput.IsChecked = p?.ManualWeighing ?? false; GerebeltGewogenInput.IsChecked = p?.IsGerebelt ?? false; ControlUtils.SelectCheckComboBoxItems(ModifiersInput, p?.Modifiers, i => (i as Modifier)?.ModId); @@ -453,6 +456,14 @@ namespace Elwig.Windows { // TODO abwerten dialog } + private void WeighingManualButton_Click(object sender, RoutedEventArgs evt) { + var res = Utils.ShowManualWeighingDialog(); + if (res == null) return; + WeightInput.Text = $"{res?.Item1:N0}"; + ManualWeighingInput.IsChecked = true; + ManualWeighingReason = res?.Item2; + } + private void EditDeliveryButton_Click(object sender, RoutedEventArgs evt) { if (DeliveryPartList.SelectedItem == null) return; @@ -795,5 +806,9 @@ namespace Elwig.Windows { var defQual = Context.GetWineQualityLevel(double.Parse(GradationKmwInput.Text)).GetAwaiter().GetResult(); AbgewertetInput.IsChecked = !qual.IsPredicate && defQual != qual; } + + private void WeightInput_TextChanged(object sender, TextChangedEventArgs evt) { + InputTextChanged((TextBox)sender); + } } }