version 1.49, 2013/02/05 03:41:58 |
version 1.52, 2015/05/07 06:23:15 |
|
|
#!/usr/bin/perl |
#!/usr/bin/perl |
# $AFresh1: rt_invoices.pl,v 1.48 2012/11/28 02:23:34 andrew Exp $ |
# $AFresh1: rt_invoices.pl,v 1.51 2015/05/07 05:21:49 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 ); |
|
|
use Template; |
use Template; |
use RT::Client::REST; |
use RT::Client::REST; |
|
|
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 ); |
|
|
# XXX Only need $ticket for the alternate subject |
# XXX Only need $ticket for the alternate subject |
|
|
my $work_time = sprintf "%.03f", $txn->time_taken / 60; |
my $work_time = sprintf "%.03f", $txn->time_taken / 60; |
my $work_type = $txn->cf('WorkType'); |
my $work_type = $txn->cf('WorkType') || ''; |
|
|
if ( $work_type =~ s/\s*Onsite//i ) { |
if ( $work_type =~ s/\s*Onsite//i ) { |
|
|
|
|
} |
} |
} |
} |
|
|
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; |
} |
} |