summaryrefslogtreecommitdiff
path: root/FS/FS/part_event/Action
diff options
context:
space:
mode:
authorJonathan Prykop <jonathan@freeside.biz>2015-03-09 20:57:30 -0500
committerJonathan Prykop <jonathan@freeside.biz>2015-03-09 20:57:30 -0500
commit058c0f954497dabf988af9fa4d50760509f8aa00 (patch)
tree04be57f833b40f846b5e67c4fa01503efa48d3fa /FS/FS/part_event/Action
parent5123fd25380f308622f614f4ddb18001cdb0a4e2 (diff)
RT#25563: Better handling of commissions which do not have rates configured
Diffstat (limited to 'FS/FS/part_event/Action')
-rw-r--r--FS/FS/part_event/Action/Mixin/credit_bill.pm13
-rw-r--r--FS/FS/part_event/Action/bill_sales_credit.pm5
2 files changed, 16 insertions, 2 deletions
diff --git a/FS/FS/part_event/Action/Mixin/credit_bill.pm b/FS/FS/part_event/Action/Mixin/credit_bill.pm
index 82b215d..694f965 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 3193a81..ab69375 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;