summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FS/FS/Conf.pm2
-rw-r--r--FS/FS/part_event/Action/cust_bill_fee_percent.pm51
-rw-r--r--FS/FS/part_event/Action/fee.pm21
3 files changed, 27 insertions, 47 deletions
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 6d0f06efd..07c25c46a 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -1067,7 +1067,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'finance_pkgclass',
'section' => 'billing',
- 'description' => 'The package class for finance charges',
+ 'description' => 'The default package class for late fee charges, used if the fee event does not specify a package class itself.',
'type' => 'select-pkg_class',
},
diff --git a/FS/FS/part_event/Action/cust_bill_fee_percent.pm b/FS/FS/part_event/Action/cust_bill_fee_percent.pm
index 0eeb3df81..48daf15e3 100644
--- a/FS/FS/part_event/Action/cust_bill_fee_percent.pm
+++ b/FS/FS/part_event/Action/cust_bill_fee_percent.pm
@@ -1,7 +1,8 @@
package FS::part_event::Action::cust_bill_fee_percent;
use strict;
-use base qw( FS::part_event::Action );
+use base qw( FS::part_event::Action::fee );
+use Tie::IxHash;
sub description { 'Late fee (percentage of invoice)'; }
@@ -9,49 +10,19 @@ sub eventtable_hashref {
{ 'cust_bill' => 1 };
}
-sub event_stage { 'pre-bill'; }
-
sub option_fields {
- (
- 'percent' => { label=>'Percent', size=>2, },
- 'reason' => 'Reason',
- 'taxclass' => { label=>'Tax class', type=>'select-taxclass', },
- 'nextbill' => { label=>'Hold late fee until next invoice',
- type=>'checkbox', value=>'Y' },
- 'setuptax' => { label=>'Late fee is tax exempt',
- type=>'checkbox', value=>'Y' },
- );
-}
-
-sub default_weight { 10; }
-
-sub do_action {
- my( $self, $cust_bill ) = @_;
-
- #my $cust_main = $self->cust_main($cust_bill);
- my $cust_main = $cust_bill->cust_main;
+ my $class = shift;
- my $conf = new FS::Conf;
+ my $t = tie my %option_fields, 'Tie::IxHash', $class->SUPER::option_fields();
+ $t->Shift; #assumes charge is first
+ $t->Unshift( 'percent' => { label=>'Percent', size=>2, } );
- my $amount =
- sprintf('%.2f', $cust_bill->owed * $self->option('percent') / 100 );
-
- my %charge = (
- 'amount' => $amount,
- 'pkg' => $self->option('reason'),
- 'taxclass' => $self->option('taxclass'),
- 'classnum' => scalar($conf->config('finance_pkgclass')),
- 'setuptax' => $self->option('setuptax'),
- );
-
- $charge{'start_date'} = $cust_main->next_bill_date #unless its more than N months away?
- if $self->option('nextbill');
-
- my $error = $cust_main->charge( \%charge );
-
- die $error if $error;
+ %option_fields;
+}
- '';
+sub _calc_fee {
+ my( $self, $cust_bill ) = @_;
+ sprintf('%.2f', $cust_bill->owed * $self->option('percent') / 100 );
}
1;
diff --git a/FS/FS/part_event/Action/fee.pm b/FS/FS/part_event/Action/fee.pm
index bc128284e..68288d090 100644
--- a/FS/FS/part_event/Action/fee.pm
+++ b/FS/FS/part_event/Action/fee.pm
@@ -10,17 +10,24 @@ sub event_stage { 'pre-bill'; }
sub option_fields {
(
'charge' => { label=>'Amount', type=>'money', }, # size=>7, },
- 'reason' => 'Reason',
+ 'reason' => 'Reason (invoice line item)',
+ 'classnum' => { label=>'Package class' => type=>'select-pkg_class', },
'taxclass' => { label=>'Tax class', type=>'select-taxclass', },
- 'nextbill' => { label=>'Hold late fee until next invoice',
- type=>'checkbox', value=>'Y' },
'setuptax' => { label=>'Late fee is tax exempt',
type=>'checkbox', value=>'Y' },
+ 'nextbill' => { label=>'Hold late fee until next invoice',
+ type=>'checkbox', value=>'Y' },
);
}
sub default_weight { 10; }
+sub _calc_fee {
+ #my( $self, $cust_object ) = @_;
+ my $self = shift;
+ $self->option('charge');
+}
+
sub do_action {
my( $self, $cust_object ) = @_;
@@ -29,14 +36,16 @@ sub do_action {
my $conf = new FS::Conf;
my %charge = (
- 'amount' => $self->option('charge'),
+ 'amount' => $self->_calc_fee($cust_object),
'pkg' => $self->option('reason'),
'taxclass' => $self->option('taxclass'),
- 'classnum' => scalar($conf->config('finance_pkgclass')),
+ 'classnum' => ( $self->option('classnum')
+ || scalar($conf->config('finance_pkgclass')) ),
'setuptax' => $self->option('setuptax'),
);
- $charge{'start_date'} = $cust_main->next_bill_date #unless its more than N months away?
+ #unless its more than N months away?
+ $charge{'start_date'} = $cust_main->next_bill_date
if $self->option('nextbill');
my $error = $cust_main->charge( \%charge );