X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fflat.pm;h=5fd269642908b390b8027e89f3aebce2d0f8d243;hb=ad66b8e85a07f28adb3c8b5da7eff5ea69f31e62;hp=0e44f5db548ae2580baf9f16f19be1a1f3f5913c;hpb=7fbe88a91e80c40c70f3e666ce1965586544c181;p=freeside.git diff --git a/FS/FS/part_pkg/flat.pm b/FS/FS/part_pkg/flat.pm index 0e44f5db5..5fd269642 100644 --- a/FS/FS/part_pkg/flat.pm +++ b/FS/FS/part_pkg/flat.pm @@ -120,9 +120,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->unit_setup($cust_pkg, $sdate, $details); my $discount = 0; if ( $charge > 0 ) { @@ -131,7 +129,7 @@ sub calc_setup { delete $param->{'setup_charge'}; } - sprintf('%.2f', $charge - $discount); + sprintf( '%.2f', ($cust_pkg->quantity || 1) * ($charge - $discount) ); } sub unit_setup { @@ -151,8 +149,9 @@ sub calc_recur { if $self->recur_temporality eq 'preceding' && !$last_bill; my $charge = $self->base_recur($cust_pkg, $sdate); - if ( my $cutoff_day = $self->cutoff_day($cust_pkg) ) { - $charge = $self->calc_prorate(@_, $cutoff_day); + # always treat cutoff_day as a list + if ( my @cutoff_day = $self->cutoff_day($cust_pkg) ) { + $charge = $self->calc_prorate(@_, @cutoff_day); } elsif ( $param->{freq_override} ) { # XXX not sure if this should be mutually exclusive with sync_bill_date. @@ -162,7 +161,8 @@ sub calc_recur { } 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 { @@ -174,7 +174,7 @@ sub cutoff_day { return (localtime($next_bill))[3]; } } - return 0; + return (); } sub base_recur { @@ -253,7 +253,16 @@ 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; }