aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xmktreasurer80
1 files changed, 63 insertions, 17 deletions
diff --git a/mktreasurer b/mktreasurer
index 5979c6d..29cd269 100755
--- a/mktreasurer
+++ b/mktreasurer
@@ -6,6 +6,7 @@ use YAML qw/LoadFile/;
use XML::Simple;
use Template;
use DateTime;
+use Math::BigFloat;
#use Data::Dump qw/dd/;
my $config_file = '/usr/share/mga-treasurer/config';
@@ -26,7 +27,7 @@ sub donation_category {
sub party_name {
my ($r, $Nb) = @_;
- (grep { $_->{Nb} == $Nb } @{$r->{Party}})[0]->{Na};
+ $Nb == 0 ? '' : (grep { $_->{Nb} == $Nb } @{$r->{Party}})[0]->{Na};
}
sub subcat_name {
@@ -35,6 +36,11 @@ sub subcat_name {
@{$r->{Sub_category}})[0]->{Na};
}
+sub account_name {
+ my ($r, $Ac) = @_;
+ (grep { $_->{Number} == $Ac } @{$r->{Account}})[0]->{Name};
+}
+
sub epoch_date {
my ($m, $d, $y) = split /\//, shift;
DateTime->new(day => $d, month => $m, year => $y)->epoch;
@@ -52,7 +58,9 @@ sub transactions_list {
date => epoch_date($tra->{Dt}),
pa => $tra->{Pa},
who => party_name($r, $tra->{Pa}),
- sc_name => subcat_name($r, $tra->{Sca}, $tra->{Ca}),
+ ac => $tra->{Ac},
+ account => account_name($r, $tra->{Ac}),
+ $tra->{Sca} != 0 ? (sc_name => subcat_name($r, $tra->{Sca}, $tra->{Ca})) : (),
$tra->{No} ne '(null)' ? (notes => $tra->{No}) : (),
);
push @res, \%d;
@@ -93,6 +101,39 @@ sub donations_infos {
return \%res;
}
+sub transactions_infos {
+ my $r = shift;
+ my %res = (
+ transactions => transactions_list($r),
+ by_month => {},
+ by_year => {},
+ by_pa => {},
+ by_account => {},
+ balance => new Math::BigFloat 0,
+ );
+ foreach my $tra (@{$res{transactions}}) {
+ my $dt = DateTime->from_epoch(epoch => $tra->{date});
+ my $month = $dt->year . '-' . sprintf("%02d", $dt->month);
+ my $year = $dt->year;
+ push @{$res{by_month}->{$month}->{transactions}}, $tra;
+ $res{by_month}->{$month}->{year} = $year;
+ $res{by_month}->{$month}->{month} = $dt->month;
+ $res{by_account}->{$tra->{ac}}->{account} = $tra->{account};
+ push @{$res{by_year}->{$year}->{transactions}}, $tra;
+ push @{$res{by_year}->{$year}->{months}}, $month;
+ push @{$res{by_pa}->{$tra->{pa}}->{transactions}}, $tra;
+ push @{$res{by_account}->{$tra->{ac}}->{transactions}}, $tra;
+ $res{balance} += new Math::BigFloat $tra->{amount};
+ }
+ foreach my $t (values %{$res{by_account}}) {
+ $t->{balance} = new Math::BigFloat 0;
+ foreach my $tra (@{$t->{transactions}}) {
+ $t->{balance} += new Math::BigFloat $tra->{amount};
+ }
+ }
+ return \%res;
+}
+
sub process_template {
my ($template, $src, $vars, $dest) = @_;
foreach my $extension (@{$config->{output_format}}) {
@@ -102,7 +143,7 @@ sub process_template {
}
sub output_pages {
- my ($r, $donations) = @_;
+ my ($r, $donations, $transactions) = @_;
my $template = Template->new(
INCLUDE_PATH => $config->{tmpl_dir},
OUTPUT_PATH => $config->{out_dir},
@@ -111,36 +152,40 @@ sub output_pages {
my $last_update = (stat $config->{grisbi_file})[9];
foreach my $month (keys %{$donations->{by_month}}) {
my $vars = {
- config => $config,
- month => $month,
- donations => $donations,
+ config => $config,
+ month => $month,
+ donations => $donations,
+ transactions => $transactions,
};
process_template($template, 'donations_by_month', $vars, "donations_m_$month");
}
foreach my $year (keys %{$donations->{by_year}}) {
my $vars = {
- config => $config,
- year => $year,
- donations => $donations,
+ config => $config,
+ year => $year,
+ donations => $donations,
+ transactions => $transactions,
};
process_template($template, 'donations_by_year', $vars, "donations_y_$year");
}
foreach my $pa (keys %{$donations->{by_pa}}) {
my $vars = {
- config => $config,
- pa => $pa,
- who => party_name($r, $pa),
- donations => $donations,
+ config => $config,
+ pa => $pa,
+ who => party_name($r, $pa),
+ donations => $donations,
+ transactions => $transactions,
};
process_template($template, 'donations_by_pa', $vars, "donations_p_$pa");
}
my $vars = {
- config => $config,
- donations => $donations,
- last_update => $last_update,
+ config => $config,
+ donations => $donations,
+ transactions => $transactions,
+ last_update => $last_update,
};
process_template($template, 'donations', $vars, 'donations');
process_template($template, 'index', $vars, 'index');
@@ -148,6 +193,7 @@ sub output_pages {
my $r = XMLin($config->{grisbi_file});
my $donations = donations_infos($r);
+my $transactions = transactions_infos($r);
-output_pages($r, $donations);
+output_pages($r, $donations, $transactions);