diff --git a/Elwig/Dialogs/ManualWeighingDialog.xaml b/Elwig/Dialogs/ManualWeighingDialog.xaml
index 94bd0a4..c41fb1d 100644
--- a/Elwig/Dialogs/ManualWeighingDialog.xaml
+++ b/Elwig/Dialogs/ManualWeighingDialog.xaml
@@ -4,6 +4,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Elwig.Dialogs"
+ xmlns:ctrl="clr-namespace:Elwig.Controls"
ResizeMode="NoResize" ShowInTaskbar="False" Topmost="True"
WindowStartupLocation="CenterOwner"
FocusManager.FocusedElement="{Binding ElementName=WeightInput}"
@@ -37,11 +38,9 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Elwig/Dialogs/TareCorrectionDialog.xaml.cs b/Elwig/Dialogs/TareCorrectionDialog.xaml.cs
new file mode 100644
index 0000000..e56532d
--- /dev/null
+++ b/Elwig/Dialogs/TareCorrectionDialog.xaml.cs
@@ -0,0 +1,36 @@
+using Elwig.Helpers;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace Elwig.Dialogs {
+ public partial class TareCorrectionDialog : Window {
+
+ public int ActualTare { get; private set; }
+ public int TargetTare { get; private set; }
+
+ public TareCorrectionDialog(int actualTare, int? targetTare = null) {
+ InitializeComponent();
+ ActualTare = actualTare;
+ TargetTare = targetTare ?? actualTare;
+ ActualTareInput.Text = ActualTare.ToString();
+ TargetTareInput.Text = TargetTare.ToString();
+ TargetTareInput.SelectAll();
+ }
+
+ private void ConfirmButton_Click(object sender, RoutedEventArgs evt) {
+ DialogResult = true;
+ TargetTare = int.Parse(TargetTareInput.Text);
+ Close();
+ }
+
+ private void UpdateButtons() {
+ ConfirmButton.IsEnabled = TargetTareInput.Text.Length > 0;
+ }
+
+ private void TareInput_TextChanged(object sender, TextChangedEventArgs evt) {
+ if (sender is not TextBox b) return;
+ Validator.CheckInteger(b, true, 4);
+ UpdateButtons();
+ }
+ }
+}
diff --git a/Elwig/Documents/DeliveryNote.cs b/Elwig/Documents/DeliveryNote.cs
index 1723543..e4a7885 100644
--- a/Elwig/Documents/DeliveryNote.cs
+++ b/Elwig/Documents/DeliveryNote.cs
@@ -196,9 +196,17 @@ namespace Elwig.Documents {
.Add(Italic("Brutto:"))
.Add(Normal($" {info.Gross:N0} kg \u2013 "))
.Add(Italic("Tara:"))
- .Add(Normal($" {info.Tare:N0} kg \u2013 "))
+ .Add(Normal($" {info.Tare:N0} kg "));
+ if (info.TareCorrection != null && info.TareCorrection != 0)
+ weighing.Add(Bold($"(Korr.: {Utils.GetSign(info.TareCorrection.Value)}{Math.Abs(info.TareCorrection.Value)} kg)")).Add(" ");
+ weighing
+ .Add(Normal("\u2013 "))
.Add(Italic("Netto:"))
- .Add(Normal($" {info.Net:N0} kg \u2013 "))
+ .Add(Normal($" {info.Net:N0} kg "));
+ if (info.TareCorrection != null && info.TareCorrection != 0)
+ weighing.Add(Normal($"({Utils.GetSign(-info.TareCorrection.Value)}{Math.Abs(info.TareCorrection.Value)} kg) "));
+ weighing
+ .Add(Normal("\u2013 "))
.Add(Italic(part.IsNetWeight ? "gerebelt gewogen" : "nicht gerebelt gewogen"));
} else {
weighing.Add(" ")
diff --git a/Elwig/Helpers/Utils.cs b/Elwig/Helpers/Utils.cs
index 904aad3..4aaab1a 100644
--- a/Elwig/Helpers/Utils.cs
+++ b/Elwig/Helpers/Utils.cs
@@ -303,6 +303,11 @@ namespace Elwig.Helpers {
return d.ShowDialog() == true ? (d.Weight, d.Reason) : null;
}
+ public static int? ShowTareCorrectionDialog(int actualTare, int? targetTare = null) {
+ var d = new TareCorrectionDialog(actualTare, targetTare);
+ return d.ShowDialog() == true ? d.TargetTare - d.ActualTare : null;
+ }
+
public static (string?, int[])? ShowDeliverySplittingDialog(Delivery delivery) {
var d = new DeliverySplittingDialog(delivery);
return d.ShowDialog() == true ? (d.MgNr?.ToString() ?? d.LsNr, d.Weights ?? []) : null;
diff --git a/Elwig/Models/Entities/DeliveryPart.cs b/Elwig/Models/Entities/DeliveryPart.cs
index fc6379d..7febef1 100644
--- a/Elwig/Models/Entities/DeliveryPart.cs
+++ b/Elwig/Models/Entities/DeliveryPart.cs
@@ -124,7 +124,7 @@ namespace Elwig.Models.Entities {
[Column("weighing_data")]
public string? WeighingData { get; set; }
[NotMapped]
- public (string? ScaleId, string? Id, int? Gross, int? Tare, int? Net, DateOnly? Date, TimeOnly? Time) WeighingInfo {
+ public (string? ScaleId, string? Id, int? Gross, int? Tare, int? TareCorrection, int? Net, DateOnly? Date, TimeOnly? Time) WeighingInfo {
get {
try {
var obj = JsonNode.Parse(WeighingData!)!.AsObject();
@@ -133,12 +133,13 @@ namespace Elwig.Models.Entities {
obj["id"]?.AsValue().GetValue(),
obj["gross_weight"]?.AsValue().GetValue(),
obj["tare_weight"]?.AsValue().GetValue(),
+ obj["tare_correction"]?.AsValue().GetValue(),
obj["net_weight"]?.AsValue().GetValue(),
DateOnly.TryParseExact(obj["date"]?.AsValue().GetValue(), "yyyy-MM-dd", out var d) ? d : null,
TimeOnly.TryParseExact(obj["time"]?.AsValue().GetValue(), ["HH:mm:ss", "HH:mm"], out var t) ? t : null
);
} catch {
- return (null, null, null, null, null, null, null);
+ return (null, null, null, null, null, null, null, null);
}
}
}
diff --git a/Elwig/Services/DeliveryService.cs b/Elwig/Services/DeliveryService.cs
index 258da89..6471c64 100644
--- a/Elwig/Services/DeliveryService.cs
+++ b/Elwig/Services/DeliveryService.cs
@@ -35,8 +35,13 @@ namespace Elwig.Services {
vm.SortId = "";
vm.GradationKmwString = "";
- vm.WeightString = "";
+
+ vm.Weight = null;
+ vm.ActualTare = 0;
+ vm.TargetTare = null;
+ vm.Tare = null;
vm.IsManualWeighing = false;
+
vm.PartComment = "";
vm.TemperatureString = "";
vm.AcidString = "";
@@ -51,7 +56,11 @@ namespace Elwig.Services {
vm.WineKg = ControlUtils.GetItemFromSourceWithPk(vm.WineKgSource, p.KgNr) as AT_Kg;
vm.WineRd = ControlUtils.GetItemFromSourceWithPk(vm.WineRdSource, p.KgNr, p.RdNr) as WbRd;
vm.WineOrigin = ControlUtils.GetItemFromSourceWithPk(vm.WineOriginSource, p.HkId) as WineOrigin;
- vm.WeightString = $"{p.Weight:N0}";
+
+ vm.Weight = p.Weight;
+ vm.ActualTare = p.WeighingInfo.Tare ?? 0;
+ vm.TargetTare = vm.ActualTare + p.WeighingInfo.TareCorrection;
+ vm.Tare = vm.ActualTare != 0 ? vm.TargetTare ?? vm.ActualTare : null;
vm.IsManualWeighing = p.IsManualWeighing;
vm.IsNetWeight = p.IsNetWeight;
diff --git a/Elwig/ViewModels/DeliveryAdminViewModel.cs b/Elwig/ViewModels/DeliveryAdminViewModel.cs
index 9d41b87..f68ae8c 100644
--- a/Elwig/ViewModels/DeliveryAdminViewModel.cs
+++ b/Elwig/ViewModels/DeliveryAdminViewModel.cs
@@ -120,6 +120,14 @@ namespace Elwig.ViewModels {
set => WeightString = $"{value:N0}";
}
[ObservableProperty]
+ private string? _tareString = "-";
+ public int? Tare {
+ get => int.TryParse(TareString?.Replace(Utils.GroupSeparator, "").Replace(" kg", ""), out var w) ? w : null;
+ set => TareString = value == null ? "-" : $"{value:N0} kg{(TargetTare != null ? "*" : "")}";
+ }
+ public int ActualTare;
+ public int? TargetTare;
+ [ObservableProperty]
private bool _isManualWeighing;
[ObservableProperty]
private bool? _isNetWeightValue = false;
diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml b/Elwig/Windows/DeliveryAdminWindow.xaml
index 87e59ae..d060111 100644
--- a/Elwig/Windows/DeliveryAdminWindow.xaml
+++ b/Elwig/Windows/DeliveryAdminWindow.xaml
@@ -398,7 +398,8 @@
-
+
+
@@ -434,7 +435,7 @@
-
+
@@ -553,7 +554,7 @@
-
+
@@ -565,16 +566,23 @@
TextChanged="WeightInput_TextChanged"
Grid.Column="1" Width="70" Margin="0,10,10,10" HorizontalAlignment="Left" VerticalAlignment="Top"/>
+
+
+
+
@@ -593,7 +601,7 @@
-
+
@@ -646,7 +654,7 @@
-
+
diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs
index 4d44a4d..0a6d622 100644
--- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs
+++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs
@@ -9,6 +9,7 @@ using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Text.Json.Nodes;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
@@ -103,6 +104,7 @@ namespace Elwig.Windows {
WeighingBButton.Visibility = Visibility.Hidden;
WeighingCButton.Visibility = Visibility.Hidden;
WeighingDButton.Visibility = Visibility.Hidden;
+ DisableWeighingButtons();
}
Menu_Statistics_WineQuality_ModeOe.IsChecked = false;
@@ -612,14 +614,34 @@ namespace Elwig.Windows {
ClearOriginalValues();
ClearDefaultValues();
ViewModel.FillInputs(p);
+ CorrectTareButton.Visibility = !ViewModel.IsReceipt && p.WeighingInfo.Tare != null && p.WeighingInfo.Tare != 0 ? Visibility.Visible : Visibility.Hidden;
FinishInputFilling();
}
new protected void ClearInputs(bool validate = false) {
ViewModel.ClearInputs();
+ CorrectTareButton.Visibility = Visibility.Hidden;
base.ClearInputs(validate);
}
+ private void CorrectTareButton_Click(object sender, RoutedEventArgs evt) {
+ var lastCorrection = (ViewModel.TargetTare ?? ViewModel.ActualTare) - ViewModel.ActualTare;
+ var correction = Utils.ShowTareCorrectionDialog(ViewModel.ActualTare, ViewModel.TargetTare);
+ if (correction == null) return;
+ ViewModel.Weight += lastCorrection - correction;
+ ViewModel.TargetTare = correction == 0 ? null : ViewModel.ActualTare + correction;
+ ViewModel.Tare = ViewModel.TargetTare ?? ViewModel.ActualTare;
+ if (ViewModel.WeighingData is string s) {
+ var obj = JsonNode.Parse(s)!.AsObject();
+ if (correction == 0) {
+ obj.Remove("tare_correction");
+ } else {
+ obj["tare_correction"] = correction;
+ }
+ ViewModel.WeighingData = obj.ToJsonString(Utils.JsonOpts);
+ }
+ }
+
private void WeighingButton_Click(object sender, RoutedEventArgs evt) {
int index = Array.IndexOf(WeighingButtons, sender as Button);
if (index >= 0) WeighingButton_Click(index);
@@ -651,12 +673,18 @@ namespace Elwig.Windows {
private void OnWeighingResult(IScale scale, WeighingResult res) {
if ((res.NetWeight ?? 0) > 0 && res.FullWeighingId != null) {
ViewModel.Weight = res.NetWeight;
+ ViewModel.ActualTare = res.TareWeight ?? 0;
+ ViewModel.TargetTare = null;
+ ViewModel.Tare = ViewModel.ActualTare != 0 ? ViewModel.ActualTare : null;
ViewModel.ScaleTerminalId = scale.ScaleTerminalId;
ViewModel.WeighingData = res.ToJson().ToJsonString();
ViewModel.ManualWeighingReason = null;
ManualWeighingInput.IsChecked = false;
} else {
ViewModel.Weight = null;
+ ViewModel.ActualTare = 0;
+ ViewModel.TargetTare = null;
+ ViewModel.Tare = null;
ViewModel.ScaleTerminalId = null;
ViewModel.WeighingData = null;
}
@@ -971,6 +999,8 @@ namespace Elwig.Windows {
DeliveryList.IsEnabled = false;
DeliveryPartList.IsEnabled = false;
+ if (!ViewModel.IsReceipt)
+ EnableWeighingButtons();
HideNewEditDeleteButtons();
ShowSaveResetCancelButtons();
UnlockInputs();
@@ -1034,6 +1064,8 @@ namespace Elwig.Windows {
DeliveryList.IsEnabled = true;
DeliveryPartList.IsEnabled = true;
+ if (!ViewModel.IsReceipt)
+ DisableWeighingButtons();
HideSaveResetCancelButtons();
ShowNewEditDeleteButtons();
LockInputs();
@@ -1067,6 +1099,8 @@ namespace Elwig.Windows {
DeliveryList.IsEnabled = true;
DeliveryPartList.IsEnabled = true;
+ if (!ViewModel.IsReceipt)
+ DisableWeighingButtons();
HideSaveResetCancelButtons();
ShowNewEditDeleteButtons();
RefreshInputs();
@@ -1171,6 +1205,7 @@ namespace Elwig.Windows {
}
private void DisableWeighingButtons() {
+ CorrectTareButton.IsEnabled = false;
WeighingManualButton.IsEnabled = false;
WeighingAButton.IsEnabled = false;
WeighingBButton.IsEnabled = false;
@@ -1179,6 +1214,7 @@ namespace Elwig.Windows {
}
private void EnableWeighingButtons() {
+ CorrectTareButton.IsEnabled = true;
WeighingManualButton.IsEnabled = true;
var n = App.CommandScales.Count;
WeighingAButton.IsEnabled = n > 0 && App.CommandScales[0].IsReady;