[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.16 and 1.21

version 1.16, 2011/03/22 04:32:58 version 1.21, 2011/03/24 21:03:49
Line 1 
Line 1 
 #!/usr/bin/perl  #!/usr/bin/perl
 # $AFresh1$  # $AFresh1: rt_invoices.pl,v 1.20 2011/03/23 23:05:47 andrew Exp $
 ########################################################################  ########################################################################
 # Copyright (c) 2011 Andrew Fresh <andrew@afresh1.com>  # Copyright (c) 2011 Andrew Fresh <andrew@afresh1.com>
 #  #
Line 20 
Line 20 
   
 use 5.010;  use 5.010;
   
 use YAML::Any;  
 use Template;  use Template;
 use RT::Client::REST;  use RT::Client::REST;
 use RT::Client::REST::Ticket;  use RT::Client::REST::Ticket;
 use RT::Client::REST::User;  use RT::Client::REST::User;
   
   use File::Path;
 use DateTime;  use DateTime;
   
 my $config = RTI::Config->new();  my $config = RTI::Config->new();
Line 172 
Line 172 
     next unless $invoice->{total} > 0 || $invoice->{total_due};      next unless $invoice->{total} > 0 || $invoice->{total_due};
   
     $invoice->{info} = $config->get('info');      $invoice->{info} = $config->get('info');
     $invoice->{from} = make_address( $config->get('from') );      my $from = $config->get('from');
     $invoice->{to}   = make_address( $cust->{address} || $custid );      $from = get_user($from) if !ref $from;
   
       $invoice->{organization} = $from->{organization} || $from->{name};
       $invoice->{from}         = make_address($from);
       $invoice->{to}           = make_address( $cust->{address} || $custid );
   
     $state->{lastinvoice}++;      $state->{lastinvoice}++;
     $invoice->{id}   = $state->{lastinvoice};      $invoice->{id} = $state->{lastinvoice};
     $invoice->{file} = 'invoice_' . $state->{lastinvoice} . '.pdf';      $invoice->{file} = sprintf 'invoice_%06d.pdf', $state->{lastinvoice};
   
     foreach my $k (qw/ file transactions start end total past_due total_due /)      foreach my $k (qw/ file transactions start end total past_due total_due /)
     {      {
Line 201 
Line 205 
             $invoice->{$key} = $invoice->{$key}->strftime('%B %d, %Y');              $invoice->{$key} = $invoice->{$key}->strftime('%B %d, %Y');
         }          }
     }      }
     my $tt = Template->new;  
     $tt->process( 'invoice.tex.tt', $invoice, $invoice->{file} )      my $invoice_dir = $config->get('invoice_dir');
       File::Path::make_path($invoice_dir);
       my $file = join '/', $invoice_dir, $invoice->{file};
   
       my $tt = Template->new( INCLUDE_PATH => $config->get('template_dir'), )
           || die $Template::ERROR, "\n";
   
       $tt->process( $config->get('invoice_template'), $invoice, $file )
         or die $tt->error . "\n";          or die $tt->error . "\n";
   
     printf "Generated %s for %s: \$%.02f\n", $invoice->{file}, $custid,      printf "Generated %s for %s: \$%.02f\n", $invoice->{file}, $custid,
Line 304 
Line 315 
 sub make_invoice {  sub make_invoice {
     my ($cust) = @_;      my ($cust) = @_;
   
     my $day  = $cust->{day}       ||= 1;      my $day  = $cust->{day}       ||= 0;
     my $per  = $cust->{per}       ||= 'week';      my $per  = $cust->{per}       ||= 'week';
     my $freq = $cust->{frequency} ||= 1;      my $freq = $cust->{frequency} ||= 1;
   
Line 318 
Line 329 
     my $billends = DateTime->now->set( hour => 0, minute => 0, second => 0 );      my $billends = DateTime->now->set( hour => 0, minute => 0, second => 0 );
   
     # XXX This is helpful, but monthly and billday > 28 == !!!      # XXX This is helpful, but monthly and billday > 28 == !!!
     $billends->subtract( days => 1 ) while $billends->$day_method != $day;      $billends->subtract( days => 1 )
           while $day && $billends->$day_method != $day;
   
     my $date = $billends->clone->subtract( $per => $freq );      my $date = $billends->clone->subtract( $per => $freq );
   
Line 394 
Line 406 
         $date = $enddate->clone if $date > $enddate;          $date = $enddate->clone if $date > $enddate;
   
         # XXX This is helpful, but monthly and billday > 28 == !!!          # XXX This is helpful, but monthly and billday > 28 == !!!
         $date->subtract( days => 1 ) while $date->$day_method != $day;          $date->subtract( days => 1 ) while $day && $date->$day_method != $day;
   
         my $end = $date->clone->subtract( seconds => 1 );          my $end = $date->clone->subtract( seconds => 1 );
   
Line 461 
Line 473 
         title  => $ticket->subject,          title  => $ticket->subject,
         detail => 'Ticket: '          detail => 'Ticket: '
             . $ticket->id              . $ticket->id
             . ' Queue: '              . ' Status: '
             . $ticket->queue              . $ticket->status
             . ' Requestors: '              . ' Requestors: '
             . join( ', ', $ticket->requestors ),              . join( ', ', $ticket->requestors ),
         fees     => [],          fees     => [],
Line 611 
Line 623 
 sub get {  sub get {
     my ( $self, $key ) = @_;      my ( $self, $key ) = @_;
     my $value = Load( Dump( $self->{_config}->{$key} ) );      my $value = Load( Dump( $self->{_config}->{$key} ) );
     if ( !$value ) {  
         given ($key) {      return $value if $value;
             when ('state') {  
                 $value = dirname( $self->{file} ) . '/rt_invoice.state'      given ($key) {
             }          when ('state') {
               $value = $self->{file};
               $value =~ s/(?:\.[^.]+)?$/\.state/;
         }          }
           when ('invoice_dir') {
               $value = dirname( $self->{file} ) . '/invoices';
           }
           when ('template_dir') {
               $value = dirname( $self->{file} );
           }
           when ('invoice_template') {
               $value = 'invoice.tex.tt';
           }
     }      }
   
     return $value;      return $value;
 }  }
   

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.21

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