X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fflat.pm;h=cb2986efd0511c75537e0ec3a4a31ad3e17faee7;hb=b7cf1606a66cca95e3540f803ffa66d223f23a40;hp=22eb69815d8ec0bea9cefd40991d294277eb5c34;hpb=a6fe07e49e3fc12169e801b1ed6874c3a5bd8500;p=freeside.git diff --git a/FS/FS/part_pkg/flat.pm b/FS/FS/part_pkg/flat.pm index 22eb69815..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->unit_setup($cust_pkg, $sdate, $details); + my $charge = $self->base_setup($cust_pkg, $sdate, $details); my $discount = 0; if ( $charge > 0 ) { @@ -131,10 +133,10 @@ sub calc_setup { delete $param->{'setup_charge'}; } - sprintf('%.2f', $charge - $discount); + sprintf( '%.2f', ($cust_pkg->quantity || 1) * ($charge - $discount) ); } -sub unit_setup { +sub base_setup { my($self, $cust_pkg, $sdate, $details ) = @_; $self->option('setup_fee') || 0; @@ -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);