.gitea
Elwig
Controls
Dialogs
Documents
Helpers
Billing
Export
Bki.cs
Csv.cs
Ebics.cs
Elba.cs
ElwigData.cs
IBankingExporter.cs
IExporter.cs
Ods.cs
Printing
Weighing
ActionCommand.cs
AppDbContext.cs
AppDbUpdater.cs
ClientParameters.cs
Config.cs
ControlUtils.cs
ExportMode.cs
Extensions.cs
NullItem.cs
TempFile.cs
Utils.cs
Validator.cs
Models
Properties
Resources
Services
Themes
ViewModels
Windows
App.xaml
App.xaml.cs
AssemblyInfo.cs
Elwig.csproj
app.manifest
fetch-resources.bat
Installer
Setup
Tests
.gitignore
CHANGELOG.md
Elwig.sln
README.md
68 lines
3.3 KiB
C#
68 lines
3.3 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System;
|
|
|
|
namespace Elwig.Helpers.Export {
|
|
|
|
using Row = Tuple<(string?, string?, string?, string?, string, int, string, int), (string, int, string, string, string, int, string, double, double)>;
|
|
|
|
public class Bki : Csv<Row> {
|
|
|
|
private readonly string _clientData;
|
|
|
|
public Bki(string filename) : base(filename, ';', Encoding.Latin1) {
|
|
Header = """
|
|
EDV-Liste zum automatischen Einlesen in die Weindatenbank;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
Stammdaten;;;;;;;;;;;;;;Transportschein;;;;;;;;;;;;;;;;
|
|
Empfänger:;;;;;;;Versender:;;;;;;;;;;;;;;;;;;;;;;;
|
|
Betriebsnr;Name od. Firmenname;Vorname;Straße;Hausnr;Plz;Ort;Betriebsnr;Name od. Firmenname;Vorname;Straße;Hausnr;Plz;Ort;Datum der Lieferung;Menge in kg;Art;Weiß;Rot;Sorte1;Sorte2;Sorte3;Qualitätsstufe;Jahrgang;Herkunft;°KMW;°Oe;Vollablieferer;Ha Gesamt;Ha Ertragsfähig;Flächenbindung in Ha für AMA
|
|
""";
|
|
var c = App.Client;
|
|
var (a1, a2) = Utils.SplitAddress(c.Address);
|
|
_clientData = $"{c.LfbisNr};{c.NameFull};;{a1};\t{a2};{c.Plz};{c.Ort}";
|
|
}
|
|
|
|
public async Task ExportAsync(int year) {
|
|
using var cnx = await AppDbContext.ConnectAsync();
|
|
using var cmd = cnx.CreateCommand();
|
|
cmd.CommandText = $"""
|
|
SELECT lfbis_nr, name, other_names, billing_name, address, plz, ort, area,
|
|
date, weight, type, sortid, qualid, year, hkid, kmw, oe
|
|
FROM v_bki_delivery
|
|
WHERE year = {year}
|
|
""";
|
|
var r = await cmd.ExecuteReaderAsync();
|
|
List<Row> rows = [];
|
|
while (await r.ReadAsync()) {
|
|
rows.Add(new(
|
|
(r.IsDBNull(0) ? null : r.GetString(0), r.IsDBNull(1) ? null : r.GetString(1), r.IsDBNull(2) ? null : r.GetString(2), r.IsDBNull(3) ? null : r.GetString(3), r.GetString(4), r.GetInt32(5), r.GetString(6), r.GetInt32(7)),
|
|
(r.GetString(8), r.GetInt32(9), r.GetString(10), r.GetString(11), r.GetString(12), r.GetInt32(13), r.GetString(14), r.GetDouble(15), r.GetDouble(16))
|
|
));
|
|
}
|
|
|
|
await ExportAsync(rows);
|
|
}
|
|
|
|
public void Export(int year) {
|
|
ExportAsync(year).GetAwaiter().GetResult();
|
|
}
|
|
|
|
public override string FormatRow(Row row) {
|
|
var (member, delivery) = row;
|
|
var (lfBisNr, familyName, name, billingName, address, plz, ort, area) = member;
|
|
var (date, weight, type, sortid, qualid, year, hkid, kmw, oe) = delivery;
|
|
|
|
var (n1, n2) = billingName == null ? (familyName, name) : Utils.SplitName(billingName, familyName);
|
|
var (a1, a2) = Utils.SplitAddress(address);
|
|
var memberData = $"{lfBisNr};{n1};{n2};{a1};\t{a2};{plz};{ort}";
|
|
var deliveryData = $"{string.Join(".", date.Split("-").Reverse())};{weight};TB;{(type == "W" ? "J" : "")};{(type == "R" ? "J" : "")};{sortid};;;{qualid};{year};{hkid};{kmw:0.0};{oe:0}";
|
|
var vollData = $"N;;;{area / 10_000.0}";
|
|
|
|
return $"{_clientData};{memberData};{deliveryData};{vollData}";
|
|
}
|
|
}
|
|
}
|