[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