load method
load a book.
Implementation
void load({Book? book, Settings? conf}) {
if (book == null) book = Book();
if (conf != null) settings = conf;
if (conf != null) settings = conf;
if (settings["type"] != "csv") {
print("Error: csv handler can't read '${settings["type"]}' only .csv");
return;
}
print("load Book: ${settings["base"]} ${settings["type"]} ");
var srcFile = File(settings["base"] + "." + settings["type"]);
if (srcFile.existsSync()) {
book.name = settings["base"].split("/").last;
//print("file exists\n");
String rawTxt = srcFile.readAsStringSync();
//print("got file $rawTxt");
List<List<dynamic>> rowsAsListOfValues =
const CsvToListConverter().convert(rawTxt);
//print("extracted $rowsAsListOfValues");
String mode = "none";
List header = [];
int name = 0,
desc = 0,
valuta = 0,
cur = 0,
budget = 0,
datum = 0,
kmin = 0,
kplu = 0;
for (int i = 0; i < rowsAsListOfValues.length; i++) {
var actLine = rowsAsListOfValues[i];
if (actLine.length == 1) {
if (actLine[0] == "KPL")
mode = "kpl";
else if (actLine[0] == "JRL")
mode = "jrl";
else if (actLine[0] == "OPS")
mode = "ops";
else {
print("Error , unknown type: ${actLine[0]}");
mode = "none";
}
i++;
header = rowsAsListOfValues[i];
desc = (header.indexOf("desc") >= 0)
? header.indexOf("desc")
: header.indexOf("dsc");
valuta = header.indexOf("valuta");
cur = header.indexOf("cur");
if (mode == "kpl") {
name = header.indexOf("kto");
budget = header.indexOf("budget");
} else if (mode == "jrl") ;
{
datum = header.indexOf("date");
kplu = header.indexOf("ktoplus");
kmin = header.indexOf("ktominus");
}
} else {
//print("treating[$mode] ${actLine}");
if (mode == "kpl") {
if (book.kpl == null)
print("treating[$mode] ${actLine} ${book.kpl}");
Konto res = book.kpl.put(
"${actLine[name]}",
Konto(
name: "${actLine[name]}",
desc: actLine[desc],
plan: book.kpl,
valuta: actLine[valuta],
cur: actLine[cur],
budget: actLine[budget]));
//print("added [$res]");
} else if (mode == "jrl") {
//print("treating[$mode] ${actLine}");
DateTime point = DateTime.parse(actLine[datum]);
Konto? minus = book.kpl.get("${actLine[kmin]}");
Konto? plus = book.kpl.get("${actLine[kplu]}");
//num vval = num.parse(actLine[valuta]);
num vval = actLine[valuta];
JrlLine res = book.jrl.add(JrlLine(
datum: point,
kmin: minus,
kplu: plus,
desc: actLine[desc],
cur: actLine[cur],
valuta: vval));
//print("added [$res]");
} else if (mode == "ops") {
DateTime point = (actLine[1]!= null && actLine[1].isNotEmpty)?DateTime.parse(actLine[1]):DateTime.now();
//print("parsing ops $actLine");
//try
{
//"tag","date","compte_accredite","compte_retrait","description","monnaie","montant","modif"
if(book.ops[actLine[0]] == null )
{
//print("adding op ${actLine[0]} to ${book.name} with $actLine");
book.ops[actLine[0]] = Operation(book,name: actLine[0].trim(), date: point,cplus: actLine[3],cminus: actLine[2],desc: actLine[4].trim(),cur: actLine[5].trim(), valuta: actLine[6], mod:actLine[7].trim());
//print("created op ${actLine[0]} in book ${book.ops[actLine[0]].book.name}");
}
else
{
Operation anOp = book.ops[actLine[0]] as Operation;
anOp.add(date: point,cplus: actLine[2],cminus: actLine[3],desc: actLine[4],cur: actLine[5], valuta: actLine[6], mod:actLine[7]);
//print("modified ${book.ops[actLine[0]]}");
}
}
//catch(e) { print("failed to parse $actLine $e"); }
}
}
}
} else {
print("book file doesn't exist");
}
}