selfservice priority sort order, #14029
[freeside.git] / httemplate / misc / batch-cust_pay.html
index b09876b..11fdeee 100644 (file)
-<%= header( 'Quick payment entry',
-            menubar(
-                     'Main Menu' => popurl(1),
-                   ),
-            'onLoad="addRow()"',
-          )
-%>
+<% include('/elements/header.html', 'Quick payment entry') %>
 
-<% if ( $cgi->param('error') ) { %>
-  <FONT SIZE="+1" COLOR="#ff0000">Error: <%= $cgi->param('error') %></FONT>
-<% } %>
+<% include('/elements/error.html') %>
 
 <SCRIPT TYPE="text/javascript">
-
-  var rownum = 0;
-
-  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('size', 8);
-    custnum_input.setAttribute('maxlength', 7);
-    custnum_input.setAttribute('rownum', rownum);
-    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');
-    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);
-
-    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);
-
-    tablebody.appendChild(row);
-
-    rownum++;
-
+function warnUnload() {
+  if(document.getElementById("OneTrueTable").rows.length > 3 &&
+     !document.OneTrueForm.btnsubmit.disabled) {
+    return "The current batch will be lost.";
   }
-
-  function clearhint() {
-
-    if ( this.value == '(last name or company)' )
-      this.value = '';
-
+  else {
+    return null;
   }
+}
+window.onbeforeunload = warnUnload;
 
-  function search_custnum() {
-
-    var searchrow = this.getAttribute('rownum');
-
-    alert('search for custnum row#' + searchrow );
+function select_discount_term(row, prefix) {
+  var custnum_obj = document.getElementById('custnum'+prefix+row);
+  var select_obj = document.getElementById('discount_term'+prefix+row);
 
+  var value = '';
+  if (select_obj.type == 'hidden') {
+    value = select_obj.value;
   }
 
-  function search_customer() {
-
-    var searchrow = this.getAttribute('rownum');
-
-    alert('search for customer row#' + searchrow );
+  var term_select = document.createElement('SELECT');
+  term_select.setAttribute('name', 'discount_term'+row);
+  term_select.setAttribute('id',   'discount_term'+row);
+  term_select.setAttribute('rownum', row);
+  term_select.style.display = '';
+  select_obj.parentNode.replaceChild(term_select, select_obj);
+  opt(term_select, '', '1 month');
+  
+  function select_discount_term_update(discount_terms) {
+
+    var termArray = eval('(' + discount_terms + ')');
+    for ( var t = 0; t < termArray.length; t++ ) {
+      opt(term_select, termArray[t][0], termArray[t][1]);
+      if (termArray[t][0] == value) {
+        term_select.selectedIndex = t+1;
+      }
+    }
 
   }
 
+  discount_terms(custnum_obj.value, select_discount_term_update);
+
+}
 </SCRIPT>
 
-<FORM ACTION="<%= $p %>process/batch-cust_pay.cgi" METHOD=POST>
-
-<B>Batch <INPUT TYPE="text" NAME="paybatch"><BR><BR>
-
-<TABLE ID="OneTrueTable" BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0>
-
-<TR>
-  <TH>Cust #</TH>
-  <TH>Customer</TH>
-  <TH>Amount</TH>
-  <TH>Check #</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>
--->
-
-</TABLE>
+<% include('/elements/xmlhttp.html',
+              'url'  => $p. 'misc/xmlhttp-cust_main-discount_terms.cgi',
+              'subs' => [qw( discount_terms )],
+           )
+%>
 
-<BR>
-<INPUT TYPE="button" VALUE="TEST addrow" onClick="addRow()">
+<FORM ACTION="process/batch-cust_pay.cgi" NAME="OneTrueForm" METHOD="POST" onsubmit="document.OneTrueForm.btnsubmit.disabled=true;window.onbeforeunload = null;">
+
+<!-- <B>Batch</B> <INPUT TYPE="text" NAME="paybatch"><BR><BR> -->
+
+<% include( "/elements/customer-table.html",
+              name_singular => 'payment',
+              header  => \@header,
+              fields  => \@fields,
+              types   => \@types,
+              align   => \@align,
+              sizes   => \@sizes,
+              colors  => \@colors,
+              param   => \%param,
+              footer  => \@footer,
+              footer_align => \@footer_align,
+              custnum_update_callback => $custnum_update_callback,
+          )
+%>
 
 <BR>
-<INPUT TYPE="submit" VALUE="Post payments">
+<INPUT TYPE="button" VALUE="Post payment batch" name="btnsubmit" onclick="window.onbeforeunload = null; document.OneTrueForm.submit(); this.disabled = true;">
 
 </FORM>
-</BODY>
-</HTML>
+
+%if ( $cgi->param('error') ) {
+<SCRIPT TYPE="text/javascript">
+%  for ( my $row = 0; defined($cgi->param("custnum$row")); $row++ ) {
+     select_discount_term(<% $row %>, '');
+%  }
+</SCRIPT>
+%}
+
+<% include('/elements/footer.html') %>
+
+<%init>
+
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('Post payment batch');
+
+my $conf = new FS::Conf;
+my $money_char = $conf->config('money_char') || '$';
+
+my @header  = ( '', 'Amount', 'Check #' );
+my @fields  = ( sub { "$money_char" }, 'paid', 'payinfo' );
+my @types   = ( 'immutable', '', '' );
+my @align   = ( 'c', 'r', 'r' );
+my @sizes   = ( 0, 8, 10 );
+my @colors  = ( '', '', '' );
+my %param   = ();
+my @footer  = ( "$money_char", '_TOTAL', '' );
+my @footer_align = ( 'c', 'r', 'r' );
+my $custnum_update_callback = '';
+
+if ( FS::Record->scalar_sql('SELECT COUNT(*) FROM part_pkg_discount') ) {
+  push @header, '';
+  push @fields, 'discount_term';
+  push @types, 'immutable';
+  push @align, 'r';
+  push @sizes, '0';
+  push @colors, '';
+  push @footer, '';
+  push @footer_align, '';
+  $custnum_update_callback = 'select_discount_term';
+}
+
+push @header, '';
+push @fields, 'error';
+push @types, 'immutable';
+push @align, 'l';
+push @sizes, '0';
+push @colors, '#ff0000';
+push @footer, '';
+push @footer_align, '';
+
+$m->comp('/elements/handle_uri_query');
+
+</%init>