#!/usr/bin/perl use strict; use warnings; use 5.010; use lib 'lib'; use RTI::State; use YAML::XS qw/ Dump /; my $state = RTI::State->new('rt_invoice.state'); my %income; while (my ($id, $i) = each %{ $state->{invoice} }) { next if $i->{void}; next unless $i->{custid}; #next unless $i->{custid} eq 'WireFree'; #next unless $i->{custid} eq 'speakman'; #next unless $i->{custid} eq 'jscherz@itc-home.com'; my $unpaid = $state->unpaid_invoices($i->{custid}); my $date = $i->{end} || $i->{invdate}; my ($y, $m) = split /-/, $date; foreach my $mk ('', "$i->{custid} ") { foreach my $sk ($y, 'Total') { my $k = "$mk$sk"; $income{$k} //= { billed => 0, unpaid => 0 }; $income{$k}{billed} += $i->{total}; $income{$k}{unpaid} += $unpaid->{ $id } if $unpaid->{$id}; } } } print Dump \%income;