Switch row to hash reference
authorJoey Schulze <joey@infodrom.org>
Wed, 1 Nov 2017 21:01:28 +0000 (22:01 +0100)
committerJoey Schulze <joey@infodrom.org>
Wed, 1 Nov 2017 21:34:16 +0000 (22:34 +0100)
src/InfoCon/buch/infocon

index c10413b..08f69e6 100755 (executable)
@@ -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"},