82 lines
2.9 KiB
Nix
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
|
|
);
|
|
}
|