credit line items interface: set credit amounts, RT#18676
authorIvan Kohler <ivan@freeside.biz>
Fri, 21 Dec 2012 07:01:07 +0000 (23:01 -0800)
committerIvan Kohler <ivan@freeside.biz>
Fri, 21 Dec 2012 07:01:07 +0000 (23:01 -0800)
FS/FS/cust_credit.pm
httemplate/edit/credit-cust_bill_pkg.html
httemplate/edit/process/credit-cust_bill_pkg.html
httemplate/view/cust_main/payment_history.html

index dfe55fb..9fd2d01 100644 (file)
@@ -5,6 +5,7 @@ use base qw( FS::otaker_Mixin FS::cust_main_Mixin FS::Record );
 use vars qw( $conf $unsuspendauto $me $DEBUG
              $otaker_upgrade_kludge $ignore_empty_reasonnum
            );
+use List::Util qw( min );
 use Date::Format;
 use FS::UID qw( dbh getotaker );
 use FS::Misc qw(send_email);
@@ -806,19 +807,22 @@ sub credit_lineitems {
 
         foreach my $location ( $tax_cust_bill_pkg->cust_bill_pkg_tax_Xlocation ) {
 
-          $location->cust_bill_pkg_desc($taxline->desc); #ugh @ that kludge
+          #support partial credits: use $amount if smaller
+          # (so just distribute to the first location?   perhaps should
+          #  do so evenly...)
+          my $loc_amount = min( $amount, $location->amount);
 
-          #$taxtotal += $location->amount;
-          $amount -= $location->amount;
+          #$taxtotal += $loc_amount
+          $amount -= $loc_amount;
 
           #push @taxlines,
           #  #[ $location->desc, $taxline->setup, $taxlocnum, $taxratelocnum ];
           #  [ $location->desc, $location->amount, $taxlocnum, $taxratelocnum ];
-          $cust_credit_bill{$invnum} += $location->amount;
+          $cust_credit_bill{$invnum} += $loc_amount;
           push @{ $cust_credit_bill_pkg{$invnum} },
             new FS::cust_credit_bill_pkg {
               'billpkgnum'                => $tax_cust_bill_pkg->billpkgnum,
-              'amount'                    => $location->amount,
+              'amount'                    => $loc_amount,
               'setuprecur'                => 'setup',
               'billpkgtaxlocationnum'     => $location->billpkgtaxlocationnum,
               'billpkgtaxratelocationnum' => $location->billpkgtaxratelocationnum,
index e317936..f5c4eef 100644 (file)
 %   next unless $amount > 0;
 
 %   if ( $cust_bill_pkg->invnum ne $old_invnum ) {
-      <TR><TD COLSPAN=3 BGCOLOR="#f8f8f8">&nbsp;</TD></TR>
-      <TR><TH COLSPAN=3 BGCOLOR="#f8f8f8" ALIGN="left">Invoice #<% $cust_bill_pkg->invnum %> - <% time2str($date_format, $cust_bill_pkg->cust_bill->_date) %></TD></TR>
+      <TR><TD COLSPAN=4 BGCOLOR="#f8f8f8">&nbsp;</TD></TR>
+      <TR><TH COLSPAN=4 BGCOLOR="#f8f8f8" ALIGN="left">Invoice #<% $cust_bill_pkg->invnum %> - <% time2str($date_format, $cust_bill_pkg->cust_bill->_date) %></TD></TR>
 %     $old_invnum = $cust_bill_pkg->invnum;
 %   }
 
+%   my $el_name = 'billpkgnum'. $cust_bill_pkg->billpkgnum. '-'. $setuprecur;
     <TR>
       <TD>
         <INPUT TYPE            = "checkbox"
-               NAME            = "billpkgnum<% $cust_bill_pkg->billpkgnum.'-'. $setuprecur %>"
-               VALUE           = "<% $amount %>"
+               NAME            = "<% $el_name %>"
+               ID              = "<% $el_name %>"
                onClick         = "calc_total(this)"
-               data-amount     = "<% $amount %>"
                data-billpkgnum = "<% $cust_bill_pkg->billpkgnum %>"
                data-setuprecur = "<% $setuprecur %>"
         >
       <TD BGCOLOR="#ffffff"><% $cust_bill_pkg->desc |h %></TD>
 %#    show one-time/setup vs recur vs usage?
       <TD BGCOLOR="#ffffff" ALIGN="right"><% $money_char. $amount %></TD>
+      <TD ALIGN="right">
+        <% $money_char %><INPUT TYPE     = "text"
+                                NAME     = "<% $el_name %>-amount"
+                                ID       = "<% $el_name %>-amount"
+                                VALUE    = "<% $amount %>"
+                                SIZE     = 6
+                                onChange = "calc_total(this)"
+                                STYLE    = "text-align:right;"
+                                DISABLED
+                         >
+      </TD>
     </TR>
 
 % }
 
-<TR><TD COLSPAN=3 BGCOLOR="#f8f8f8">&nbsp;</TD></TR>
+<TR><TD COLSPAN=4 BGCOLOR="#f8f8f8">&nbsp;</TD></TR>
 <TR>
   <TD></TD>
-  <TD ALIGN="right">Subtotal: </TD>
+  <TD ALIGN="right" COLSPAN=2>Subtotal: </TD>
   <TD ALIGN="right" ID="subtotal_td"><% $money_char %><% sprintf('%.2f', 0) %></TD>
 </TR>
 <TR>
   <TD></TD>
-  <TD ALIGN="right">Taxes: </TD>
+  <TD ALIGN="right" COLSPAN=2>Taxes: </TD>
   <TD ALIGN="right" ID="taxtotal_td"><% $money_char %><% sprintf('%.2f', 0) %></TD>
 </TR>
 <TR>
   <TD></TD>
-  <TH ALIGN="right">Total credit amount: </TD>
+  <TH ALIGN="right" COLSPAN=2>Total credit amount: </TD>
   <TH ALIGN="right" ID="total_td"><% $money_char %><% sprintf('%.2f', 0) %></TD>
 </TR>
 <INPUT TYPE="hidden" NAME="amount" ID="total_el" VALUE="0.00">
@@ -183,12 +194,21 @@ function calc_total(what) {
   var setuprecurs = [];
   var amounts = [];
   for (var i=0; i<el.length; i++) {
-    if ( el[i].type == 'checkbox' && el[i].checked ) {
-      subtotal += parseFloat( el[i].getAttribute('data-amount') );
-      amounts.push(     el[i].getAttribute('data-amount') );
-      billpkgnums.push( el[i].getAttribute('data-billpkgnum') );
-      setuprecurs.push( el[i].getAttribute('data-setuprecur') );
+
+    if ( el[i].type == 'checkbox' ) {
+      var amount_el = document.getElementById( el[i].id + '-amount' );
+      if ( el[i].checked ) {
+        amount_el.disabled = false;
+        var amount = amount_el.value;
+        subtotal += parseFloat( amount );
+        amounts.push( amount );
+        billpkgnums.push( el[i].getAttribute('data-billpkgnum') );
+        setuprecurs.push( el[i].getAttribute('data-setuprecur') );
+      } else {
+        amount_el.disabled = true;
+      }
     }
+
   }
 
   document.getElementById('subtotal_td').innerHTML =
index 8b2f3f3..1b61997 100644 (file)
@@ -20,7 +20,7 @@ my @billpkgnums = ();
 my @setuprecurs = ();
 my @amounts = ();
 foreach my $billpkgnum_setuprecur (@billpkgnum_setuprecurs) {
-  my $amount = $cgi->param("billpkgnum$billpkgnum_setuprecur");
+  my $amount = $cgi->param("billpkgnum$billpkgnum_setuprecur-amount");
   my( $billpkgnum, $setuprecur ) = split('-', $billpkgnum_setuprecur);
   push @billpkgnums, $billpkgnum;
   push @setuprecurs, $setuprecur;
index 6630d12..942b42f 100644 (file)
@@ -77,7 +77,7 @@
                'action'      => "${p}edit/credit-cust_bill_pkg.html",
                'cust_main'   => $cust_main,
                'actionlabel' => emt('Credit line items'),
-               'width'       => 884, #763,
+               'width'       => 968, #763,
                'height'      => 575,
   &>
   <BR>