Added search to AreaComAdminWindow

This commit is contained in:
2023-11-05 17:42:25 +01:00
parent a1ae44e135
commit 053fbdbf30
3 changed files with 237 additions and 84 deletions

View File

@ -1,5 +1,9 @@
using Elwig.Helpers;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
namespace Elwig.Models { namespace Elwig.Models {
[Table("area_commitment"), PrimaryKey("FbNr")] [Table("area_commitment"), PrimaryKey("FbNr")]
@ -51,5 +55,12 @@ namespace Elwig.Models {
[ForeignKey("KgNr, RdNr")] [ForeignKey("KgNr, RdNr")]
public virtual WbRd? Rd { get; private set; } public virtual WbRd? Rd { get; private set; }
public int SearchScore(IEnumerable<string> keywords) {
var list = new string?[] {
WineCult.Name, Kg.AtKg.Name, Rd.Name, GstNr, Comment,
}.ToList();
return Utils.GetSearchScore(list, keywords);
}
} }
} }

View File

@ -7,7 +7,7 @@
xmlns:ctrl="clr-namespace:Elwig.Controls" xmlns:ctrl="clr-namespace:Elwig.Controls"
mc:Ignorable="d" mc:Ignorable="d"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
Title="Flächenbindungen - Elwig" Height="480" Width="1100" Title="Flächenbindungen - Elwig" Height="500" Width="920" MinWidth="860"
Loaded="Window_Loaded"> Loaded="Window_Loaded">
<Window.Resources> <Window.Resources>
<Style TargetType="Label"> <Style TargetType="Label">
@ -47,62 +47,77 @@
</Window.Resources> </Window.Resources>
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="19"/>
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
<RowDefinition Height="24"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" MinWidth="555"/>
<ColumnDefinition Width="5"/>
<ColumnDefinition Width="*" MinWidth="280"/>
</Grid.ColumnDefinitions>
<Grid Grid.Row="0" Grid.Column="0">
<Grid.RowDefinitions>
<RowDefinition Height="42"/>
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
<RowDefinition Height="42"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="340"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Menu Grid.ColumnSpan="2" BorderThickness="0,0,0,1" BorderBrush="LightGray" Background="White"> <TextBox x:Name="SearchInput" Grid.ColumnSpan="3" Margin="5,7,145,0" IsReadOnly="False"
<MenuItem Header="Flächenbindugen"/> TextChanged="SearchInput_TextChanged"/>
</Menu> <CheckBox x:Name="ActiveAreaCommitmentInput" Content="Nur aktive anzeigen"
Checked="ActiveAreaCommitmentInput_Changed" Unchecked="ActiveAreaCommitmentInput_Changed"
<Grid Grid.RowSpan="2" Grid.Row="1" Grid.Column="0"> HorizontalAlignment="Right" Margin="0,12,10,0" VerticalAlignment="Top" Grid.Column="1" Grid.ColumnSpan="2"/>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<DataGrid x:Name="AreaCommitmentList" AutoGenerateColumns="False" HeadersVisibility="Column" IsReadOnly="True" GridLinesVisibility="None" SelectionMode="Single" <DataGrid x:Name="AreaCommitmentList" AutoGenerateColumns="False" HeadersVisibility="Column" IsReadOnly="True" GridLinesVisibility="None" SelectionMode="Single"
CanUserDeleteRows="False" CanUserResizeRows="False" CanUserAddRows="False" SelectionChanged="AreaCommitmentList_SelectionChanged" Grid.Column="0" Grid.Row="1" CanUserDeleteRows="False" CanUserResizeRows="False" CanUserAddRows="False" SelectionChanged="AreaCommitmentList_SelectionChanged" Grid.Column="0" Grid.Row="1"
Margin="5,10,5,42" FontSize="14" Grid.ColumnSpan="3" Background="#e2e2e2"> Margin="5,0,5,0" FontSize="14" Grid.ColumnSpan="3" Background="#e2e2e2">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Header="FbNr." Binding="{Binding FbNr}" Width="2*"/> <DataGridTextColumn Header="FbNr." Binding="{Binding FbNr}" Width="50"/>
<DataGridTextColumn Header="Katastralgemeinde" Binding="{Binding Kg.AtKg.Name}" Width="6*"/> <DataGridTextColumn Header="Katastralgemeinde" Binding="{Binding Kg.AtKg.Name}" Width="150"/>
<DataGridTextColumn Header="Ried" Binding="{Binding Rd.Name}" Width="4*"/> <DataGridTextColumn Header="Ried" Binding="{Binding Rd.Name}" Width="130"/>
<DataGridTextColumn Header="Parzelle" Binding="{Binding GstNr}" Width="4*"/> <DataGridTextColumn Header="Parzelle" Binding="{Binding GstNr}" Width="120"/>
<DataGridTextColumn Header="Fläche" Binding="{Binding Area, StringFormat='{}{0:N0} m²'}" Width="3*"> <DataGridTextColumn Header="Fläche" Binding="{Binding Area, StringFormat='{}{0:N0} m²'}" Width="80">
<DataGridTextColumn.CellStyle> <DataGridTextColumn.CellStyle>
<Style> <Style>
<Setter Property="TextBlock.TextAlignment" Value="Right"/> <Setter Property="TextBlock.TextAlignment" Value="Right"/>
</Style> </Style>
</DataGridTextColumn.CellStyle> </DataGridTextColumn.CellStyle>
</DataGridTextColumn> </DataGridTextColumn>
<DataGridTextColumn Header="Sorte" Binding="{Binding AreaComType.WineVar.Name}" Width="4*"/> <DataGridTextColumn Header="Sorte" Binding="{Binding AreaComType.WineVar.SortId}" Width="70"/>
<DataGridTextColumn Header="Attribut" Binding="{Binding AreaComType.WineAttr1.Name}" Width="3*"/> <DataGridTextColumn Header="Attribut" Binding="{Binding AreaComType.WineAttr.Name}" Width="120"/>
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
<Button x:Name="NewAreaCommitmentButton" Content="Neu" Click="NewAreaCommitmentButton_Click" <Button x:Name="NewAreaCommitmentButton" Content="Neu" Click="NewAreaCommitmentButton_Click"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0"/> HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0" Grid.Row="2"/>
<Button x:Name="EditAreaCommitmentButton" Content="Bearbeiten" Click="EditAreaCommitmentButton_Click" IsEnabled="False" <Button x:Name="EditAreaCommitmentButton" Content="Bearbeiten" Click="EditAreaCommitmentButton_Click" IsEnabled="False"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,2.5,10" Grid.Column="1"/> HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,2.5,10" Grid.Column="1" Grid.Row="2"/>
<Button x:Name="DeleteAreaCommitmentButton" Content="Löschen" Click="DeleteAreaCommitmentButton_Click" IsEnabled="False" <Button x:Name="DeleteAreaCommitmentButton" Content="Löschen" Click="DeleteAreaCommitmentButton_Click" IsEnabled="False"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,5,10" Grid.Column="2"/> HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,5,10" Grid.Column="2" Grid.Row="2"/>
<Button x:Name="AreaCommitmentSaveButton" Content="Speichern" Click="AreaCommitmentSaveButton_Click" IsEnabled="False" Visibility="Hidden" <Button x:Name="AreaCommitmentSaveButton" Content="Speichern" Click="AreaCommitmentSaveButton_Click" IsEnabled="False" Visibility="Hidden"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0"/> HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0" Grid.Row="2"/>
<Button x:Name="AreaCommitmentResetButton" Content="Zurücksetzen" Click="AreaCommitmentResetButton_Click" IsEnabled="False" Visibility="Hidden" <Button x:Name="AreaCommitmentResetButton" Content="Zurücksetzen" Click="AreaCommitmentResetButton_Click" IsEnabled="False" Visibility="Hidden"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,2.5,10" Grid.Column="1"/> HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,2.5,10" Grid.Column="1" Grid.Row="2"/>
<Button x:Name="AreaCommitmentCancelButton" Content="Abbrechen" Click="AreaCommitmentCancelButton_Click" IsEnabled="False" Visibility="Hidden" IsCancel="True" <Button x:Name="AreaCommitmentCancelButton" Content="Abbrechen" Click="AreaCommitmentCancelButton_Click" IsEnabled="False" Visibility="Hidden" IsCancel="True"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,5,10" Grid.Column="2"/> HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,5,10" Grid.Column="2" Grid.Row="2"/>
</Grid> </Grid>
<GroupBox Header="Vertrag" Grid.Column="2" Grid.Row="1" Grid.RowSpan="1" Margin="5,5,5,5"> <GridSplitter Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
<Grid Grid.Column="2" Grid.Row="0">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<GroupBox Header="Vertrag" Grid.Column="2" Grid.Row="0" Grid.RowSpan="1" Margin="5,5,5,5">
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/> <ColumnDefinition Width="80"/>
@ -112,19 +127,19 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Label Content="FbNr.:" Margin="10,10,0,0" Grid.Column="0"/> <Label Content="FbNr.:" Margin="10,10,0,0" Grid.Column="0"/>
<TextBox x:Name="FbNrInput" Margin="0,10,0,0" Width="48" Grid.Column="1" TextAlignment="Right" HorizontalAlignment="Left" <TextBox x:Name="FbNrInput" Margin="0,10,10,0" Grid.Column="1" TextAlignment="Right"
TextChanged="FbNrInput_TextChanged" LostFocus="FbNrInput_LostFocus"/> TextChanged="FbNrInput_TextChanged" LostFocus="FbNrInput_LostFocus"/>
<Label Content="MgNr.:" Margin="10,40,0,0" Grid.Column="0"/> <Label Content="MgNr.:" Margin="10,40,0,0" Grid.Column="0"/>
<TextBox x:Name="MgNrInput" IsEnabled="False" <TextBox x:Name="MgNrInput" IsEnabled="False"
Margin="0,40,0,0" Width="48" Grid.Column="1" TextAlignment="Right" HorizontalAlignment="Left"/> Margin="0,40,10,0" Grid.Column="1" TextAlignment="Right"/>
<Label Content="Von:" Margin="10,10,0,0" Grid.Column="2"/> <Label Content="Von:" Margin="10,10,0,0" Grid.Column="2"/>
<TextBox x:Name="YearFromInput" Margin="0,10,0,0" Width="41" Grid.Column="3" TextAlignment="Right" HorizontalAlignment="Left" <TextBox x:Name="YearFromInput" Margin="0,10,10,0" Grid.Column="3" TextAlignment="Right"
TextChanged="IntegerInput_TextChanged"/> TextChanged="IntegerInput_TextChanged"/>
<Label Content="Bis:" Margin="10,40,0,0" Grid.Column="2"/> <Label Content="Bis:" Margin="10,40,0,0" Grid.Column="2"/>
<TextBox x:Name="YearToInput" Margin="0,40,0,0" Width="41" Grid.Column="3" TextAlignment="Right" HorizontalAlignment="Left" <TextBox x:Name="YearToInput" Margin="0,40,10,0" Grid.Column="3" TextAlignment="Right"
TextChanged="IntegerInput_TextChanged"/> TextChanged="IntegerInput_TextChanged"/>
<Label Content="Vertragsart:" Margin="10,70,0,0" Grid.Column="0" Grid.ColumnSpan="2"/> <Label Content="Vertragsart:" Margin="10,70,0,0" Grid.Column="0" Grid.ColumnSpan="2"/>
@ -141,7 +156,7 @@
</Grid> </Grid>
</GroupBox> </GroupBox>
<GroupBox Header="Lage" Grid.Column="2" Grid.Row="2" Grid.RowSpan="1" Margin="5,5,5,10"> <GroupBox Header="Lage" Grid.Column="2" Grid.Row="1" Grid.RowSpan="1" Margin="5,5,5,10">
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/> <ColumnDefinition Width="80"/>
@ -157,6 +172,7 @@
<ComboBox x:Name="RdInput" DisplayMemberPath="Name" TextSearch.TextPath="Name" <ComboBox x:Name="RdInput" DisplayMemberPath="Name" TextSearch.TextPath="Name"
HorizontalAlignment="Stretch" Margin="0,40,10,0" Grid.Column="1"/> HorizontalAlignment="Stretch" Margin="0,40,10,0" Grid.Column="1"/>
<Label Content="Parzelle(n):" Margin="10,70,0,0" Grid.Column="0"/> <Label Content="Parzelle(n):" Margin="10,70,0,0" Grid.Column="0"/>
<TextBox x:Name="GstNrInput" Margin="0,70,10,0" Grid.Column="1" HorizontalAlignment="Stretch" <TextBox x:Name="GstNrInput" Margin="0,70,10,0" Grid.Column="1" HorizontalAlignment="Stretch"
TextChanged="GstNrInput_TextChanged" LostFocus="GstNrInput_LostFocus"/> TextChanged="GstNrInput_TextChanged" LostFocus="GstNrInput_LostFocus"/>
@ -167,4 +183,32 @@
</Grid> </Grid>
</GroupBox> </GroupBox>
</Grid> </Grid>
<StatusBar Grid.Row="5" Grid.ColumnSpan="3" BorderThickness="0,1,0,0" BorderBrush="Gray">
<StatusBar.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="160"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</StatusBar.ItemsPanel>
<StatusBarItem>
<TextBlock Name="StatusAreaCommitments" Text="Flächenbindungen: -"/>
</StatusBarItem>
<Separator Grid.Column="1"/>
<StatusBarItem Grid.Column="2">
<TextBlock Name="StatusArea" Text="Fläche: -"/>
</StatusBarItem>
<Separator Grid.Column="3"/>
<StatusBarItem Grid.Column="4">
<TextBlock Name="StatusContracts" Text="Vertragsarten: -"/>
</StatusBarItem>
</StatusBar>
</Grid>
</local:AdministrationWindow> </local:AdministrationWindow>

