Compare commits

...

9 Commits

12 changed files with 76 additions and 41 deletions

View File

@@ -9,24 +9,21 @@ namespace Elwig.Dialogs {
public int Weight = 0;
public string? Reason = null;
public ManualWeighingDialog() {
public ManualWeighingDialog(string? reason = null) {
InitializeComponent();
ReasonInput.Text = reason;
}
private void ConfirmButton_Click(object sender, RoutedEventArgs evt) {
DialogResult = true;
Weight = int.Parse(WeightInput.Text);
Reason = Regex.Replace(ReasonInput.Text, @"\s+", "").Trim();
if (Reason == "") {
Reason = null;
} else if (!Reason.EndsWith(".") || !Reason.EndsWith("!") || !Reason.EndsWith("?")) {
Reason += ".";
}
Reason = Regex.Replace(ReasonInput.Text, @"\s+", " ").Trim();
if (Reason == "") Reason = null;
Close();
}
private void UpdateButtons() {
ConfirmButton.IsEnabled = WeightInput.Text.Length > 0 && ReasonInput.Text.Trim().Length > 0;
ConfirmButton.IsEnabled = WeightInput.Text.Length > 0;
}
private void WeightInput_TextChanged(object sender, TextChangedEventArgs evt) {

View File

@@ -18,12 +18,14 @@
<link rel="stylesheet" href="file:///@Raw(Model.DataPath)\resources\style-page.css"/>
</head>
<body>
<div class="m1"></div>
<div class="m2"></div>
<div class="m3"></div>
<div class="m1 r"></div>
<div class="m2 r"></div>
<div class="m3 r"></div>
@if (Model.ShowFoldMarks) {
<div class="m1"></div>
<div class="m2"></div>
<div class="m3"></div>
<div class="m1 r"></div>
<div class="m2 r"></div>
<div class="m3 r"></div>
}
<div class="footer-wrapper">
<div class="pre-footer">
<span class="date">@($"{Model.Date:dddd, d. MMMM yyyy}")</span>

View File

@@ -8,6 +8,7 @@ namespace Elwig.Documents {
private TempFile? PdfFile = null;
public bool ShowFoldMarks = App.Config.Debug;
public string DataPath;
public int CurrentNextSeason;
public string? DocumentId;

View File

@@ -7,7 +7,7 @@
<UseWPF>true</UseWPF>
<PreserveCompilationContext>true</PreserveCompilationContext>
<ApplicationIcon>elwig.ico</ApplicationIcon>
<Version>0.1.0</Version>
<Version>0.2.1</Version>
<SatelliteResourceLanguages>de-AT</SatelliteResourceLanguages>
</PropertyGroup>

View File

@@ -8,6 +8,7 @@ namespace Elwig.Helpers {
public class Config {
private readonly string FileName;
public bool Debug;
public string DatabaseFile = App.DataPath + "database.sqlite3";
public string? DatabaseLog = null;
public string? Branch = null;
@@ -49,6 +50,13 @@ namespace Elwig.Helpers {
Branch = branch;
}
if (ini == null || !ini.TryGetKey("general.debug", out string debug)) {
Debug = false;
} else {
debug = debug.ToLower();
Debug = debug == "1" || debug == "true" || debug == "yes" || debug == "on";
}
ScaleList.Clear();
Scales = ScaleList;
if (ini != null) {
@@ -72,6 +80,7 @@ namespace Elwig.Helpers {
using var file = new StreamWriter(FileName, false, Utils.UTF8);
file.Write($"\r\n[general]\r\n");
if (Branch != null) file.Write($"branch = {Branch}\r\n");
if (Debug) file.Write("debug = true\r\n");
file.Write($"\r\n[database]\r\nfile = {DatabaseFile}\r\n");
if (DatabaseLog != null) file.Write($"log = {DatabaseLog}\r\n");
foreach (var s in ScaleList) {

View File

@@ -219,8 +219,8 @@ namespace Elwig.Helpers {
.Sum();
}
public static (int, string?)? ShowManualWeighingDialog() {
var d = new ManualWeighingDialog();
public static (int, string?)? ShowManualWeighingDialog(string? reason = null) {
var d = new ManualWeighingDialog(reason);
return d.ShowDialog() == true ? (d.Weight, d.Reason) : null;
}

View File

@@ -413,7 +413,7 @@ namespace Elwig.Windows {
UpdateButtons();
}
protected void TextBox_TextChanged(object sender, RoutedEventArgs evt) {
protected void TextBox_TextChanged(object sender, RoutedEventArgs? evt) {
var input = (TextBox)sender;
if (SenderIsRequired(input) && input.Text.Length == 0) {
ValidateInput(input, false);

View File

@@ -25,6 +25,7 @@ namespace Elwig.Windows {
private List<string> TextFilter = new();
private readonly RoutedCommand CtrlF = new();
private string? LastScaleError = null;
private string? ManualWeighingReason = null;
private string? ScaleId = null;
private string? WeighingId = null;
@@ -91,13 +92,13 @@ namespace Elwig.Windows {
AllSeasonsInput.IsChecked = true;
}
private async void Window_Loaded(object sender, RoutedEventArgs evt) {
private void Window_Loaded(object sender, RoutedEventArgs evt) {
OnSecondPassed(null, null);
Timer.Start();
LockInputs();
if (IsReceipt) {
NewDeliveryButton_Click(null, null);
if ((await Context.Seasons.FindAsync(Utils.CurrentYear)) == null) {
if ((Context.Seasons.Find(Utils.CurrentYear)) == null) {
MessageBox.Show("Die Saison für das aktuelle Jahr wurde noch nicht erstellt. Neue Lieferungen können nicht abgespeichert werden.",
"Saison noch nicht erstellt", MessageBoxButton.OK, MessageBoxImage.Error);
}
@@ -147,6 +148,11 @@ namespace Elwig.Windows {
}
private void InitialInputs() {
LastScaleError = null;
WeighingId = null;
ScaleId = null;
ManualWeighingReason = null;
ClearOriginalValues();
ClearDefaultValues();
@@ -179,8 +185,8 @@ namespace Elwig.Windows {
bool ch = HasChanged, v = IsValid;
ResetButton.IsEnabled = ch;
SaveButton.IsEnabled = v && ch;
FinishButton.IsEnabled = v || !ch;
NewDeliveryPartButton.IsEnabled = v;
FinishButton.IsEnabled = v && ch;
NewDeliveryPartButton.IsEnabled = v && ch;
CancelCreatingButton.IsEnabled = DeliveryList.SelectedItem == null || DeliveryPartList.SelectedItem == null;
}
@@ -226,6 +232,7 @@ namespace Elwig.Windows {
double filterOeLt = 0;
var filter = TextFilter.ToList();
var hasFilters = filter.Count > 0;
if (filter.Count > 0) {
var var = await Context.WineVarieties.Select(v => v.SortId).ToListAsync();
var qual = await Context.WineQualityLevels.Select(q => q.QualId).ToListAsync();
@@ -331,7 +338,8 @@ namespace Elwig.Windows {
.ToList();
}
ControlUtils.RenewItemsSource(DeliveryList, deliveries, d => ((d as Delivery)?.Year, (d as Delivery)?.DId), DeliveryList_SelectionChanged, ControlUtils.RenewSourceDefault.IfOnly, !updateSort);
ControlUtils.RenewItemsSource(DeliveryList, deliveries, d => ((d as Delivery)?.Year, (d as Delivery)?.DId),
DeliveryList_SelectionChanged, hasFilters ? ControlUtils.RenewSourceDefault.IfOnly : ControlUtils.RenewSourceDefault.None, !updateSort);
var members = deliveries.Select(d => d.Member).DistinctBy(m => m.MgNr).ToList();
StatusMembers.Text = $"Mitglieder: {members.Count}" + (members.Count > 0 && members.Count <= 4 ? $" ({string.Join(", ", members.Select(m => m.AdministrativeName))})" : "");
@@ -426,7 +434,7 @@ namespace Elwig.Windows {
await RefreshDeliveryList();
var d = DeliveryList.SelectedItem as Delivery;
var y = d?.Year ?? Utils.CurrentLastSeason;
ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsReceipt).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync(), i => (i as Member)?.MgNr);
ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsCreating).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync(), i => (i as Member)?.MgNr);
ControlUtils.RenewItemsSource(BranchInput, await Context.Branches.OrderBy(b => b.Name).ToListAsync(), i => (i as Branch)?.ZwstId);
ControlUtils.RenewItemsSource(WineVarietyInput, await Context.WineVarieties.OrderBy(v => v.Name).ToListAsync(), i => (i as WineVar)?.SortId);
ControlUtils.RenewItemsSource(AttributesInput, await Context.WineAttributes.Where(a => IsCreating || a.IsActive).OrderBy(a => a.Name).ToListAsync(), i => (i as WineAttr)?.AttrId);
@@ -440,6 +448,7 @@ namespace Elwig.Windows {
if (IsCreating) await UpdateLsNr();
await RefreshDeliveryParts();
RefreshInputs();
}
private void FocusSearchInput(object sender, RoutedEventArgs evt) {
@@ -648,12 +657,18 @@ namespace Elwig.Windows {
ScaleId = null;
WeighingId = null;
}
ManualWeighingReason = null;
ManualWeighingInput.IsChecked = false;
LastScaleError = null;
} catch (Exception e) {
LastScaleError = e.Message.Split(": ")[^1];
WeightInput.Text = "";
ScaleId = null;
WeighingId = null;
MessageBox.Show($"Beim Wiegen ist ein Fehler aufgetreten:\n\n{e.Message}", "Waagenfehler",
MessageBoxButton.OK, MessageBoxImage.Error);
}
ManualWeighingReason = null;
ManualWeighingInput.IsChecked = false;
base.TextBox_TextChanged(WeightInput, null);
EnableWeighingButtons();
UpdateButtons();
}
@@ -729,7 +744,7 @@ namespace Elwig.Windows {
MemberInput.SelectedItem = valid ? Context.Members.Find(int.Parse(MgNrInput.Text)) : null;
}
private void MemberInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
private void MemberInput_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) {
var m = MemberInput.SelectedItem as Member;
if (m != null) MgNrInput.Text = m.MgNr.ToString();
MemberAddressField.Text = m?.FullAddress;
@@ -753,6 +768,7 @@ namespace Elwig.Windows {
NewDeliveryPartButton.Cursor = null;
DeliveryList.SelectedItem = p?.Delivery;
DeliveryPartList.SelectedItem = null;
RefreshInputs();
InitialInputs();
}
@@ -768,12 +784,16 @@ namespace Elwig.Windows {
Mouse.OverrideCursor = Cursors.Wait;
using var doc = new DeliveryNote(p.Delivery, Context);
await doc.Generate();
Mouse.OverrideCursor = Cursors.Wait;
doc.Show();
//await doc.Print(2);
Mouse.OverrideCursor = null;
if (App.Config.Debug) {
doc.Show();
} else {
await doc.Print(2);
}
}
FinishButton.Cursor = null;
DeliveryList.SelectedItem = null;
RefreshInputs();
InitInputs();
}
@@ -877,7 +897,7 @@ namespace Elwig.Windows {
}
private void WeighingManualButton_Click(object sender, RoutedEventArgs evt) {
var res = Utils.ShowManualWeighingDialog();
var res = Utils.ShowManualWeighingDialog(LastScaleError);
if (res == null) return;
WeightInput.Text = $"{res?.Item1:N0}";
ManualWeighingInput.IsChecked = true;
@@ -1099,8 +1119,8 @@ namespace Elwig.Windows {
}
private void ShowFinishNewPartDeliveryCancelButtons() {
FinishButton.IsEnabled = IsCreating && IsValid;
NewDeliveryPartButton.IsEnabled = IsCreating && IsValid;
FinishButton.IsEnabled = false;
NewDeliveryPartButton.IsEnabled = false;
CancelCreatingButton.IsEnabled = true;
FinishButton.Visibility = Visibility.Visible;
NewDeliveryPartButton.Visibility = Visibility.Visible;

View File

@@ -5,6 +5,10 @@ namespace Elwig.Windows {
public MainWindow() {
InitializeComponent();
if (!App.Config.Debug) {
TestWindowButton.Visibility = Visibility.Hidden;
//QueryWindowButton.Visibility = Visibility.Hidden;
}
}
private void Window_Loaded(object sender, RoutedEventArgs evt) { }

View File

@@ -89,7 +89,8 @@ namespace Elwig.Windows {
.ToList();
}
ControlUtils.RenewItemsSource(MemberList, members, i => (i as Member)?.MgNr, MemberList_SelectionChanged, ControlUtils.RenewSourceDefault.IfOnly, !updateSort);
ControlUtils.RenewItemsSource(MemberList, members, i => (i as Member)?.MgNr,
MemberList_SelectionChanged, TextFilter.Count > 0 ? ControlUtils.RenewSourceDefault.IfOnly : ControlUtils.RenewSourceDefault.None, !updateSort);
}
private void RefreshInputs(bool validate = false) {

View File

@@ -2,6 +2,7 @@
[general]
; Only needed, if more than one branch is stored in database
branch = Zweigstelle
;debug = true
[database]
; Relative or absolute path to database file

View File

@@ -72,14 +72,14 @@ namespace Tests {
[Test]
public void Test_SplitAddress() {
Assert.Multiple(() => {
Assert.That(Utils.SplitAddress("Winzerstra<EFBFBD>e 1"), Is.EqualTo(("Winzerstra<EFBFBD>e", "1")));
Assert.That(Utils.SplitAddress("Winzerstraße 1"), Is.EqualTo(("Winzerstraße", "1")));
Assert.That(Utils.SplitAddress("Auf dem Feld 12"), Is.EqualTo(("Auf dem Feld", "12")));
Assert.That(Utils.SplitAddress("Winzerstra<EFBFBD>e 5a"), Is.EqualTo(("Winzerstra<EFBFBD>e", "5a")));
Assert.That(Utils.SplitAddress("Winzerstra<EFBFBD>e 1-3/2"), Is.EqualTo(("Winzerstra<EFBFBD>e", "1-3/2")));
Assert.That(Utils.SplitAddress("Winzerstra<EFBFBD>e 3/4/5"), Is.EqualTo(("Winzerstra<EFBFBD>e", "3/4/5")));
Assert.That(Utils.SplitAddress("Winzerstra<EFBFBD>e 7/2/4/77"), Is.EqualTo(("Winzerstra<EFBFBD>e", "7/2/4/77")));
Assert.That(Utils.SplitAddress("Winzerstra<EFBFBD>e 95b"), Is.EqualTo(("Winzerstra<EFBFBD>e", "95b")));
Assert.That(Utils.SplitAddress("Winzerstra<EFBFBD>e 1, TOP 3"), Is.EqualTo(("Winzerstra<EFBFBD>e", "1, TOP 3")));
Assert.That(Utils.SplitAddress("Winzerstraße 5a"), Is.EqualTo(("Winzerstraße", "5a")));
Assert.That(Utils.SplitAddress("Winzerstraße 1-3/2"), Is.EqualTo(("Winzerstraße", "1-3/2")));
Assert.That(Utils.SplitAddress("Winzerstraße 3/4/5"), Is.EqualTo(("Winzerstraße", "3/4/5")));
Assert.That(Utils.SplitAddress("Winzerstraße 7/2/4/77"), Is.EqualTo(("Winzerstraße", "7/2/4/77")));
Assert.That(Utils.SplitAddress("Winzerstraße 95b"), Is.EqualTo(("Winzerstraße", "95b")));
Assert.That(Utils.SplitAddress("Winzerstraße 1, TOP 3"), Is.EqualTo(("Winzerstraße", "1, TOP 3")));
});
}