version 1.50, 2013/06/20 05:36:06 |
version 1.54, 2015/12/08 02:10:43 |
|
|
#!/usr/bin/perl |
#!/usr/bin/perl |
# $AFresh1: rt_invoices.pl,v 1.49 2013/02/05 03:41:58 andrew Exp $ |
# $AFresh1: rt_invoices.pl,v 1.53 2015/05/07 05:26:08 andrew Exp $ |
######################################################################## |
######################################################################## |
# Copyright (c) 2011 Andrew Fresh <andrew@afresh1.com> |
# Copyright (c) 2011 Andrew Fresh <andrew@afresh1.com> |
# |
# |
|
|
use warnings; |
use warnings; |
|
|
use 5.010; |
use 5.010; |
|
use experimental qw( switch smartmatch ); |
|
|
|
# Because we don't have a real cert |
|
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; |
|
|
use Template; |
use Template; |
use RT::Client::REST; |
use RT::Client::REST; |
use RT::Client::REST::Ticket; |
use RT::Client::REST::Ticket; |
|
|
} |
} |
|
|
foreach my $cust ( @{$customers} ) { |
foreach my $cust ( @{$customers} ) { |
my $invoice = $cust->{invoice}; |
my $invoice = $cust->{invoice} ||= make_invoice($cust); |
next unless $invoice && $invoice->{projects} && @{ $invoice->{projects} }; |
next unless $invoice && $invoice->{projects} && @{ $invoice->{projects} }; |
|
|
$invoice->{custid} = $cust->{id}; |
$invoice->{custid} = $cust->{id}; |
|
|
while ( $date < $billend ) { |
while ( $date < $billend ) { |
my $start = $date->clone; |
my $start = $date->clone; |
|
|
$date->add($freq); |
$date->add_duration($freq); |
|
|
my $end = $date > $billend ? $billend->clone : $date->clone; |
my $end = $date > $billend ? $billend->clone : $date->clone; |
$end->subtract( seconds => 1 ); |
$end->subtract( seconds => 1 ); |
|
|
} |
} |
} |
} |
|
|
return $newest_invoice->clone->subtract($max_duration) |
$newest_invoice ||= DateTime->now; |
|
|
|
return $newest_invoice->clone->subtract_duration($max_duration) |
->subtract( days => 1 ); |
->subtract( days => 1 ); |
} |
} |
|
|
|
|
my $end = DateTime->now( time_zone => 'local' ) |
my $end = DateTime->now( time_zone => 'local' ) |
->set( hour => 0, minute => 0, second => 0 ); |
->set( hour => 0, minute => 0, second => 0 ); |
|
|
my $start = $end->clone->subtract($freq); |
my $start = $end->clone->subtract_duration($freq); |
|
|
# XXX This is helpful, but monthly and billday > 28 == !!! |
# 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; |
|
|
? DateTime->now->subtract( days => $cust->{net} ) |
? DateTime->now->subtract( days => $cust->{net} ) |
: 0; |
: 0; |
|
|
$cust->{no_invoice} = 1 if $start->clone->add($freq) > $end; |
$cust->{no_invoice} = 1 if $start->clone->add_duration($freq) > $end; |
$cust->{billend} = $end; |
$cust->{billend} = $end; |
$cust->{billstart} = $start; |
$cust->{billstart} = $start; |
} |
} |