diff options
| author | ivan <ivan> | 2008-05-18 03:04:03 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2008-05-18 03:04:03 +0000 | 
| commit | b8d03e480cf0798c30d6d8e9ec6cf53d8f419043 (patch) | |
| tree | 913fd43745734ac92a68fba0b952b2aad15e8a0b /httemplate | |
| parent | dc3217c61d6a62a8e599d8804e05ba45b3224c7e (diff) | |
quick payment entry running total, closes: #3470
Diffstat (limited to 'httemplate')
| -rw-r--r-- | httemplate/elements/customer-table.html | 179 | ||||
| -rw-r--r-- | httemplate/misc/batch-cust_pay.html | 15 | 
2 files changed, 164 insertions, 30 deletions
| diff --git a/httemplate/elements/customer-table.html b/httemplate/elements/customer-table.html index 779b01c51..f00419f9c 100644 --- a/httemplate/elements/customer-table.html +++ b/httemplate/elements/customer-table.html @@ -4,17 +4,36 @@ Example:    include( '/elements/customer-table.html', +             ### +             # required +             ### +               #listrefs... -             'header'      => [ '#', 'Item' ], -             'fields'      => [ -                                'column', -                                sub { my ($row,$param) = @_; -                                      $param->{"column$row"}; -                                    }, -                              ], -             'sizes'       => [],                # sizes ignored for immutable -             'types'       => ['immutable', ''], # immutable or ''/text -             'param'       => { column0 => 1 },  # preset column of row 0 to 1 +             'header'        => [ '#', 'Item' ], +             'fields'        => [ +                                  'column', +                                  sub { my ($row,$param) = @_; +                                        $param->{"column$row"}; +                                      }, +                                ], + +             ### +             # optional +             ### + +             'name_singular' => 'customer', #label + +             #listrefs +             'types'         => ['immutable', ''], # immutable or ''/text +             'align'         => [ 'c', 'l', 'r', '' ], +             'size'          => [],                # sizes ignored for immutable +             'color'         => [], +             'footer'        => ['string', '_TOTAL'], # strings or the special +                                                      #value _TOTAL +             'footer_align'  => [ 'c', 'l', 'r', '' ], + +             'param'         => { column0 => 1 },  # preset column of row 0 to 1 +           )  </%doc> @@ -232,12 +251,20 @@ Example:      <TR>        <TD> -        <INPUT TYPE="text" NAME="custnum<% $row %>" ID="custnum<% $row %>" SIZE=8 MAXLENGTH=12 VALUE="<% $param->{"custnum$row"} %>" rownum="<% $row %>"> -          <SCRIPT TYPE="text/javascript"> -            var custnum_input<% $row %> = document.getElementById("custnum<% $row %>"); -            custnum_input<% $row %>.onfocus = clearhint_custnum; -            custnum_input<% $row %>.onchange = <% $opt{prefix} %>search_custnum; -          </SCRIPT> +        <INPUT TYPE      = "text" +               NAME      = "custnum<% $row %>" +               ID        = "custnum<% $row %>" +               SIZE      = 8 +               MAXLENGTH = 12 +               STYLE     = "text-align:right;" +               VALUE     = "<% $param->{"custnum$row"} %>" +               rownum    = "<% $row %>" +        > +        <SCRIPT TYPE="text/javascript"> +          var custnum_input<% $row %> = document.getElementById("custnum<% $row %>"); +          custnum_input<% $row %>.onfocus = clearhint_custnum; +          custnum_input<% $row %>.onchange = <% $opt{prefix} %>search_custnum; +        </SCRIPT>        </TD>        <TD> @@ -264,13 +291,29 @@ Example:  %     } else {  %       $value = $param->{"$field$row"};   %     } -%     my $name = (ref($field) eq 'CODE') ? "column${col}_$row" : "$field$row"; -%     my $size = $sizes->[$col] || 10; -      <TD> +%     my $name  = (ref($field) eq 'CODE') ? "column${col}_$row" : "$field$row"; +%     my $align = $align{ $opt{align}->[$col] || 'l' }; +%     my $size  = $sizes->[$col]  || 10; +%     my $color = $opt{color}->[$col]; +%     my $font = $color ? qq(<FONT COLOR="$color">) : ''; +%     my $onchange = ''; +%     if ( $opt{footer}->[$col] eq '_TOTAL' ) { +%       $total[$col] += $value; +%       $onchange = $opt{prefix}. "calc_total$col();"; +%       $onchange = qq(onchange="$onchange" onkeyup="$onchange"); +%     } +      <TD ALIGN="<% $align %>">  %     if (! $types->[$col] || $types->[$col] eq 'text') { -        <INPUT TYPE="text" NAME="<% $name %>" SIZE="<% $size %>" VALUE="<% $value %>" > +        <INPUT TYPE  = "text" +               NAME  = "<% $name %>" +               ID    = "<% $name %>" +               SIZE  = "<% $size %>" +               STYLE = "text-align: <% $align %>;" +               VALUE = "<% $value %>" +               <% $onchange %> +        >  %     } elsif ($types->[$col] eq 'immutable') { -        <% $value %> +        <% $font %><% $value %><% $font ? '</FONT>' : '' %>          <INPUT TYPE="hidden" NAME="<% $name %>" VALUE="<% $value %>" >  %     } else {          Cannot represent unknown type: <% $types->[$col] %> @@ -282,9 +325,62 @@ Example:      </TR>  % }  +<TR> +  <TH COLSPAN=2 ID="<% $opt{'prefix'} %>_TOTAL_TOTAL"> +    Total <% $row ? $row-1 : 0 %> +    <% PL($opt{name_singular} || 'customer', ( $row ? $row-1 : 0 ) ) %> +  </TH> +% my $col = 0; +% foreach my $footer ( @{$opt{footer}} ) { +%   my $align = $align{ $opt{'footer_align'}->[$col] || 'c' }; +%   if ($footer eq '_TOTAL' ) { +%     my $id = $opt{'fields'}->[$col]; +%     $id = ref($id) ? "column${col}_TOTAL" : "${id}_TOTAL"; +      <TH ALIGN="<% $align %>" ID="<% $id %>"> <% sprintf('%.2f', $total[$col] ) %></TH> +%   } else { +      <TH ALIGN="<% $align %>"><% $footer %></TH> +%   } +%   $col++; +% } +</TR>  </TABLE> +<SCRIPT TYPE="text/javascript"> +% my $col = 0; +% foreach my $footer ( @{$opt{footer}} ) { +%   if ($footer eq '_TOTAL' ) { +%     my $name = $opt{fields}->[$col]; +%     $name = ref($name) ? "column$col" : $name; +      var <% $opt{prefix}.$name %>_CACHE = new Array (); +      var <% $opt{prefix} %>th_el = document.getElementById("<%$name%>_TOTAL"); +      function <% $opt{prefix} %>calc_total<% $col %>() { +        var row = 0; +        var total = 0; +        for ( var row = 0; +               +              ( <% $opt{prefix}.$name%>_CACHE[row] = +                                        <% $opt{prefix}.$name%>_CACHE[row] +                                     || document.getElementById("<%$name%>"+row) +              ) != null; +               +              row++ +            ) +        { +          var value = <%$name%>_CACHE[row].value; +          value = parseFloat(value); +          if ( ! isNaN(value) ) { +            total = total + value; +          } +        } +        <% $opt{prefix} %>th_el.innerHTML = ' ' + total.toFixed(2); + +      } +%   } +%   $col++; +% } +</SCRIPT> +  <% include('/elements/xmlhttp.html',                'url'  => $p. 'misc/xmlhttp-cust_main-search.cgi',                'subs' => [qw( custnum_search smart_search )], @@ -293,6 +389,9 @@ Example:  <SCRIPT TYPE="text/javascript"> +  var <% $opt{prefix} %>total_el = +    document.getElementById("<% $opt{'prefix'} %>_TOTAL_TOTAL"); +    var <% $opt{prefix} %>rownum = <% $row %>;    function <% $opt{prefix} %>addRow() { @@ -300,13 +399,14 @@ Example:      var table = document.getElementById('<% $opt{prefix} %>OneTrueTable');      var tablebody = table.getElementsByTagName('tbody').item(0); -    var row = document.createElement('TR'); +    var row = table.insertRow(rownum+1);      var custnum_cell = document.createElement('TD');        var custnum_input = document.createElement('INPUT');        custnum_input.setAttribute('name', 'custnum'+<% $opt{prefix} %>rownum);        custnum_input.setAttribute('id',   'custnum'+<% $opt{prefix} %>rownum); +      custnum_input.style.textAlign = 'right';        custnum_input.setAttribute('size', 8);        custnum_input.setAttribute('maxlength', 12);        custnum_input.setAttribute('rownum', <% $opt{prefix} %>rownum); @@ -342,7 +442,9 @@ Example:  %   my $col = 0;  %   foreach my $field ( @{$opt{fields}} ) { -    var my_cell = document.createElement('TD'); + +      var my_cell = document.createElement('TD'); +      my_cell.setAttribute('align', '<% $align{ $opt{align}->[$col] || 'l' } %>');  %     if ($types->[$col] eq 'immutable') {  %       my $value; @@ -357,10 +459,16 @@ Example:        var my_input = document.createElement('INPUT');        my_input.setAttribute('name', '<% $field %>'+<% $opt{prefix} %>rownum); +      my_input.setAttribute('id',   '<% $field %>'+<% $opt{prefix} %>rownum); +      my_input.style.textAlign = '<% $align{ $opt{align}->[$col] || 'l' } %>';        my_input.setAttribute('size', <% $sizes->[$col] || 10 %>);  %     if ($types->[$col] eq 'immutable') {          my_input.setAttribute('type', 'hidden');  %     } +%     if ( $opt{footer}->[$col] eq '_TOTAL' ) { +        my_input.onchange   = <% $opt{prefix} %>calc_total<%$col%>; +        my_input.onkeyup    = <% $opt{prefix} %>calc_total<%$col%>; +%     }        my_cell.appendChild(my_input);      row.appendChild(my_cell); @@ -368,7 +476,18 @@ Example:  %     $col++;  %   } -    tablebody.appendChild(row); +    //update the total # of rows display +    if ( <% $opt{prefix} %>rownum == 1 ) { +      <% $opt{prefix} %>total_el.innerHTML = +        'Total ' +          + <% $opt{prefix} %>rownum +          + ' <% $opt{name_singular} || 'customer' %>'; +    } else { +      <% $opt{prefix} %>total_el.innerHTML = +        'Total ' +          + <% $opt{prefix} %>rownum +          + ' <% PL($opt{name_singular} || 'customer') %>'; +    }      <% $opt{prefix} %>rownum++; @@ -387,9 +506,19 @@ $opt{prefix} = '' unless defined $opt{prefix};  $opt{prefix} .= '_' if $opt{prefix};  my $types = $opt{'types'} ? [ @{$opt{'types'}} ] : []; -my $sizes = $opt{'sizes'} ? [ @{$opt{'sizes'}} ] : []; +my $sizes = $opt{'size'} ? [ @{$opt{'size'}} ] : [];  my $param = $opt{param};  $param = $cgi->Vars if $cgi->param('error'); +$opt{$_} ||= [] foreach qw(align color footer footer_align); + +my @total = map 0, @{$opt{footer}}; + +my %align = ( +  'l' => 'left', +  'r' => 'right', +  'c' => 'center', +); +  </%init> diff --git a/httemplate/misc/batch-cust_pay.html b/httemplate/misc/batch-cust_pay.html index c0b9068be..e10a5f658 100644 --- a/httemplate/misc/batch-cust_pay.html +++ b/httemplate/misc/batch-cust_pay.html @@ -7,11 +7,16 @@  <!-- <B>Batch</B> <INPUT TYPE="text" NAME="paybatch"><BR><BR> -->  <% include( "/elements/customer-table.html", -              header => [ '', 'Amount', 'Check #', '' ], -              fields => [ sub {'$'}, 'paid', 'payinfo', 'error', ], -              types  => [ 'immutable', '', '', 'immutable', ], -              sizes  => [ 0, 8, 10, 0, ], -              param  => { () }, +              name_singular => 'payment', +              header  => [ '', 'Amount', 'Check #', '' ], +              fields  => [ sub {'$'}, 'paid', 'payinfo', 'error', ], +              types   => [ 'immutable', '', '', 'immutable', ], +              align   => [ 'c', 'r', 'r', 'l' ], +              sizes   => [ 0, 8, 10, 0, ], +              colors  => [ '', '', '', '#ff0000' ], +              param   => { () }, +              footer  => [ '$', '_TOTAL', '', '' ], +              footer_align => [ 'c', 'r', 'r', '' ],            )  %> | 
