version 1.3, 2020/10/18 23:47:35 |
version 1.6, 2020/11/10 19:08:06 |
|
|
); |
); |
|
|
my $translations = { |
my $translations = { |
|
en => {}, |
de => { |
de => { |
'Account list' => 'Kontenblatt', |
'Account list' => 'Kontenblatt', |
'Assets' => 'Aktiva', |
'Assets' => 'Aktiva', |
Line 71 my $translations = { |
|
Line 72 my $translations = { |
|
|
|
sub translate ($) { |
sub translate ($) { |
my $en = shift; |
my $en = shift; |
return $translations ? $translations->{$en} : $en; |
return $translations->{$en} || $en; |
} |
} |
|
|
sub translate_type ($) { |
sub translate_type ($) { |
my $type = shift; |
my $type = shift; |
my $en = $atypes{substr $type, 0, 1} || '?'; |
my $en = $atypes{substr $type, 0, 1}; |
return translate $en || $type; |
return $en ? translate $en : $type; |
} |
} |
|
|
# Handles account entries (not journal entries) with respect to |
# Handles account entries (not journal entries) with respect to |
|
|
getopts 'abcL:nps' or usage; |
getopts 'abcL:nps' or usage; |
$opt_a = $opt_b = $opt_c = $opt_p = $opt_s = 1 |
$opt_a = $opt_b = $opt_c = $opt_p = $opt_s = 1 |
unless $opt_a || $opt_b || $opt_c || $opt_n || $opt_p || $opt_s; |
unless $opt_a || $opt_b || $opt_c || $opt_n || $opt_p || $opt_s; |
$opt_L ||= 'en'; |
unless ($translations = $translations->{$opt_L || 'en'}) { |
if ($opt_L eq 'de') { |
printf STDERR "unsupported language: -L %s\n", $opt_L; |
$translations = $translations->{$opt_L}; |
|
} elsif ($opt_L eq 'en') { |
|
undef $opt_L; |
|
undef $translations; |
|
} else { |
|
printf STDERR "unsupported language %s\n", $opt_L; |
|
usage; |
usage; |
} |
} |
|
|
|
|
my ($amount, $text) = ($1, $2); |
my ($amount, $text) = ($1, $2); |
my $cc = $1 if $text =~ s/\[(.*?)\] *//; |
my $cc = $1 if $text =~ s/\[(.*?)\] *//; |
$accounts{$ano} or die "unknown account $ano: $line"; |
$accounts{$ano} or die "unknown account $ano: $line"; |
|
($accounts{$ano}{type} =~ /S/) == |
|
($accounts{$entry{contra}}{type} =~ /S/) |
|
or die "statistical vs. non-statistical account: " . |
|
"$entry{contra} split $line"; |
$amount *= $entry{amount} < 0 ? -1 : +1; |
$amount *= $entry{amount} < 0 ? -1 : +1; |
|
|
# Combine the text on the split side. |
# Combine the text on the split side. |
|
|
|
|
s/^(\d{4})(\d{2})(\d{2}) +// or die "$fn date parse error: $line"; |
s/^(\d{4})(\d{2})(\d{2}) +// or die "$fn date parse error: $line"; |
my ($year, $month, $day) = ($1, $2, $3); |
my ($year, $month, $day) = ($1, $2, $3); |
s/^([A-Z]+(?:\d+\/\d+)?) +// or die "$fn ID parse error: $line"; |
s/^(\S+) +// or die "$fn ID parse error: $line"; |
my $id = $1; |
my $id = $1; |
s/^(\d+) +// or die "$fn debit account number parse error: $line"; |
s/^(\d+) +// or die "$fn debit account number parse error: $line"; |
my $debit = $1; |
my $debit = $1; |
|
|
); |
); |
if ($debit) { |
if ($debit) { |
$accounts{$debit} or die "unknown debit account $debit: $line"; |
$accounts{$debit} or die "unknown debit account $debit: $line"; |
|
# The credit side may or may not be split. |
my %newentry = (%entry, contra => $credit, amount => $amount); |
my %newentry = (%entry, contra => $credit, amount => $amount); |
make_entry %newentry, $debit; |
make_entry %newentry, $debit; |
} else { |
} else { |
$credit or die "splitting both sides: $line"; |
$credit or die "splitting both sides: $line"; |
# Remember a credit side split. |
# The debit side is split, remember the entry. |
$entry{contra} = $credit; |
$entry{contra} = $credit; |
$entry{amount} = $amount; |
$entry{amount} = $amount; |
} |
} |
if ($credit) { |
if ($credit) { |
$accounts{$credit} |
$accounts{$credit} |
or die "unknown credit account $credit: $line"; |
or die "unknown credit account $credit: $line"; |
|
$debit && ($accounts{$debit}{type} =~ /S/) != |
|
($accounts{$credit}{type} =~ /S/) |
|
and die "statistical vs. non-statistical account: $line"; |
|
# The debit side may or may not be split. |
my %newentry = (%entry, contra => $debit, amount => -$amount); |
my %newentry = (%entry, contra => $debit, amount => -$amount); |
make_entry %newentry, $credit; |
make_entry %newentry, $credit; |
# This entry is not split: clear it after processing. |
# This entry is not split: clear it after processing. |
%entry = () if $debit; |
%entry = () if $debit; |
} else { |
} else { |
# Remember a debit side split. |
# The credit side is split, remember the entry. |
$entry{contra} = $debit; |
$entry{contra} = $debit; |
$entry{amount} = -$amount; |
$entry{amount} = -$amount; |
} |
} |