Compare commits
	
		
			7 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6c1e50ad02 | |||
| 46551fb142 | |||
| b404839ad1 | |||
| ab926421b0 | |||
| bbd8b67afd | |||
| 70f8276808 | |||
| 4483eb6a69 | 
							
								
								
									
										106
									
								
								Elwig/Controls/CheckComboBox.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								Elwig/Controls/CheckComboBox.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| using System.Linq; | ||||
| using System.Windows; | ||||
| using System.Windows.Controls; | ||||
|  | ||||
| namespace Elwig.Controls { | ||||
|     public class CheckComboBox : ListBox { | ||||
|  | ||||
|         public static readonly DependencyProperty DelimiterProperty = DependencyProperty.Register("Delimiter", typeof(string), typeof(CheckComboBox), new FrameworkPropertyMetadata(", ")); | ||||
|         public string Delimiter { | ||||
|             get => (string)GetValue(DelimiterProperty); | ||||
|             set => SetValue(DelimiterProperty, value); | ||||
|         } | ||||
|  | ||||
|         public static readonly DependencyProperty AllItemsSelectedContentProperty = DependencyProperty.Register("AllItemsSelectedContent", typeof(string), typeof(CheckComboBox), new FrameworkPropertyMetadata("All")); | ||||
|         public string AllItemsSelectedContent { | ||||
|             get => (string)GetValue(AllItemsSelectedContentProperty); | ||||
|             set => SetValue(AllItemsSelectedContentProperty, value); | ||||
|         } | ||||
|  | ||||
|         public static readonly DependencyProperty IsSelectAllActiveProperty = DependencyProperty.Register("IsSelectAllActive", typeof(bool), typeof(CheckComboBox), new FrameworkPropertyMetadata(false)); | ||||
|         public bool IsSelectAllActive { | ||||
|             get => (bool)GetValue(IsSelectAllActiveProperty); | ||||
|             set => SetValue(IsSelectAllActiveProperty, value); | ||||
|         } | ||||
|  | ||||
|         public static readonly DependencyProperty SelectAllContentProperty = DependencyProperty.Register("SelectAllContent", typeof(string), typeof(CheckComboBox), new FrameworkPropertyMetadata("All")); | ||||
|         public string SelectAllContent { | ||||
|             get => (string)GetValue(SelectAllContentProperty); | ||||
|             set => SetValue(SelectAllContentProperty, value); | ||||
|         } | ||||
|  | ||||
|         public static readonly DependencyProperty AllItemsSelectedProperty = DependencyProperty.Register("AllItemsSelected", typeof(bool?), typeof(CheckComboBox), new FrameworkPropertyMetadata(false)); | ||||
|         public bool? AllItemsSelected { | ||||
|             get => (bool?)GetValue(AllItemsSelectedProperty); | ||||
|             set => SetValue(AllItemsSelectedProperty, value); | ||||
|         } | ||||
|  | ||||
|         public static readonly DependencyProperty IsDropDownOpenProperty = DependencyProperty.Register("IsDropDownOpen", typeof(bool), typeof(CheckComboBox), new FrameworkPropertyMetadata(false)); | ||||
|         public bool IsDropDownOpen { | ||||
|             get => (bool)GetValue(IsDropDownOpenProperty); | ||||
|             set => SetValue(IsDropDownOpenProperty, value); | ||||
|         } | ||||
|  | ||||
|         public static readonly DependencyProperty MaxDropDownHeightProperty = DependencyProperty.Register("MaxDropDownHeight", typeof(double), typeof(CheckComboBox), new FrameworkPropertyMetadata(ComboBox.MaxDropDownHeightProperty.DefaultMetadata.DefaultValue)); | ||||
|         public double MaxDropDownHeight { | ||||
|             get => (double)GetValue(MaxDropDownHeightProperty); | ||||
|             set => SetValue(MaxDropDownHeightProperty, value); | ||||
|         } | ||||
|  | ||||
|         static CheckComboBox() { | ||||
|             DefaultStyleKeyProperty.OverrideMetadata(typeof(CheckComboBox), new FrameworkPropertyMetadata(typeof(CheckComboBox))); | ||||
|         } | ||||
|  | ||||
|         private TextBlock TextBox; | ||||
|  | ||||
|         public CheckComboBox() { | ||||
|             SelectionMode = SelectionMode.Multiple; | ||||
|         } | ||||
|  | ||||
|         public override void OnApplyTemplate() { | ||||
|             TextBox = (GetTemplateChild("TextBox") as TextBlock)!; | ||||
|             var button = GetTemplateChild("Button") as Button; | ||||
|             button!.Click += Button_MouseDown; | ||||
|             var item = GetTemplateChild("SelectAllItem") as ListBoxItem; | ||||
|             item!.PreviewMouseDown += SelectAllItem_MouseDown; | ||||
|             SelectionChanged += OnSelectionChanged; | ||||
|             IsEnabledChanged += OnIsEnabledChanged; | ||||
|             base.OnApplyTemplate(); | ||||
|         } | ||||
|  | ||||
|         private void Button_MouseDown(object sender, RoutedEventArgs evt) { | ||||
|             IsDropDownOpen = !IsDropDownOpen; | ||||
|         } | ||||
|  | ||||
|         private void SelectAllItem_MouseDown(object sender, RoutedEventArgs evt) { | ||||
|             if (AllItemsSelected == false) { | ||||
|                 SelectAll(); | ||||
|             } else { | ||||
|                 UnselectAll(); | ||||
|             } | ||||
|             evt.Handled = true; | ||||
|         } | ||||
|  | ||||
|         private void OnSelectionChanged(object sender, SelectionChangedEventArgs evt) { | ||||
|             var dmp = DisplayMemberPath != null && DisplayMemberPath != "" ? DisplayMemberPath : null; | ||||
|             if (SelectedItems.Count == ItemsSource.Cast<object>().Count() && AllItemsSelectedContent != null) { | ||||
|                 TextBox.Text = AllItemsSelectedContent; | ||||
|                 AllItemsSelected = true; | ||||
|             } else if (SelectedItems.Count == 0) { | ||||
|                 TextBox.Text = ""; | ||||
|                 AllItemsSelected = false; | ||||
|             } else { | ||||
|                 TextBox.Text = string.Join(Delimiter, | ||||
|                     dmp == null ? SelectedItems.Cast<object>() : | ||||
|                     SelectedItems.Cast<object>() | ||||
|                         .Select(i => i.GetType().GetProperty(dmp)?.GetValue(i)) | ||||
|                 ); | ||||
|                 AllItemsSelected = null; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private void OnIsEnabledChanged(object sender, DependencyPropertyChangedEventArgs evt) { | ||||
|             if (!IsEnabled) IsDropDownOpen = false; | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										118
									
								
								Elwig/Controls/CheckComboBox.xaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								Elwig/Controls/CheckComboBox.xaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,118 @@ | ||||
| <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | ||||
|                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | ||||
|                     xmlns:ctrl="clr-namespace:Elwig.Controls"> | ||||
|     <ctrl:VisibilityConverter x:Key="VisibilityConverter"/> | ||||
|     <Style TargetType="ctrl:CheckComboBox" BasedOn="{StaticResource {x:Type ListBox}}"> | ||||
|         <Setter Property="Template"> | ||||
|             <Setter.Value> | ||||
|                 <ControlTemplate TargetType="ctrl:CheckComboBox"> | ||||
|                     <Grid Style="{x:Null}"> | ||||
|                         <Button x:Name="Button" ClickMode="Press" BorderThickness="1" | ||||
|                                 BorderBrush="{TemplateBinding BorderBrush}" | ||||
|                                 IsEnabled="{Binding IsEnabled, RelativeSource={RelativeSource TemplatedParent}}"> | ||||
|                             <Button.Style> | ||||
|                                 <Style TargetType="{x:Type Button}"> | ||||
|                                     <Setter Property="Background" Value="White"/> | ||||
|                                     <Setter Property="Template"> | ||||
|                                         <Setter.Value> | ||||
|                                             <ControlTemplate TargetType="{x:Type Button}"> | ||||
|                                                 <Border Background="{TemplateBinding Background}" SnapsToDevicePixels="True" | ||||
|                                                         BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1"> | ||||
|                                                     <ContentPresenter HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> | ||||
|                                                 </Border> | ||||
|                                             </ControlTemplate> | ||||
|                                         </Setter.Value> | ||||
|                                     </Setter> | ||||
|                                 </Style> | ||||
|                             </Button.Style> | ||||
|                             <Path x:Name="IconDropdown" Data="M 0,0 L 3,3 L 6,0" Stroke="#FF606060" StrokeThickness="1" Margin="0,0,5,0" | ||||
|                                   HorizontalAlignment="Right" VerticalAlignment="Center"/> | ||||
|                         </Button> | ||||
|                         <TextBlock x:Name="TextBox" Style="{x:Null}" Margin="6,0,18,0" IsHitTestVisible="False" | ||||
|                                    HorizontalAlignment="Stretch" VerticalAlignment="Center"/> | ||||
|                         <Popup x:Name="Popup" Placement="Bottom" Focusable="True" | ||||
|                                IsOpen="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" | ||||
|                                PopupAnimation="Slide" AllowsTransparency="True"> | ||||
|                             <Popup.Style> | ||||
|                                 <Style TargetType="{x:Type Popup}"> | ||||
|                                     <Setter Property="StaysOpen" Value="False"/> | ||||
|                                     <Style.Triggers> | ||||
|                                         <DataTrigger Binding="{Binding IsMouseOver, ElementName=Button}" Value="True"> | ||||
|                                             <Setter Property="StaysOpen" Value="True"/> | ||||
|                                         </DataTrigger> | ||||
|                                         <DataTrigger Binding="{Binding IsMouseOver, ElementName=Border}" Value="True"> | ||||
|                                             <Setter Property="StaysOpen" Value="True"/> | ||||
|                                         </DataTrigger> | ||||
|                                     </Style.Triggers> | ||||
|                                 </Style> | ||||
|                             </Popup.Style> | ||||
|                             <Border x:Name="Border" Style="{x:Null}" BorderThickness="1" BorderBrush="Gray" Background="White" SnapsToDevicePixels="True" | ||||
|                                     MinWidth="{TemplateBinding ActualWidth}" | ||||
|                                     MaxHeight="{TemplateBinding MaxDropDownHeight}"> | ||||
|                                 <DockPanel> | ||||
|                                     <ListBoxItem x:Name="SelectAllItem" Padding="2,1,2,1" DockPanel.Dock="Top" | ||||
|                                                  Visibility="{TemplateBinding IsSelectAllActive, Converter={StaticResource VisibilityConverter}}"> | ||||
|                                         <StackPanel Orientation="Horizontal"> | ||||
|                                             <CheckBox VerticalAlignment="Center" Margin="0,0,5,0" IsThreeState="True" | ||||
|                                                       IsChecked="{Binding AllItemsSelected, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"/> | ||||
|                                             <TextBlock Text="{TemplateBinding SelectAllContent}" VerticalAlignment="Center" Margin="0" SnapsToDevicePixels="True"/> | ||||
|                                         </StackPanel> | ||||
|                                     </ListBoxItem> | ||||
|                                     <ScrollViewer Style="{x:Null}"> | ||||
|                                         <StackPanel Style="{x:Null}" IsItemsHost="True" SnapsToDevicePixels="True" | ||||
|                                                     KeyboardNavigation.DirectionalNavigation="Contained"/> | ||||
|                                     </ScrollViewer> | ||||
|                                 </DockPanel> | ||||
|                             </Border> | ||||
|                         </Popup> | ||||
|                     </Grid> | ||||
|                     <ControlTemplate.Triggers> | ||||
|                         <Trigger Property="IsEnabled" Value="False"> | ||||
|                             <Setter TargetName="IconDropdown" Property="Stroke" Value="#FFA0A0A0"/> | ||||
|                         </Trigger> | ||||
|                         <Trigger Property="IsMouseOver" Value="True"> | ||||
|                             <Setter TargetName="IconDropdown" Property="Stroke" Value="Black"/> | ||||
|                         </Trigger> | ||||
|                     </ControlTemplate.Triggers> | ||||
|                 </ControlTemplate> | ||||
|             </Setter.Value> | ||||
|         </Setter> | ||||
|         <Setter Property="ItemContainerStyle"> | ||||
|             <Setter.Value> | ||||
|                 <Style TargetType="ListBoxItem"> | ||||
|                     <Setter Property="Template"> | ||||
|                         <Setter.Value> | ||||
|                             <ControlTemplate TargetType="ListBoxItem"> | ||||
|                                 <Border BorderBrush="{TemplateBinding BorderBrush}"  | ||||
|                                         BorderThickness="{TemplateBinding BorderThickness}"  | ||||
|                                         Background="{TemplateBinding Background}" | ||||
|                                         Padding="2,1,2,1"> | ||||
|                                     <StackPanel Orientation="Horizontal"> | ||||
|                                         <CheckBox VerticalAlignment="Center" Margin="0,0,5,0" | ||||
|                                                   IsChecked="{Binding IsSelected, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=ListBoxItem}}"/> | ||||
|                                         <ContentPresenter VerticalAlignment="Center" Margin="0" SnapsToDevicePixels="True"/> | ||||
|                                     </StackPanel> | ||||
|                                 </Border> | ||||
|                             </ControlTemplate> | ||||
|                         </Setter.Value> | ||||
|                     </Setter> | ||||
|                     <Setter Property="BorderThickness" Value="1"/> | ||||
|                     <Style.Triggers> | ||||
|                         <Trigger Property="IsMouseOver" Value="True"> | ||||
|                             <Setter Property="BorderBrush" Value="#FF70C0E7"/> | ||||
|                             <Setter Property="Background" Value="#FFE5F3FB"/> | ||||
|                         </Trigger> | ||||
|                     </Style.Triggers> | ||||
|                 </Style> | ||||
|             </Setter.Value> | ||||
|         </Setter> | ||||
|         <Style.Triggers> | ||||
|             <Trigger Property="IsEnabled" Value="False"> | ||||
|                 <Setter Property="Foreground" Value="Gray"/> | ||||
|             </Trigger> | ||||
|             <Trigger Property="IsMouseOver" Value="True"> | ||||
|                 <Setter Property="BorderBrush" Value="#FF7EB4EA"/> | ||||
|             </Trigger> | ||||
|         </Style.Triggers> | ||||
|     </Style> | ||||
| </ResourceDictionary> | ||||
							
								
								
									
										16
									
								
								Elwig/Controls/VisibilityConverter.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								Elwig/Controls/VisibilityConverter.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| using System; | ||||
| using System.Windows; | ||||
| using System.Windows.Data; | ||||
| using System.Globalization; | ||||
|  | ||||
| namespace Elwig.Controls { | ||||
|     public class VisibilityConverter : IValueConverter { | ||||
|         public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { | ||||
|             return (bool)value ? Visibility.Visible : Visibility.Collapsed; | ||||
|         } | ||||
|  | ||||
|         public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { | ||||
|             return (Visibility)value == Visibility.Visible; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <UseWPF>true</UseWPF> | ||||
|     <PreserveCompilationContext>true</PreserveCompilationContext> | ||||
|     <ApplicationIcon>Resources\Images\Elwig.ico</ApplicationIcon> | ||||
|     <Version>0.8.3</Version> | ||||
|     <Version>0.8.4</Version> | ||||
|     <SatelliteResourceLanguages>de-AT</SatelliteResourceLanguages> | ||||
|     <AllowUnsafeBlocks>true</AllowUnsafeBlocks> | ||||
|     <ApplicationManifest>app.manifest</ApplicationManifest> | ||||
| @@ -25,7 +25,6 @@ | ||||
|   </Target> | ||||
|  | ||||
|   <ItemGroup> | ||||
|     <PackageReference Include="Extended.Wpf.Toolkit" Version="4.6.0" /> | ||||
|     <PackageReference Include="LinqKit" Version="1.2.5" /> | ||||
|     <PackageReference Include="MailKit" Version="4.6.0" /> | ||||
|     <PackageReference Include="Microsoft.AspNetCore.Razor.Language" Version="6.0.31" /> | ||||
|   | ||||
| @@ -66,6 +66,9 @@ namespace Elwig.Helpers { | ||||
|         public string? TextEmailSubject; | ||||
|         public string? TextEmailBody; | ||||
|  | ||||
|         public int ExportEbicsVersion; | ||||
|         public int ExportEbicsAddress; | ||||
|  | ||||
|         public ClientParameters(AppDbContext ctx) : this(ctx.ClientParameters.ToDictionary(e => e.Param, e => e.Value)) { } | ||||
|  | ||||
|         public ClientParameters(Dictionary<string, string?> parameters) { | ||||
| @@ -128,6 +131,13 @@ namespace Elwig.Helpers { | ||||
|                 if (TextEmailSubject == "") TextEmailSubject = null; | ||||
|                 TextEmailBody = parameters.GetValueOrDefault("TEXT_EMAIL_BODY"); | ||||
|                 if (TextEmailBody == "") TextEmailBody = null; | ||||
|  | ||||
|                 ExportEbicsVersion = int.TryParse(parameters.GetValueOrDefault("EXPORT_EBICS_VERSION"), out var v) ? v : 9; | ||||
|                 switch (parameters.GetValueOrDefault("EXPORT_EBICS_ADDRESS", "FULL")?.ToUpper()) { | ||||
|                     case "OMIT": ExportEbicsAddress = 0; break; | ||||
|                     case "LINES": ExportEbicsAddress = 1; break; | ||||
|                     case "FULL": ExportEbicsAddress = 2; break; | ||||
|                 } | ||||
|             } catch { | ||||
|                 throw new KeyNotFoundException(); | ||||
|             } | ||||
| @@ -155,6 +165,12 @@ namespace Elwig.Helpers { | ||||
|                 case 1: orderingMemberList = "NAME"; break; | ||||
|                 case 2: orderingMemberList = "KG"; break; | ||||
|             } | ||||
|             string exportEbicsAddress = "FULL"; | ||||
|             switch (ExportEbicsAddress) { | ||||
|                 case 0: exportEbicsAddress = "OMIT"; break; | ||||
|                 case 1: exportEbicsAddress = "LINES"; break; | ||||
|                 case 2: exportEbicsAddress = "FULL"; break; | ||||
|             } | ||||
|             return [ | ||||
|                 ("CLIENT_NAME_TOKEN", NameToken), | ||||
|                 ("CLIENT_NAME_SHORT", NameShort), | ||||
| @@ -180,7 +196,9 @@ namespace Elwig.Helpers { | ||||
|                 ("TEXT_DELIVERYCONFIRMATION", TextDeliveryConfirmation), | ||||
|                 ("TEXT_CREDITNOTE", TextCreditNote), | ||||
|                 ("TEXT_EMAIL_SUBJECT", TextEmailSubject), | ||||
|                 ("TEXT_EMAIL_BODY", TextEmailBody) | ||||
|                 ("TEXT_EMAIL_BODY", TextEmailBody), | ||||
|                 ("EXPORT_EBICS_VERSION", ExportEbicsVersion.ToString()), | ||||
|                 ("EXPORT_EBICS_ADDRESS", exportEbicsAddress), | ||||
|             ]; | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -102,20 +102,6 @@ namespace Elwig.Helpers { | ||||
|             selector.SelectedItem = selItem; | ||||
|         } | ||||
|  | ||||
|         public static void RenewItemsSource(Xceed.Wpf.Toolkit.Primitives.Selector selector, IEnumerable? source, Xceed.Wpf.Toolkit.Primitives.ItemSelectionChangedEventHandler? handler = null) { | ||||
|             if (selector.ItemsSource == source) | ||||
|                 return; | ||||
|             var selectedIds = selector.SelectedItems.Cast<object>().Select(i => Utils.GetEntityIdentifier(i)).ToList(); | ||||
|             if (handler != null && selectedIds != null) selector.ItemSelectionChanged -= handler; | ||||
|             selector.ItemsSource = source; | ||||
|             if (source != null) { | ||||
|                 selector.SelectedItems.Clear(); | ||||
|                 foreach (var i in source.Cast<object>().Where(i => selectedIds.Contains(Utils.GetEntityIdentifier(i)))) | ||||
|                     selector.SelectedItems.Add(i); | ||||
|             } | ||||
|             if (handler != null && selectedIds != null) selector.ItemSelectionChanged += handler; | ||||
|         } | ||||
|  | ||||
|         public static void RenewItemsSource(DataGrid dataGrid, IEnumerable? source, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None, bool keepSort = true) { | ||||
|             if (dataGrid.ItemsSource == source) | ||||
|                 return; | ||||
| @@ -210,15 +196,15 @@ namespace Elwig.Helpers { | ||||
|             return GetItemsFromSource(source, items.Select(Utils.GetEntityIdentifier)); | ||||
|         } | ||||
|  | ||||
|         public static void SelectItems(Xceed.Wpf.Toolkit.CheckComboBox ccb, IEnumerable<int?>? ids) { | ||||
|             ccb.SelectedItems.Clear(); | ||||
|         public static void SelectItems(ListBox lb, IEnumerable<int?>? ids) { | ||||
|             lb.SelectedItems.Clear(); | ||||
|             if (ids == null) return; | ||||
|             foreach (var id in ids) | ||||
|                 ccb.SelectedItems.Add(GetItemFromSource(ccb.ItemsSource, id)); | ||||
|                 lb.SelectedItems.Add(GetItemFromSource(lb.ItemsSource, id)); | ||||
|         } | ||||
|  | ||||
|         public static void SelectItems(Xceed.Wpf.Toolkit.CheckComboBox ccb, IEnumerable<object>? items) { | ||||
|             SelectItems(ccb, items?.Select(Utils.GetEntityIdentifier)); | ||||
|         public static void SelectItems(ListBox lb, IEnumerable<object>? items) { | ||||
|             SelectItems(lb, items?.Select(Utils.GetEntityIdentifier)); | ||||
|         } | ||||
|  | ||||
|         public static int? GetInputHashCode(Control input) { | ||||
| @@ -226,8 +212,8 @@ namespace Elwig.Helpers { | ||||
|                 return Utils.GetEntityIdentifier(tb.Text); | ||||
|             } else if (input is ComboBox sb) { | ||||
|                 return Utils.GetEntityIdentifier(sb.SelectedItem); | ||||
|             } else if (input is Xceed.Wpf.Toolkit.CheckComboBox ccb) { | ||||
|                 return Utils.GetEntityIdentifier(ccb.SelectedItems); | ||||
|             } else if (input is ListBox lb) { | ||||
|                 return Utils.GetEntityIdentifier(lb.SelectedItems); | ||||
|             } else if (input is CheckBox cb) { | ||||
|                 return Utils.GetEntityIdentifier(cb.IsChecked); | ||||
|             } else if (input is RadioButton rb) { | ||||
|   | ||||
| @@ -9,7 +9,9 @@ using System.Security; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| namespace Elwig.Helpers.Export { | ||||
|     public class Ebics(PaymentVar variant, string filename, int version) : IBankingExporter { | ||||
|     public class Ebics(PaymentVar variant, string filename, int version, Ebics.AddressMode mode = Ebics.AddressMode.Full) : IBankingExporter { | ||||
|  | ||||
|         public enum AddressMode { Omit = 0, Lines = 1, Full = 2 } | ||||
|  | ||||
|         public static string FileExtension => "xml"; | ||||
|  | ||||
| @@ -19,6 +21,7 @@ namespace Elwig.Helpers.Export { | ||||
|         private readonly string Name = variant.Name; | ||||
|         private readonly int AvNr = variant.AvNr; | ||||
|         private readonly int Version = version; | ||||
|         private readonly AddressMode ShowAddresses = mode; | ||||
|  | ||||
|         public void Dispose() { | ||||
|             GC.SuppressFinalize(this); | ||||
| @@ -78,11 +81,18 @@ namespace Elwig.Helpers.Export { | ||||
|                         <Amt><InstdAmt Ccy="{tx.Currency}">{Transaction.FormatAmount(tx.Amount)}</InstdAmt></Amt> | ||||
|                         <Cdtr> | ||||
|                          <Nm>{SecurityElement.Escape(a.Name[..Math.Min(140, a.Name.Length)])}</Nm> | ||||
|                          <PstlAdr> | ||||
|                           <StrtNm>{a1?[..Math.Min(70, a1.Length)]}</StrtNm><BldgNb>{SecurityElement.Escape(a2?[..Math.Min(16, a2.Length)])}</BldgNb> | ||||
|                           <PstCd>{a.PostalDest.AtPlz?.Plz}</PstCd><TwnNm>{SecurityElement.Escape(a.PostalDest.AtPlz?.Ort.Name)}</TwnNm> | ||||
|                           <Ctry>{a.PostalDest.Country.Alpha2}</Ctry> | ||||
|                          </PstlAdr> | ||||
|                     """); | ||||
|                 if (ShowAddresses != AddressMode.Omit) { | ||||
|                     var full = ShowAddresses == AddressMode.Full; | ||||
|                     await Writer.WriteLineAsync($""" | ||||
|                              <PstlAdr> | ||||
|                               {(full ? $"<StrtNm>{SecurityElement.Escape(a1?[..Math.Min(70, a1.Length)])}</StrtNm> <BldgNb>{SecurityElement.Escape(a2?[..Math.Min(16, a2.Length)])}</BldgNb>" : $"<AdrLine>{a.Address[..Math.Min(70, a.Address.Length)]}</AdrLine>")} | ||||
|                               <{(full ? "PstCd" : "AdrLine")}>{a.PostalDest.AtPlz?.Plz}{(full ? "</PstCd> <TwnNm>" : " ")}{SecurityElement.Escape(a.PostalDest.AtPlz?.Ort.Name)}</{(full ? "TwnNm" : "AdrLine")}> | ||||
|                               <{(full ? "" : "!--")}Ctry>{a.PostalDest.Country.Alpha2}</Ctry{(full ? "" : "--")}> | ||||
|                              </PstlAdr> | ||||
|                         """); | ||||
|                 } | ||||
|                 await Writer.WriteLineAsync($""" | ||||
|                         </Cdtr> | ||||
|                         <CdtrAcct><Id><IBAN>{tx.Member.Iban!}</IBAN></Id></CdtrAcct> | ||||
|                         <RmtInf><Ustrd>{SecurityElement.Escape(info)}</Ustrd></RmtInf> | ||||
|   | ||||
| @@ -2,5 +2,6 @@ | ||||
|     <ResourceDictionary.MergedDictionaries> | ||||
|         <ResourceDictionary Source="/Elwig;component/Controls/UnitTextBox.xaml"/> | ||||
|         <ResourceDictionary Source="/Elwig;component/Controls/IntegerUpDown.xaml"/> | ||||
|         <ResourceDictionary Source="/Elwig;component/Controls/CheckComboBox.xaml"/> | ||||
|     </ResourceDictionary.MergedDictionaries> | ||||
| </ResourceDictionary> | ||||
|   | ||||
| @@ -1,4 +1,3 @@ | ||||
| using Elwig.Controls; | ||||
| using Elwig.Helpers; | ||||
| using Elwig.Models.Entities; | ||||
| using System; | ||||
| @@ -10,7 +9,6 @@ using System.Threading.Tasks; | ||||
| using System.Windows; | ||||
| using System.Windows.Controls; | ||||
| using System.Windows.Threading; | ||||
| using Xceed.Wpf.Toolkit; | ||||
| using System.Windows.Input; | ||||
|  | ||||
| namespace Elwig.Windows { | ||||
| @@ -21,14 +19,14 @@ namespace Elwig.Windows { | ||||
|  | ||||
|         private bool _isEditing; | ||||
|         private bool _isCreating; | ||||
|         protected bool IsEditing { | ||||
|         public bool IsEditing { | ||||
|             get { return _isEditing; } | ||||
|             set { | ||||
|                 _isEditing = value; | ||||
|                 LockContext = IsEditing || IsCreating; | ||||
|             } | ||||
|         } | ||||
|         protected bool IsCreating { | ||||
|         public bool IsCreating { | ||||
|             get { return _isCreating; } | ||||
|             set { | ||||
|                 _isCreating = value; | ||||
| @@ -42,7 +40,7 @@ namespace Elwig.Windows { | ||||
|         private TextBox[] PlzInputs; | ||||
|         private ComboBox[] ComboBoxInputs; | ||||
|         private ComboBox[] PlzOrtInputs; | ||||
|         private CheckComboBox[] CheckComboBoxInputs; | ||||
|         private ListBox[] ListBoxInputs; | ||||
|         private CheckBox[] CheckBoxInputs; | ||||
|         private RadioButton[] RadioButtonInputs; | ||||
|         private readonly Dictionary<Control, bool> Valid; | ||||
| @@ -68,7 +66,7 @@ namespace Elwig.Windows { | ||||
|             TextBoxInputs = []; | ||||
|             PlzInputs = []; | ||||
|             ComboBoxInputs = []; | ||||
|             CheckComboBoxInputs = []; | ||||
|             ListBoxInputs = []; | ||||
|             PlzOrtInputs = []; | ||||
|             CheckBoxInputs = []; | ||||
|             RadioButtonInputs = []; | ||||
| @@ -97,7 +95,7 @@ namespace Elwig.Windows { | ||||
|             TextBoxInputs = ControlUtils.FindAllChildren<TextBox>(this, ExemptInputs).ToArray(); | ||||
|             ComboBoxInputs = ControlUtils.FindAllChildren<ComboBox>(this, ExemptInputs).ToArray(); | ||||
|             CheckBoxInputs = ControlUtils.FindAllChildren<CheckBox>(this, ExemptInputs).ToArray(); | ||||
|             CheckComboBoxInputs = ControlUtils.FindAllChildren<CheckComboBox>(this, ExemptInputs).ToArray(); | ||||
|             ListBoxInputs = ControlUtils.FindAllChildren<ListBox>(this, ExemptInputs).ToArray(); | ||||
|             RadioButtonInputs = ControlUtils.FindAllChildren<RadioButton>(this, ExemptInputs).ToArray(); | ||||
|             PlzInputs = ControlUtils.FindAllChildren<TextBox>(this).Where(tb => "PLZ".Equals(tb.Tag)).ToArray(); | ||||
|             PlzOrtInputs = PlzInputs.Select(tb => ControlUtils.FindNextSibling<ComboBox>(tb) ?? throw new MissingMemberException()).ToArray(); | ||||
| @@ -105,8 +103,8 @@ namespace Elwig.Windows { | ||||
|                 Valid[tb] = true; | ||||
|             foreach (var cb in ComboBoxInputs) | ||||
|                 cb.SelectionChanged += ComboBox_SelectionChanged; | ||||
|             foreach (var cb in CheckComboBoxInputs) | ||||
|                 cb.ItemSelectionChanged += ComboBox_SelectionChanged; | ||||
|             foreach (var lb in ListBoxInputs) | ||||
|                 lb.SelectionChanged += ComboBox_SelectionChanged; | ||||
|         } | ||||
|  | ||||
|         private void OnClosing(object? sender, CancelEventArgs evt) { | ||||
| @@ -151,8 +149,8 @@ namespace Elwig.Windows { | ||||
|                 ControlUtils.ClearInputState(tb); | ||||
|             foreach (var cb in ComboBoxInputs) | ||||
|                 ControlUtils.ClearInputState(cb); | ||||
|             foreach (var ccb in CheckComboBoxInputs) | ||||
|                 ControlUtils.ClearInputState(ccb); | ||||
|             foreach (var lb in ListBoxInputs) | ||||
|                 ControlUtils.ClearInputState(lb); | ||||
|             foreach (var cb in CheckBoxInputs) | ||||
|                 ControlUtils.ClearInputState(cb); | ||||
|             foreach (var rb in RadioButtonInputs) | ||||
| @@ -166,7 +164,7 @@ namespace Elwig.Windows { | ||||
|                     Valid[input] = false; | ||||
|                 } else if (input is ComboBox cb && cb.SelectedItem == null && cb.ItemsSource != null) { | ||||
|                     ControlUtils.SetInputInvalid(input); | ||||
|                 } else if (input is CheckComboBox ccb && ccb.SelectedItem == null && ccb.ItemsSource != null) { | ||||
|                 } else if (input is ListBox lb && lb.SelectedItem == null && lb.ItemsSource != null) { | ||||
|                     ControlUtils.SetInputInvalid(input); | ||||
|                 } else if (input is CheckBox ckb && ckb.IsChecked != true) { | ||||
|                     ControlUtils.SetInputInvalid(input); | ||||
| @@ -190,8 +188,8 @@ namespace Elwig.Windows { | ||||
|                 tb.IsReadOnly = true; | ||||
|             foreach (var cb in ComboBoxInputs) | ||||
|                 cb.IsEnabled = false; | ||||
|             foreach (var ccb in CheckComboBoxInputs) | ||||
|                 ccb.IsEnabled = false; | ||||
|             foreach (var lb in ListBoxInputs) | ||||
|                 lb.IsEnabled = false; | ||||
|             foreach (var cb in CheckBoxInputs) | ||||
|                 cb.IsEnabled = false; | ||||
|             foreach (var rb in RadioButtonInputs) | ||||
| @@ -203,8 +201,8 @@ namespace Elwig.Windows { | ||||
|                 tb.IsReadOnly = false; | ||||
|             foreach (var cb in ComboBoxInputs) | ||||
|                 cb.IsEnabled = true; | ||||
|             foreach (var ccb in CheckComboBoxInputs) | ||||
|                 ccb.IsEnabled = true; | ||||
|             foreach (var lb in ListBoxInputs) | ||||
|                 lb.IsEnabled = true; | ||||
|             foreach (var cb in CheckBoxInputs) | ||||
|                 cb.IsEnabled = true; | ||||
|             foreach (var rb in RadioButtonInputs) | ||||
| @@ -224,8 +222,8 @@ namespace Elwig.Windows { | ||||
|                 OriginalValues[tb] = ControlUtils.GetInputHashCode(tb); | ||||
|             foreach (var cb in ComboBoxInputs) | ||||
|                 OriginalValues[cb] = ControlUtils.GetInputHashCode(cb); | ||||
|             foreach (var ccb in CheckComboBoxInputs) | ||||
|                 OriginalValues[ccb] = ControlUtils.GetInputHashCode(ccb); | ||||
|             foreach (var lb in ListBoxInputs) | ||||
|                 OriginalValues[lb] = ControlUtils.GetInputHashCode(lb); | ||||
|             foreach (var cb in CheckBoxInputs) | ||||
|                 OriginalValues[cb] = ControlUtils.GetInputHashCode(cb); | ||||
|             foreach (var rb in RadioButtonInputs) | ||||
| @@ -277,8 +275,8 @@ namespace Elwig.Windows { | ||||
|                 tb.Text = ""; | ||||
|             foreach (var cb in ComboBoxInputs) | ||||
|                 cb.SelectedItem = null; | ||||
|             foreach (var ccb in CheckComboBoxInputs) | ||||
|                 ccb.SelectedItems.Clear(); | ||||
|             foreach (var lb in ListBoxInputs) | ||||
|                 lb.SelectedItems.Clear(); | ||||
|             foreach (var cb in CheckBoxInputs) | ||||
|                 cb.IsChecked = cb.IsThreeState ? null : false; | ||||
|             foreach (var rb in RadioButtonInputs) | ||||
| @@ -315,13 +313,13 @@ namespace Elwig.Windows { | ||||
|                 !IsValid || | ||||
|                 TextBoxInputs.Any(InputHasChanged) || | ||||
|                 ComboBoxInputs.Any(InputHasChanged) || | ||||
|                 CheckComboBoxInputs.Any(InputHasChanged) || | ||||
|                 ListBoxInputs.Any(InputHasChanged) || | ||||
|                 CheckBoxInputs.Any(InputHasChanged) || | ||||
|                 RadioButtonInputs.Any(InputHasChanged) | ||||
|             ) || IsCreating && ( | ||||
|                 TextBoxInputs.Any(i => InputIsNotDefault(i) || (!i.IsReadOnly && i.Text != "")) || | ||||
|                 ComboBoxInputs.Any(i => InputIsNotDefault(i) || (i.IsEnabled && i.SelectedItem != null)) || | ||||
|                 CheckComboBoxInputs.Any(i => InputIsNotDefault(i) || i.SelectedItem != null) || | ||||
|                 ListBoxInputs.Any(i => InputIsNotDefault(i) || i.SelectedItem != null) || | ||||
|                 CheckBoxInputs.Any(InputIsNotDefault) || | ||||
|                 RadioButtonInputs.Any(InputIsNotDefault) | ||||
|             ); | ||||
| @@ -447,8 +445,8 @@ namespace Elwig.Windows { | ||||
|             bool valid = false; | ||||
|             if (input is ComboBox cb) { | ||||
|                 valid = cb.ItemsSource == null || cb.SelectedItem != null || !RequiredInputs.Contains(input); | ||||
|             } else if (input is CheckComboBox ccb) { | ||||
|                 valid = ccb.ItemsSource == null || ccb.SelectedItem != null || !RequiredInputs.Contains(input); | ||||
|             } else if (input is ListBox lb) { | ||||
|                 valid = lb.ItemsSource == null || lb.SelectedItem != null || !RequiredInputs.Contains(input); | ||||
|             } | ||||
|             if (valid) { | ||||
|                 ValidateInput(input, true); | ||||
|   | ||||
| @@ -6,7 +6,6 @@ | ||||
|         xmlns:local="clr-namespace:Elwig.Windows" | ||||
|         xmlns:ctrl="clr-namespace:Elwig.Controls" | ||||
|         mc:Ignorable="d" | ||||
|         xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" | ||||
|         Title="Flächenbindungen - Elwig" Height="500" MinHeight="440" Width="920" MinWidth="860" | ||||
|         Loaded="Window_Loaded"> | ||||
|     <Window.Resources> | ||||
| @@ -41,13 +40,6 @@ | ||||
|             <Setter Property="HorizontalAlignment" Value="Stretch"/> | ||||
|             <Setter Property="VerticalAlignment" Value="Top"/> | ||||
|         </Style> | ||||
|         <Style TargetType="xctk:CheckComboBox"> | ||||
|             <Setter Property="IsEnabled" Value="False"/> | ||||
|             <Setter Property="Height" Value="25"/> | ||||
|             <Setter Property="FontSize" Value="14"/> | ||||
|             <Setter Property="HorizontalAlignment" Value="Stretch"/> | ||||
|             <Setter Property="VerticalAlignment" Value="Top"/> | ||||
|         </Style> | ||||
|         <Style TargetType="Button"> | ||||
|             <Setter Property="FontSize" Value="14"/> | ||||
|             <Setter Property="Padding" Value="9,3"/> | ||||
|   | ||||
| @@ -7,7 +7,6 @@ using Elwig.Models.Entities; | ||||
| using System; | ||||
| using System.Threading.Tasks; | ||||
| using System.Collections.Generic; | ||||
| using Xceed.Wpf.Toolkit.Primitives; | ||||
|  | ||||
| namespace Elwig.Windows { | ||||
|     public partial class AreaComAdminWindow : AdministrationWindow { | ||||
| @@ -431,7 +430,7 @@ namespace Elwig.Windows { | ||||
|             RefreshInputs(); | ||||
|         } | ||||
|  | ||||
|         private void AttributesInput_SelectionChanged(object sender, ItemSelectionChangedEventArgs evt) { | ||||
|         private void AttributesInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) { | ||||
|  | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -526,8 +526,8 @@ | ||||
|                 </Grid> | ||||
|             </TabItem> | ||||
|             <TabItem Header="Parameter"> | ||||
|                 <Grid> | ||||
|                     <GroupBox x:Name="ParameterAreaComGroup" Header="Berechnung Flächenbindungen (aktuelle Saison)" Margin="10,10,10,10" VerticalAlignment="Top"> | ||||
|                 <StackPanel> | ||||
|                     <GroupBox x:Name="ParameterAreaComGroup" Header="Berechnung Flächenbindungen (aktuelle Saison)" Margin="10,10,10,0" VerticalAlignment="Top"> | ||||
|                         <Grid> | ||||
|                             <CheckBox x:Name="ParameterAllowAttrIntoLowerInput" Content="Erlauben Lieferungen auch auf (konfigurierte) "schlechtere" Flächenbindungen aufzuteilen" | ||||
|                                       VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,10,10,10" | ||||
| @@ -541,7 +541,33 @@ | ||||
|                             </CheckBox> | ||||
|                         </Grid> | ||||
|                     </GroupBox> | ||||
|                 </Grid> | ||||
|  | ||||
|                     <GroupBox Header="Daten-Export" Margin="10,10,10,10"> | ||||
|                         <Grid> | ||||
|                             <Label Content="Version EBICS-Überweisung:" Margin="10,10,10,10"/> | ||||
|                             <ComboBox x:Name="ParameterExportEbicsVersion" Margin="180,10,10,10" Width="50" | ||||
|                                       HorizontalAlignment="Left"> | ||||
|                                 <ComboBoxItem>3</ComboBoxItem> | ||||
|                                 <ComboBoxItem>4</ComboBoxItem> | ||||
|                                 <ComboBoxItem>5</ComboBoxItem> | ||||
|                                 <ComboBoxItem>6</ComboBoxItem> | ||||
|                                 <ComboBoxItem>7</ComboBoxItem> | ||||
|                                 <ComboBoxItem>8</ComboBoxItem> | ||||
|                                 <ComboBoxItem IsSelected="True">9</ComboBoxItem> | ||||
|                                 <ComboBoxItem>10</ComboBoxItem> | ||||
|                                 <ComboBoxItem>11</ComboBoxItem> | ||||
|                             </ComboBox> | ||||
|  | ||||
|                             <Label Content="Adressen EBICS-Überweisung:" Margin="10,40,10,10"/> | ||||
|                             <ComboBox x:Name="ParameterExportEbicsAddress" Margin="180,40,10,10" Width="150" | ||||
|                                       HorizontalAlignment="Left"> | ||||
|                                 <ComboBoxItem>Nicht anführen</ComboBoxItem> | ||||
|                                 <ComboBoxItem>Adresszeilen</ComboBoxItem> | ||||
|                                 <ComboBoxItem IsSelected="True">Vollwertig</ComboBoxItem> | ||||
|                             </ComboBox> | ||||
|                         </Grid> | ||||
|                     </GroupBox> | ||||
|                 </StackPanel> | ||||
|             </TabItem> | ||||
|             <TabItem Header="Textelemente"> | ||||
|                 <ScrollViewer VerticalScrollBarVisibility="Visible"> | ||||
|   | ||||
| @@ -19,6 +19,7 @@ namespace Elwig.Windows { | ||||
|                 ClientAddressInput, ClientPlzInput, ClientOrtInput, | ||||
|             ]; | ||||
|             ExemptInputs = [ | ||||
|                 BranchList, AreaCommitmentTypeList, WineAttributeList, WineCultivationList, SeasonList, SeasonModifierList, | ||||
|                 ClientNameFull, | ||||
|                 BranchIdInput, BranchNameInput, BranchPlzInput, BranchOrtInput, | ||||
|                 BranchAddressInput, BranchPhoneNrInput, BranchFaxNrInput, BranchMobileNrInput, | ||||
| @@ -93,6 +94,8 @@ namespace Elwig.Windows { | ||||
|             ParameterAllowAttrIntoLowerInput.IsEnabled = false; | ||||
|             ParameterAvoidUnderDeliveriesInput.IsEnabled = false; | ||||
|             ParameterHonorGebundenInput.IsEnabled = false; | ||||
|             ParameterExportEbicsVersion.IsEnabled = false; | ||||
|             ParameterExportEbicsAddress.IsEnabled = false; | ||||
|         } | ||||
|  | ||||
|         new protected void UnlockInputs() { | ||||
| @@ -145,6 +148,8 @@ namespace Elwig.Windows { | ||||
|             ParameterAllowAttrIntoLowerInput.IsEnabled = true; | ||||
|             ParameterAvoidUnderDeliveriesInput.IsEnabled = true; | ||||
|             ParameterHonorGebundenInput.IsEnabled = true; | ||||
|             ParameterExportEbicsVersion.IsEnabled = true; | ||||
|             ParameterExportEbicsAddress.IsEnabled = true; | ||||
|         } | ||||
|  | ||||
|         private void Window_Loaded(object sender, RoutedEventArgs evt) { | ||||
| @@ -372,6 +377,8 @@ namespace Elwig.Windows { | ||||
|             ParameterAllowAttrIntoLowerInput.IsChecked = s?.Billing_AllowAttrsIntoLower ?? false; | ||||
|             ParameterAvoidUnderDeliveriesInput.IsChecked = s?.Billing_AvoidUnderDeliveries ?? false; | ||||
|             ParameterHonorGebundenInput.IsChecked = s?.Billing_HonorGebunden ?? false; | ||||
|             ParameterExportEbicsVersion.SelectedIndex = p.ExportEbicsVersion - 3; | ||||
|             ParameterExportEbicsAddress.SelectedIndex = p.ExportEbicsAddress; | ||||
|  | ||||
|             FinishInputFilling(); | ||||
|         } | ||||
| @@ -399,6 +406,9 @@ namespace Elwig.Windows { | ||||
|             p.TextDeliveryConfirmation = TextElementDeliveryConfirmation.Text.Length > 0 ? TextElementDeliveryConfirmation.Text : null; | ||||
|             p.TextCreditNote = TextElementCreditNote.Text.Length > 0 ? TextElementCreditNote.Text : null; | ||||
|  | ||||
|             p.ExportEbicsVersion = ParameterExportEbicsVersion.SelectedIndex + 3; | ||||
|             p.ExportEbicsAddress = ParameterExportEbicsAddress.SelectedIndex; | ||||
|  | ||||
|             await p.UpdateValues(); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,6 @@ | ||||
|         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | ||||
|         xmlns:local="clr-namespace:Elwig.Windows" | ||||
|         xmlns:ctrl="clr-namespace:Elwig.Controls" | ||||
|         xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" | ||||
|         xmlns:ScottPlot="clr-namespace:ScottPlot.WPF;assembly=ScottPlot.WPF" | ||||
|         mc:Ignorable="d" | ||||
|         Title="Auszahlung - Elwig" Height="700" Width="1500" MinWidth="1000" MinHeight="500" | ||||
| @@ -70,10 +69,10 @@ | ||||
|             </Grid.ColumnDefinitions> | ||||
|  | ||||
|             <Label Content="Für:" Margin="10,-2,0,0" FontSize="14" Grid.Column="0" VerticalAlignment="Center"/> | ||||
|             <xctk:CheckComboBox x:Name="VaributeInput" Margin="50,0,0,0" Grid.Column="0" Width="500" Height="25" HorizontalAlignment="Left" | ||||
|             <ctrl:CheckComboBox x:Name="VaributeInput" Margin="50,0,0,0" Grid.Column="0" Width="500" Height="25" HorizontalAlignment="Left" | ||||
|                                 IsSelectAllActive="True" SelectAllContent="Alle Sorten" Delimiter=", " AllItemsSelectedContent="Alle Sorten" | ||||
|                                 IsEnabled="False" ItemSelectionChanged="VaributeInput_Changed"> | ||||
|                 <xctk:CheckComboBox.ItemTemplate> | ||||
|                                 IsEnabled="False" SelectionChanged="VaributeInput_Changed"> | ||||
|                 <ctrl:CheckComboBox.ItemTemplate> | ||||
|                     <DataTemplate> | ||||
|                         <StackPanel Orientation="Horizontal"> | ||||
|                             <TextBlock Text="{Binding Variety.Name}" Width="150"/> | ||||
| @@ -84,8 +83,8 @@ | ||||
|                             <TextBlock Text="{Binding AssignedAbgewGraphId}" Width="30"/> | ||||
|                         </StackPanel> | ||||
|                     </DataTemplate> | ||||
|                 </xctk:CheckComboBox.ItemTemplate> | ||||
|             </xctk:CheckComboBox> | ||||
|                 </ctrl:CheckComboBox.ItemTemplate> | ||||
|             </ctrl:CheckComboBox> | ||||
|  | ||||
|             <CheckBox x:Name="AbgewertetInput" Content="Abgewertet" IsEnabled="False" Checked="AbgewertetInput_Changed" Unchecked="AbgewertetInput_Changed" | ||||
|                       VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,0,0,0" Grid.Column="1"/> | ||||
|   | ||||
| @@ -9,13 +9,9 @@ using Elwig.Controls; | ||||
| using Elwig.Helpers; | ||||
| using Elwig.Helpers.Billing; | ||||
| using Elwig.Models.Entities; | ||||
| using Microsoft.EntityFrameworkCore.ChangeTracking; | ||||
| using ScottPlot.Plottables; | ||||
| using ScottPlot; | ||||
| using Xceed.Wpf.Toolkit.Primitives; | ||||
| using ScottPlot.Control; | ||||
| using System.Text.Json; | ||||
| using Microsoft.EntityFrameworkCore.Metadata.Internal; | ||||
|  | ||||
| namespace Elwig.Windows { | ||||
|     public partial class ChartWindow : ContextWindow { | ||||
| @@ -724,26 +720,31 @@ namespace Elwig.Windows { | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private void VaributeInput_Changed(object sender, ItemSelectionChangedEventArgs e) { | ||||
|             if (FillingInputs || e.Item is not Varibute v) return; | ||||
|         private void VaributeInput_Changed(object sender, SelectionChangedEventArgs evt) { | ||||
|             if (FillingInputs) return; | ||||
|             var isOpen = VaributeInput.IsDropDownOpen; | ||||
|             if (e.IsSelected) { | ||||
|                 if (RemoveVaributeFromOthers(e.Item.ToString())) { | ||||
|  | ||||
|             foreach (var i in evt.AddedItems) { | ||||
|                 if (i is not Varibute v) continue; | ||||
|                 if (RemoveVaributeFromOthers(v.ToString())) { | ||||
|                     if (AbgewertetInput.IsChecked == true) { | ||||
|                         v.AssignedAbgewGraphId = SelectedGraphEntry?.Id; | ||||
|                     } else { | ||||
|                         v.AssignedGraphId = SelectedGraphEntry?.Id; | ||||
|                     } | ||||
|                 } else { | ||||
|                     VaributeInput.SelectedItems.Remove(e.Item); | ||||
|                     VaributeInput.SelectedItems.Remove(v); | ||||
|                 } | ||||
|             } else { | ||||
|             } | ||||
|             foreach (var i in evt.RemovedItems) { | ||||
|                 if (i is not Varibute v) continue; | ||||
|                 if (AbgewertetInput.IsChecked == true) { | ||||
|                     v.AssignedAbgewGraphId = null; | ||||
|                 } else { | ||||
|                     v.AssignedGraphId = null; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             SelectedGraphEntry!.Vaributes = VaributeInput.SelectedItems.Cast<Varibute>().ToList(); | ||||
|             SetHasChanged(); | ||||
|             GraphList.Items.Refresh(); | ||||
|   | ||||
| @@ -3,7 +3,6 @@ | ||||
|         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | ||||
|         xmlns:local="clr-namespace:Elwig.Windows" | ||||
|         xmlns:ctrl="clr-namespace:Elwig.Controls" | ||||
|         xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" | ||||
|         Title="Lieferungen - Elwig" Height="720" Width="1100" MinHeight="720" MinWidth="1000" | ||||
|         Loaded="Window_Loaded"> | ||||
|     <Window.Resources> | ||||
| @@ -35,7 +34,7 @@ | ||||
|             <Setter Property="HorizontalAlignment" Value="Stretch"/> | ||||
|             <Setter Property="VerticalAlignment" Value="Top"/> | ||||
|         </Style> | ||||
|         <Style TargetType="xctk:CheckComboBox"> | ||||
|         <Style TargetType="ctrl:CheckComboBox"> | ||||
|             <Setter Property="Height" Value="25"/> | ||||
|             <Setter Property="FontSize" Value="14"/> | ||||
|             <Setter Property="HorizontalAlignment" Value="Stretch"/> | ||||
| @@ -474,9 +473,9 @@ | ||||
|                     </Grid.ColumnDefinitions> | ||||
|  | ||||
|                     <Label Content="Zu-/Abschläge:" Margin="10,10,0,10"/> | ||||
|                     <xctk:CheckComboBox x:Name="ModifiersInput" Margin="0,10,10,10" Grid.Column="1" Grid.ColumnSpan="2" | ||||
|                     <ctrl:CheckComboBox x:Name="ModifiersInput" Margin="0,10,10,10" Grid.Column="1" Grid.ColumnSpan="2" | ||||
|                                         ItemTemplate="{StaticResource ModifierTemplate}" Delimiter=", " AllItemsSelectedContent="Alle" | ||||
|                                         ItemSelectionChanged="ModifiersInput_SelectionChanged"/> | ||||
|                                         SelectionChanged="ModifiersInput_SelectionChanged"/> | ||||
|  | ||||
|                     <Label Content="Anmerkung:" Margin="10,40,0,10"/> | ||||
|                     <TextBox x:Name="PartCommentInput" Grid.Column="1" Margin="0,40,10,10" Grid.ColumnSpan="2" | ||||
|   | ||||
| @@ -19,7 +19,6 @@ using System.Windows; | ||||
| using System.Windows.Controls; | ||||
| using System.Windows.Input; | ||||
| using System.Windows.Threading; | ||||
| using Xceed.Wpf.Toolkit.Primitives; | ||||
|  | ||||
| namespace Elwig.Windows { | ||||
|     public partial class DeliveryAdminWindow : AdministrationWindow { | ||||
| @@ -2062,7 +2061,7 @@ namespace Elwig.Windows { | ||||
|  | ||||
|         } | ||||
|  | ||||
|         private void ModifiersInput_SelectionChanged(object sender, ItemSelectionChangedEventArgs evt) { | ||||
|         private void ModifiersInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) { | ||||
|             if (!IsEditing && !IsCreating) return; | ||||
|             var mod = ModifiersInput.SelectedItems.Cast<Modifier>(); | ||||
|             var source = ModifiersInput.ItemsSource.Cast<Modifier>(); | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | ||||
|         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | ||||
|         xmlns:local="clr-namespace:Elwig.Windows" | ||||
|         xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" | ||||
|         xmlns:ctrl="clr-namespace:Elwig.Controls" | ||||
|         mc:Ignorable="d" | ||||
|         MinWidth="650" MinHeight="400" Height="600" Width="950" | ||||
|         Closed="Window_Closed" | ||||
| @@ -117,26 +117,26 @@ | ||||
|                                      Checked="RecipientsInput_Changed" Unchecked="RecipientsInput_Changed"/> | ||||
|  | ||||
|                         <Label Content="Zwst.:" x:Name="MemberBranchLabel" Margin="10,120,0,10"/> | ||||
|                         <xctk:CheckComboBox x:Name="MemberBranchInput" AllItemsSelectedContent="Alle Stammzweigstellen" Delimiter=", " DisplayMemberPath="Name" | ||||
|                         <ctrl:CheckComboBox x:Name="MemberBranchInput" AllItemsSelectedContent="Alle Stammzweigstellen" Delimiter=", " DisplayMemberPath="Name" | ||||
|                                             Margin="50,120,10,10" VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="25" | ||||
|                                             ItemSelectionChanged="MemberInput_SelectionChanged"/> | ||||
|                                             SelectionChanged="MemberInput_SelectionChanged"/> | ||||
|  | ||||
|                         <Label Content="Gem.:" x:Name="MemberKgLabel" Margin="10,150,0,10"/> | ||||
|                         <xctk:CheckComboBox x:Name="MemberKgInput" AllItemsSelectedContent="Alle Stammgemeinden" Delimiter=", " DisplayMemberPath="Name" | ||||
|                         <ctrl:CheckComboBox x:Name="MemberKgInput" AllItemsSelectedContent="Alle Stammgemeinden" Delimiter=", " DisplayMemberPath="Name" | ||||
|                                             IsSelectAllActive="True" SelectAllContent="Alle Stammgemeinden" | ||||
|                                             Margin="50,150,10,10" VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="25" | ||||
|                                             ItemSelectionChanged="MemberInput_SelectionChanged"/> | ||||
|                                             SelectionChanged="MemberInput_SelectionChanged"/> | ||||
|  | ||||
|                         <Label Content="Vtrg.:" x:Name="MemberAreaComLabel" Margin="10,180,0,10"/> | ||||
|                         <xctk:CheckComboBox x:Name="MemberAreaComInput" AllItemsSelectedContent="Alle Vertragsarten" Delimiter=", " DisplayMemberPath="VtrgId" | ||||
|                         <ctrl:CheckComboBox x:Name="MemberAreaComInput" AllItemsSelectedContent="Alle Vertragsarten" Delimiter=", " DisplayMemberPath="VtrgId" | ||||
|                                             IsSelectAllActive="True" SelectAllContent="Alle Vertragsarten" | ||||
|                                             Margin="50,180,10,10" VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="25" | ||||
|                                             ItemSelectionChanged="MemberInput_SelectionChanged"/> | ||||
|                                             SelectionChanged="MemberInput_SelectionChanged"/> | ||||
|  | ||||
|                         <xctk:CheckComboBox x:Name="MemberCustomInput" AllItemsSelectedContent="Alle Mitglieder" Delimiter=", " DisplayMemberPath="AdministrativeName" | ||||
|                         <ctrl:CheckComboBox x:Name="MemberCustomInput" AllItemsSelectedContent="Alle Mitglieder" Delimiter=", " DisplayMemberPath="AdministrativeName" | ||||
|                                             IsSelectAllActive="True" SelectAllContent="Alle Mitglieder" | ||||
|                                             Margin="10,120,10,10" VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="25" | ||||
|                                             ItemSelectionChanged="MemberInput_SelectionChanged"/> | ||||
|                                             SelectionChanged="MemberInput_SelectionChanged"/> | ||||
|                     </Grid> | ||||
|                 </GroupBox> | ||||
|  | ||||
|   | ||||
| @@ -143,26 +143,26 @@ namespace Elwig.Windows { | ||||
|                 .OrderBy(b => b.Name) | ||||
|                 .ToListAsync(), MemberInput_SelectionChanged); | ||||
|             if (MemberBranchInput.SelectedItems.Count == 0) { | ||||
|                 MemberBranchInput.ItemSelectionChanged -= MemberInput_SelectionChanged; | ||||
|                 MemberBranchInput.SelectionChanged -= MemberInput_SelectionChanged; | ||||
|                 MemberBranchInput.SelectAll(); | ||||
|                 MemberBranchInput.ItemSelectionChanged += MemberInput_SelectionChanged; | ||||
|                 MemberBranchInput.SelectionChanged += MemberInput_SelectionChanged; | ||||
|             } | ||||
|             ControlUtils.RenewItemsSource(MemberKgInput, await ctx.Katastralgemeinden | ||||
|                 .Where(k => k.WbKg!.Members.Any()) | ||||
|                 .OrderBy(k => k.Name) | ||||
|                 .ToListAsync(), MemberInput_SelectionChanged); | ||||
|             if (MemberKgInput.SelectedItems.Count == 0) { | ||||
|                 MemberKgInput.ItemSelectionChanged -= MemberInput_SelectionChanged; | ||||
|                 MemberKgInput.SelectionChanged -= MemberInput_SelectionChanged; | ||||
|                 MemberKgInput.SelectAll(); | ||||
|                 MemberKgInput.ItemSelectionChanged += MemberInput_SelectionChanged; | ||||
|                 MemberKgInput.SelectionChanged += MemberInput_SelectionChanged; | ||||
|             } | ||||
|             ControlUtils.RenewItemsSource(MemberAreaComInput, await ctx.AreaCommitmentTypes | ||||
|                 .OrderBy(a => a.VtrgId) | ||||
|                 .ToListAsync(), MemberInput_SelectionChanged); | ||||
|             if (MemberAreaComInput.SelectedItems.Count == 0) { | ||||
|                 MemberAreaComInput.ItemSelectionChanged -= MemberInput_SelectionChanged; | ||||
|                 MemberAreaComInput.SelectionChanged -= MemberInput_SelectionChanged; | ||||
|                 MemberAreaComInput.SelectAll(); | ||||
|                 MemberAreaComInput.ItemSelectionChanged += MemberInput_SelectionChanged; | ||||
|                 MemberAreaComInput.SelectionChanged += MemberInput_SelectionChanged; | ||||
|             } | ||||
|             ControlUtils.RenewItemsSource(MemberCustomInput, await ctx.Members | ||||
|                 .Where(m => m.IsActive) | ||||
| @@ -178,9 +178,9 @@ namespace Elwig.Windows { | ||||
|                 .Include(m => m.BillingAddress!.PostalDest.AtPlz!.Country) | ||||
|                 .ToListAsync(), MemberInput_SelectionChanged); | ||||
|             if (MemberCustomInput.SelectedItems.Count == 0) { | ||||
|                 MemberCustomInput.ItemSelectionChanged -= MemberInput_SelectionChanged; | ||||
|                 MemberCustomInput.SelectionChanged -= MemberInput_SelectionChanged; | ||||
|                 MemberCustomInput.SelectAll(); | ||||
|                 MemberCustomInput.ItemSelectionChanged += MemberInput_SelectionChanged; | ||||
|                 MemberCustomInput.SelectionChanged += MemberInput_SelectionChanged; | ||||
|             } | ||||
|  | ||||
|             await UpdateRecipients(ctx); | ||||
| @@ -296,7 +296,7 @@ namespace Elwig.Windows { | ||||
|             await UpdateRecipients(ctx); | ||||
|         } | ||||
|  | ||||
|         private async void MemberInput_SelectionChanged(object sender, RoutedEventArgs evt) { | ||||
|         private async void MemberInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) { | ||||
|             using var ctx = new AppDbContext(); | ||||
|             await UpdateRecipients(ctx); | ||||
|         } | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
|             <Setter Property="HorizontalAlignment" Value="Center"/> | ||||
|             <Setter Property="FontSize" Value="14"/> | ||||
|             <Setter Property="Padding" Value="9,3"/> | ||||
|             <Setter Property="Height" Value="32"/> | ||||
|             <Setter Property="Height" Value="35"/> | ||||
|             <Setter Property="Width" Value="200"/> | ||||
|         </Style> | ||||
|     </Window.Resources> | ||||
| @@ -54,46 +54,47 @@ | ||||
|         </Grid> | ||||
|  | ||||
|         <Button x:Name="MemberAdminButton" Content="Mitglieder" Click="MemberAdminButton_Click" | ||||
|                 Margin="0,180,210,0"/> | ||||
|                 Margin="0,170,205,0"/> | ||||
|         <Button x:Name="MailButton" Content="Rundschreiben" Click="MailButton_Click" | ||||
|                 Margin="210,180,0,0"/> | ||||
|                 Margin="205,170,0,0"/> | ||||
|         <Button x:Name="DeliveryAdminButton" Content="Lieferungen" Click="DeliveryAdminButton_Click" | ||||
|                 Margin="0,220,210,0"/> | ||||
|                 Margin="0,210,205,0"/> | ||||
|         <Button x:Name="ReceiptButton" Content="Übernahme" Click="ReceiptButton_Click" | ||||
|                 Margin="210,220,0,0"/> | ||||
|                 Margin="205,210,0,0"/> | ||||
|         <Button x:Name="BaseDataButton" Content="Stammdaten" Click="BaseDataButton_Click" | ||||
|                 Margin="0,260,210,0"/> | ||||
|                 Margin="0,250,205,0"/> | ||||
|         <Button x:Name="RegistrationButton" Content="Anmeldungen" IsEnabled="False" | ||||
|                 Margin="210,260,0,0"/> | ||||
|                 Margin="205,250,0,0"/> | ||||
|  | ||||
|         <Expander x:Name="SeasonFinish" Header="Leseabschluss" Expanded="SeasonFinish_Expanded" Collapsed="SeasonFinish_Collapsed" | ||||
|                   HorizontalAlignment="Center" Width="410" Margin="0,300,0,0" VerticalAlignment="Top"> | ||||
|         <Expander x:Name="SeasonFinish" Header="Leseabschluss" SnapsToDevicePixels="True" | ||||
|                   Expanded="SeasonFinish_Expanded" Collapsed="SeasonFinish_Collapsed" | ||||
|                   HorizontalAlignment="Center" Width="407" Margin="0,290,0,0" VerticalAlignment="Top"> | ||||
|             <Grid> | ||||
|                 <Border BorderBrush="LightGray" BorderThickness="1"/> | ||||
|                 <Label Content="Saison:" Margin="0,10,100,0" VerticalAlignment="Top" HorizontalAlignment="Center" Padding="2,4,2,4" Height="25"/> | ||||
|                 <Label Content="Saison:" Margin="0,13,100,0" VerticalAlignment="Top" HorizontalAlignment="Center" Padding="2,4,2,4" Height="25"/> | ||||
|                 <ctrl:IntegerUpDown x:Name="SeasonInput" Height="25" Width="56" FontSize="14" Minimum="1900" Maximum="9999" | ||||
|                                     Margin="0,10,0,0" VerticalAlignment="Top" HorizontalAlignment="Center" | ||||
|                                     Margin="0,13,0,0" VerticalAlignment="Top" HorizontalAlignment="Center" | ||||
|                                     TextChanged="SeasonInput_TextChanged"/> | ||||
|  | ||||
|                 <Button x:Name="DeliveryConfirmationButton" Content="Anlieferungsbestätigung" | ||||
|                         Click="DeliveryConfirmationButton_Click" | ||||
|                         Margin="0,50,200,10" Width="190"/> | ||||
|                         Margin="0,50,195,10" Width="190"/> | ||||
|  | ||||
|                 <Button x:Name="PaymentButton" Content="Auszahlung" | ||||
|                         Click="PaymentButton_Click" | ||||
|                         Margin="200,50,0,10" Width="190"/> | ||||
|                         Margin="195,50,0,10" Width="190"/> | ||||
|  | ||||
|                 <Button x:Name="OverUnderDeliveryButton" Content="Über-/Unterlieferungen" | ||||
|                         Click="OverUnderDeliveryButton_Click" | ||||
|                         Margin="0,90,200,10" Width="190"/> | ||||
|                         Margin="0,90,195,10" Width="190"/> | ||||
|  | ||||
|                 <Button x:Name="PaymentAdjustmentButton" Content="Anpassung" | ||||
|                         Click="PaymentAdjustmentButton_Click" IsEnabled="False" | ||||
|                         Margin="200,90,0,10" Width="190"/> | ||||
|                         Margin="195,90,0,10" Width="190"/> | ||||
|  | ||||
|                 <Button x:Name="BreakdownButton" Content="Sorten-/Qual.aufteilung" | ||||
|                         Click="BreakdownButton_Click" | ||||
|                         Margin="0,130,200,10" Width="190"/> | ||||
|                         Margin="0,130,195,10" Width="190"/> | ||||
|             </Grid> | ||||
|         </Expander> | ||||
|     </Grid> | ||||
|   | ||||
| @@ -35,7 +35,7 @@ namespace Elwig.Windows { | ||||
|         } | ||||
|  | ||||
|         private void Window_Closing(object sender, CancelEventArgs evt) { | ||||
|             if (App.NumWindows > 1 && !App.ForceShutdown) { | ||||
|             if (App.NumWindows > 1 && !App.ForceShutdown && !App.Current.Windows.Cast<Window>().Any(w => ((w as AdministrationWindow)?.IsEditing ?? false) || ((w as AdministrationWindow)?.IsCreating ?? false))) { | ||||
|                 var res = MessageBox.Show("Es sind noch weitere Fenster geöffnet.\nSollen alle Fenster geschlossen werden?", | ||||
|                     "Elwig beenden", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No); | ||||
|                 if (res != MessageBoxResult.Yes) { | ||||
|   | ||||
| @@ -424,7 +424,7 @@ namespace Elwig.Windows { | ||||
|                 Menu_EbicsSave.IsEnabled = false; | ||||
|                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||
|                 try { | ||||
|                     using var e = new Ebics(v, d.FileName, 9); | ||||
|                     using var e = new Ebics(v, d.FileName, App.Client.ExportEbicsVersion, (Ebics.AddressMode)App.Client.ExportEbicsAddress); | ||||
|                     await e.ExportAsync(Transaction.FromPaymentVariant(v)); | ||||
|                 } catch (Exception exc) { | ||||
|                     MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|   | ||||
| @@ -16,9 +16,9 @@ namespace Tests.DocumentTests { | ||||
|                 Assert.That(text, Contains.Substring("Mitgliederliste")); | ||||
|                 Assert.That(text, Contains.Substring("Alle Mitglieder")); | ||||
|                 Assert.That(text, Contains.Substring(""" | ||||
|                      101 MUSTERMANN Max                 Winzerstraße 1            2223   Hohenruppersdorf   1472583     0   Hohenruppersdorf | ||||
|                      102 WEINBAUER Wernhardt            Winzerstraße 2            2223   Hohenruppersdorf   4725836     0   Hohenruppersdorf | ||||
|                          W&B Weinbauer GesbR            Winzerstraße 2            2223   Hohenruppersdorf | ||||
|                      101 MUSTERMANN Max                 Winzerstraße 1             2223   Hohenruppersdorf   1472583     0   Hohenruppersdorf | ||||
|                      102 WEINBAUER Wernhardt            Winzerstraße 2             2223   Hohenruppersdorf   4725836     0   Hohenruppersdorf | ||||
|                          W&B Weinbauer GesbR            Winzerstraße 2             2223   Hohenruppersdorf | ||||
|                     """)); | ||||
|             }); | ||||
|         } | ||||
|   | ||||
| @@ -14,16 +14,16 @@ namespace Tests.HelperTests { | ||||
|         public static readonly string FileName = Path.Combine(Path.GetTempPath(), "test_ebics.xml"); | ||||
|         public static readonly string Iban = "AT123456789012345678"; | ||||
|  | ||||
|         private static void ValidateSchema(string xmlPath, int version) { | ||||
|         private static void ValidateSchema(string xmlPath, int version, string? extra = null) { | ||||
|             XmlDocument xml = new(); | ||||
|             xml.Load(xmlPath); | ||||
|             var schema = new XmlTextReader(Assembly.GetExecutingAssembly() | ||||
|                 .GetManifestResourceStream($"Tests.Resources.Schemas.pain.001.001.{version:00}.xsd")!); | ||||
|                 .GetManifestResourceStream($"Tests.Resources.Schemas.pain.001.001.{version:00}{extra}.xsd")!); | ||||
|             xml.Schemas.Add(null, schema); | ||||
|             xml.Validate(null); | ||||
|         } | ||||
|  | ||||
|         private static async Task CreateXmlFile(int version) { | ||||
|         private static async Task CreateXmlFile(int version, Ebics.AddressMode mode = Ebics.AddressMode.Full) { | ||||
|             var v = new PaymentVar() { | ||||
|                 Year = 2020, | ||||
|                 AvNr = 1, | ||||
| @@ -35,7 +35,7 @@ namespace Tests.HelperTests { | ||||
|             using var ctx = new AppDbContext(); | ||||
|             var members = ctx.Members.ToList(); | ||||
|             Assert.That(members, Has.Count.GreaterThan(0)); | ||||
|             using var exporter = new Ebics(v, FileName, version); | ||||
|             using var exporter = new Ebics(v, FileName, version, mode); | ||||
|             await exporter.ExportAsync(members.Select(m => new Transaction(m, 1234.56m, "EUR", m.MgNr % 100))); | ||||
|         } | ||||
|  | ||||
| @@ -64,6 +64,12 @@ namespace Tests.HelperTests { | ||||
|             Assert.DoesNotThrow(() => ValidateSchema(FileName, 3)); | ||||
|         } | ||||
|  | ||||
|         [Test] | ||||
|         public async Task Test_CustomerCreditTransferInitiationV03_AT() { | ||||
|             await CreateXmlFile(3, Ebics.AddressMode.Lines); | ||||
|             Assert.DoesNotThrow(() => ValidateSchema(FileName, 3, ".AT")); | ||||
|         } | ||||
|  | ||||
|         [Test] | ||||
|         public async Task Test_CustomerCreditTransferInitiationV04() { | ||||
|             await CreateXmlFile(4); | ||||
|   | ||||
							
								
								
									
										1340
									
								
								Tests/Resources/Schemas/pain.001.001.03.AT.xsd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1340
									
								
								Tests/Resources/Schemas/pain.001.001.03.AT.xsd
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user