trigger recharge from the backend as in self-service
authorjeff <jeff>
Mon, 9 Apr 2007 23:38:27 +0000 (23:38 +0000)
committerjeff <jeff>
Mon, 9 Apr 2007 23:38:27 +0000 (23:38 +0000)
httemplate/misc/process/recharge_svc.html
httemplate/misc/recharge_svc.html

index d9fa207..df67156 100755 (executable)
@@ -9,6 +9,11 @@
 %my $prepaid = $cgi->param('prepaid');
 %$prepaid =~ /^(\w*)$/;
 %$prepaid = $1;
+
+%#untaint payby
+%my $payby = $cgi->param('payby');
+%$payby =~ /^([A-Z]*)$/;
+%$payby = $1;
 %
 %my $error = '';
 %my $svc_acct = qsearchs( 'svc_acct', {'svcnum'=>$svcnum} );
 %unless ($error) {
 %
 %my ($amount, $seconds, $up, $down, $total) = (0, 0, 0, 0, 0);
-%$error = $cust_main->get_prepay($prepaid, \$amount, \$seconds, \$up, \$down, \$total)
-%      || $svc_acct->increment_seconds($seconds)
-%      || $svc_acct->increment_upbytes($up)
-%      || $svc_acct->increment_downbytes($down)
-%      || $svc_acct->increment_totalbytes($total)
-%      || $cust_main->insert_cust_pay_prepay( $amount, $prepaid );
+%  if ($payby eq 'PREP') {
+%    $error = $cust_main->get_prepay($prepaid, \$amount, \$seconds, \$up, \$down, \$total)
+%          || $svc_acct->increment_seconds($seconds)
+%          || $svc_acct->increment_upbytes($up)
+%          || $svc_acct->increment_downbytes($down)
+%          || $svc_acct->increment_totalbytes($total)
+%          || $cust_main->insert_cust_pay_prepay( $amount, $prepaid );
+%  }elsif ($payby =~ /^(CARD|DCRD|CHEK|DCHK|LECB|BILL|COMP)$/) {
+%    my $part_pkg = $svc_acct->cust_svc->cust_pkg->part_pkg;
+%    $amount = $part_pkg->option('recharge_amount', 1);
+%    my %rhash = map { $_ =~ /^recharge_(.*)$/; $1, $part_pkg->option($_, 1) }
+%      qw ( recharge_seconds recharge_upbytes recharge_downbytes
+%           recharge_totalbytes );
+%
+%    my $description = "Recharge";
+%    $description .= " $rhash{seconds}s" if $rhash{seconds};
+%    $description .= " $rhash{upbytes} up" if $rhash{upbytes};
+%    $description .= " $rhash{downbytes} down" if $rhash{downbytes};
+%    $description .= " $rhash{totalbytes} total" if $rhash{totalbytes};
+%
+%    $error = $cust_main->charge($amount, "Recharge " . $svc_acct->label,
+%                                $description, $part_pkg->taxclass);
+%
+%    $error ||= $svc_acct->recharge(\%rhash);
+%
+%    if ($conf->exists('backend-realtime')) {
+%      my $old_balance = $cust_main->balance;
+%      $error ||= $cust_main->bill;
+%      $cust_main->apply_payments_and_credits unless $error;
+%      my $bill_error = $cust_main->collect('realtime' => 1) unless $error;
+%      $error ||= "Failed to collect - $bill_error"
+%        if ($cust_main->balance > $old_balance && $cust_main->balance > 0
+%            && $payby ne 'BILL');
+%    }
+%  }else{
+$    $error "fatal error - unknown payby: $payby";
+%  }
 %}
 %
 %if ($error) {
 %  $dbh->rollback if $oldAutoCommit;
 %  print $cgi->redirect(popurl(2). "recharge_svc.html?". $cgi->query_string );
 %}
+%$dbh->commit or die $dbh->errstr if $oldAutoCommit;
 %
 <% header("Package recharged") %>
   <SCRIPT TYPE="text/javascript">
     window.top.location.reload();
   </SCRIPT>
   </BODY></HTML>
-
+<%init>
+my $conf = new FS::Conf;
+</%init>
index 61f7384..9373b82 100755 (executable)
 <% "Recharge $svcnum: $label  -  $value" %>
 <% ntable("#cccccc", 2) %>
 
+<SCRIPT>
+  function toggle_prep(what) {
+    if (what.value == "PREP"){
+      what.form.prepaid.disabled = false;
+    }else{
+      what.form.prepaid.disabled = true;
+    }
+  }
+</SCRIPT>
+<TR>
+  <TD><INPUT TYPE="radio" NAME="payby" onchange="toggle_prep(this)" VALUE="PREP" <% $payby eq "PREP" ? 'checked' : '' %> <% $recharge_label ? '' : 'disabled' %>></TD>
+  <TD>Prepaid Card</TD>
+% if ($recharge_label) {
+  <TD><INPUT TYPE="radio" NAME="payby" onchange="toggle_prep(this)" VALUE="<% $cust_svc->cust_pkg->cust_main->payby %>" <% $payby eq "PREP" ? '' : 'checked' %>></TD>
+  <TD><% $recharge_label %></TD>
+% }
+</TR>
 <TR>
   <TD>Enter prepaid card: </TD>
-  <TD><INPUT TYPE="text" NAME="prepaid" VALUE="<% $prepaid %>"></TD>
+  <TD><INPUT TYPE="text" NAME="prepaid" VALUE="<% $prepaid %>" <% $payby eq "PREP" ? '' : 'disabled' %>></TD>
 </TR>
 
 </TABLE>
 </BODY>
 </HTML>
 
+<%once>
+my $conf = new FS::Conf;
+my $money_char = $conf->config('money_char') || '$';
+</%once>
 <%init>
-my($svcnum, $cust_svc, $label, $value, $prepaid); 
+my($svcnum, $cust_svc, $part_pkg, $label, $value, $prepaid, $amount, $payby); 
 if ( $cgi->param('error') ) {
   $svcnum        = $cgi->param('svcnum');
   $prepaid       = $cgi->param('prepaid');
+  $payby         = $cgi->param('payby');
 } elsif ( $cgi->param('svcnum') =~ /^(\d+)$/ ) {
   $svcnum  = $1;
 } else {
@@ -44,5 +66,20 @@ die "No such service: $svcnum" unless $cust_svc;
 
 ($label, $value) = $cust_svc->label;
 
+$payby = $cust_svc->cust_pkg->cust_main->payby unless $payby;
+$part_pkg = $cust_svc->cust_pkg->part_pkg;
+$amount = $part_pkg->option('recharge_amount', 1) || 0;
+my $recharge_label = "Charge $money_char$amount for ";
+$recharge_label .= $part_pkg->option('recharge_seconds', 1) . 's '
+  if $part_pkg->option('recharge_seconds', 1);
+$recharge_label .= $part_pkg->option('recharge_upbytes', 1) . ' up '
+  if $part_pkg->option('recharge_upbytes', 1);
+$recharge_label .= $part_pkg->option('recharge_downbytes', 1) . ' down '
+  if $part_pkg->option('recharge_downbytes', 1);
+$recharge_label .= $part_pkg->option('recharge_totalbytes', 1) . ' total '
+  if $part_pkg->option('recharge_totalbytes', 1);
+$recharge_label = ''
+  unless ($recharge_label ne "Charge $money_char$amount for ");
+
 </%init>