[BACK]Return to report_transactions.pl CVS log [TXT][DIR] Up to [local] / RT / Invoicing

File: [local] / RT / Invoicing / report_transactions.pl (download)

Revision 1.1, Thu Aug 20 02:11:55 2020 UTC (3 years, 8 months ago) by afresh1
Branch: MAIN
CVS Tags: HEAD

Add some helper tools

#!/usr/bin/perl
use strict;
use warnings;
use 5.010;

use lib 'lib';
use RTI::State;

use List::Util qw( sum );

#my $custid = 'jscherz@itc-home.com';
my $custid = 'GSG';

my $state = RTI::State->new('rt_invoice.state');

my @payments = reverse @{ $state->{payment}->{$custid} || [] };

my $paid     = sum map { $_->{paid} } @payments;
my $invoiced = sum map { $_->{total} }
    grep { $_->{custid} eq $custid } values %{ $state->{invoice} };

my $running = 0;
foreach my $invoice ( sort { $a <=> $b } keys %{ $state->{invoice} } ) {
    my $i = $state->{invoice}->{$invoice};
    next unless $i->{custid};
    next unless $i->{custid} eq $custid;
    next if $i->{void};

    while ( @payments && $payments[0]->{date} < $i->{invdate} ) {
        show_payment( shift @payments );
    }

    next unless $i->{total};

    $running += $i->{total};

    my $date = $i->{invdate} ? $i->{invdate}->ymd : 'Earlier';
    printf "\$%7.02f : %10s invoice %03d \$ %6.02f\n", $running,
        $date, $invoice, $i->{total};
}

show_payment($_) for @payments;

printf "invoiced: \$ %6.02f paid: \$ %6.02f balance: \$%7.02f\n", 
    $invoiced,
$paid, $running;

sub show_payment {
    my ($p) = @_;
    my $type = $p->{type} || '';
    $type .= " $p->{number}" if $p->{number};

    my $date = $p->{date} ? $p->{date}->ymd : 'Earlier';

    $running -= $p->{paid};
    printf "\$%7.02f : %10s payment for \$ %6.02f %s\n", $running, $date,
        $p->{paid}, $type;
}