Sebastian Walz 860d31cee1
Tohu vaBohu
2023-04-21 00:22:52 +02:00

82 lines
2.9 KiB
Nix

{ common, core, helpers, ... }:
let
inherit(common) Transaction;
inherit(core) list path string;
inherit(helpers) parseAmountComma parseGermanDateTime;
convertTransaction
= { lookUpAccount, self, ... }:
{ amount, client, currency, dateTime, description, ... } @ inner:
let
client'
= lookUpAccount client;
in
Transaction
{
inherit currency dateTime description inner;
credit = { ${client'.uid} = amount; };
debit = { ${self.uid} = amount; };
};
parseLine
= line:
let
columns = string.splitAt "(\",\"|^\"|\"$)" line;
currency = list.get columns 5;
in
{
inherit currency;
amount = parseAmountComma (list.get columns 8) currency;
amount' = parseAmountComma (list.get columns 6) currency;
fee = parseAmountComma (list.get columns 7) currency;
balance = parseAmountComma (list.get columns 9) currency;
charge = parseAmountComma (list.get columns 15) currency;
client
= {
account = list.get columns 14;
bank = list.get columns 13;
email = list.get columns 11;
uid
= let
uid = list.get columns 12;
in
if uid != ""
then
uid
else
"PayPal";
};
code = list.get columns 10;
code' = list.get columns 18;
dateTime = parseGermanDateTime (list.get columns 1) (list.get columns 2);
description = list.get columns 4;
invoiceID = list.get columns 17;
timeZone = list.get columns 3;
vat = parseAmountComma (list.get columns 16) currency;
};
parseFile
= fileName:
let
lines
= list.filter
(line: line != "")
(string.splitLines (path.readFile fileName));
in
list.map
parseLine
(list.tail lines);
in
{
journal
= files:
{ ... } @ env:
list.map
(convertTransaction env)
(
list.concatMap
parseFile
files
);
}