X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Felements%2Fcustomer-table.html;h=090623ff90d0844ca5b5dac29280d46cfd05ca46;hb=1115b9089e9d9ecf104bc61bb22e84f5233aa44b;hp=f00419f9c5e9563c9acb2928c2e6c35045437af5;hpb=40a7b3dc653e099f7bd0bd762b649b04c4432db2;p=freeside.git
diff --git a/httemplate/elements/customer-table.html b/httemplate/elements/customer-table.html
index f00419f9c..090623ff9 100644
--- a/httemplate/elements/customer-table.html
+++ b/httemplate/elements/customer-table.html
@@ -22,6 +22,7 @@ Example:
###
'name_singular' => 'customer', #label
+ 'custnum_update_callback' => 'name_of_js_callback' #passed a rownum
#listrefs
'types' => ['immutable', ''], # immutable or ''/text
@@ -40,6 +41,17 @@ Example:
+ function update_status_text(rownum, newval) {
+ document.getElementById('status'+rownum).value = newval;
+ document.getElementById('status'+rownum+'_text').innerHTML = newval;
+ }
-
+ function update_status_color(rownum, newval) {
+ document.getElementById('statuscolor'+rownum).value = newval;
+ document.getElementById('status'+rownum+'_text').style.color = newval;
+ }
-
- Cust # |
- Customer |
-% foreach my $header ( @{$opt{header}} ) {
- <% $header %> |
-% }
-
-% my $row = 0;
-% for ( $row = 0; exists($param->{"custnum$row"}); $row++ ) {
-
-
-
-
- "
- rownum = "<% $row %>"
- >
-
- |
-
-
- " rownum="<% $row %>">
-
-
-
- |
+ function update_balance_text(rownum, newval) {
+ document.getElementById('balance'+rownum).value = newval;
+ document.getElementById('balance'+rownum+'_text').innerHTML = newval;
+ }
-% my $col = 0;
-% foreach my $field ( @{$opt{fields}} ) {
-% my $value;
-% if ( ref($field) eq 'CODE' ) {
-% $value = &{$field}($row,$param);
-% } else {
-% $value = $param->{"$field$row"};
-% }
-% 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() : '';
-% my $onchange = '';
-% if ( $opt{footer}->[$col] eq '_TOTAL' ) {
-% $total[$col] += $value;
-% $onchange = $opt{prefix}. "calc_total$col();";
-% $onchange = qq(onchange="$onchange" onkeyup="$onchange");
-% }
-
-% if (! $types->[$col] || $types->[$col] eq 'text') {
-
- >
-% } elsif ($types->[$col] eq 'immutable') {
- <% $font %><% $value %><% $font ? '' : '' %>
-
-% } else {
- Cannot represent unknown type: <% $types->[$col] %>
-% }
- |
-% $col++;
-% }
+ function update_num_open(rownum, newval) {
+ document.getElementById('num_open'+rownum).value = newval;
+ num_open_invoices[rownum] = newval;
+ }
-
-% }
+ function <% $opt{prefix} %>updateTotalRow () {
+ if ( <% $opt{prefix} %>totalrows == 1 ) {
+ <% $opt{prefix} %>total_el.innerHTML =
+ 'Total '
+ + <% $opt{prefix} %>totalrows
+ + ' <% $opt{name_singular} || 'customer' %>';
+ } else {
+ <% $opt{prefix} %>total_el.innerHTML =
+ 'Total '
+ + <% $opt{prefix} %>totalrows
+ + ' <% PL($opt{name_singular} || 'customer') %>';
+ }
+ }
-
-
- Total <% $row ? $row-1 : 0 %>
- <% PL($opt{name_singular} || 'customer', ( $row ? $row-1 : 0 ) ) %>
- |
-% 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";
- <% sprintf('%.2f', $total[$col] ) %> |
-% } else {
- <% $footer %> |
-% }
-% $col++;
-% }
-
+ var <% $opt{prefix} %>total_el, <% $opt{prefix} %>rownum, <% $opt{prefix} %>totalrows, <% $opt{prefix} %>allrows;
+
+ function <% $opt{prefix} %>addDeleteButton (searchrow) {
+ var td_delete = document.getElementById('delete'+searchrow);
+ var button_delete = document.createElement('INPUT');
+ button_delete.setAttribute('rownum', searchrow);
+ button_delete.setAttribute('type', 'button');
+ button_delete.setAttribute('value', 'X');
+ button_delete.onclick = <% $opt{prefix} %>deleteRow;
+ button_delete.style.color = '#ff0000';
+ button_delete.style.fontWeight = 'bold';
+ button_delete.style.paddingLeft = '2px';
+ button_delete.style.paddingRight = '2px';
+ td_delete.appendChild(button_delete);
+ }
-
+ function <% $opt{prefix} %>newEmptyRow (searchrow) {
+ // add delete button to current row
+ <% $opt{prefix} %>addDeleteButton(searchrow);
+ // mark current row as non-empty
+ var oldemptyrow = document.getElementById('row'+searchrow);
+ oldemptyrow.emptyrow = false;
+ // update totalrows
+ <% $opt{prefix} %>totalrows++
+ <% $opt{prefix} %>updateTotalRow();
+ // add a new empty row
+ <% $opt{prefix} %>addRow();
+ }
-
-
-<% include('/elements/xmlhttp.html',
- 'url' => $p. 'misc/xmlhttp-cust_main-search.cgi',
- 'subs' => [qw( custnum_search smart_search )],
- )
-%>
-
-
+
+
+
+
+ Inv # |
+ Cust # |
+ Status |
+ Customer |
+ Balance |
+% foreach my $header ( @{$opt{header}} ) {
+ <% $header %> |
+% }
+
+
+% my @rownums = sort { $a <=> $b } map /^custnum(\d+)$/, keys %$param;
+
+
+ Total <% @rownums || 0 %>
+ <% PL($opt{name_singular} || 'customer', ( @rownums || 0 ) ) %>
+ |
+% 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";
+ <% sprintf('%.2f', $total[$col] ) %> |
+% } else {
+ <% $footer %> |
+% }
+% $col++;
+% }
+
+
+
+
+
+<% include('/elements/xmlhttp.html',
+ 'url' => $p. 'misc/xmlhttp-cust_main-search.cgi',
+ 'subs' => [qw( custnum_search smart_search invnum_search )],
+ )
+%>
+
<%init>
my(%opt) = @_;
+my $conf = new FS::Conf;
+## caution when using prefix, it isn't consistently applied to tag id/name
$opt{prefix} = '' unless defined $opt{prefix};
$opt{prefix} .= '_' if $opt{prefix};
-my $types = $opt{'types'} ? [ @{$opt{'types'}} ] : [];
+my $types = $opt{'type'} ? [ @{$opt{'type'}} ] : [];
my $sizes = $opt{'size'} ? [ @{$opt{'size'}} ] : [];
my $param = $opt{param};
@@ -521,4 +795,5 @@ my %align = (
'c' => 'center',
);
+my $money_char = $conf->config('money_char') || '$';
%init>