BaseDataWindow: implement client data saving

This commit is contained in:
2023-09-02 22:23:12 +02:00
parent 67dbf62eb7
commit 8b0f1e35c8
3 changed files with 177 additions and 22 deletions

View File

@ -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();
}
}
}