agent-specific logos for html invoices too
[freeside.git] / FS / FS / cust_bill.pm
index 888687e..7d10411 100644 (file)
@@ -414,10 +414,18 @@ sub generate_email {
     $args{'from'} =~ /\@([\w\.\-]+)/ or $1 = 'example.com';
     my $content_id = join('.', rand()*(2**32), $$, time). "\@$1";
 
+    my $path = "$FS::UID::conf_dir/conf.$FS::UID::datasrc";
+    my $file;
+    if ( [ -e "$path/logo_". $args{'_template'}. ".png" ] ) {
+      $file = "$path/logo_". $args{'_template'}. ".png";
+    } else {
+      $file = "$path/logo.png";
+    }
+
     my $image = build MIME::Entity
       'Type'       => 'image/png',
       'Encoding'   => 'base64',
-      'Path'       => "$FS::UID::conf_dir/conf.$FS::UID::datasrc/logo.png",
+      'Path'       => $file,
       'Filename'   => 'logo.png',
       'Content-ID' => "<$content_id>",
     ;
@@ -550,7 +558,8 @@ emails or print.  See L<FS::cust_main_invoice>.
 TEMPLATENAME, if specified, is the name of a suffix for alternate invoices.
 
 AGENTNUM, if specified, means that this invoice will only be sent for customers
-of the specified agent.
+of the specified agent or agent(s).  AGENTNUM can be a scalar agentnum (for a
+single agent) or an arrayref of agentnums.
 
 INVOICE_FROM, if specified, overrides the default email invoice From: address.
 
@@ -559,7 +568,10 @@ INVOICE_FROM, if specified, overrides the default email invoice From: address.
 sub send {
   my $self = shift;
   my $template = scalar(@_) ? shift : '';
-  return 'N/A' if scalar(@_) && $_[0] && $self->cust_main->agentnum != shift;
+  if ( scalar(@_) && $_[0]  ) {
+    my $agentnums = ref($_[0]) ? shift : [ shift ];
+    return 'N/A' unless grep { $_ == $self->cust_main->agentnum } @$agentnums;
+  }
 
   my $invoice_from =
     scalar(@_)
@@ -568,13 +580,13 @@ sub send {
 
   my @invoicing_list = $self->cust_main->invoicing_list;
 
-  $self->send_email($template, $invoice_from)
+  $self->email($template, $invoice_from)
     if grep { $_ !~ /^(POST|FAX)$/ } @invoicing_list or !@invoicing_list;
 
-  $self->send_print($template)
+  $self->print($template)
     if grep { $_ eq 'POST' } @invoicing_list; #postal
 
-  $self->send_fax($template)
+  $self->fax($template)
     if grep { $_ eq 'FAX' } @invoicing_list; #fax
 
   '';
@@ -1013,7 +1025,9 @@ sub _agent_plandata {
       'plan'      => 'send_agent',
       'plandata'  => { 'op'    => '~',
                        'value' => "(^|\n)agentnum ".
+                                   '([0-9]*, )*'.
                                   $self->cust_main->agentnum.
+                                   '(, [0-9]*)*'.
                                   "(\n|\$)",
                      },
     },
@@ -1332,11 +1346,10 @@ sub print_latex {
   }
 
   my $returnaddress;
-  if ( $conf->exists('invoice_latexreturnaddress')
-       && length($conf->exists('invoice_latexreturnaddress'))
-     )
-  {
-    $returnaddress = join("\n", $conf->config('invoice_latexreturnaddress') );
+  if ( length($conf->config_orbase('invoice_latexreturnaddress', $template)) ) {
+    $returnaddress = join("\n",
+      $conf->config_orbase('invoice_latexreturnaddress', $template)
+    );
   } else {
     $returnaddress = '~';
   }
@@ -1353,8 +1366,8 @@ sub print_latex {
     'city'         => _latex_escape($cust_main->city),
     'state'        => _latex_escape($cust_main->state),
     'zip'          => _latex_escape($cust_main->zip),
-    'footer'       => join("\n", $conf->config('invoice_latexfooter') ),
-    'smallfooter'  => join("\n", $conf->config('invoice_latexsmallfooter') ),
+    'footer'       => join("\n", $conf->config_orbase('invoice_latexfooter', $template) ),
+    'smallfooter'  => join("\n", $conf->config_orbase('invoice_latexsmallfooter', $template) ),
     'returnaddress' => $returnaddress,
     'quantity'     => 1,
     'terms'        => $conf->config('invoice_default_terms') || 'Payable upon receipt',
@@ -1755,19 +1768,21 @@ sub print_html {
     'terms'        => $conf->config('invoice_default_terms')
                       || 'Payable upon receipt',
     'cid'          => $cid,
+    'template'     => $template,
 #    'conf_dir'     => "$FS::UID::conf_dir/conf.$FS::UID::datasrc",
   );
 
-  $invoice_data{'returnaddress'} = $conf->exists('invoice_htmlreturnaddress')
-    ? join("\n", $conf->config('invoice_htmlreturnaddress') )
-    : join("\n", map { 
-                       s/~/&nbsp;/g;
-                       s/\\\\\*?\s*$/<BR>/;
-                       s/\\hyphenation\{[\w\s\-]+\}//;
-                       $_;
-                     }
-                     $conf->config('invoice_latexreturnaddress')
-          );
+  $invoice_data{'returnaddress'} =
+    length( $conf->config_orbase('invoice_htmlreturnaddress', $template) )
+      ? join("\n", $conf->config('invoice_htmlreturnaddress', $template) )
+      : join("\n", map { 
+                         s/~/&nbsp;/g;
+                         s/\\\\\*?\s*$/<BR>/;
+                         s/\\hyphenation\{[\w\s\-]+\}//;
+                         $_;
+                       }
+                       $conf->config_orbase('invoice_latexreturnaddress', $template)
+            );
 
   my $countrydefault = $conf->config('countrydefault') || 'US';
   if ( $cust_main->country eq $countrydefault ) {
@@ -1799,11 +1814,12 @@ sub print_html {
 #        $conf->config_orbase('invoice_latexnotes', $suffix)
 #    );
 
-   $invoice_data{'footer'} = $conf->exists('invoice_htmlfooter')
-     ? join("\n", $conf->config('invoice_htmlfooter') )
-     : join("\n", map { s/~/&nbsp;/g; s/\\\\\*?\s*$/<BR>/; $_; }
-                      $conf->config('invoice_latexfooter')
-           );
+   $invoice_data{'footer'} =
+     length($conf->config_orbase('invoice_htmlfooter', $template))
+       ? join("\n", $conf->config_orbase('invoice_htmlfooter', $template) )
+       : join("\n", map { s/~/&nbsp;/g; s/\\\\\*?\s*$/<BR>/; $_; }
+                        $conf->config_orbase('invoice_latexfooter', $template)
+             );
 
   $invoice_data{'po_line'} =
     (  $cust_main->payby eq 'BILL' && $cust_main->payinfo )