diff options
| -rw-r--r-- | FS/FS/Conf.pm | 2 | ||||
| -rw-r--r-- | FS/FS/part_event/Action/cust_bill_fee_percent.pm | 51 | ||||
| -rw-r--r-- | FS/FS/part_event/Action/fee.pm | 21 | 
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 ); | 
