[#31] MemberAdminWindow: Rework menu and add more features
This commit is contained in:
@ -45,20 +45,56 @@
|
|||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<Menu Grid.ColumnSpan="3" BorderThickness="0,0,0,1" BorderBrush="LightGray" Background="White">
|
<Menu Grid.ColumnSpan="3" BorderThickness="0,0,0,1" BorderBrush="LightGray" Background="White">
|
||||||
<MenuItem Header="Mitglied">
|
<MenuItem Header="Kontaktieren">
|
||||||
<MenuItem x:Name="Menu_Member_SendEmail" Header="E-Mail senden" IsEnabled="False"
|
<MenuItem x:Name="Menu_Contact_Email" Header="E-Mail senden..." IsEnabled="False"
|
||||||
Click="Menu_Member_SendEmail_Click"/>
|
Click="Menu_Contact_Email_Click"/>
|
||||||
|
<MenuItem x:Name="Menu_Contact_Letterhead" Header="Briefkopf drucken" IsEnabled="False"
|
||||||
|
Click="Menu_Contact_Letterhead_Click"/>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem Header="Drucken">
|
<MenuItem Header="Stammdatenblatt">
|
||||||
<MenuItem x:Name="Menu_Print_Letterhead" Header="Briefkopf drucken"
|
<MenuItem x:Name="Menu_MemberDataSheet_Show" Header="...anzeigen" IsEnabled="False"
|
||||||
Click="Menu_Print_Letterhead_Click"/>
|
Click="Menu_MemberDataSheet_Show_Click" InputGestureText="Strg+P"/>
|
||||||
<MenuItem x:Name="Menu_Show_MemberDataSheet" Header="Stammdatenblatt anzeigen" IsEnabled="False"
|
<MenuItem x:Name="Menu_MemberDataSheet_Print" Header="...drucken" IsEnabled="False"
|
||||||
Click="Menu_Show_MemberDataSheet_Click" InputGestureText="Strg+P"/>
|
Click="Menu_MemberDataSheet_Print_Click" InputGestureText="Strg+Shift+P"/>
|
||||||
<MenuItem x:Name="Menu_Print_MemberDataSheet" Header="Stammdatenblatt drucken" IsEnabled="False"
|
<MenuItem x:Name="Menu_MemberDataSheet_Email" Header="...per E-Mail schicken" IsEnabled="False"
|
||||||
Click="Menu_Print_MemberDataSheet_Click" InputGestureText="Strg+Shift+P"/>
|
Click="Menu_MemberDataSheet_Email_Click"/>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem Header="Werkzeuge">
|
<MenuItem Header="Anlieferungsbestätigung" x:Name="Menu_DeliveryConfirmation">
|
||||||
<MenuItem Header="Alle Mitglieder überprüfen"/>
|
<MenuItem x:Name="Menu_DeliveryConfirmation_Show" Header="...anzeigen" IsEnabled="False"
|
||||||
|
Click="Menu_DeliveryConfirmation_Show_Click"/>
|
||||||
|
<MenuItem x:Name="Menu_DeliveryConfirmation_Print" Header="...drucken" IsEnabled="False"
|
||||||
|
Click="Menu_DeliveryConfirmation_Print_Click"/>
|
||||||
|
<MenuItem x:Name="Menu_DeliveryConfirmation_Email" Header="...per E-Mail schicken" IsEnabled="False"
|
||||||
|
Click="Menu_DeliveryConfirmation_Email_Click"/>
|
||||||
|
</MenuItem>
|
||||||
|
<MenuItem Header="Mitgliederliste" x:Name="Menu_List">
|
||||||
|
<MenuItem x:Name="Menu_List_SaveActive" Header="...mit Aktiven speichern (Excel)"
|
||||||
|
Click="Menu_List_SaveActive_Click" InputGestureText="Strg+L"/>
|
||||||
|
<MenuItem x:Name="Menu_List_ShowActive" Header="...mit Aktiven anzeigen (PDF)"
|
||||||
|
Click="Menu_List_ShowActive_Click" InputGestureText="Strg+O"/>
|
||||||
|
<MenuItem x:Name="Menu_List_PrintActive" Header="...mit Aktiven drucken"
|
||||||
|
Click="Menu_List_PrintActive_Click" InputGestureText="Strg+Shift+O"/>
|
||||||
|
<Separator/>
|
||||||
|
<MenuItem x:Name="Menu_List_SaveFilters" Header="...aus Filtern speichern (Excel)"
|
||||||
|
Click="Menu_List_SaveFilters_Click"/>
|
||||||
|
<MenuItem x:Name="Menu_List_ShowFilters" Header="...aus Filtern anzeigen (PDF)"
|
||||||
|
Click="Menu_List_ShowFilters_Click"/>
|
||||||
|
<MenuItem x:Name="Menu_List_PrintFilters" Header="...aus Filtern drucken"
|
||||||
|
Click="Menu_List_PrintFilters_Click"/>
|
||||||
|
<Separator/>
|
||||||
|
<MenuItem x:Name="Menu_List_SaveAll" Header="...mit allen speichern (Excel)"
|
||||||
|
Click="Menu_List_SaveAll_Click"/>
|
||||||
|
<MenuItem x:Name="Menu_List_ShowAll" Header="...mit allen anzeigen (PDF)"
|
||||||
|
Click="Menu_List_ShowAll_Click"/>
|
||||||
|
<MenuItem x:Name="Menu_List_PrintAll" Header="...mit allen drucken"
|
||||||
|
Click="Menu_List_PrintAll_Click"/>
|
||||||
|
<Separator/>
|
||||||
|
<MenuItem x:Name="Menu_List_OrderMgNr" Header="...nach MgNr. sortieren" IsCheckable="True" IsChecked="True"
|
||||||
|
Click="Menu_List_Order_Click"/>
|
||||||
|
<MenuItem x:Name="Menu_List_OrderName" Header="...nach Nachname, Vorname sortieren" IsCheckable="True"
|
||||||
|
Click="Menu_List_Order_Click"/>
|
||||||
|
<MenuItem x:Name="Menu_List_OrderOrt" Header="...nach Stamm-KG, Name sortieren" IsCheckable="True"
|
||||||
|
Click="Menu_List_Order_Click"/>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
</Menu>
|
</Menu>
|
||||||
|
|
||||||
@ -256,8 +292,8 @@
|
|||||||
<TextBox x:Name="EmailAddress7Input" Margin="0,190,10,0" Grid.Column="1" Grid.ColumnSpan="2"
|
<TextBox x:Name="EmailAddress7Input" Margin="0,190,10,0" Grid.Column="1" Grid.ColumnSpan="2"
|
||||||
TextChanged="EmailAddressInput_TextChanged" LostFocus="EmailAddressInput_LostFocus"/>
|
TextChanged="EmailAddressInput_TextChanged" LostFocus="EmailAddressInput_LostFocus"/>
|
||||||
|
|
||||||
<Label x:Name="EmailAddress8Label" Content="E-Mail-Adresse:" Margin="10,210,0,0" Grid.Column="0"/>
|
<Label x:Name="EmailAddress8Label" Content="E-Mail-Adresse:" Margin="10,220,0,0" Grid.Column="0"/>
|
||||||
<TextBox x:Name="EmailAddress8Input" Margin="0,210,10,0" Grid.Column="1" Grid.ColumnSpan="2"
|
<TextBox x:Name="EmailAddress8Input" Margin="0,220,10,0" Grid.Column="1" Grid.ColumnSpan="2"
|
||||||
TextChanged="EmailAddressInput_TextChanged" LostFocus="EmailAddressInput_LostFocus"/>
|
TextChanged="EmailAddressInput_TextChanged" LostFocus="EmailAddressInput_LostFocus"/>
|
||||||
|
|
||||||
<Label x:Name="EmailAddress9Label" Content="E-Mail-Adresse:" Margin="10,250,0,0" Grid.Column="0"/>
|
<Label x:Name="EmailAddress9Label" Content="E-Mail-Adresse:" Margin="10,250,0,0" Grid.Column="0"/>
|
||||||
|
@ -11,6 +11,7 @@ using System.Threading.Tasks;
|
|||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using Elwig.Documents;
|
using Elwig.Documents;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using Elwig.Models.Dtos;
|
||||||
|
|
||||||
namespace Elwig.Windows {
|
namespace Elwig.Windows {
|
||||||
public partial class MemberAdminWindow : AdministrationWindow {
|
public partial class MemberAdminWindow : AdministrationWindow {
|
||||||
@ -23,16 +24,22 @@ namespace Elwig.Windows {
|
|||||||
private readonly (Label Label, TextBox Address)[] EmailAddressInputs;
|
private readonly (Label Label, TextBox Address)[] EmailAddressInputs;
|
||||||
|
|
||||||
private readonly RoutedCommand CtrlF = new("CtrlF", typeof(MemberAdminWindow), [new KeyGesture(Key.F, ModifierKeys.Control)]);
|
private readonly RoutedCommand CtrlF = new("CtrlF", typeof(MemberAdminWindow), [new KeyGesture(Key.F, ModifierKeys.Control)]);
|
||||||
|
private readonly RoutedCommand CtrlL = new("CtrlL", typeof(MemberAdminWindow), [new KeyGesture(Key.L, ModifierKeys.Control)]);
|
||||||
private readonly RoutedCommand CtrlP = new("CtrlP", typeof(MemberAdminWindow), [new KeyGesture(Key.P, ModifierKeys.Control)]);
|
private readonly RoutedCommand CtrlP = new("CtrlP", typeof(MemberAdminWindow), [new KeyGesture(Key.P, ModifierKeys.Control)]);
|
||||||
|
private readonly RoutedCommand CtrlO = new("CtrlO", typeof(MemberAdminWindow), [new KeyGesture(Key.O, ModifierKeys.Control)]);
|
||||||
private readonly RoutedCommand CtrlShiftP = new("CtrlShiftP", typeof(MemberAdminWindow), [new KeyGesture(Key.P, ModifierKeys.Control | ModifierKeys.Shift)]);
|
private readonly RoutedCommand CtrlShiftP = new("CtrlShiftP", typeof(MemberAdminWindow), [new KeyGesture(Key.P, ModifierKeys.Control | ModifierKeys.Shift)]);
|
||||||
|
private readonly RoutedCommand CtrlShiftO = new("CtrlShiftO", typeof(MemberAdminWindow), [new KeyGesture(Key.O, ModifierKeys.Control | ModifierKeys.Shift)]);
|
||||||
|
|
||||||
protected static ObservableCollection<KeyValuePair<string, string>> PhoneNrTypes { get; set; } = new(Utils.PhoneNrTypes);
|
protected static ObservableCollection<KeyValuePair<string, string>> PhoneNrTypes { get; set; } = new(Utils.PhoneNrTypes);
|
||||||
|
|
||||||
public MemberAdminWindow() {
|
public MemberAdminWindow() {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
CommandBindings.Add(new CommandBinding(CtrlF, FocusSearchInput));
|
CommandBindings.Add(new CommandBinding(CtrlF, FocusSearchInput));
|
||||||
CommandBindings.Add(new CommandBinding(CtrlP, Menu_Show_MemberDataSheet_Click));
|
CommandBindings.Add(new CommandBinding(CtrlL, Menu_List_SaveActive_Click));
|
||||||
CommandBindings.Add(new CommandBinding(CtrlShiftP, Menu_Print_MemberDataSheet_Click));
|
CommandBindings.Add(new CommandBinding(CtrlP, Menu_MemberDataSheet_Show_Click));
|
||||||
|
CommandBindings.Add(new CommandBinding(CtrlO, Menu_List_ShowActive_Click));
|
||||||
|
CommandBindings.Add(new CommandBinding(CtrlShiftP, Menu_MemberDataSheet_Print_Click));
|
||||||
|
CommandBindings.Add(new CommandBinding(CtrlShiftO, Menu_List_PrintActive_Click));
|
||||||
ExemptInputs = [
|
ExemptInputs = [
|
||||||
SearchInput, ActiveMemberInput, MemberList,
|
SearchInput, ActiveMemberInput, MemberList,
|
||||||
];
|
];
|
||||||
@ -67,6 +74,15 @@ namespace Elwig.Windows {
|
|||||||
|
|
||||||
InitializeDelayTimer(SearchInput, SearchInput_TextChanged);
|
InitializeDelayTimer(SearchInput, SearchInput_TextChanged);
|
||||||
SearchInput.TextChanged -= SearchInput_TextChanged;
|
SearchInput.TextChanged -= SearchInput_TextChanged;
|
||||||
|
|
||||||
|
Menu_List_OrderMgNr.IsChecked = false;
|
||||||
|
Menu_List_OrderName.IsChecked = false;
|
||||||
|
Menu_List_OrderOrt.IsChecked = false;
|
||||||
|
switch (App.Client.OrderingMemberList) {
|
||||||
|
case 0: Menu_List_OrderMgNr.IsChecked = true; break;
|
||||||
|
case 1: Menu_List_OrderName.IsChecked = true; break;
|
||||||
|
case 2: Menu_List_OrderOrt.IsChecked = true; break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Window_Loaded(object sender, RoutedEventArgs evt) {
|
private void Window_Loaded(object sender, RoutedEventArgs evt) {
|
||||||
@ -271,6 +287,22 @@ namespace Elwig.Windows {
|
|||||||
await base.OnRenewContext(ctx);
|
await base.OnRenewContext(ctx);
|
||||||
ControlUtils.RenewItemsSource(BranchInput, await ctx.Branches.OrderBy(b => b.Name).ToListAsync());
|
ControlUtils.RenewItemsSource(BranchInput, await ctx.Branches.OrderBy(b => b.Name).ToListAsync());
|
||||||
ControlUtils.RenewItemsSource(DefaultKgInput, await ctx.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).ToListAsync());
|
ControlUtils.RenewItemsSource(DefaultKgInput, await ctx.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).ToListAsync());
|
||||||
|
|
||||||
|
Menu_DeliveryConfirmation.Items.Clear();
|
||||||
|
foreach (var s in await ctx.Seasons.OrderByDescending(s => s.Year).ToListAsync()) {
|
||||||
|
var i = new MenuItem { Header = $"Saison {s.Year}...", IsEnabled = MemberList.SelectedItem != null };
|
||||||
|
var show = new MenuItem { Header = "...anzeigen" };
|
||||||
|
show.Click += Menu_DeliveryConfirmation_Show_Click;
|
||||||
|
i.Items.Add(show);
|
||||||
|
var print = new MenuItem { Header = "...drucken" };
|
||||||
|
print.Click += Menu_DeliveryConfirmation_Print_Click;
|
||||||
|
i.Items.Add(print);
|
||||||
|
Menu_DeliveryConfirmation.Items.Add(i);
|
||||||
|
var email = new MenuItem { Header = "...per E-Mail schicken" };
|
||||||
|
email.Click += Menu_DeliveryConfirmation_Email_Click;
|
||||||
|
i.Items.Add(email);
|
||||||
|
}
|
||||||
|
|
||||||
await RefreshMemberList();
|
await RefreshMemberList();
|
||||||
StatusMembers.Text = $"Mitglieder: {await ctx.Members.CountAsync(m => m.IsActive):N0} ({await ctx.Members.CountAsync():N0})";
|
StatusMembers.Text = $"Mitglieder: {await ctx.Members.CountAsync(m => m.IsActive):N0} ({await ctx.Members.CountAsync():N0})";
|
||||||
StatusBusinessShares.Text = $"Geschäftsanteile: {await ctx.Members.Where(m => m.IsActive).SumAsync(m => m.BusinessShares):N0} ({await ctx.Members.SumAsync(m => m.BusinessShares):N0})";
|
StatusBusinessShares.Text = $"Geschäftsanteile: {await ctx.Members.Where(m => m.IsActive).SumAsync(m => m.BusinessShares):N0} ({await ctx.Members.SumAsync(m => m.BusinessShares):N0})";
|
||||||
@ -443,17 +475,17 @@ namespace Elwig.Windows {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async void SearchInput_TextChanged(object sender, RoutedEventArgs evt) {
|
private async void SearchInput_TextChanged(object sender, RoutedEventArgs evt) {
|
||||||
TextFilter = SearchInput.Text.ToLower().Split(" ").ToList().FindAll(e => e.Length > 0);
|
TextFilter = SearchInput.Text.ToLower().Split(' ').ToList().FindAll(e => e.Length > 0);
|
||||||
await RefreshMemberListQuery(true);
|
await RefreshMemberListQuery(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Menu_Member_SendEmail_Click(object sender, RoutedEventArgs evt) {
|
private void Menu_Contact_Email_Click(object sender, RoutedEventArgs evt) {
|
||||||
if (MemberList.SelectedItem is not Member m)
|
if (MemberList.SelectedItem is not Member m)
|
||||||
return;
|
return;
|
||||||
Utils.MailTo(m.EmailAddresses.Select(a => a.Address));
|
Utils.MailTo(m.EmailAddresses.Select(a => a.Address));
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void Menu_Print_Letterhead_Click(object sender, RoutedEventArgs evt) {
|
private async void Menu_Contact_Letterhead_Click(object sender, RoutedEventArgs evt) {
|
||||||
if (MemberList.SelectedItem is not Member m)
|
if (MemberList.SelectedItem is not Member m)
|
||||||
return;
|
return;
|
||||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||||
@ -471,18 +503,39 @@ namespace Elwig.Windows {
|
|||||||
Mouse.OverrideCursor = null;
|
Mouse.OverrideCursor = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void Menu_Print_MemberDataSheet_Click(object sender, RoutedEventArgs evt) {
|
private async void Menu_MemberDataSheet_Show_Click(object sender, RoutedEventArgs evt) {
|
||||||
if (MemberList.SelectedItem is not Member m)
|
if (MemberList.SelectedItem is not Member m)
|
||||||
return;
|
return;
|
||||||
|
await GenerateMemberDataSheet(m, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void Menu_MemberDataSheet_Print_Click(object sender, RoutedEventArgs evt) {
|
||||||
|
if (MemberList.SelectedItem is not Member m)
|
||||||
|
return;
|
||||||
|
await GenerateMemberDataSheet(m, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void Menu_MemberDataSheet_Email_Click(object sender, RoutedEventArgs evt) {
|
||||||
|
if (MemberList.SelectedItem is not Member m)
|
||||||
|
return;
|
||||||
|
await GenerateMemberDataSheet(m, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task GenerateMemberDataSheet(Member m, int mode) {
|
||||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||||
try {
|
try {
|
||||||
using var ctx = new AppDbContext();
|
using var ctx = new AppDbContext();
|
||||||
using var doc = new MemberDataSheet(m, ctx);
|
using var doc = new MemberDataSheet(m, ctx);
|
||||||
await doc.Generate();
|
await doc.Generate();
|
||||||
if (App.Config.Debug) {
|
if (mode == 1 && !App.Config.Debug) {
|
||||||
doc.Show();
|
|
||||||
} else {
|
|
||||||
await doc.Print();
|
await doc.Print();
|
||||||
|
} else if (mode == 2) {
|
||||||
|
var success = await Utils.SendEmail(m, MemberDataSheet.Name, "Im Anhang finden Sie das aktuelle Stammdatenblatt", [doc]);
|
||||||
|
if (success)
|
||||||
|
MessageBox.Show("Die E-Mail wurde erfolgreich verschickt!", "E-Mail verschickt",
|
||||||
|
MessageBoxButton.OK, MessageBoxImage.Information);
|
||||||
|
} else {
|
||||||
|
doc.Show();
|
||||||
}
|
}
|
||||||
} catch (Exception exc) {
|
} catch (Exception exc) {
|
||||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
@ -490,21 +543,118 @@ namespace Elwig.Windows {
|
|||||||
Mouse.OverrideCursor = null;
|
Mouse.OverrideCursor = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void Menu_Show_MemberDataSheet_Click(object sender, RoutedEventArgs evt) {
|
private async void Menu_DeliveryConfirmation_Show_Click(object sender, RoutedEventArgs evt) {
|
||||||
if (MemberList.SelectedItem is not Member m)
|
var season = ((sender as MenuItem)?.Parent as MenuItem)?.Header?.ToString()?.Split(' ')[^1].Split('.')[0];
|
||||||
|
if (MemberList.SelectedItem is not Member m || season == null || !int.TryParse(season, out var s))
|
||||||
return;
|
return;
|
||||||
|
await GenerateDeliveryConfirmation(m, s, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void Menu_DeliveryConfirmation_Print_Click(object sender, RoutedEventArgs evt) {
|
||||||
|
var season = ((sender as MenuItem)?.Parent as MenuItem)?.Header?.ToString()?.Split(' ')[^1].Split('.')[0];
|
||||||
|
if (MemberList.SelectedItem is not Member m || season == null || !int.TryParse(season, out var s))
|
||||||
|
return;
|
||||||
|
await GenerateDeliveryConfirmation(m, s, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void Menu_DeliveryConfirmation_Email_Click(object sender, RoutedEventArgs evt) {
|
||||||
|
var season = ((sender as MenuItem)?.Parent as MenuItem)?.Header?.ToString()?.Split(' ')[^1].Split('.')[0];
|
||||||
|
if (MemberList.SelectedItem is not Member m || season == null || !int.TryParse(season, out var s))
|
||||||
|
return;
|
||||||
|
await GenerateDeliveryConfirmation(m, s, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task GenerateDeliveryConfirmation(Member m, int year, int mode) {
|
||||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||||
try {
|
try {
|
||||||
using var ctx = new AppDbContext();
|
using var ctx = new AppDbContext();
|
||||||
using var doc = new MemberDataSheet(m, ctx);
|
var data = await DeliveryConfirmationDeliveryData.ForMember(ctx.DeliveryParts, year, m);
|
||||||
|
using var doc = new DeliveryConfirmation(ctx, year, m, data);
|
||||||
await doc.Generate();
|
await doc.Generate();
|
||||||
doc.Show();
|
if (mode == 1 && !App.Config.Debug) {
|
||||||
|
await doc.Print();
|
||||||
|
} else if (mode == 2) {
|
||||||
|
var success = await Utils.SendEmail(m, $"{DeliveryConfirmation.Name} {year}", $"Im Anhang finden Sie die Anlieferungsbestätigung {year}", [doc]);
|
||||||
|
if (success)
|
||||||
|
MessageBox.Show("Die E-Mail wurde erfolgreich verschickt!", "E-Mail verschickt",
|
||||||
|
MessageBoxButton.OK, MessageBoxImage.Information);
|
||||||
|
} else {
|
||||||
|
doc.Show();
|
||||||
|
}
|
||||||
} catch (Exception exc) {
|
} catch (Exception exc) {
|
||||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
}
|
}
|
||||||
Mouse.OverrideCursor = null;
|
Mouse.OverrideCursor = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async void Menu_List_SaveActive_Click(object sender, RoutedEventArgs evt) { await GenerateMemberList(0, 0); }
|
||||||
|
private async void Menu_List_ShowActive_Click(object sender, RoutedEventArgs evt) { await GenerateMemberList(0, 1); }
|
||||||
|
private async void Menu_List_PrintActive_Click(object sender, RoutedEventArgs evt) { await GenerateMemberList(0, 2); }
|
||||||
|
private async void Menu_List_SaveFilters_Click(object sender, RoutedEventArgs evt) { await GenerateMemberList(1, 0); }
|
||||||
|
private async void Menu_List_ShowFilters_Click(object sender, RoutedEventArgs evt) { await GenerateMemberList(1, 1); }
|
||||||
|
private async void Menu_List_PrintFilters_Click(object sender, RoutedEventArgs evt) { await GenerateMemberList(1, 2); }
|
||||||
|
private async void Menu_List_SaveAll_Click(object sender, RoutedEventArgs evt) { await GenerateMemberList(2, 0); }
|
||||||
|
private async void Menu_List_ShowAll_Click(object sender, RoutedEventArgs evt) { await GenerateMemberList(2, 1); }
|
||||||
|
private async void Menu_List_PrintAll_Click(object sender, RoutedEventArgs evt) { await GenerateMemberList(2, 2); }
|
||||||
|
|
||||||
|
private async void Menu_List_Order_Click(object sender, RoutedEventArgs evt) {
|
||||||
|
Menu_List.IsSubmenuOpen = true;
|
||||||
|
if (sender == Menu_List_OrderMgNr) {
|
||||||
|
App.Client.OrderingMemberList = 0;
|
||||||
|
Menu_List_OrderMgNr.IsChecked = true;
|
||||||
|
Menu_List_OrderName.IsChecked = false;
|
||||||
|
Menu_List_OrderOrt.IsChecked = false;
|
||||||
|
} else if (sender == Menu_List_OrderName) {
|
||||||
|
App.Client.OrderingMemberList = 1;
|
||||||
|
Menu_List_OrderMgNr.IsChecked = false;
|
||||||
|
Menu_List_OrderName.IsChecked = true;
|
||||||
|
Menu_List_OrderOrt.IsChecked = false;
|
||||||
|
} else if (sender == Menu_List_OrderOrt) {
|
||||||
|
App.Client.OrderingMemberList = 2;
|
||||||
|
Menu_List_OrderMgNr.IsChecked = false;
|
||||||
|
Menu_List_OrderName.IsChecked = false;
|
||||||
|
Menu_List_OrderOrt.IsChecked = true;
|
||||||
|
}
|
||||||
|
await App.Client.UpdateValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task GenerateMemberList(int modeWho, int modeWhat) {
|
||||||
|
using var ctx = new AppDbContext();
|
||||||
|
IQueryable<Member> list;
|
||||||
|
if (modeWho == 0) {
|
||||||
|
list = ctx.Members.Where(m => m.IsActive);
|
||||||
|
} else if (modeWho == 1) {
|
||||||
|
list = ctx.Members; // TODO
|
||||||
|
} else {
|
||||||
|
list = ctx.Members;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Menu_List_OrderMgNr.IsChecked) {
|
||||||
|
list = list.OrderBy(m => m.MgNr);
|
||||||
|
} else if (Menu_List_OrderName.IsChecked) {
|
||||||
|
list = list
|
||||||
|
.OrderBy(m => m.FamilyName)
|
||||||
|
.ThenBy(m => m.GivenName)
|
||||||
|
.ThenBy(m => m.MgNr);
|
||||||
|
} else if (Menu_List_OrderOrt.IsChecked) {
|
||||||
|
list = list
|
||||||
|
.OrderBy(m => m.DefaultWbKg!.AtKg.Name)
|
||||||
|
.ThenBy(m => m.FamilyName)
|
||||||
|
.ThenBy(m => m.GivenName)
|
||||||
|
.ThenBy(m => m.MgNr);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modeWhat == 0) {
|
||||||
|
|
||||||
|
} else if (modeWhat == 1) {
|
||||||
|
|
||||||
|
} else if (modeWhat == 2) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
private void FocusSearchInput(object sender, RoutedEventArgs evt) {
|
private void FocusSearchInput(object sender, RoutedEventArgs evt) {
|
||||||
if (!IsEditing && !IsCreating) {
|
if (!IsEditing && !IsCreating) {
|
||||||
SearchInput.Focus();
|
SearchInput.Focus();
|
||||||
@ -807,19 +957,28 @@ namespace Elwig.Windows {
|
|||||||
StatusAreaCommitment.Text = $"Gebundene Fläche: {m.ActiveAreaCommitments(ctx).Select(c => c.Area).Sum():N0} m²";
|
StatusAreaCommitment.Text = $"Gebundene Fläche: {m.ActiveAreaCommitments(ctx).Select(c => c.Area).Sum():N0} m²";
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu_Member_SendEmail.IsEnabled = m.EmailAddresses.Count > 0;
|
Menu_Contact_Email.IsEnabled = m.EmailAddresses.Count > 0;
|
||||||
Menu_Print_Letterhead.IsEnabled = true;
|
Menu_Contact_Letterhead.IsEnabled = true;
|
||||||
Menu_Show_MemberDataSheet.IsEnabled = true;
|
Menu_MemberDataSheet_Print.IsEnabled = true;
|
||||||
Menu_Print_MemberDataSheet.IsEnabled = true;
|
Menu_MemberDataSheet_Email.IsEnabled = App.Config.Smtp != null && m.EmailAddresses.Count > 0;
|
||||||
|
Menu_MemberDataSheet_Show.IsEnabled = true;
|
||||||
|
foreach (var i in Menu_DeliveryConfirmation.Items.Cast<MenuItem>()) {
|
||||||
|
i.IsEnabled = true;
|
||||||
|
(i.Items[2] as MenuItem)!.IsEnabled = App.Config.Smtp != null && m.EmailAddresses.Count > 0;
|
||||||
|
}
|
||||||
|
|
||||||
FinishInputFilling();
|
FinishInputFilling();
|
||||||
}
|
}
|
||||||
|
|
||||||
new protected void ClearInputs(bool validate = false) {
|
new protected void ClearInputs(bool validate = false) {
|
||||||
Menu_Member_SendEmail.IsEnabled = false;
|
Menu_Contact_Email.IsEnabled = false;
|
||||||
Menu_Print_Letterhead.IsEnabled = false;
|
Menu_Contact_Letterhead.IsEnabled = false;
|
||||||
Menu_Show_MemberDataSheet.IsEnabled = false;
|
Menu_MemberDataSheet_Print.IsEnabled = false;
|
||||||
Menu_Print_MemberDataSheet.IsEnabled = false;
|
Menu_MemberDataSheet_Email.IsEnabled = false;
|
||||||
|
Menu_MemberDataSheet_Show.IsEnabled = false;
|
||||||
|
foreach (var i in Menu_DeliveryConfirmation.Items.Cast<MenuItem>()) {
|
||||||
|
i.IsEnabled = false;
|
||||||
|
}
|
||||||
MemberReferenceButton.IsEnabled = false;
|
MemberReferenceButton.IsEnabled = false;
|
||||||
StatusDeliveriesLastSeason.Text = $"Lieferungen ({Utils.CurrentLastSeason - 1}): -";
|
StatusDeliveriesLastSeason.Text = $"Lieferungen ({Utils.CurrentLastSeason - 1}): -";
|
||||||
StatusDeliveriesThisSeason.Text = $"Lieferungen ({Utils.CurrentLastSeason}): -";
|
StatusDeliveriesThisSeason.Text = $"Lieferungen ({Utils.CurrentLastSeason}): -";
|
||||||
|
Reference in New Issue
Block a user