View File

@ -9,10 +9,12 @@ using System.Threading.Tasks;
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.ChangeTracking;
using Xceed.Wpf.Toolkit.Primitives; using Xceed.Wpf.Toolkit.Primitives;
using System.Runtime.Intrinsics.Arm;
namespace Elwig.Windows { namespace Elwig.Windows {
public partial class AreaComAdminWindow : AdministrationWindow { public partial class AreaComAdminWindow : AdministrationWindow {
private readonly Member Member; private readonly Member Member;
private List<string> TextFilter = new();
public AreaComAdminWindow(int mgnr) { public AreaComAdminWindow(int mgnr) {
InitializeComponent(); InitializeComponent();
@ -21,7 +23,7 @@ namespace Elwig.Windows {
ExemptInputs = new Control[] { ExemptInputs = new Control[] {
MgNrInput, AreaCommitmentList, NewAreaCommitmentButton, MgNrInput, AreaCommitmentList, NewAreaCommitmentButton,
EditAreaCommitmentButton, DeleteAreaCommitmentButton, AreaCommitmentSaveButton, EditAreaCommitmentButton, DeleteAreaCommitmentButton, AreaCommitmentSaveButton,
AreaCommitmentResetButton, AreaCommitmentCancelButton AreaCommitmentResetButton, AreaCommitmentCancelButton, SearchInput, ActiveAreaCommitmentInput
}; };
RequiredInputs = new Control[] { RequiredInputs = new Control[] {
FbNrInput, YearFromInput, KgInput, RdInput, FbNrInput, YearFromInput, KgInput, RdInput,
@ -38,11 +40,84 @@ namespace Elwig.Windows {
await RefreshAreaCommitmentListQuery(); await RefreshAreaCommitmentListQuery();
} }
private async Task RefreshAreaCommitmentListQuery() { private async Task RefreshAreaCommitmentListQuery(bool updateSort = false) {
List<AreaCom> areaComs = await Context.AreaCommitments.Where(a => a.MgNr == Member.MgNr).OrderBy(a => a.FbNr).ToListAsync(); var (_, areaComQuery, filter) = await GetFilters();
var areaComs = await areaComQuery.ToListAsync();
if (filter.Count > 0 && areaComs.Count > 0) {
var dict = areaComs.AsParallel()
.ToDictionary(d => d, d => d.SearchScore(TextFilter))
.OrderByDescending(c => c.Value);
var threshold = dict.Select(a => a.Value).Max() * 3 / 4;
areaComs = dict
.Where(a => a.Value > threshold)
.Select(a => a.Key)
.ToList();
}
ControlUtils.RenewItemsSource(AreaCommitmentList, areaComs, i => (i as AreaCom)?.FbNr, ControlUtils.RenewItemsSource(AreaCommitmentList, areaComs, i => (i as AreaCom)?.FbNr,
AreaCommitmentList_SelectionChanged, ControlUtils.RenewSourceDefault.None); AreaCommitmentList_SelectionChanged, filter.Count > 0 ? ControlUtils.RenewSourceDefault.IfOnly : ControlUtils.RenewSourceDefault.None, !updateSort);
RefreshInputs(); RefreshInputs();
if(filter.Count == 0) {
StatusAreaCommitments.Text = $"Flächenbindungen: {await areaComQuery.CountAsync()}";
StatusArea.Text = $"Fläche: {await areaComQuery.Select(a => a.Area).SumAsync():N0} m²";
} else {
StatusAreaCommitments.Text = $"Flächenbindungen: {areaComs.Count}";
StatusArea.Text = $"Fläche: {areaComs.Select(a => a.Area).Sum():N0} m²";
}
var groups = areaComs.GroupBy(a => a.AreaComType.DisplayName).Select(a => (a.Key, a.Sum(b => b.Area))).OrderByDescending(a => a.Item2).ToList();
StatusContracts.Text = $"Vertragsarten: {groups.Count} (" + string.Join(", ", groups.Select(g => $"{g.Key}: {g.Item2:N0} m²")) + ")";
StatusContracts.ToolTip = $"Vertragsarten: {groups.Count}\n" + string.Join($"\n", groups.Select(g => $"{g.Key}: {g.Item2:N0} m²"));
}
private async Task<(List<string>, IQueryable<AreaCom>, List<string>)> GetFilters() {
List<string> filterNames = new();
IQueryable<AreaCom> areaComQuery = Context.AreaCommitments.Where(a => a.MgNr == Member.MgNr).OrderBy(a => a.FbNr);
if (ActiveAreaCommitmentInput.IsChecked == true) {
areaComQuery = areaComQuery.Where(a => a.YearTo == null);
filterNames.Add("ohne Enddatum");
}
var filterVar = new List<string>();
var filterNotVar = new List<string>();
var filterAttr = new List<string>();
var filterNotAttr = new List<string>();
var filter = TextFilter.ToList();
if (filter.Count > 0) {
var var = await Context.WineVarieties.ToDictionaryAsync(v => v.SortId, v => v);
var attr = await Context.WineAttributes.ToDictionaryAsync(a => a.Name.ToLower().Split(" ")[0], a => a);
for (int i = 0; i < filter.Count; i++) {
var e = filter[i];
if (e.Length == 2 && var.ContainsKey(e.ToUpper())) {
filterVar.Add(e.ToUpper());
filter.RemoveAt(i--);
filterNames.Add(var[e.ToUpper()].Name);
} else if (e.Length == 3 && e[0] == '!' && var.ContainsKey(e[1..].ToUpper())) {
filterNotVar.Add(e[1..].ToUpper());
filter.RemoveAt(i--);
} else if (attr.ContainsKey(e.ToLower())) {
var a = attr[e.ToLower()];
filterAttr.Add(a.AttrId);
filter.RemoveAt(i--);
filterNames.Add($"Attribut {a.Name}");
} else if (e[0] == '!' && attr.ContainsKey(e[1..].ToLower())) {
var a = attr[e[1..].ToLower()];
filterNotAttr.Add(a.AttrId);
filter.RemoveAt(i--);
filterNames.Add($"ohne Attribut {a.Name}");
}
}
if (filterVar.Count > 0) areaComQuery = areaComQuery.Where(a => filterVar.Contains(a.AreaComType.WineVar.SortId));
if (filterNotVar.Count > 0) areaComQuery = areaComQuery.Where(a => !filterNotVar.Contains(a.AreaComType.WineVar.SortId));
if (filterAttr.Count > 0) areaComQuery = areaComQuery.Where(a => a.AreaComType.WineAttr != null && a.AreaComType.WineAttr.AttrId != null && filterAttr.Contains(a.AreaComType.WineAttr.AttrId));
if (filterNotAttr.Count > 0) areaComQuery = areaComQuery.Where(a => a.AreaComType.WineAttr == null || a.AreaComType.WineAttr.AttrId == null || !filterAttr.Contains(a.AreaComType.WineAttr.AttrId));
}
return (filterNames, areaComQuery, filter);
} }
private void RefreshInputs(bool validate = false) { private void RefreshInputs(bool validate = false) {
@ -111,6 +186,7 @@ namespace Elwig.Windows {
ShowAreaCommitmentSaveResetCancelButtons(); ShowAreaCommitmentSaveResetCancelButtons();
UnlockInputs(); UnlockInputs();
InitInputs(); InitInputs();
LockSearchInputs();
} }
private void EditAreaCommitmentButton_Click(object sender, RoutedEventArgs evt) { private void EditAreaCommitmentButton_Click(object sender, RoutedEventArgs evt) {
@ -123,6 +199,7 @@ namespace Elwig.Windows {
HideAreaCommitmentNewEditDeleteButtons(); HideAreaCommitmentNewEditDeleteButtons();
ShowAreaCommitmentSaveResetCancelButtons(); ShowAreaCommitmentSaveResetCancelButtons();
UnlockInputs(); UnlockInputs();
LockSearchInputs();
} }
private async void DeleteAreaCommitmentButton_Click(object sender, RoutedEventArgs evt) { private async void DeleteAreaCommitmentButton_Click(object sender, RoutedEventArgs evt) {
@ -194,6 +271,7 @@ namespace Elwig.Windows {
HideAreaCommitmentSaveResetCancelButtons(); HideAreaCommitmentSaveResetCancelButtons();
ShowAreaCommitmentNewEditDeleteButtons(); ShowAreaCommitmentNewEditDeleteButtons();
LockInputs(); LockInputs();
UnlockSearchInputs();
await RefreshAreaCommitmentList(); await RefreshAreaCommitmentList();
AreaCommitmentList.SelectedItem = a; AreaCommitmentList.SelectedItem = a;
} }
@ -216,6 +294,7 @@ namespace Elwig.Windows {
RefreshInputs(); RefreshInputs();
ClearInputStates(); ClearInputStates();
LockInputs(); LockInputs();
UnlockSearchInputs();
} }
override protected void UpdateButtons() { override protected void UpdateButtons() {
@ -269,6 +348,16 @@ namespace Elwig.Windows {
DeleteAreaCommitmentButton.Visibility = Visibility.Hidden; DeleteAreaCommitmentButton.Visibility = Visibility.Hidden;
} }
private void LockSearchInputs() {
SearchInput.IsEnabled = false;
ActiveAreaCommitmentInput.IsEnabled = false;
}
private void UnlockSearchInputs() {
SearchInput.IsEnabled = true;
ActiveAreaCommitmentInput.IsEnabled = true;
}
private void AreaCommitmentList_SelectionChanged(object sender, SelectionChangedEventArgs evt) { private void AreaCommitmentList_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
RefreshInputs(); RefreshInputs();
} }
@ -277,6 +366,15 @@ namespace Elwig.Windows {
} }
private async void ActiveAreaCommitmentInput_Changed(object sender, RoutedEventArgs evt) {
await RefreshAreaCommitmentListQuery();
}
private async void SearchInput_TextChanged(object sender, RoutedEventArgs evt) {
TextFilter = SearchInput.Text.ToLower().Split(" ").ToList().FindAll(e => e.Length > 0);
await RefreshAreaCommitmentListQuery(true);
}
private async void KgInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) { private async void KgInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
if (KgInput.SelectedItem is AT_Kg curr_kg) { if (KgInput.SelectedItem is AT_Kg curr_kg) {
var rdList = await Context.WbRde.Where(r => r.KgNr == curr_kg.KgNr).OrderBy(r => r.Name).Cast<object>().ToListAsync(); var rdList = await Context.WbRde.Where(r => r.KgNr == curr_kg.KgNr).OrderBy(r => r.Name).Cast<object>().ToListAsync();