Export/Ebics: Implement version customization
Some checks failed
Test / Run tests (push) Failing after 2m22s
Some checks failed
Test / Run tests (push) Failing after 2m22s
This commit is contained in:
@ -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),
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -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>
|
||||
""");
|
||||
if (ShowAddresses != AddressMode.Omit) {
|
||||
var full = ShowAddresses == AddressMode.Full;
|
||||
await Writer.WriteLineAsync($"""
|
||||
<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>
|
||||
{(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")}>
|
||||
</PstlAdr>
|
||||
""");
|
||||
}
|
||||
await Writer.WriteLineAsync($"""
|
||||
</Cdtr>
|
||||
<CdtrAcct><Id><IBAN>{tx.Member.Iban!}</IBAN></Id></CdtrAcct>
|
||||
<RmtInf><Ustrd>{SecurityElement.Escape(info)}</Ustrd></RmtInf>
|
||||
|
@ -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>
|
||||
|
||||
<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">
|
||||
|
@ -94,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() {
|
||||
@ -146,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) {
|
||||
@ -373,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();
|
||||
}
|
||||
@ -400,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();
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user