diff options
author | Ivan Kohler <ivan@freeside.biz> | 2018-05-16 18:00:33 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2018-05-16 18:00:33 -0700 |
commit | a8d1e0ab1d47170d29f847bcbb790a58c6eb435d (patch) | |
tree | 7772e08930466368bacd176a5910cf613f39f189 | |
parent | 483e8f097bff5067a62873e750070993b68163b0 (diff) | |
parent | 827c717245d3374f4dacba7308002ecf64a88304 (diff) |
Merge branch 'master' of git.freeside.biz:/home/git/freeside
-rw-r--r-- | FS/FS/cust_main/Billing.pm | 4 | ||||
-rw-r--r-- | FS/FS/cust_pay.pm | 120 | ||||
-rw-r--r-- | FS/FS/part_pkg/flat.pm | 7 | ||||
-rw-r--r-- | FS/FS/pay_batch/RBC.pm | 8 | ||||
-rw-r--r-- | httemplate/elements/tr-amount_fee.html | 32 | ||||
-rw-r--r-- | httemplate/elements/tr-select-payment_options.html | 43 | ||||
-rw-r--r-- | httemplate/misc/payment.cgi | 2 |
7 files changed, 136 insertions, 80 deletions
diff --git a/FS/FS/cust_main/Billing.pm b/FS/FS/cust_main/Billing.pm index a5a38fdc2..51b49e4f0 100644 --- a/FS/FS/cust_main/Billing.pm +++ b/FS/FS/cust_main/Billing.pm @@ -1027,10 +1027,10 @@ sub _make_lines { || $cust_pkg->expire > $cmp_time ) ) { - + warn " bill setup\n" if $DEBUG > 1; - unless ($cust_pkg->waive_setup) { + unless ( $cust_pkg->waive_setup ) { $lineitems++; $setup = eval { $cust_pkg->calc_setup( $time, \@details, \%setup_param ) }; diff --git a/FS/FS/cust_pay.pm b/FS/FS/cust_pay.pm index 5031793ff..4c82d106e 100644 --- a/FS/FS/cust_pay.pm +++ b/FS/FS/cust_pay.pm @@ -662,53 +662,75 @@ sub send_receipt { || ! $cust_bill ) { - my $msgnum = $conf->config('payment_receipt_msgnum', $cust_main->agentnum); - if ( $msgnum ) { - - my %substitutions = (); - $substitutions{invnum} = $opt->{cust_bill}->invnum if $opt->{cust_bill}; - - my $msg_template = qsearchs('msg_template',{ msgnum => $msgnum}); - unless ($msg_template) { - warn "send_receipt could not load msg_template"; - return; - } - - my $cust_msg = $msg_template->prepare( - 'cust_main' => $cust_main, - 'object' => $self, - 'from_config' => 'payment_receipt_from', - 'substitutions' => \%substitutions, - 'msgtype' => 'receipt', + $error = $self->send_message_receipt( + 'cust_main' => $cust_main, + 'cust_bill' => $opt->{cust_bill}, + 'msgnum' => $conf->config('payment_receipt_msgnum', $cust_main->agentnum) ); - $error = $cust_msg ? $cust_msg->insert : 'error preparing msg_template'; - if ($error) { - warn "send_receipt: $error"; - return; - } + #not manual and no noemail flag (here or on the customer) + } elsif ( ! $opt->{'noemail'} && ! $cust_main->invoice_noemail ) { + # check to see if they want to send specific message template as receipt for auto payments + if ( $conf->config('payment_receipt_msgnum_auto', $cust_main->agentnum) ) { + $error = $self->send_message_receipt( + 'cust_main' => $cust_main, + 'cust_bill' => $opt->{cust_bill}, + 'msgnum' => $conf->config('payment_receipt_msgnum_auto', $cust_main->agentnum), + ); + } + else { my $queue = new FS::queue { - 'job' => 'FS::cust_msg::process_send', + 'job' => 'FS::cust_bill::queueable_email', 'paynum' => $self->paynum, 'custnum' => $cust_main->custnum, }; - $error = $queue->insert( $cust_msg->custmsgnum ); - } else { + my %opt = ( + 'invnum' => $cust_bill->invnum, + 'no_coupon' => 1, + ); - warn "payment_receipt is on, but no payment_receipt_msgnum\n"; + if ( my $mode = $conf->config('payment_receipt_statement_mode') ) { + $opt{'mode'} = $mode; + } else { + # backward compatibility, no good fix for this yet as some people may + # still have "invoice_latex_statement" and such options + $opt{'template'} = 'statement'; + $opt{'notice_name'} = 'Statement'; + } + $error = $queue->insert(%opt); } - #not manual and no noemail flag (here or on the customer) - } elsif ( ! $opt->{'noemail'} && ! $cust_main->invoice_noemail ) { - # check to see if they want to send specific message template as receipt for auto payments - my $msgnum = $conf->config('payment_receipt_msgnum_auto', $cust_main->agentnum); + + } + + warn "send_receipt: $error\n" if $error; +} + +=item send_message_receipt + +sends out a message receipt. +$error = $self->send_message_receipt( + 'cust_main' => $cust_main, + 'cust_bill' => $opt->{cust_bill}, + 'msgnum' => $conf->config('payment_receipt_msgnum', $cust_main->agentnum) + ); + +=cut + +sub send_message_receipt { + my ($self, %opt) = @_; + my $cust_main = $opt{'cust_main'}; + my $cust_bill = $opt{'cust_bill'}; + my $msgnum = $opt{'msgnum'}; + my $error = ''; + if ( $msgnum ) { my %substitutions = (); - $substitutions{invnum} = $opt->{cust_bill}->invnum if $opt->{cust_bill}; + $substitutions{invnum} = $cust_bill->invnum if $cust_bill; my $msg_template = qsearchs('msg_template',{ msgnum => $msgnum}); unless ($msg_template) { @@ -726,7 +748,7 @@ sub send_receipt { $error = $cust_msg ? $cust_msg->insert : 'error preparing msg_template'; if ($error) { warn "send_receipt: $error"; - return; + return $error; } my $queue = new FS::queue { @@ -736,36 +758,12 @@ sub send_receipt { }; $error = $queue->insert( $cust_msg->custmsgnum ); - } - else { - my $queue = new FS::queue { - 'job' => 'FS::cust_bill::queueable_email', - 'paynum' => $self->paynum, - 'custnum' => $cust_main->custnum, - }; - - my %opt = ( - 'invnum' => $cust_bill->invnum, - 'no_coupon' => 1, - ); - - if ( my $mode = $conf->config('payment_receipt_statement_mode') ) { - $opt{'mode'} = $mode; - } else { - # backward compatibility, no good fix for this yet as some people may - # still have "invoice_latex_statement" and such options - $opt{'template'} = 'statement'; - $opt{'notice_name'} = 'Statement'; - } - - $error = $queue->insert(%opt); + } else { + warn "payment_receipt is on, but no payment_receipt_msgnum\n"; + $error = "payment_receipt is on, but no payment_receipt_msgnum"; } - - - } - - warn "send_receipt: $error\n" if $error; + return $error; } =item cust_bill_pay diff --git a/FS/FS/part_pkg/flat.pm b/FS/FS/part_pkg/flat.pm index cfee58465..6fd9c7d08 100644 --- a/FS/FS/part_pkg/flat.pm +++ b/FS/FS/part_pkg/flat.pm @@ -128,13 +128,12 @@ sub calc_setup { my $discount = 0; if ( $charge > 0 ) { - $param->{'setup_charge'} = $charge; - $discount = $self->calc_discount($cust_pkg, $sdate, $details, $param); - delete $param->{'setup_charge'}; + $param->{'setup_charge'} = $charge; + $discount = $self->calc_discount($cust_pkg, $sdate, $details, $param); + delete $param->{'setup_charge'}; } sprintf( '%.2f', ($cust_pkg->quantity || 1) * ($charge - $discount) ); - } sub base_setup { diff --git a/FS/FS/pay_batch/RBC.pm b/FS/FS/pay_batch/RBC.pm index 21dae4256..1577a7f85 100644 --- a/FS/FS/pay_batch/RBC.pm +++ b/FS/FS/pay_batch/RBC.pm @@ -174,6 +174,11 @@ $name = 'RBC'; die "invalid branch/routing number '$aba'\n"; } + ## set custname to business name if business checking or savings account is used otherwise leave as first and last name. + my $custname = $cust_pay_batch->cust_main->first . ' ' . $cust_pay_batch->cust_main->last; + $custname = $cust_pay_batch->cust_main->company + if (($cust_pay_batch->{Hash}->{paytype} eq "Business checking" || $cust_pay_batch->{Hash}->{paytype} eq "Business savings") && $cust_pay_batch->cust_main->company); + $i++; ## set to D for debit by default, then override to what cust_pay_batch has as payments may not have paycode. @@ -194,8 +199,7 @@ $name = 'RBC'; sprintf("%010.0f",$cust_pay_batch->amount*100). ' '. time2str("%Y%j", time + 86400). - sprintf("%-30.30s", encode('utf8', $cust_pay_batch->cust_main->first . ' ' . - $cust_pay_batch->cust_main->last)). + sprintf("%-30.30s", encode('utf8', $custname)). 'E'. # English ' '. sprintf("%-15s", $shortname). diff --git a/httemplate/elements/tr-amount_fee.html b/httemplate/elements/tr-amount_fee.html index 9e6d9e96d..1c78d7ec1 100644 --- a/httemplate/elements/tr-amount_fee.html +++ b/httemplate/elements/tr-amount_fee.html @@ -8,7 +8,7 @@ VALUE = "<% $amount %>" SIZE = 8 STYLE = "text-align:right;" -% if ( $fee ) { +% if ( $fee || $surcharge ) { onChange = "amount_changed(this)" onKeyDown = "amount_changed(this)" onKeyUp = "amount_changed(this)" @@ -28,17 +28,23 @@ <FONT SIZE="+1"><% length($amount) ? $money_char. sprintf('%.2f', ($fee_display eq 'add') ? $amount + $fee : $amount - $fee ) : '' %> <% $fee_display eq 'add' ? 'TOTAL' : 'AVAILABLE' %></FONT> % } +% if ( $surcharge ) { + <INPUT TYPE="hidden" NAME="surcharge_percentage" ID="surcharge_percentage" VALUE="<% $surcharge_percentage %>"> + <INPUT TYPE="hidden" NAME="surcharge_flatfee" ID="surcharge_flatfee" VALUE="<% $surcharge_flatfee %>"> + </TD><TD ID="ajax_surcharge_cell" BGCOLOR="#dddddd" STYLE="border:1px solid blue"> + <FONT SIZE="+1">A credit card surcharge of <% $money_char. sprintf('%.2f', $surcharge) %> is included in this payment</FONT> +% } </TD></TR></TABLE> </TD> </TR> -% if ( $fee ) { +% if ($fee || $surcharge) { <SCRIPT TYPE="text/javascript"> function amount_changed(what) { - +% if ( $fee ) { var total = ''; if ( what.value.length ) { total = parseFloat(what.value) <% $fee_op %> <% $fee %>; @@ -48,6 +54,13 @@ var total_cell = document.getElementById('ajax_total_cell'); total_cell.innerHTML = '<FONT SIZE="+1">' + total + ' <% $fee_display eq 'add' ? 'TOTAL' : 'AVAILABLE' %></FONT>'; +% } + +% if ( $surcharge ) { + var surcharge_cell = document.getElementById('ajax_surcharge_cell'); + var surcharge = ((what.value - <% $surcharge_flatfee %>) * <% $surcharge_percentage %>) + <% $surcharge_flatfee %>; + surcharge_cell.innerHTML = '<FONT SIZE="+1">A credit card surcharge of ' + surcharge.toFixed(2) + ' is included in this payment</FONT>'; +% } } @@ -66,6 +79,9 @@ my $fee = ''; my $fee_pkg = ''; my $fee_display = ''; my $fee_op = ''; +my $surcharge = ''; +my $surcharge_percentage = 0; +my $surcharge_flatfee = 0; if ( $opt{'process-pkgpart'} and ! $opt{'process-skip_first'} || $opt{'num_payments'} @@ -91,11 +107,13 @@ if ( $amount > 0 ) { if $fee && $fee_display eq 'subtract'; #&{ $opt{post_fee_callback} }( \$amount ) if $opt{post_fee_callback}; - $amount += $amount * $opt{'surcharge_percentage'}/100 - if $opt{'surcharge_percentage'} > 0; - $amount += $opt{'surcharge_flatfee'} - if $opt{'surcharge_flatfee'} > 0; + $surcharge_percentage = $opt{'surcharge_percentage'}/100 if $opt{'surcharge_percentage'} > 0; + $surcharge_flatfee = $opt{'surcharge_flatfee'} if $opt{'surcharge_flatfee'} > 0; + $surcharge = $amount * $surcharge_percentage if $surcharge_percentage > 0; + $surcharge += $surcharge_flatfee if $surcharge_flatfee > 0; + + $amount += $surcharge; $amount = sprintf("%.2f", $amount); } diff --git a/httemplate/elements/tr-select-payment_options.html b/httemplate/elements/tr-select-payment_options.html index 8859b9b36..a59963a91 100644 --- a/httemplate/elements/tr-select-payment_options.html +++ b/httemplate/elements/tr-select-payment_options.html @@ -38,7 +38,7 @@ Example: <OPTION VALUE="select">Select payment option</OPTION> <OPTION VALUE="<% $opt{amount} %>">Pay full balance</OPTION> <OPTION VALUE="invoice">Pay specific invoice</OPTION> - <OPTION VALUE="">Pay specific amount</OPTION> + <OPTION VALUE="specific">Pay specific amount</OPTION> </SELECT> </TD> </TR> @@ -57,6 +57,14 @@ Example: function <% $opt{prefix} %>payment_option_changed(what) { + var surcharge; + if (document.getElementById('surcharge_percentage') || document.getElementById('surcharge_percentage')) { + surcharge = (+what.value * +document.getElementById('surcharge_percentage').value) + +document.getElementById('surcharge_flatfee').value; + } + else { surcharge = 0; } + var amount = +what.value + +surcharge; + document.getElementById('amount').disabled = true; + if ( what.value == 'select' ) { document.getElementById('payment_amount_row').style.display = 'none'; document.getElementById('invoice_row').style.display = 'none'; @@ -68,24 +76,50 @@ Example: document.getElementById('invoice_row').style.display = 'block'; document.getElementById('amount').value = ''; } + else if ( what.value == 'specific' ) { + document.getElementById('payment_amount_row').style.display = 'block'; + document.getElementById('invoice_row').style.display = 'none'; + document.getElementById('<% $opt{prefix} %>invoice').value = 'select'; + document.getElementById('amount').value = '0.00'; + document.getElementById('amount').disabled = false; + if (document.getElementById('ajax_surcharge_cell')) { + document.getElementById('ajax_surcharge_cell').innerHTML = '<FONT SIZE="+1">A credit card surcharge of <% $money_char %>0.00 is included in this payment</FONT>'; + } + } else { document.getElementById('payment_amount_row').style.display = 'block'; document.getElementById('invoice_row').style.display = 'none'; document.getElementById('<% $opt{prefix} %>invoice').value = 'select'; - document.getElementById('amount').value = what.value; + document.getElementById('amount').value = amount.toFixed(2); + document.getElementById('amount').disabled = false; + if (document.getElementById('ajax_surcharge_cell')) { + document.getElementById('ajax_surcharge_cell').innerHTML = '<FONT SIZE="+1">A credit card surcharge of <% $money_char %>' + surcharge.toFixed(2) + ' is included in this payment</FONT>'; + } } } function <% $opt{prefix} %>invoice_select_changed(what) { + var surcharge; + if (document.getElementById('surcharge_percentage') || document.getElementById('surcharge_percentage')) { + surcharge = (+what.value * +document.getElementById('surcharge_percentage').value) + +document.getElementById('surcharge_flatfee').value; + } + else { surcharge = 0; } + var amount = +what.value + +surcharge; + if ( what.value == 'select' ) { + alert("we have select"); document.getElementById('payment_amount_row').style.display = 'none'; document.getElementById('amount').value = ''; } else { document.getElementById('payment_amount_row').style.display = 'block'; - document.getElementById('amount').value = what.value; + document.getElementById('amount').value = amount.toFixed(2); + document.getElementById('amount').disabled = false; + if (document.getElementById('ajax_surcharge_cell')) { + document.getElementById('ajax_surcharge_cell').innerHTML = '<FONT SIZE="+1">A credit card surcharge of <% $money_char %>' + surcharge.toFixed(2) + ' is included in this payment</FONT>'; + } } } @@ -96,4 +130,7 @@ Example: my %opt = @_; +my $conf = new FS::Conf; +my $money_char = $conf->config('money_char') || '$'; + </%init>
\ No newline at end of file diff --git a/httemplate/misc/payment.cgi b/httemplate/misc/payment.cgi index de060b010..4f6f7ef75 100644 --- a/httemplate/misc/payment.cgi +++ b/httemplate/misc/payment.cgi @@ -25,7 +25,7 @@ ? scalar($conf->config('credit-card-surcharge-percentage', $cust_main->agentnum)) : 0 ), - 'surcharge_flatfee:Q' => + 'surcharge_flatfee' => ( $payby eq 'CARD' ? scalar($conf->config('credit-card-surcharge-flatfee', $cust_main->agentnum)) : 0 |