X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fflat.pm;h=cb2986efd0511c75537e0ec3a4a31ad3e17faee7;hb=edea94b6bd41a3fceac47267a3df3dc7fcf7c565;hp=9737a94c07b7b04bfc738dcb026a076cc280d8fa;hpb=b7a2175dd9b386441f4ab66869d73083e5e8beb1;p=freeside.git diff --git a/FS/FS/part_pkg/flat.pm b/FS/FS/part_pkg/flat.pm index 9737a94c0..cb2986efd 100644 --- a/FS/FS/part_pkg/flat.pm +++ b/FS/FS/part_pkg/flat.pm @@ -98,12 +98,16 @@ tie my %contract_years, 'Tie::IxHash', ( sub price_info { my $self = shift; + my %opt = @_; my $conf = new FS::Conf; my $money_char = $conf->config('money_char') || '$'; - my $setup = $self->option('setup_fee') || 0; - my $recur = $self->option('recur_fee', 1) || 0; + my $setup = $opt{cust_pkg} ? $self->base_setup( $opt{cust_pkg} ) + : ($self->option('setup_fee') || 0); + my $recur = $opt{cust_pkg} ? $self->base_recur( $opt{cust_pkg} ) + : ($self->option('recur_fee', 1) || 0); + $recur += $self->usageprice_recur( $opt{cust_pkg} ) if $opt{cust_pkg}; my $str = ''; - $str = $money_char . $setup . ($recur ? ' setup ' : ' one-time') if $setup; + $str = $money_char . $setup . ($recur ? ' setup' : ' one-time') if $setup; $str .= ', ' if ($setup && $recur); $str .= $money_char. $recur. '/'. $self->freq_pretty if $recur; $str; @@ -120,9 +124,7 @@ sub calc_setup { push @$details, $self->option( 'additional_info' . $i++ ); } - my $quantity = $cust_pkg->quantity || 1; - - my $charge = $quantity * $self->base_setup($cust_pkg, $sdate, $details); + my $charge = $self->base_setup($cust_pkg, $sdate, $details); my $discount = 0; if ( $charge > 0 ) { @@ -131,7 +133,7 @@ sub calc_setup { delete $param->{'setup_charge'}; } - sprintf('%.2f', $charge - $discount); + sprintf( '%.2f', ($cust_pkg->quantity || 1) * ($charge - $discount) ); } sub base_setup { @@ -162,11 +164,12 @@ sub calc_recur { $charge *= $param->{freq_override} if $param->{freq_override}; } - my $quantity = $cust_pkg->quantity || 1; - $charge *= $quantity; + $charge += $self->usageprice_recur($cust_pkg, $sdate); + $cust_pkg->apply_usageprice(); #$sdate for prorating? my $discount = $self->calc_discount($cust_pkg, $sdate, $details, $param); - return sprintf('%.2f', $charge - $discount); + + sprintf( '%.2f', ($cust_pkg->quantity || 1) * ($charge - $discount) ); } sub cutoff_day { @@ -194,6 +197,15 @@ sub base_recur_permonth { sprintf('%.2f', $self->base_recur($cust_pkg) / $self->freq ); } +sub usageprice_recur { + my($self, $cust_pkg, $sdate) = @_; + + my $recur = 0; + $recur += $_->price foreach $cust_pkg->cust_pkg_usageprice; + + sprintf('%.2f', $recur); +} + sub calc_cancel { my $self = shift; my $conf = new FS::Conf; @@ -257,10 +269,21 @@ sub is_free_options { sub is_prepaid { 0; } #no, we're postpaid -sub can_start_date { ! shift->option('start_1st', 1) } +sub can_start_date { + my $self = shift; + my %opt = @_; + return 0 if $self->start_on_hold; + + ! $self->option('start_1st', 1) && ( ! $self->option('sync_bill_date',1) + || ! $self->option('prorate_defer_bill',1) + || ! $opt{'num_ncancelled_pkgs'} + ); +} sub can_discount { 1; } +sub can_usageprice { 1; } + sub recur_temporality { my $self = shift; $self->option('recur_temporality', 1);