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

Diff for /RT/Invoicing/rt_invoices.pl between version 1.27 and 1.28

version 1.27, 2011/04/19 04:21:06 version 1.28, 2011/04/19 04:35:12
Line 1 
Line 1 
 #!/usr/bin/perl  #!/usr/bin/perl
 # $AFresh1: rt_invoices.pl,v 1.25 2011/04/19 03:18:13 andrew Exp $  # $AFresh1: rt_invoices.pl,v 1.27 2011/04/19 03:21:06 andrew Exp $
 ########################################################################  ########################################################################
 # Copyright (c) 2011 Andrew Fresh <andrew@afresh1.com>  # Copyright (c) 2011 Andrew Fresh <andrew@afresh1.com>
 #  #
Line 135 
Line 135 
     my $invoice = $cust->{invoice};      my $invoice = $cust->{invoice};
     next unless $invoice && $invoice->{projects} && @{ $invoice->{projects} };      next unless $invoice && $invoice->{projects} && @{ $invoice->{projects} };
   
     my %li = ( custid => $cust->{id}, invdate => DateTime->now->ymd, );      my %li = ( custid => $cust->{id}, invdate =>
           DateTime->now( time_zone => 'local' )->ymd, );
   
     foreach my $project ( @{ $invoice->{projects} } ) {      foreach my $project ( @{ $invoice->{projects} } ) {
         if ( $project->{transactions} ) {          if ( $project->{transactions} ) {
Line 313 
Line 314 
         default { die "Unknown per [$per]\n" }          default { die "Unknown per [$per]\n" }
     }      }
   
     my $billends = DateTime->now      my $billend = DateTime->now( time_zone => 'local' )
         ->subtract( days => 1 )          ->set( hour => 0, minute => 0, second => 0 );
         ->set( hour => 23, minute => 59, second => 59 );  
   
     # XXX This is helpful, but monthly and billday > 28 == !!!      # XXX This is helpful, but monthly and billday > 28 == !!!
     $billends->subtract( days => 1 )      $billend->subtract( days => 1 )
         while $day && $billends->$day_method != $day;          while $day && $billend->$day_method != $day;
   
     my $date = $billends->clone->subtract( $per => $freq )      my $date    = $billend->clone->subtract( $per => $freq );
         ->set( hour => 0, minute => 0, second => 0 );      my %invoice = ( end => $billend->clone->subtract( seconds => 1 ) );
   
     my %invoice = ( end => $billends->clone->subtract( seconds => 1 ) );  
   
     my $lastinvoice = $state->last_invoice( $cust->{id} );      my $lastinvoice = $state->last_invoice( $cust->{id} );
     if ( $lastinvoice->{date} ) {      if ( $lastinvoice->{date} ) {
         my $last_invoice_date = ymd_to_DateTime( $lastinvoice->{date} );          my $last_invoice_date = ymd_to_DateTime( $lastinvoice->{date} );
Line 338 
Line 336 
     }      }
   
     # Is the start date more than $freq $per before the end date?      # Is the start date more than $freq $per before the end date?
     my $diff = $billends - $date;      my $diff = $billend - $date;
     return {} if $diff->in_units($per) < 1;      return {} if $diff->in_units($per) < 1;
   
     if ( $cust->{base_rate} ) {      if ( $cust->{base_rate} ) {
         my ( $project, $hours ) = make_base_project(          my ( $project, $hours ) = make_base_project(
             $cust,              $cust,
             {   startdate  => $date,              {   date       => $date,
                 enddate    => $billends,                  billend    => $billend,
                 per        => $per,                  per        => $per,
                 freq       => $freq,                  freq       => $freq,
                 day        => $day,  
                 day_method => $day_method,  
             }              }
         );          );
   
Line 375 
Line 371 
 sub make_base_project {  sub make_base_project {
     my ( $cust, $args ) = @_;      my ( $cust, $args ) = @_;
   
     my $date       = $args->{startdate};      my $date    = $args->{date};
     my $enddate    = $args->{enddate};      my $billend = $args->{billend};
     my $per        = $args->{per};      my $per     = $args->{per};
     my $freq       = $args->{freq};      my $freq    = $args->{freq};
     my $day        = $args->{day};  
     my $day_method = $args->{day_method};  
   
     my $title      my $title
         = $freq == 1          = $freq == 1
Line 391 
Line 385 
     my %project = ( title => $title, start => $date->clone, fees => [], );      my %project = ( title => $title, start => $date->clone, fees => [], );
     my @hours;      my @hours;
   
     while ( $date < $enddate ) {      while ( $date < $billend ) {
         my $start = $date->clone;          my $start = $date->clone;
   
         $date->add( $per => $freq );          $date->add( $per => $freq );
         $date = $enddate->clone if $date > $enddate;  
   
         # XXX This is helpful, but monthly and billday > 28 == !!!  
         $date->subtract( days => 1 ) while $day && $date->$day_method != $day;  
   
         my $end = $date->clone->subtract( seconds => 1 );          my $end = $date->clone->subtract( seconds => 1 );
           $end = $billend->clone->subtract( seconds => 1 ) if $date > $billend;
   
         last if $end < $start;  
   
         $project{end} = $end->clone;          $project{end} = $end->clone;
   
         push @{ $project{fees} },          push @{ $project{fees} },
Line 550 
Line 539 
     my ( $hour, $minute, $second ) = split ':', $time if $time;      my ( $hour, $minute, $second ) = split ':', $time if $time;
   
     return DateTime->new(      return DateTime->new(
         year   => $year,          year      => $year,
         month  => $month,          month     => $month,
         day    => $day,          day       => $day,
         hour   => $hour || 0,          hour      => $hour || 0,
         minute => $minute || 0,          minute    => $minute || 0,
         second => $second || 0,          second    => $second || 0,
           time_zone => 'local',
     );      );
 }  }
   

Legend:
Removed from v.1.27  
changed lines
  Added in v.1.28

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>