=================================================================== RCS file: /cvs/RT/Invoicing/rt_invoices.pl,v retrieving revision 1.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- RT/Invoicing/rt_invoices.pl 2011/12/30 03:20:45 1.42 +++ RT/Invoicing/rt_invoices.pl 2011/12/30 03:30:51 1.43 @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $AFresh1: rt_invoices.pl,v 1.41 2011/12/22 05:21:56 andrew Exp $ +# $AFresh1: rt_invoices.pl,v 1.42 2011/12/30 03:20:45 andrew Exp $ ######################################################################## # Copyright (c) 2011 Andrew Fresh # @@ -47,7 +47,6 @@ #use YAML; #print Dump $config, $state; exit; - my $customers = $config->get('customers'); my $startdate = set_dates($customers); @@ -78,7 +77,7 @@ my $iterator = $results->get_iterator; while ( my $ticket = &$iterator ) { - my $cust = find_customer_for_ticket($ticket, $customers); + my $cust = find_customer_for_ticket( $ticket, $customers ); if ( !$cust ) { warn "No customer found for ticket " . $ticket->id; next; @@ -134,12 +133,11 @@ push @{ $cust->{invoice}->{projects} }, $project; } - foreach my $cust ( @{$customers} ) { my $invoice = $cust->{invoice}; next unless $invoice && $invoice->{projects} && @{ $invoice->{projects} }; - $invoice->{custid} = $cust->{id}; + $invoice->{custid} = $cust->{id}; $invoice->{transactions} = []; my %transactions; @@ -174,28 +172,27 @@ $invoice->{total} -= round( $invoice->{discount}{amount} ); } - if (my $unpaid_invoices = $state->unpaid_invoices($cust->{id})) { + if ( my $unpaid_invoices = $state->unpaid_invoices( $cust->{id} ) ) { my %project = ( title => 'Unpaid Invoices', fees => [], ); my $past_due = 0; foreach my $id ( sort { $a <=> $b } keys %{$unpaid_invoices} ) { - my $unpaid = $state->get_invoice($id); + my $unpaid = $state->get_invoice($id); my $invdate = ymd_to_DateTime( $unpaid->{invdate} ); next if $cust->{duedate} - && DateTime->compare( $invdate, $cust->{duedate} ) > 0; + && DateTime->compare( $invdate, $cust->{duedate} ) > 0; $past_due += $unpaid_invoices->{$id}; - push @{ $project{fees} }, { - id => $id, - contents => sprintf( - "Invoice %06d from %s", - $id, $invdate->ymd - ), + push @{ $project{fees} }, + { + id => $id, + contents => + sprintf( "Invoice %06d from %s", $id, $invdate->ymd ), count => 1, rate => $unpaid_invoices->{$id}, - }; + }; } if ($past_due) { @@ -220,9 +217,8 @@ $invoice->{to} = make_address( $cust->{address} || $cust->{id} ); $invoice->{logo} = $config->get('logo'); - $state->add_invoice( $invoice ); + $state->add_invoice($invoice); - foreach my $key (qw/ start end /) { if ( exists $invoice->{$key} ) { $invoice->{$key} = $invoice->{$key}->strftime('%B %d, %Y'); @@ -255,7 +251,7 @@ } sub find_customer_for_ticket { - my ($ticket, $customers) = @_; + my ( $ticket, $customers ) = @_; foreach my $cust ( @{$customers} ) { next unless $cust->{match}; @@ -331,14 +327,15 @@ return if $cust->{no_invoice}; return unless $cust->{billstart}; - my %invoice = ( end => $cust->{billend}->clone->subtract( seconds => 1 ) ); - $invoice{start} = $cust->{startinvoicedate}->clone + my %invoice + = ( end => $cust->{billend}->clone->subtract( seconds => 1 ) ); + $invoice{start} = $cust->{startinvoicedate}->clone if $cust->{startinvoicedate}; return if $invoice{start} && $invoice{start} > $invoice{end}; if ( $cust->{base_rate} ) { - my ( $project, $hours ) = make_base_project( $cust ); + my ( $project, $hours ) = make_base_project($cust); if ( @{ $project->{fees} } ) { $invoice{end} = $project->{end}; @@ -358,11 +355,11 @@ } sub make_base_project { - my ( $cust ) = @_; + my ($cust) = @_; my $date = $cust->{billstart}->clone; my $billend = $cust->{billend}->clone; - my ($freq) = get_billing_frequency($cust); + my ($freq) = get_billing_frequency($cust); my $title = $cust->{frequency} == 1 @@ -376,7 +373,7 @@ while ( $date < $billend ) { my $start = $date->clone; - $date->add( $freq ); + $date->add($freq); my $end = $date > $billend ? $billend->clone : $date->clone; $end->subtract( seconds => 1 ); @@ -584,12 +581,12 @@ default { die "Unknown per [$per]\n" } } - return DateTime::Duration->new($per => $freq), $day_method; + return DateTime::Duration->new( $per => $freq ), $day_method; } sub set_dates { my ($customers) = @_; - + my $newest_invoice; my $max_duration; @@ -624,8 +621,7 @@ my $start = $end->clone->subtract($freq); # XXX This is helpful, but monthly and billday > 28 == !!! - $end->subtract( days => 1 ) - while $day && $end->$day_method != $day; + $end->subtract( days => 1 ) while $day && $end->$day_method != $day; my $lastinvoice = $state->last_invoice( $cust->{id} ); if ( $lastinvoice && $lastinvoice->{end} ) {