From 8b0f1e35c869d206cc7217843b07b10e0e8add56 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Sat, 2 Sep 2023 22:23:12 +0200 Subject: [PATCH] BaseDataWindow: implement client data saving --- Elwig/Helpers/ClientParameters.cs | 57 ++++++++++++- Elwig/Windows/BaseDataWindow.xaml | 21 ++++- Elwig/Windows/BaseDataWindow.xaml.cs | 121 +++++++++++++++++++++++---- 3 files changed, 177 insertions(+), 22 deletions(-) diff --git a/Elwig/Helpers/ClientParameters.cs b/Elwig/Helpers/ClientParameters.cs index f724993..e2c4301 100644 --- a/Elwig/Helpers/ClientParameters.cs +++ b/Elwig/Helpers/ClientParameters.cs @@ -1,6 +1,8 @@ using Elwig.Models; +using Microsoft.Data.Sqlite; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace Elwig.Helpers { public class ClientParameters { @@ -24,8 +26,8 @@ namespace Elwig.Helpers { Ort = value.AtPlz.Ort.Name; } } - public int Plz { get; private set; } - public string Ort { get; private set; } + public int Plz; + public string Ort; public string Address; public string Sender1 => $"{NameShort} | {Address} | {Plz} {Ort}"; public string Sender2; @@ -73,7 +75,6 @@ namespace Elwig.Helpers { UstIdNr = parameters.GetValueOrDefault("CLIENT_USTIDNR"); Bic = parameters.GetValueOrDefault("CLIENT_BIC"); Iban = parameters.GetValueOrDefault("CLIENT_IBAN"); - Sender2 = parameters.GetValueOrDefault("DOCUMENT_SENDER") ?? ""; DeliveryObligation = int.Parse(parameters["DELIVERY_OBLIGATION"] ?? ""); DeliveryRight = int.Parse(parameters["DELIVERY_RIGHT"] ?? ""); @@ -81,10 +82,58 @@ namespace Elwig.Helpers { VatReduced = decimal.Parse((parameters["VAT_REDUCED"] ?? "").Replace(".", ",")); VatFlatRate = decimal.Parse((parameters["VAT_FLATRATE"] ?? "").Replace(".", ",")); - TextDeliveryNote = parameters.GetValueOrDefault("TEXT_DELIVERY_NOTE"); + Sender2 = parameters.GetValueOrDefault("DOCUMENT_SENDER") ?? ""; + TextDeliveryNote = parameters.GetValueOrDefault("TEXT_DELIVERYNOTE"); } catch { throw new KeyNotFoundException(); } } + + private IEnumerable<(string, string?)> GetParamValues() { + return new (string, string?)[] { + ("CLIENT_NAME_TOKEN", NameToken), + ("CLIENT_NAME_SHORT", NameShort), + ("CLIENT_NAME", Name), + ("CLIENT_NAME_SUFFIX", NameSuffix), + ("CLIENT_NAME_TYPE", NameType), + ("CLIENT_PLZ", Plz.ToString()), + ("CLIENT_ORT", Ort), + ("CLIENT_ADDRESS", Address), + ("CLIENT_PHONE", PhoneNr), + ("CLIENT_FAX", FaxNr), + ("CLIENT_EMAIL", EmailAddress), + ("CLIENT_WEBSITE", Website), + ("CLIENT_LFBISNR", LfbisNr), + ("CLIENT_USTIDNR", UstIdNr), + ("CLIENT_BIC", Bic), + ("CLIENT_IBAN", Iban), + ("DELIVERY_OBLIGATION", DeliveryObligation.ToString()), + ("DELIVERY_RIGHT", DeliveryRight.ToString()), + ("VAT_NORMAL", VatNormal.ToString().Replace(",", ".")), + ("VAT_REDUCED", VatReduced.ToString().Replace(",", ".")), + ("VAT_FLATRATE", VatFlatRate.ToString().Replace(",", ".")), + ("DOCUMENT_SENDER", Sender2), + ("TEXT_DELIVERYNOTE", TextDeliveryNote), + }; + } + + public async Task UpdateValues() { + using var cnx = await AppDbContext.ConnectAsync(); + using var cmd = cnx.CreateCommand(); + var pv = GetParamValues(); + cmd.CommandText = "INSERT INTO client_parameter (param, value) VALUES " + + string.Join(", ", pv.Select((pv, i) => $"(@p{i}, " + (pv.Item2 != null ? $"@v{i}" : "NULL") + ")")) + + " ON CONFLICT DO UPDATE SET value = excluded.value"; + + int i = 0; + foreach (var (p, v) in pv) { + cmd.Parameters.Add(new SqliteParameter($"@p{i}", p)); + if (v != null) + cmd.Parameters.Add(new SqliteParameter($"@v{i}", v)); + i++; + } + + await cmd.ExecuteNonQueryAsync(); + } } } diff --git a/Elwig/Windows/BaseDataWindow.xaml b/Elwig/Windows/BaseDataWindow.xaml index ff24aa2..0f0ebdb 100644 --- a/Elwig/Windows/BaseDataWindow.xaml +++ b/Elwig/Windows/BaseDataWindow.xaml @@ -35,7 +35,7 @@ - + @@ -71,13 +71,16 @@ + +