From: Jonathan Prykop Date: Tue, 10 Mar 2015 01:57:30 +0000 (-0500) Subject: RT#25563: Better handling of commissions which do not have rates configured X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=058c0f954497dabf988af9fa4d50760509f8aa00 RT#25563: Better handling of commissions which do not have rates configured --- diff --git a/FS/FS/part_event/Action/Mixin/credit_bill.pm b/FS/FS/part_event/Action/Mixin/credit_bill.pm index 82b215d2c..694f9650f 100644 --- a/FS/FS/part_event/Action/Mixin/credit_bill.pm +++ b/FS/FS/part_event/Action/Mixin/credit_bill.pm @@ -54,6 +54,9 @@ our %part_pkg_cache; sub _calc_credit { my $self = shift; my $cust_bill_pkg = shift; + my $who = shift; + my $warnref = shift; + my $warning = ''; my $what = $self->option('what'); my $cost = ($what =~ /_cost/ ? 1 : 0); @@ -64,9 +67,11 @@ sub _calc_credit { my $percent; if ( $self->can('_calc_credit_percent') ) { - $percent = $self->_calc_credit_percent($cust_pkg, @_); + $percent = $self->_calc_credit_percent($cust_pkg, $who); + $warning = 'Percent calculated to zero ' unless $percent+0; } else { $percent = $self->option('percent') || 0; + $warning = 'Percent set to zero ' unless $percent+0; } my $charge = 0; @@ -83,20 +88,26 @@ sub _calc_credit { } $charge = ($charge || 0) * ($cust_pkg->quantity || 1); + $warning .= 'Charge calculated to zero ' unless $charge+0; } else { # setup, recur, or setuprecur if ( $what eq 'setup' ) { $charge = $cust_bill_pkg->get('setup'); + $warning .= 'Setup is zero ' unless $charge+0; } elsif ( $what eq 'recur' ) { $charge = $cust_bill_pkg->get('recur'); + $warning .= 'Recur is zero ' unless $charge+0; } elsif ( $what eq 'setuprecur' ) { $charge = $cust_bill_pkg->get('setup') + $cust_bill_pkg->get('recur'); + $warning .= 'Setup and recur are zero ' unless $charge+0; } # don't multiply by quantity here; it's already included } + $$warnref .= $warning if ref($warnref); + $charge = 0 if $charge < 0; # e.g. prorate return ($percent * $charge / 100); } diff --git a/FS/FS/part_event/Action/bill_sales_credit.pm b/FS/FS/part_event/Action/bill_sales_credit.pm index 3193a81ef..ab69375e2 100644 --- a/FS/FS/part_event/Action/bill_sales_credit.pm +++ b/FS/FS/part_event/Action/bill_sales_credit.pm @@ -38,6 +38,7 @@ sub do_action { pkgnum => { op => '>', value => '0' } }); + my $warning = ''; foreach my $cust_bill_pkg (@items) { my $pkgnum = $cust_bill_pkg->pkgnum; my $cust_pkg = $pkgnum_pkg{$pkgnum} ||= $cust_bill_pkg->cust_pkg; @@ -50,7 +51,7 @@ sub do_action { next if !$sales; #no sales person, no credit - my $amount = $self->_calc_credit($cust_bill_pkg, $sales); + my $amount = $self->_calc_credit($cust_bill_pkg, $sales, \$warning); if ($amount > 0) { $salesnum_amount{$salesnum} ||= 0; @@ -86,6 +87,8 @@ sub do_action { if $error; } # foreach $salesnum + return $warning; + } 1;