summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2012-06-26 20:28:37 -0700
committerIvan Kohler <ivan@freeside.biz>2012-06-26 20:28:37 -0700
commitea830c61145a0c659f24e55a4640db4e2036c06f (patch)
tree09620f5da2924350b46722ee082e7dfd12ced2e6 /FS
parent83b8a19421cb0e62234485961c35154d1357c61b (diff)
quantities for regular packages in addition to one-time charges, RT#13136
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/cust_main/Billing.pm4
-rw-r--r--FS/FS/cust_pkg.pm9
-rw-r--r--FS/FS/part_pkg/flat.pm3
3 files changed, 13 insertions, 3 deletions
diff --git a/FS/FS/cust_main/Billing.pm b/FS/FS/cust_main/Billing.pm
index bc9b9387b..e7b953060 100644
--- a/FS/FS/cust_main/Billing.pm
+++ b/FS/FS/cust_main/Billing.pm
@@ -963,7 +963,6 @@ sub _make_lines {
# bill recurring fee
###
- #XXX unit stuff here too
my $recur = 0;
my $unitrecur = 0;
my @recur_discounts = ();
@@ -1022,6 +1021,9 @@ sub _make_lines {
return "$@ running $method for $cust_pkg\n"
if ( $@ );
+ #base_cancel???
+ $unitrecur = $cust_pkg->part_pkg->base_recur || $recur; #XXX uuh
+
if ( $increment_next_bill ) {
my $next_bill = $part_pkg->add_freq($sdate, $options{freq_override} || 0);
diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm
index de535aadc..22559e95f 100644
--- a/FS/FS/cust_pkg.pm
+++ b/FS/FS/cust_pkg.pm
@@ -2204,11 +2204,14 @@ field, I<num_avail>, which specifies the number of available services.
sub available_part_svc {
my $self = shift;
+
+ my $pkg_quantity = $self->quantity || 1;
+
grep { $_->num_avail > 0 }
map {
my $part_svc = $_->part_svc;
$part_svc->{'Hash'}{'num_avail'} = #evil encapsulation-breaking
- $_->quantity - $self->num_cust_svc($_->svcpart);
+ $pkg_quantity * $_->quantity - $self->num_cust_svc($_->svcpart);
# more evil encapsulation breakage
if($part_svc->{'Hash'}{'num_avail'} > 0) {
@@ -2250,6 +2253,8 @@ sub part_svc {
my $self = shift;
my %opt = @_;
+ my $pkg_quantity = $self->quantity || 1;
+
#XXX some sort of sort order besides numeric by svcpart...
my @part_svc = sort { $a->svcpart <=> $b->svcpart } map {
my $pkg_svc = $_;
@@ -2257,7 +2262,7 @@ sub part_svc {
my $num_cust_svc = $self->num_cust_svc($part_svc->svcpart);
$part_svc->{'Hash'}{'num_cust_svc'} = $num_cust_svc; #more evil
$part_svc->{'Hash'}{'num_avail'} =
- max( 0, $pkg_svc->quantity - $num_cust_svc );
+ max( 0, $pkg_quantity * $pkg_svc->quantity - $num_cust_svc );
$part_svc->{'Hash'}{'cust_pkg_svc'} =
$num_cust_svc ? [ $self->cust_svc($part_svc->svcpart) ] : []
unless exists($opt{summarize_size}) && $opt{summarize_size} > 0
diff --git a/FS/FS/part_pkg/flat.pm b/FS/FS/part_pkg/flat.pm
index 0e44f5db5..f86db2ef4 100644
--- a/FS/FS/part_pkg/flat.pm
+++ b/FS/FS/part_pkg/flat.pm
@@ -161,6 +161,9 @@ sub calc_recur {
$charge *= $param->{freq_override} if $param->{freq_override};
}
+ my $quantity = $cust_pkg->quantity || 1;
+ $charge *= $quantity;
+
my $discount = $self->calc_discount($cust_pkg, $sdate, $details, $param);
return sprintf('%.2f', $charge - $discount);
}