Added search to AreaComAdminWindow
This commit is contained in:
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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,124 +47,168 @@
|
|||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="19"/>
|
|
||||||
<RowDefinition Height="*"/>
|
|
||||||
<RowDefinition Height="*"/>
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="24"/>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="2*" MinWidth="555"/>
|
||||||
<ColumnDefinition Width="340"/>
|
<ColumnDefinition Width="5"/>
|
||||||
|
<ColumnDefinition Width="*" MinWidth="280"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<Menu Grid.ColumnSpan="2" BorderThickness="0,0,0,1" BorderBrush="LightGray" Background="White">
|
<Grid Grid.Row="0" Grid.Column="0">
|
||||||
<MenuItem Header="Flächenbindugen"/>
|
<Grid.RowDefinitions>
|
||||||
</Menu>
|
<RowDefinition Height="42"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
<Grid Grid.RowSpan="2" Grid.Row="1" Grid.Column="0">
|
<RowDefinition Height="42"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="1*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="1*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="1*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<TextBox x:Name="SearchInput" Grid.ColumnSpan="3" Margin="5,7,145,0" IsReadOnly="False"
|
||||||
|
TextChanged="SearchInput_TextChanged"/>
|
||||||
|
<CheckBox x:Name="ActiveAreaCommitmentInput" Content="Nur aktive anzeigen"
|
||||||
|
Checked="ActiveAreaCommitmentInput_Changed" Unchecked="ActiveAreaCommitmentInput_Changed"
|
||||||
|
HorizontalAlignment="Right" Margin="0,12,10,0" VerticalAlignment="Top" Grid.Column="1" Grid.ColumnSpan="2"/>
|
||||||
|
|
||||||
<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.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="80"/>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
<ColumnDefinition Width="50"/>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
|
|
||||||
<Label Content="FbNr.:" Margin="10,10,0,0" Grid.Column="0"/>
|
<Grid Grid.Column="2" Grid.Row="0">
|
||||||
<TextBox x:Name="FbNrInput" Margin="0,10,0,0" Width="48" Grid.Column="1" TextAlignment="Right" HorizontalAlignment="Left"
|
<Grid.RowDefinitions>
|
||||||
TextChanged="FbNrInput_TextChanged" LostFocus="FbNrInput_LostFocus"/>
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<Label Content="MgNr.:" Margin="10,40,0,0" Grid.Column="0"/>
|
<GroupBox Header="Vertrag" Grid.Column="2" Grid.Row="0" Grid.RowSpan="1" Margin="5,5,5,5">
|
||||||
<TextBox x:Name="MgNrInput" IsEnabled="False"
|
<Grid>
|
||||||
Margin="0,40,0,0" Width="48" Grid.Column="1" TextAlignment="Right" HorizontalAlignment="Left"/>
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="80"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="50"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<Label Content="Von:" Margin="10,10,0,0" Grid.Column="2"/>
|
<Label Content="FbNr.:" Margin="10,10,0,0" Grid.Column="0"/>
|
||||||
<TextBox x:Name="YearFromInput" Margin="0,10,0,0" Width="41" Grid.Column="3" TextAlignment="Right" HorizontalAlignment="Left"
|
<TextBox x:Name="FbNrInput" Margin="0,10,10,0" Grid.Column="1" TextAlignment="Right"
|
||||||
TextChanged="IntegerInput_TextChanged"/>
|
TextChanged="FbNrInput_TextChanged" LostFocus="FbNrInput_LostFocus"/>
|
||||||
|
|
||||||
<Label Content="Bis:" Margin="10,40,0,0" Grid.Column="2"/>
|
<Label Content="MgNr.:" Margin="10,40,0,0" Grid.Column="0"/>
|
||||||
<TextBox x:Name="YearToInput" Margin="0,40,0,0" Width="41" Grid.Column="3" TextAlignment="Right" HorizontalAlignment="Left"
|
<TextBox x:Name="MgNrInput" IsEnabled="False"
|
||||||
TextChanged="IntegerInput_TextChanged"/>
|
Margin="0,40,10,0" Grid.Column="1" TextAlignment="Right"/>
|
||||||
|
|
||||||
<Label Content="Vertragsart:" Margin="10,70,0,0" Grid.Column="0" Grid.ColumnSpan="2"/>
|
<Label Content="Von:" Margin="10,10,0,0" Grid.Column="2"/>
|
||||||
<ComboBox x:Name="AreaComTypeInput" DisplayMemberPath="DisplayName" TextSearch.TextPath="DisplayName"
|
<TextBox x:Name="YearFromInput" Margin="0,10,10,0" Grid.Column="3" TextAlignment="Right"
|
||||||
HorizontalAlignment="Stretch" Margin="0,70,10,0" Grid.Column="1" Grid.ColumnSpan="3"/>
|
TextChanged="IntegerInput_TextChanged"/>
|
||||||
|
|
||||||
<Label Content="Bewirt.-Art:" Margin="10,100,0,0" Grid.Column="0" Grid.ColumnSpan="2"/>
|
<Label Content="Bis:" Margin="10,40,0,0" Grid.Column="2"/>
|
||||||
<ComboBox x:Name="WineCultivationInput" DisplayMemberPath="Name" TextSearch.TextPath="Name"
|
<TextBox x:Name="YearToInput" Margin="0,40,10,0" Grid.Column="3" TextAlignment="Right"
|
||||||
HorizontalAlignment="Stretch" Margin="0,100,10,0" Grid.Column="1" Grid.ColumnSpan="3"/>
|
TextChanged="IntegerInput_TextChanged"/>
|
||||||
|
|
||||||
<Label Content="Anmerkung:" Margin="10,130,0,0" Grid.Column="0" Grid.ColumnSpan="2"/>
|
<Label Content="Vertragsart:" Margin="10,70,0,0" Grid.Column="0" Grid.ColumnSpan="2"/>
|
||||||
<TextBox x:Name="CommentInput" TextChanged="TextBox_TextChanged"
|
<ComboBox x:Name="AreaComTypeInput" DisplayMemberPath="DisplayName" TextSearch.TextPath="DisplayName"
|
||||||
HorizontalAlignment="Stretch" Margin="0,130,10,0" Grid.Column="1" Grid.ColumnSpan="3"/>
|
HorizontalAlignment="Stretch" Margin="0,70,10,0" Grid.Column="1" Grid.ColumnSpan="3"/>
|
||||||
</Grid>
|
|
||||||
</GroupBox>
|
|
||||||
|
|
||||||
<GroupBox Header="Lage" Grid.Column="2" Grid.Row="2" Grid.RowSpan="1" Margin="5,5,5,10">
|
<Label Content="Bewirt.-Art:" Margin="10,100,0,0" Grid.Column="0" Grid.ColumnSpan="2"/>
|
||||||
<Grid>
|
<ComboBox x:Name="WineCultivationInput" DisplayMemberPath="Name" TextSearch.TextPath="Name"
|
||||||
<Grid.ColumnDefinitions>
|
HorizontalAlignment="Stretch" Margin="0,100,10,0" Grid.Column="1" Grid.ColumnSpan="3"/>
|
||||||
<ColumnDefinition Width="80"/>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
|
|
||||||
<Label Content="KG:" Margin="10,10,0,0" Grid.Column="0"/>
|
<Label Content="Anmerkung:" Margin="10,130,0,0" Grid.Column="0" Grid.ColumnSpan="2"/>
|
||||||
<ComboBox x:Name="KgInput" ItemTemplate="{StaticResource KgNrTemplate}" TextSearch.TextPath="Name"
|
<TextBox x:Name="CommentInput" TextChanged="TextBox_TextChanged"
|
||||||
HorizontalAlignment="Stretch" Margin="0,10,10,0" Grid.Column="1"
|
HorizontalAlignment="Stretch" Margin="0,130,10,0" Grid.Column="1" Grid.ColumnSpan="3"/>
|
||||||
SelectionChanged="KgInput_SelectionChanged"/>
|
</Grid>
|
||||||
|
</GroupBox>
|
||||||
|
|
||||||
<Label Content="Ried:" Margin="10,40,0,0" Grid.Column="0"/>
|
<GroupBox Header="Lage" Grid.Column="2" Grid.Row="1" Grid.RowSpan="1" Margin="5,5,5,10">
|
||||||
<ComboBox x:Name="RdInput" DisplayMemberPath="Name" TextSearch.TextPath="Name"
|
<Grid>
|
||||||
HorizontalAlignment="Stretch" Margin="0,40,10,0" Grid.Column="1"/>
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="80"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<Label Content="Parzelle(n):" Margin="10,70,0,0" Grid.Column="0"/>
|
<Label Content="KG:" Margin="10,10,0,0" Grid.Column="0"/>
|
||||||
<TextBox x:Name="GstNrInput" Margin="0,70,10,0" Grid.Column="1" HorizontalAlignment="Stretch"
|
<ComboBox x:Name="KgInput" ItemTemplate="{StaticResource KgNrTemplate}" TextSearch.TextPath="Name"
|
||||||
TextChanged="GstNrInput_TextChanged" LostFocus="GstNrInput_LostFocus"/>
|
HorizontalAlignment="Stretch" Margin="0,10,10,0" Grid.Column="1"
|
||||||
|
SelectionChanged="KgInput_SelectionChanged"/>
|
||||||
|
|
||||||
<Label Content="Fläche:" Margin="10,100,0,0" Grid.Column="0"/>
|
<Label Content="Ried:" Margin="10,40,0,0" Grid.Column="0"/>
|
||||||
<ctrl:UnitTextBox x:Name="AreaInput" Unit="m²" TextChanged="IntegerInput_TextChanged"
|
<ComboBox x:Name="RdInput" DisplayMemberPath="Name" TextSearch.TextPath="Name"
|
||||||
Grid.Column="1" Width="70" Margin="0,100,10,10" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
HorizontalAlignment="Stretch" Margin="0,40,10,0" Grid.Column="1"/>
|
||||||
</Grid>
|
|
||||||
</GroupBox>
|
|
||||||
|
<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"
|
||||||
|
TextChanged="GstNrInput_TextChanged" LostFocus="GstNrInput_LostFocus"/>
|
||||||
|
|
||||||
|
<Label Content="Fläche:" Margin="10,100,0,0" Grid.Column="0"/>
|
||||||
|
<ctrl:UnitTextBox x:Name="AreaInput" Unit="m²" TextChanged="IntegerInput_TextChanged"
|
||||||
|
Grid.Column="1" Width="70" Margin="0,100,10,10" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
||||||
|
</Grid>
|
||||||
|
</GroupBox>
|
||||||
|
</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>
|
</Grid>
|
||||||
</local:AdministrationWindow>
|
</local:AdministrationWindow>
|
||||||
|
@ -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();
|
||||||
|
Reference in New Issue
Block a user