Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
3f769eb7d7 | |||
8bc053053c | |||
a0dcaf7b4f | |||
844fc5217a |
17
CHANGELOG.md
17
CHANGELOG.md
@@ -2,6 +2,23 @@
|
||||
Changelog
|
||||
=========
|
||||
|
||||
[v1.0.1.0][v1.0.1.0] (2025-09-18) {#v1.0.1.0}
|
||||
---------------------------------------------
|
||||
|
||||
### Neue Funktionen {#v1.0.1.0-features}
|
||||
|
||||
* Neue Weinsorten gemäß Kürzelliste der Bundeskellereiinspektion hinzugefügt. (a0dcaf7b4f)
|
||||
|
||||
### Sonstiges {#v1.0.1.0-misc}
|
||||
|
||||
* HTTP-Anfragen haben jetzt das Feld `User-Agent` gesetzt. (844fc5217a)
|
||||
* Auto-Update-Funktion wird auch beim Erlangen von Netzwerkverbindung ausgeführt. (8bc053053c)
|
||||
|
||||
[v1.0.1.0]: https://git.necronda.net/winzer/elwig/releases/tag/v1.0.1.0
|
||||
|
||||
|
||||
|
||||
|
||||
[v1.0.0.6][v1.0.0.6] (2025-09-17) {#v1.0.0.6}
|
||||
---------------------------------------------
|
||||
|
||||
|
@@ -35,7 +35,7 @@
|
||||
</DataTemplate>
|
||||
<DataTemplate x:Key="WineVarietyTemplateExpanded">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="{Binding SortId}" Foreground="{Binding Color}" MinWidth="36" Margin="0,0,10,0"/>
|
||||
<TextBlock Text="{Binding SortIdFormat}" Foreground="{Binding Color}" MinWidth="36" Margin="0,0,10,0"/>
|
||||
<TextBlock Text="{Binding Name}" Foreground="{Binding Color}"/>
|
||||
<TextBlock Text="{Binding CommentFormat}" FontSize="10" VerticalAlignment="Bottom" Margin="0,0,0,2"/>
|
||||
</StackPanel>
|
||||
|
@@ -11,6 +11,7 @@ using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
@@ -131,6 +132,7 @@ namespace Elwig {
|
||||
await CheckForUpdates();
|
||||
});
|
||||
}
|
||||
NetworkChange.NetworkAvailabilityChanged += OnNetworkAvailabilityChanged;
|
||||
_autoUpdateTimer.Tick += new EventHandler(OnAutoUpdateTimer);
|
||||
_autoUpdateTimer.Start();
|
||||
}
|
||||
@@ -228,6 +230,16 @@ namespace Elwig {
|
||||
}
|
||||
}
|
||||
|
||||
private void OnNetworkAvailabilityChanged(object? sender, NetworkAvailabilityEventArgs evt) {
|
||||
if (!evt.IsAvailable) return;
|
||||
if (Utils.HasInternetConnectivity()) {
|
||||
Utils.RunBackground("Auto Updater", async () => {
|
||||
await Task.Delay(500);
|
||||
await CheckForUpdates();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task CheckForUpdates(bool showAlert = false) {
|
||||
if (Config.UpdateUrl == null) return;
|
||||
var latest = await Utils.GetLatestInstallerUrl(Config.UpdateUrl);
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<UseWPF>true</UseWPF>
|
||||
<PreserveCompilationContext>true</PreserveCompilationContext>
|
||||
<ApplicationIcon>Resources\Images\Elwig.ico</ApplicationIcon>
|
||||
<Version>1.0.0.6</Version>
|
||||
<Version>1.0.1.0</Version>
|
||||
<SatelliteResourceLanguages>de-AT</SatelliteResourceLanguages>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||
|
@@ -248,9 +248,10 @@ namespace Elwig.Helpers {
|
||||
return c + 1;
|
||||
}
|
||||
|
||||
public async Task<WineQualLevel> GetWineQualityLevel(double kmw) {
|
||||
public async Task<WineQualLevel> 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();
|
||||
}
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -23,7 +23,6 @@ using System.Reflection;
|
||||
using System.Collections;
|
||||
using Elwig.Documents;
|
||||
using MimeKit;
|
||||
using System.Windows.Input;
|
||||
using LinqKit;
|
||||
using System.Linq.Expressions;
|
||||
using Elwig.Models;
|
||||
@@ -430,6 +429,8 @@ namespace Elwig.Helpers {
|
||||
var client = new HttpClient() {
|
||||
Timeout = TimeSpan.FromSeconds(5),
|
||||
};
|
||||
client.DefaultRequestHeaders.UserAgent.Clear();
|
||||
client.DefaultRequestHeaders.UserAgent.ParseAdd($"Elwig/{App.Version} ({App.Client.NameToken}, {App.BranchName}, {Environment.MachineName}, {Environment.OSVersion})");
|
||||
client.DefaultRequestHeaders.Accept.Clear();
|
||||
if (accept != null)
|
||||
client.DefaultRequestHeaders.Accept.Add(new(accept));
|
||||
|
@@ -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() {
|
||||
|
17
Elwig/Resources/Sql/32-33.sql
Normal file
17
Elwig/Resources/Sql/32-33.sql
Normal file
@@ -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);
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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"
|
||||
|
Reference in New Issue
Block a user