my %session_comps = map { $_=>1 } qw(
/elements/location.html
+ /elements/tr-amount_fee.html
/edit/cust_main/first_pkg/select-part_pkg.html
);
return ''; #no error
},
+ '/elements/tr-amount_fee.html' => sub {
+ my( $custnum, $argsref ) = @_;
+
+ my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
+ or return "unknown custnum $custnum";
+
+ my $conf = new FS::Conf;
+
+ my %args = @$argsref;
+ %args = (
+ %args,
+ 'process-pkgpart' => scalar($conf->config('selfservice_process-pkgpart')),
+ 'process-display' => scalar($conf->config('selfservice_process-display')),
+ 'process-skip-first' => $conf->exists('selfservice_process-skip_first'),
+ 'num_payments' => scalar($cust_main->cust_pay),
+ 'surcharge_percentage' => scalar($conf->config('credit-card-surcharge-percentage')),
+ );
+ @$argsref = ( %args );
+
+ return ''; #no error
+ },
+
'/edit/cust_main/first_pkg/select-part_pkg.html' => sub {
my( $custnum, $argsref ) = @_;
my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
use FS::cust_bill;
use FS::legacy_cust_bill;
use FS::cust_main_county;
+use FS::part_pkg;
use FS::cust_pkg;
use FS::payby;
use FS::acct_rt_transaction;
my $amount = $1;
return { error => 'Amount must be greater than 0' } unless $amount > 0;
+ #false laziness w/tr-amount_fee.html, but we don't want selfservice users
+ #changing the hidden form values
+ my $conf = new FS::Conf;
+ my $fee_display = $conf->config('selfservice_process-display') || 'add';
+ my $fee_pkgpart = $conf->config('selfservice_process-pkgpart');
+ if ( $fee_display eq 'add' && $fee_pkgpart ) {
+ my $fee_pkg = qsearchs('part_pkg', { pkgpart=>$fee_pkgpart } );
+ $amount = sprintf('%.2f', $amount + $fee_pkg->option('setup_fee') );
+ }
+
$p->{'discount_term'} =~ /^\s*(\d*)\s*$/
or return { 'error' => gettext('illegal_discount_term'). ': '. $p->{'discount_term'} };
my $discount_term = $1;
);
return { 'error' => $error } if $error;
+ #no error, so order the fee package if applicable...
+ my $conf = new FS::Conf;
+ my $fee_pkgpart = $conf->config('selfservice_process-pkgpart');
+ if ( $fee_pkgpart ) {
+
+ my $cust_pkg = new FS::cust_pkg { 'pkgpart' => $fee_pkgpart };
+
+ $error = $cust_main->order_pkg( 'cust_pkg' => $cust_pkg );
+ return { 'error' => "payment processed successfully, but error ordering fee: $error" }
+ if $error;
+
+ #and generate an invoice for it now too
+ $error = $cust_main->bill( 'pkg_list' => [ $cust_pkg ] );
+ return { 'error' => "payment processed and fee ordered sucessfully, but error billing fee: $error" }
+ if $error;
+
+ }
+
$cust_main->apply_payments;
if ( $validate->{'save'} ) {
'type' => 'checkbox',
},
- {
- 'key' => 'suto_process-pkgpart',
- 'section' => 'billing',
- 'description' => 'Package to add to each automatic credit card and ACH payment processed by billing events. Enabling this option may be in violation of your merchant agreement(s), so please check them carefully before enabling this option.',
- 'type' => 'select-part_pkg',
- },
-
# {
-# 'key' => 'auto_process-display',
+# 'key' => 'auto_process-pkgpart',
# 'section' => 'billing',
-# 'description' => 'When using auto_process-pkgpart, add the fee to the amount entered (default), or subtract the fee from the amount entered.',
-# 'type' => 'select',
-# 'select_hash' => [
-# 'add' => 'Add fee to amount entered',
-# 'subtract' => 'Subtract fee from amount entered',
-# ],
+# 'description' => 'Package to add to each automatic credit card and ACH payment processed by billing events. Enabling this option may be in violation of your merchant agreement(s), so please check them carefully before enabling this option.',
+# 'type' => 'select-part_pkg',
+# },
+#
+## {
+## 'key' => 'auto_process-display',
+## 'section' => 'billing',
+## 'description' => 'When using auto_process-pkgpart, add the fee to the amount entered (default), or subtract the fee from the amount entered.',
+## 'type' => 'select',
+## 'select_hash' => [
+## 'add' => 'Add fee to amount entered',
+## 'subtract' => 'Subtract fee from amount entered',
+## ],
+## },
+#
+# {
+# 'key' => 'auto_process-skip_first',
+# 'section' => 'billing',
+# 'description' => "When using auto_process-pkgpart, omit the fee if it is the customer's first payment.",
+# 'type' => 'checkbox',
# },
-
- {
- 'key' => 'auto_process-skip_first',
- 'section' => 'billing',
- 'description' => "When using auto_process-pkgpart, omit the fee if it is the customer's first payment.",
- 'type' => 'checkbox',
- },
{
'key' => 'allow_negative_charges',
<TH ALIGN="right">Amount Due</TH>
<TD COLSPAN=7>
<TABLE><TR><TD BGCOLOR="#ffffff">
- $<%=sprintf("%.2f",$balance)%>
- </TD></TR></TABLE>
- </TD>
-</TR>
-<TR>
- <TH ALIGN="right">Payment amount</TH>
- <TD COLSPAN=7>
- <TABLE><TR><TD BGCOLOR="#ffffff">
-<%=
- $amt = '';
- if ( $balance > 0 ) {
- $amt = $balance;
- $amt += $amt * $credit_card_surcharge_percentage/100
- if $credit_card_surcharge_percentage > 0;
- $amt = sprintf("%.2f",$amt);
- }
- '';
-%>
- $<INPUT TYPE="text" NAME="amount" SIZE=8 VALUE="<%=$amt%>">
+ <FONT COLOR="#000000">$<%=sprintf("%.2f",$balance)%></FONT>
</TD></TR></TABLE>
</TD>
</TR>
+
+<%= $tr_amount_fee %>
+
<%= include('discount_term') %>
+
<TR>
<TH ALIGN="right">Card type</TH>
<TD COLSPAN=7>
}
sub make_payment {
- payment_info( 'session_id' => $session_id );
+
+ my $payment_info = payment_info( 'session_id' => $session_id );
+
+ my $tr_amount_fee = mason_comp(
+ 'session_id' => $session_id,
+ 'comp' => '/elements/tr-amount_fee.html',
+ 'args' => [ 'amount' => $payment_info->{'balance'},
+ ],
+ );
+
+ $tr_amount_fee = $tr_amount_fee->{'error'} || $tr_amount_fee->{'output'};
+
+ $payment_info->{'tr_amount_fee'} = $tr_amount_fee;
+
+ $payment_info;
}
sub payment_results {
$amount += $fee
if $fee && $fee_display eq 'subtract';
- &{ $opt{post_fee_callback} }( \$amount ) if $opt{post_fee_callback};
+ #&{ $opt{post_fee_callback} }( \$amount ) if $opt{post_fee_callback};
+ $amount += $amount * $opt{'surcharge_percentage'}/100
+ if $opt{'surcharge_percentage'} > 0;
$amount = sprintf("%.2f", $amount);
}
'process-display' => scalar($conf->config('manual_process-display')),
'process-skip-first' => $conf->exists('manual_process-skip_first'),
'num_payments' => scalar($cust_main->cust_pay),
- 'post_fee_callback' => $post_fee_callback,
+ 'surcharge_percentage' => scalar($conf->config('credit-card-surcharge-percentage')),
&>
<& /elements/tr-select-discount_term.html,
$amount = $balance;
}
-my $post_fee_callback = sub {
- my( $amountref ) = @_;
-
- return unless $$amountref > 0;
-
- my $conf = new FS::Conf;
-
- my $cc_surcharge_pct = $conf->config('credit-card-surcharge-percentage');
- $$amountref += $$amountref * $cc_surcharge_pct/100 if $cc_surcharge_pct > 0;
-
- $$amountref = sprintf("%.2f", $$amountref);
-};
-
my $payunique = "webui-payment-". time. "-$$-". rand() * 2**32;
</%init>