From 0125594cbb9c4799690c339332483c8c6c03244b Mon Sep 17 00:00:00 2001 From: Joey Schulze Date: Wed, 1 Nov 2017 22:01:28 +0100 Subject: [PATCH 1/1] Switch row to hash reference --- src/InfoCon/buch/infocon | 56 +++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/src/InfoCon/buch/infocon b/src/InfoCon/buch/infocon index c10413b..08f69e6 100755 --- a/src/InfoCon/buch/infocon +++ b/src/InfoCon/buch/infocon @@ -37,6 +37,7 @@ my %data; my @categories = (); my $term = undef; my $opt_all = 0; +my $opt_csv = 0; my $opt_verbose = 0; my $opt_year = 0; my $opt_date = undef; @@ -48,6 +49,12 @@ sub sdate return sprintf ("%d.%02d.%02d", $3,$2,$1); } +sub isodate +{ + $_[0] =~ /(\d{4})(\d{2})(\d{2})/; + return sprintf ("%04d-%02d-%02d", $1,$2,$3); +} + # Wandelt einen lesbaren Datumsstring in die Form um, in der er in der # Datenbank gespeichert werden kann. # @@ -151,7 +158,7 @@ sub sales_list my $sum_pos=0; my $sum_neg=0; my $query; - my @row; + my $row; my $sth; my $d; @@ -192,31 +199,42 @@ sub sales_list $where .= "visible = 1"; } - $query = "SELECT nr,date,description,price FROM $table"; + $query = "SELECT nr,date,description,price,tax_percent,tax_assigned FROM $table"; $query .= " WHERE $where" if ($where); $query .= " ORDER by date,nr"; $sth = $dbh->prepare($query); if ($sth && (my $rc = $sth->execute) > 0) { - print " Nr. Datum Bezeichnung Betrag\n"; - print "----------------------------------------------------------------------------\n"; - while (@row = $sth->fetchrow_array) { - $descr = substr($row[2],0,50); - printf "%4d %8s %-50s %9.2f\n", $row[0], sdate($row[1]), $descr, $row[3]; - if ($row[3] < 0.0) { - $sum_neg -= $row[3]; + if ($opt_csv) { + print '"nr","date","description","taxrate","tax","value"'."\n"; + } else { + print " Nr. Datum Bezeichnung Betrag\n"; + print "----------------------------------------------------------------------------\n"; + } + while ($row = $sth->fetchrow_hashref) { + $descr = substr($row->{description},0,50); + if ($opt_csv) { + printf '"%d","%s","%s","%.2f","%.2f","%.2f"'."\n", $row->{nr}, isodate($row->{date}), $descr, + $row->{tax_percent}, $row->{tax_assigned}, $row->{price}; } else { - $sum_pos += $row[3]; + printf "%4d %8s %-50s %9.2f\n", $row->{nr}, sdate($row->{date}), $descr, $row->{price}; } + if ($row->{price} < 0.0) { + $sum_neg -= $row->{price}; + } else { + $sum_pos += $row->{price}; + } + } + if (!$opt_csv) { + print "---------------------------------------------------------------------------\n" + if ($sum_neg > 0 || $sum_pos > 0) ; + printf " Zahlungseingänge %9.2f\n", $sum_pos + if ($sum_pos > 0); + printf " Zahlungsausgänge %9.2f\n", -$sum_neg + if ($sum_neg > 0); + print "============================================================================\n"; + printf " Summe %9.2f\n\n", $sum_pos - $sum_neg; } - print "---------------------------------------------------------------------------\n" - if ($sum_neg > 0 || $sum_pos > 0) ; - printf " Zahlungseingänge %9.2f\n", $sum_pos - if ($sum_pos > 0); - printf " Zahlungsausgänge %9.2f\n", -$sum_neg - if ($sum_neg > 0); - print "============================================================================\n"; - printf " Summe %9.2f\n\n", $sum_pos - $sum_neg; } $data{'done'} = 1; } @@ -558,6 +576,7 @@ sub usage print " --list-categories|-lc\n"; print " Options:\n"; print " --all|-a\n"; + print " --csv\n"; print " --verbose|-v\n"; print " --year|-y year\n"; print " --direction|--dir|-d in|out\n"; @@ -589,6 +608,7 @@ my %options = ( 'direction|d=s' => \$opt_direction, 'mailto:s' => \$data{mailto}, 'all' => \$opt_all, + 'csv' => \$opt_csv, 'verbose' => \$opt_verbose, 'help' => \&usage, 'dm' => sub {$table = "sales_dm"}, -- 2.20.1