[freeside-commits]
freeside/httemplate/misc batch-cust_pay.html, 1.1,
1.2 xmlhttp-cust_main-search.cgi, NONE, 1.1
Ivan,,,
ivan at wavetail.420.am
Mon Oct 10 05:20:59 PDT 2005
Update of /home/cvs/cvsroot/freeside/httemplate/misc
In directory wavetail:/tmp/cvs-serv29161/httemplate/misc
Modified Files:
batch-cust_pay.html
Added Files:
xmlhttp-cust_main-search.cgi
Log Message:
updated quick payment entry
--- NEW FILE: xmlhttp-cust_main-search.cgi ---
<%
my $sub = $cgi->param('sub');
if ( $sub eq 'custnum_search' ) {
my $custnum = $cgi->param('arg');
my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } );
%>"<%= $cust_main ? $cust_main->name : '' %>"
<% } elsif ( $sub eq 'smart_search' ) {
my $string = $cgi->param('arg');
my @cust_main = smart_search( 'search' => $string );
my $return = [ map [ $_->custnum, $_->name ], @cust_main ];
%><%= objToJson($return) %>
<% } %>
Index: batch-cust_pay.html
===================================================================
RCS file: /home/cvs/cvsroot/freeside/httemplate/misc/batch-cust_pay.html,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- batch-cust_pay.html 8 Oct 2005 13:45:14 -0000 1.1
+++ batch-cust_pay.html 10 Oct 2005 12:20:57 -0000 1.2
@@ -1,99 +1,234 @@
<%= header( 'Quick payment entry',
menubar(
- 'Main Menu' => popurl(1),
+ 'Main Menu' => $p, #popurl(1),
+ 'Old-style quick payment entry' =>
+ $p. 'search/cust_main-quickpay.html',
),
- 'onLoad="addRow()"',
+ ( $cgi->param('error') ? '' : 'onload="addRow()"' ),
)
%>
<% if ( $cgi->param('error') ) { %>
- <FONT SIZE="+1" COLOR="#ff0000">Error: <%= $cgi->param('error') %></FONT>
+ <FONT SIZE="+1" COLOR="#ff0000"><%= $cgi->param('error') %></FONT><BR><BR>
<% } %>
+
+<FORM ACTION="process/batch-cust_pay.cgi" NAME="OneTrueForm" METHOD="POST" onsubmit="document.OneTrueForm.submit.disabled=true;">
+
+<!-- <B>Batch</B> <INPUT TYPE="text" NAME="paybatch"><BR><BR> -->
+
<SCRIPT TYPE="text/javascript">
- var rownum = 0;
+ function clearhint_custnum() {
- function addRow() {
+ //this.style.color = '#000000';
- var table = document.getElementById('OneTrueTable');
- var tablebody = table.getElementsByTagName('tbody').item(0);
+ if ( this.value == 'Not found' || this.value == 'Multiple' ) {
+ this.value = '';
+ this.style.color = '#000000';
+ }
- var row = document.createElement('TR');
+ }
- var custnum_cell = document.createElement('TD');
- var custnum_input = document.createElement('INPUT');
- custnum_input.setAttribute('name', 'custnum'+rownum);
- custnum_input.setAttribute('size', 8);
- custnum_input.setAttribute('maxlength', 7);
- custnum_input.setAttribute('rownum', rownum);
- custnum_input.onchange = search_custnum;
+ function clearhint_customer() {
- custnum_cell.appendChild(custnum_input);
- row.appendChild(custnum_cell);
+ this.style.color = '#000000';
- var customer_cell = document.createElement('TD');
- var customer_input = document.createElement('INPUT');
- custnum_input.setAttribute('name', 'customer'+rownum);
- customer_input.setAttribute('size', 32);
- customer_input.setAttribute('value', '(last name or company)' );
- customer_input.onfocus = clearhint;
- customer_input.setAttribute('rownum', rownum);
- customer_input.onchange = search_customer;
- customer_cell.appendChild(customer_input);
- row.appendChild(customer_cell);
+ if ( this.value == '(last name or company)' || this.value == 'Not found' )
+ this.value = '';
- var paid_cell = document.createElement('TD');
- var paid_text = document.createTextNode('$');
- var paid_input = document.createElement('INPUT');
- paid_input.setAttribute('name', 'paid'+rownum);
- paid_input.setAttribute('size', 8);
- paid_input.setAttribute('maxlength', 8);
- paid_cell.appendChild(paid_text);
- paid_cell.appendChild(paid_input);
- row.appendChild(paid_cell);
+ }
- var payinfo_cell = document.createElement('TD');
- var payinfo_input = document.createElement('INPUT');
- payinfo_input.setAttribute('name', 'payinfo'+rownum);
- payinfo_input.setAttribute('size', 10);
- payinfo_cell.appendChild(payinfo_input);
- row.appendChild(payinfo_cell);
+ function search_custnum() {
- tablebody.appendChild(row);
+ this.style.color = '#000000'
- rownum++;
+ var custnum_obj = this;
+ var searchrow = this.getAttribute('rownum');
+ var custnum = this.value;
- }
+ if ( custnum == 'searching...' || custnum == 'Not found' || custnum == '' )
+ return;
- function clearhint() {
+ if ( this.getAttribute('magic') == 'nosearch' ) {
+ this.setAttribute('magic', '');
+ return;
+ }
- if ( this.value == '(last name or company)' )
- this.value = '';
+ if ( ( rownum - searchrow ) == 1 ) {
+ addRow();
+ }
+ var customer = document.getElementById('customer'+searchrow);
+ customer.value = 'searching...';
+ customer.disabled = true;
+ customer.style.color = '#000000';
+ customer.style.backgroundColor = '#dddddd';
- }
+ var customer_select = document.getElementById('cust_select'+searchrow);
- function search_custnum() {
+ //alert('search for custnum ' + custnum + ', row#' + searchrow );
- var searchrow = this.getAttribute('rownum');
+ customer.style.display = '';
+ customer_select.style.display = 'none';
- alert('search for custnum row#' + searchrow );
+ function search_custnum_update(name) {
+
+ var name = eval('(' + name + ')' );
+
+ customer.disabled = false;
+ customer.style.backgroundColor = '#ffffff';
+
+ if ( name.length > 0 ) {
+ //alert('custnum found: ' + name);
+ customer.value = name;
+ customer.setAttribute('magic', 'nosearch');
+ } else {
+ customer.value = 'Not found';
+ customer.style.color = '#ff0000';
+ custnum_obj.style.color = '#ff0000';
+
+ }
+
+ }
+
+ custnum_search( custnum, search_custnum_update );
}
function search_customer() {
+ var customer_obj = this;
var searchrow = this.getAttribute('rownum');
+ var customer = this.value;
- alert('search for customer row#' + searchrow );
+ if ( customer == 'searching...' || customer == 'Not found' || customer == '' )
+ return;
+
+ if ( this.getAttribute('magic') == 'nosearch' ) {
+ this.setAttribute('magic', '');
+ return;
+ }
+
+ if ( ( rownum - searchrow ) == 1 ) {
+ addRow();
+ }
+
+ var custnum_obj = document.getElementById('custnum'+searchrow);
+ custnum_obj.value = 'searching...';
+ custnum_obj.disabled = true;
+ custnum_obj.style.color = '#000000';
+ custnum_obj.style.backgroundColor = '#dddddd';
+
+ var customer_select = document.getElementById('cust_select'+searchrow);
+
+ //alert('search for customer ' + customer + ', row#' + searchrow );
+
+ function search_customer_update(customers) {
+
+ //alert('customers returned: ' + customers);
+
+ var customerArray = eval('(' + customers + ')');
+
+ custnum_obj.disabled = false;
+ custnum_obj.style.backgroundColor = '#ffffff';
+
+ if ( customerArray.length == 0 ) {
+
+ custnum_obj.value = 'Not found';
+ custnum_obj.style.color = '#ff0000';
+ customer_obj.style.color = '#ff0000';
+
+ customer_obj.style.display = '';
+ customer_select.style.display = 'none';
+
+
+ } else if ( customerArray.length == 1 ) {
+
+ //alert('one customer found: ' + customerArray[0]);
+
+ custnum_obj.value = customerArray[0][0];
+ customer_obj.value = customerArray[0][1];
+
+ customer_obj.style.display = '';
+ customer_select.style.display = 'none';
+
+
+ } else {
+
+ custnum_obj.value = 'Multiple'; // or something
+ custnum_obj.style.color = '#ff0000';
+
+ //alert('multiple customers found, have to create select dropdown');
+
+ //blank the current list
+ for ( var i = customer_select.length; i >= 0; i-- )
+ customer_select.options[i] = null;
+
+ opt(customer_select, '', 'Multiple customers match "' + customer + '" - select one', '#ff0000');
+
+ //add the multiple customers
+ for ( var s = 0; s < customerArray.length; s++ )
+ opt(customer_select, customerArray[s][0], customerArray[s][1], '#000000');
+
+ opt(customer_select, 'cancel', '(Edit search string)', '#000000');
+
+ customer_obj.style.display = 'none';
+
+ customer_select.style.display = '';
+
+ }
+
+ }
+
+ smart_search( customer, search_customer_update );
}
-</SCRIPT>
+ function select_customer() {
-<FORM ACTION="<%= $p %>process/batch-cust_pay.cgi" METHOD=POST>
+ var custnum = this.options[this.selectedIndex].value;
+ var customer = this.options[this.selectedIndex].text;
-<B>Batch <INPUT TYPE="text" NAME="paybatch"><BR><BR>
+ var searchrow = this.getAttribute('rownum');
+ var custnum_obj = document.getElementById('custnum'+searchrow);
+ var customer_obj = document.getElementById('customer'+searchrow);
+
+ if ( custnum == '' ) {
+ //this.style.color = '#ff0000';
+
+ } else if ( custnum == 'cancel' ) {
+
+ custnum_obj.value = '';
+ custnum_obj.style.color = '#000000';
+
+ this.style.display = 'none';
+ customer_obj.style.display = '';
+ customer_obj.focus();
+
+ } else {
+
+
+ custnum_obj.value = custnum;
+ custnum_obj.style.color = '#000000';
+
+ customer_obj.value = customer;
+ customer_obj.style.color = '#000000';
+
+ this.style.display = 'none';
+ customer_obj.style.display = '';
+
+ }
+
+ }
+
+ function opt(what,value,text,color) {
+ var optionName = new Option(text, value, false, false);
+ optionName.style.color = color;
+ var length = what.length;
+ what.options[length] = optionName;
+ }
+
+</SCRIPT>
<TABLE ID="OneTrueTable" BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0>
@@ -102,33 +237,160 @@
<TH>Customer</TH>
<TH>Amount</TH>
<TH>Check #</TH>
+ <TH BGCOLOR="#e8e8e8"></TH>
</TR>
-<!--
-<TR>
- <TD>
- <INPUT TYPE="text" NAME="custnum0" SIZE=8 MAXLENGTH=7 onChange="alert('search for custnum')" >
- </TD>
- <TD>
- <INPUT TYPE="text" NAME="customer0" SIZE=32 VALUE="(last name or company)" onChange="alert('search for customer')" >
- </TD>
- <TD>
- $<INPUT TYPE="text" NAME="paid0" SIZE=8 MAXLENGTH=8>
- </TD>
- <TD>
- <INPUT TYPE="text" NAME="payinfo" SIZE=10>
- </TD>
-</TR>
--->
+<% my $row = 0;
+ if ( $cgi->param('error') ) {
+ my $param = $cgi->Vars;
+%>
+
+ <% for ( $row = 0; exists($param->{"custnum$row"}); $row++ ) { %>
+
+ <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 = search_custnum;
+ </SCRIPT>
+ </TD>
+
+ <TD>
+ <INPUT TYPE="text" NAME="customer<%= $row %>" ID="customer<%= $row %>" SIZE=64 VALUE="<%= $param->{"customer$row"} %>" rownum="<%= $row %>">
+ <SCRIPT TYPE="text/javascript">
+ var customer_input<%= $row %> = document.getElementById("customer<%= $row %>");
+ customer_input<%= $row %>.onfocus = clearhint_customer;
+ customer_input<%= $row %>.onclick = clearhint_customer;
+ customer_input<%= $row %>.onchange = search_customer;
+ </SCRIPT>
+ <SELECT NAME="cust_select<%= $row %>" ID="cust_select<%= $row %>" rownum="<%= $row %>" STYLE="color:#ff0000; display:none"">
+ </SELECT>
+ <SCRIPT TYPE="text/javascript">
+ var customer_select<%= $row %> = document.getElementById("cust_select<%= $row %>");
+ customer_select<%= $row %>.onchange = select_customer;
+ </SCRIPT>
+ </TD>
+
+ <TD>
+ $<INPUT TYPE="text" NAME="paid<%= $row %>" SIZE=8 MAXLENGTH=8 VALUE="<%= $param->{"paid$row"} %>" >
+ </TD>
+
+ <TD>
+ <INPUT TYPE="text" NAME="payinfo<%= $row %>" SIZE=10 VALUE="<%= $param->{"payinfo$row"} %>" >
+ </TD>
+
+ <TD BGCOLOR="#e8e8e8">
+ <% if ( $param->{"error$row"} ) { %>
+ <FONT SIZE="-1" COLOR="#ff0000">Error: <%= $param->{"error$row"} %></FONT>
+ <% } %>
+ </TD>
+
+ </TR>
+
+ <% } %>
+
+<% } %>
</TABLE>
-<BR>
-<INPUT TYPE="button" VALUE="TEST addrow" onClick="addRow()">
+<!-- <BR>
+<INPUT TYPE="button" VALUE="TEST addrow" onclick="addRow()"> -->
<BR>
-<INPUT TYPE="submit" VALUE="Post payments">
+<INPUT TYPE="submit" NAME="submit" VALUE="Post payments">
</FORM>
+
+
+<%= include('/elements/xmlhttp.html',
+ 'url' => $p. 'misc/xmlhttp-cust_main-search.cgi',
+ 'subs' => [qw( custnum_search smart_search )],
+ )
+%>
+
+<SCRIPT TYPE="text/javascript">
+
+ var rownum = <%= $row %>;
+
+ function addRow() {
+
+ var table = document.getElementById('OneTrueTable');
+ var tablebody = table.getElementsByTagName('tbody').item(0);
+
+ var row = document.createElement('TR');
+
+ var custnum_cell = document.createElement('TD');
+
+ var custnum_input = document.createElement('INPUT');
+ custnum_input.setAttribute('name', 'custnum'+rownum);
+ custnum_input.setAttribute('id', 'custnum'+rownum);
+ custnum_input.setAttribute('size', 8);
+ custnum_input.setAttribute('maxlength', 12);
+ custnum_input.setAttribute('rownum', rownum);
+ custnum_input.onfocus = clearhint_custnum;
+ custnum_input.onchange = search_custnum;
+ custnum_cell.appendChild(custnum_input);
+
+ row.appendChild(custnum_cell);
+
+ var customer_cell = document.createElement('TD');
+
+ var customer_input = document.createElement('INPUT');
+ customer_input.setAttribute('name', 'customer'+rownum);
+ customer_input.setAttribute('id', 'customer'+rownum);
+ customer_input.setAttribute('size', 64);
+ customer_input.setAttribute('value', '(last name or company)' );
+ customer_input.setAttribute('rownum', rownum);
+ customer_input.onfocus = clearhint_customer;
+ customer_input.onclick = clearhint_customer;
+ customer_input.onchange = search_customer;
+ customer_cell.appendChild(customer_input);
+
+ var customer_select = document.createElement('SELECT');
+ customer_select.setAttribute('name', 'cust_select'+rownum);
+ customer_select.setAttribute('id', 'cust_select'+rownum);
+ customer_select.setAttribute('rownum', rownum);
+ customer_select.style.color = '#ff0000';
+ customer_select.style.display = 'none';
+ customer_select.onchange = select_customer;
+ customer_cell.appendChild(customer_select);
+
+ row.appendChild(customer_cell);
+
+ var paid_cell = document.createElement('TD');
+
+ var paid_text = document.createTextNode('$');
+ paid_cell.appendChild(paid_text);
+
+ var paid_input = document.createElement('INPUT');
+ paid_input.setAttribute('name', 'paid'+rownum);
+ paid_input.setAttribute('size', 8);
+ paid_input.setAttribute('maxlength', 8);
+ paid_cell.appendChild(paid_input);
+
+ row.appendChild(paid_cell);
+
+ var payinfo_cell = document.createElement('TD');
+ var payinfo_input = document.createElement('INPUT');
+ payinfo_input.setAttribute('name', 'payinfo'+rownum);
+ payinfo_input.setAttribute('size', 10);
+ payinfo_cell.appendChild(payinfo_input);
+ row.appendChild(payinfo_cell);
+
+ var error_cell = document.createElement('TD');
+ error_cell.style.backgroundColor = '#e8e8e8';
+ row.appendChild(error_cell);
+
+ tablebody.appendChild(row);
+
+ rownum++;
+
+ }
+
+</SCRIPT>
+
</BODY>
</HTML>
More information about the freeside-commits
mailing list