abstract out the amount + fee + input, javascript, display so it can be reused by...
[freeside.git] / httemplate / elements / tr-amount_fee.html
diff --git a/httemplate/elements/tr-amount_fee.html b/httemplate/elements/tr-amount_fee.html
new file mode 100644 (file)
index 0000000..a1a9e34
--- /dev/null
@@ -0,0 +1,98 @@
+  <TR>
+    <TH ALIGN="right"><% mt('Payment amount') |h %></TH>
+    <TD COLSPAN=7>
+      <TABLE><TR><TD BGCOLOR="#ffffff">
+        <% $money_char %><INPUT NAME     = "amount"
+                                ID       = "amount"
+                                TYPE     = "text"
+                                VALUE    = "<% $amount %>"
+                                SIZE     = 8
+                                STYLE    = "text-align:right;"
+%                               if ( $fee ) {
+                                  onChange   = "amount_changed(this)"
+                                  onKeyDown  = "amount_changed(this)"
+                                  onKeyUp    = "amount_changed(this)"
+                                  onKeyPress = "amount_changed(this)"
+%                               }
+                         >
+      </TD><TD BGCOLOR="#cccccc">
+%        if ( $fee ) {
+           <INPUT TYPE="hidden" NAME="fee_pkgpart" VALUE="<% $fee_pkg->pkgpart %>">
+           <INPUT TYPE="hidden" NAME="fee" VALUE="<% $fee_display eq 'add' ? $fee : '' %>">
+           <B><FONT SIZE='+1'><% $fee_op %></FONT>
+              <% $money_char . $fee %>
+           </B>
+           <% $fee_pkg->pkg |h %>
+           <B><FONT SIZE='+1'>=</FONT></B>
+      </TD><TD ID="ajax_total_cell" BGCOLOR="#dddddd" STYLE="border:1px solid blue">
+           <FONT SIZE="+1"><% length($amount) ? $money_char. sprintf('%.2f', ($fee_display eq 'add') ? $amount + $fee : $amount - $fee ) : '' %> <% $fee_display eq 'add' ? 'TOTAL' : 'AVAILABLE' %></FONT>
+  
+%        }
+      </TD></TR></TABLE>
+    </TD>
+  </TR>
+
+% if ( $fee ) {
+
+    <SCRIPT TYPE="text/javascript">
+
+      function amount_changed(what) {
+
+
+        var total = '';
+        if ( what.value.length ) {
+          total = parseFloat(what.value) <% $fee_op %> <% $fee %>;
+          /* total = Math.round(total*100)/100; */
+          total = '<% $money_char %>' + total.toFixed(2);
+        }
+
+        var total_cell = document.getElementById('ajax_total_cell');
+        total_cell.innerHTML = '<FONT SIZE="+1">' + total + ' <% $fee_display eq 'add' ? 'TOTAL' : 'AVAILABLE' %></FONT>';
+
+      }
+
+    </SCRIPT>
+
+% }
+
+<%init>
+
+my %opt = @_;
+
+my $conf = new FS::Conf;
+my $money_char = $conf->config('money_char') || '$';
+
+my $fee = '';
+my $fee_pkg = '';
+my $fee_display = '';
+my $fee_op = '';
+
+if ( $opt{'process-pkgpart'}
+     and ! $opt{'process-skip_first'} || $opt{'num_payments'}
+   )
+{
+
+  $fee_display = $opt{'process-display'} || 'add';
+  $fee_op = $fee_display eq 'add' ? '+' : '-';
+
+  $fee_pkg =
+    qsearchs('part_pkg', { pkgpart=>$opt{'process-pkgpart'} } );
+
+  #well ->unit_setup or ->calc_setup both call for a $cust_pkg
+  # (though ->unit_setup doesn't use it...)
+  $fee = $fee_pkg->option('setup_fee')
+    if $fee_pkg; #in case.. better than dying with a perl traceback
+
+}
+
+my $amount = $opt{'amount'};
+if ( $amount > 0 ) {
+  $amount += $fee
+    if $fee && $fee_display eq 'subtract';
+
+  &{ $opt{post_fee_callback} }( \$amount ) if $opt{post_fee_callback};
+
+  $amount = sprintf("%.2f", $amount);
+}
+
+</%init>