make invoice text mouse-accessible through watermark box, #24665
[freeside.git] / conf / invoice_html
index b7f7b97..dfd87c7 100644 (file)
@@ -1,6 +1,18 @@
 <STYLE TYPE="text/css">
-.invoice { font-family: sans-serif; font-size: 10pt }
-.invoice_header { font-size: 10pt }
+.invoice {
+  font-family: sans-serif;
+  font-size: 10pt;
+  display: inline-block;
+  padding: 4pt;
+  border: 1px solid black;
+  background-color: white;
+  min-width: 625px;
+  position: relative;
+}
+.invoice_header {
+  font-size: 10pt;
+  border-spacing: 4pt;
+}
 .invoice_headerright TH { border-top: 2px solid #000000; border-bottom: 2px solid #000000 }
 .invoice_headerright TD { font-size: 10pt; empty-cells: show }
 .invoice_summary TH { border-bottom: 2px solid #000000 }
 .invoice_desc_more TD { font-weight: bold; font-size: 10pt }
 .invoice_extdesc TD { font-size: 8pt }
 .invoice_totaldesc TD { font-size: 10pt; empty-cells: show }
+.allcaps { text-transform:uppercase; font-size: 12pt }
+.watermark-box {
+  z-index: 10;
+  position: absolute;
+  text-align: center;
+  padding: 0;
+  filter: alpha(opacity=25);
+  opacity: 0.25;
+  width: 100%;
+  height: 100%;
+  display: table;
+  pointer-events: none;
+}
+.watermark-content {
+  display: table-cell;
+  vertical-align: middle;
+  font-size: 96pt;
+}
 </STYLE>
 
-<table class="invoice" bgcolor="#ffffff" WIDTH=625 CELLSPACING=8><tr><td>
+<div class="invoice">
+
+  <DIV CLASS="watermark-box"><DIV CLASS="watermark-content">
+      <%= $watermark %>
+  </DIV></DIV>
 
   <table class="invoice_header" width="100%">
     <tr>
         <table CLASS="invoice_headerright" cellspacing=0>
           <tr>
             <td align="center">
-              Invoice&nbsp;date<BR>
+              <%= emt('Invoice date') %><BR>
               <B><%= $date %></B>
             </td>
             <td>
             </td>
             <td align="center">
-              Invoice&nbsp;#<BR>
+              <%= emt('Invoice #') %><BR>
               <B><%= $invnum %></B>
             </td>
             <td>
             </td>
             <td align="center">
-              Customer #<BR>
+              <%= emt('Customer #') %><BR>
               <B><%= $custnum %></B>
             </td>
           </tr>
           <tr>
             <th>&nbsp;</th>
-            <th colspan=3 align="center">
-              <FONT SIZE="+3"><%= $notice_name ? substr($notice_name, 0, 1) : 'I' %></FONT><FONT SIZE="+2"><%= $notice_name ? uc(substr($notice_name, 1)) : 'NVOICE' %></FONT>
+            <th colspan=3 align="center" class="allcaps">
+             <FONT SIZE="+3"><%= substr(emt($notice_name),0,1) %></FONT><FONT SIZE="+2"><%= substr(emt($notice_name),1) %></FONT>
             </th>
             <th>&nbsp;</th>
           </tr>
@@ -64,7 +98,7 @@
         %>
       </td>
       <%= $ship_enable ? ('<td align="left">'.
-                          join('<BR>',grep length($_), '<b>Service Address</b>',
+                          join('<BR>',grep length($_), '<b>'.emt('Service Address').'</b>',
                                                        $ship_company,
                                                        $ship_address1,
                                                        $ship_address2,
                        : ''
       %>
       <td align="right">
-        Terms: <%= $terms %><BR>
+    <%=
+       if($barcode_cid) {
+           $OUT .= qq! <img src="cid:$barcode_cid"><br> !;
+       }
+       elsif($barcode_img) {
+           $OUT .= qq! <img src="cust_bill-barcode.cgi?invnum=$invnum;template=$template"><br> !;
+       }
+    %>
+        <%= $terms ? emt('Terms') . ": $terms" : '' %><BR>
         <%= $po_line %>
       </td>
     </tr>
   </table>
   <%= $summary %>
   <%=
+      my $notfirst = 0;
+      my $columncount = $unitprices ? 5 : 3;
       foreach my $section ( grep { !$summary || $_->{description} ne $finance_section } @sections ) {
         if ($section->{'pretotal'} && !$summary) {
+          $OUT .= '</table>' if $notfirst;
           $OUT .=
             '<table width="100%"><tr><td>'.
             '<p align="right"><b><font size="+1">'.
             '</font><font size="+0">'. uc(substr($section->{'pretotal'},1)).
             '</font></b>'.
             '<p>'.
-            '</td></tr></table>';
+            '</td></tr>';
         }
         unless ($section->{'summarized'}) {
+          $OUT .= '</table>' if ( $notfirst || $section->{'pretotal'} && !$summary );
           $OUT .= '<table><tr><td>';
-          if ($section->{'description'}) {
-            $OUT .=
-              '<p><b><font size="+1">'. uc(substr($section->{'description'},0,1)).
-              '</font><font size="+0">'. uc(substr($section->{'description'},1)).
-              '</font></b>'.
-              '<p>';
-          }else{
-            $OUT .=
-              '<p><b><font size="+1">C</font><font size="+0">HARGES</font></b>'.
-              '<p>';
+          $OUT .= '<p class="allcaps"><b>';
+          my $sectionhead;
+          if ( $section->{'location'} ) {
+            $sectionhead .= $section->{'location'}{'label_prefix'}. ': '
+              if length($section->{'location'}{'label_prefix'});
+            $sectionhead = $section->{'location'}{'address1'};
+            $sectionhead .= ', '.$section->{'location'}{'address2'}
+              if length($section->{'location'}{'address2'});
+            $sectionhead .= ', ' .
+                            $section->{'location'}{'city'} . ', ' .
+                            $section->{'location'}{'state'} . ' ' .
+                            $section->{'location'}{'zip'};
+            $OUT .= $sectionhead;
+          } else {
+            $sectionhead = $section->{'description'} || emt('Charges');
+            $OUT .= '<font size="+1">'. substr($sectionhead,0,1).
+              '</font><font size="+0">'. substr($sectionhead,1).
+          
+              '</font>';
           }
-          $OUT .= '</td></tr></table>';
+          $OUT .= '</b></p></td></tr></table>';
 
           $OUT .=
             '<table class="invoice_longtable" CELLSPACING=0 WIDTH="100%">'.
-            '<tr>'.
-              '<th align="center">Ref</th>'.
-              '<th align="left">Description</th>'.
-              ( $unitprices 
-                  ? '<th align="left">Unit Price</th>'.
-                    '<th align="left">Quantity</th>'
-                  : ''
-                ).
-              '<th align="right">Amount</th>'.
-            '</tr>';
+            '<tr>';
+
+          if ($section->{header_generator}) {
+            my $header = &{$section->{header_generator}}();
+            $OUT .= $header;
+            $columncount = scalar(my @array = split /<\/th><th/i, $header);
+          } else {
+            $OUT .=  '<th align="center"></th>'.
+                     '<th align="left">' . emt('Description') . '</th>'.
+                     ( $unitprices 
+                       ? '<th align="right">' . emt('Unit Price') . '</th>'.
+                         '<th align="right">' . emt('Quantity') . '</th>'
+                        : '' ).
+                     '<th align="right">' . emt('Amount') . '</th>';
+          }
+            $OUT .= '</tr>';
 
           my $lastref = 0;
           foreach my $line (
                  ) }
             @detail_items )
           {
-            $OUT .=
-              '<tr class="invoice_desc'.
-                ( ($line->{'ref'} && $line->{'ref'} ne $lastref) ? '' : '_more' ).
-                '">'.
-                '<td align="center">'. 
-                ( $line->{'ref'} ne $lastref ? $line->{'ref'} : '' ). '</td>'.
-                '<td align="left">'. $line->{'description'}. '</td>'.
-                ( $unitprices 
-                    ? '<td align="left">'. $line->{'unit_amount'}. '</td>'.
-                      '<td align="left">'. $line->{'quantity'}. '</td>'
-                    : ''
-                ).
-
-                '<td align="right">'. $line->{'amount'}. '</td>'.
-              '</tr>'
-            ;
-            $lastref = $line->{'ref'};
+            if ( $section->{description_generator} ) {
+              $OUT .= '<tr class="invoice_desc' .
+                      &{$section->{description_generator}}($line);
+            } else {
+              my $class = 'invoice_desc_more';
+              if ( ($line->{'ref'} || 0) ne $lastref ) {
+                # then it's a new package (not a continuation)
+                $class = 'invoice_desc';
+              }
+              $OUT .= '<tr class="'.$class.'">
+                       <td align="center">';
+              $OUT .= '</td>
+                       <td align="left">'. $line->{'description'}. '</td>';
+              if ( $unitprices ) {
+                $OUT .= 
+                  '<td align="right">'. $line->{'unit_amount'}. '</td>'.
+                  '<td align="right">'. $line->{'quantity'}. '</td>';
+              }
+              $OUT .= '<td align="right">'. $line->{'amount'}. '</td>';
+            }
+            $OUT .= '</tr>';
+            $lastref = $line->{'ref'} || 0;
             if ( @{$line->{'ext_description'} } ) {
-              $OUT .= '<tr class="invoice_extdesc"><td></td><td';
-              $OUT .= $unitprices ? ' colspan=3>' : '>';
-              $OUT .= '<table width="100%">';
+              unless ( $section->{description_generator} ) {
+                $OUT .= '<tr class="invoice_extdesc"><td></td><td';
+                $OUT .= $unitprices ? ' colspan=3' : '';
+                $OUT .= '><table width="100%">';
+              }
               foreach my $ext_desc ( @{$line->{'ext_description'} } ) {
                 $OUT .=
                   '<tr class="invoice_extdesc">'.
+                    ( $section->{'description_generator'} ? '<td></td>' : '' ).
                     '<td align="left" '.
                          ( $ext_desc =~ /<\/?TD>/i ? '' : 'colspan=99' ). '>'.
                       '&nbsp;&nbsp;'. $ext_desc.
                     '</td>'.
                   '</tr>'
               }
-              $OUT .= '</table></td><td></td></tr>';
+              unless ( $section->{description_generator} ) {
+                $OUT .= '</table></td><td></td>';
+              }
+              $OUT .= '</tr>';
             }
           }
 
 
-          if (scalar(@sections) > 1) {
+          if ($section->{'description'} || $multisection and !$section->{no_subtotal}) {
             my $style = 'border-top: 3px solid #000000;'.
                         'border-bottom: 3px solid #000000;';
             $OUT .=
               '<tr class="invoice_totaldesc">'.
-                qq(<td style="$style">&nbsp;</td>).
-                qq(<td align="left" style="$style"). 
-                  ( $unitprices ? ' colspan=3>' : '>' ).
-                  $section->{'description'}. ' Total </td>'.
-                qq(<td align="right" style="$style">).
-                  $section->{'subtotal'}. '</td>'.
-              '</tr>'
-          ;
+              qq(<td style="$style">&nbsp;</td>);
+            if ($section->{total_generator}) {
+              $OUT .= &{$section->{total_generator}}($section);
+            } else {
+              $OUT .= qq(<td align="left" style="$style"). 
+                      ( $unitprices ? ' colspan=3>' : '>' ).
+                      $section->{'description'}. ' ' . emt('Total') . '</td>'.
+                      qq(<td align="right" style="$style">).
+                      $section->{'subtotal'}. '</td>';
+            }
+            $OUT .= '</tr>';
           }
         } 
         if ($section->{'posttotal'}) {
-          $OUT .= '<tr><td align="right" colspan=5>';
+          $OUT .= '<tr><td align="right" colspan='. $columncount. '>';
           $OUT .=
             '<p><font size="+1">'. $section->{'posttotal'}.
             '</font>'.
           $OUT .= '</td></tr>';
         }
 
+        $notfirst++;
+
       }
 
       my $style = 'border-top: 3px solid #000000;';
       foreach my $line ( @total_items ) {
 
         $style .= 'border-bottom: 3px solid #000000;'
-          if ++$linenum == scalar(@total_items);
+          if ++$linenum == scalar(@total_items) - ( $balance_due_below_line ? 1 : 0 );
 
         $OUT .=
-          '<tr class="invoice_totaldesc">'.
-            qq(<td style="$style">&nbsp;</td>).
-            qq(<td align="left" style="$style").
-            ( $unitprices ? ' colspan=3>' : '>' ).
-              $line->{'total_item'}. '</td>'.
-            qq(<td align="right" style="$style">).
-              $line->{'total_amount'}. '</td>'.
-          '</tr>'
-        ;
+          '<tr class="invoice_totaldesc">';
+        if ($section->{total_line_generator}) {
+          $OUT .= &{$section->{total_line_generator}}($line);
+        } else {
+          $OUT .= qq(<td style="$style">&nbsp;</td>).
+                  qq(<td align="left" style="$style" colspan=").
+                    ( $columncount - 2 ). '">'.
+                    $line->{'total_item'}. '</td>'.
+                  qq(<td align="right" style="$style">).
+                    $line->{'total_amount'}. '</td>';
+        }
+        $OUT .= '</tr>';
 
         $style='';
 
   <hr NOSHADE SIZE=2 COLOR="#000000">
   <p align="center" <%= $smallerfooter ? 'STYLE="font-size:75%;"' : '' %>><%= $footer %>
 
-</td></tr></table>
+</div>