X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_bill_pkg.pm;h=c9b0a4dc1406843b4581b815d09feac57b9ac3ad;hb=80511cb4158b98db01deec317e5408675487bc6e;hp=d332e363f8d021f4775ceed0c7da756aa6d46b20;hpb=5fdd19665fb7c0ad425a99d3dbf9ad7e27fbf44a;p=freeside.git diff --git a/FS/FS/cust_bill_pkg.pm b/FS/FS/cust_bill_pkg.pm index d332e363f..c9b0a4dc1 100644 --- a/FS/FS/cust_bill_pkg.pm +++ b/FS/FS/cust_bill_pkg.pm @@ -154,8 +154,9 @@ sub insert { 'classnum' => (ref($detail) ? $detail->[3] : '' ), 'phonenum' => (ref($detail) ? $detail->[4] : '' ), 'accountcode' => (ref($detail) ? $detail->[5] : '' ), - 'duration' => (ref($detail) ? $detail->[6] : '' ), - 'regionname' => (ref($detail) ? $detail->[7] : '' ), + 'startdate' => (ref($detail) ? $detail->[6] : '' ), + 'duration' => (ref($detail) ? $detail->[7] : '' ), + 'regionname' => (ref($detail) ? $detail->[8] : '' ), }; $error = $cust_bill_pkg_detail->insert; if ( $error ) { @@ -656,6 +657,76 @@ sub unitrecur { : $self->getfield('unitrecur'); } +=item set_display OPTION => VALUE ... + +A helper method for I, populates the pseudo-field B with +appropriate FS::cust_bill_pkg_display objects. + +Options are passed as a list of name/value pairs. Options are: + +part_pkg: FS::part_pkg object from the + +real_pkgpart: if this line item comes from a bundled package, the pkgpart of the owning package. Otherwise the same as the part_pkg's pkgpart above. + +=cut + +sub set_display { + my( $self, %opt ) = @_; + my $part_pkg = $opt{'part_pkg'}; + my $cust_pkg = new FS::cust_pkg { pkgpart => $opt{real_pkgpart} }; + + my $conf = new FS::Conf; + + my $separate = $conf->exists('separate_usage'); + my $usage_mandate = $part_pkg->option('usage_mandate', 'Hush!') + || $cust_pkg->part_pkg->option('usage_mandate', 'Hush!'); + + # or use the category from $opt{'part_pkg'} if its not bundled? + my $categoryname = $cust_pkg->part_pkg->categoryname; + + return $self->set('display', []) + unless $separate || $categoryname || $usage_mandate; + + my @display = (); + + my %hash = ( 'section' => $categoryname ); + + my $usage_section = $part_pkg->option('usage_section', 'Hush!') + || $cust_pkg->part_pkg->option('usage_section', 'Hush!'); + + my $summary = $part_pkg->option('summarize_usage', 'Hush!') + || $cust_pkg->part_pkg->option('summarize_usage', 'Hush!'); + + if ( $separate ) { + push @display, new FS::cust_bill_pkg_display { type => 'S', %hash }; + push @display, new FS::cust_bill_pkg_display { type => 'R', %hash }; + } else { + push @display, new FS::cust_bill_pkg_display + { type => '', + %hash, + ( ( $usage_mandate ) ? ( 'summary' => 'Y' ) : () ), + }; + } + + if ($separate && $usage_section && $summary) { + push @display, new FS::cust_bill_pkg_display { type => 'U', + summary => 'Y', + %hash, + }; + } + if ($usage_mandate || ($usage_section && $summary) ) { + $hash{post_total} = 'Y'; + } + + if ($separate || $usage_mandate) { + $hash{section} = $usage_section if $usage_section; + push @display, new FS::cust_bill_pkg_display { type => 'U', %hash }; + } + + $self->set('display', \@display); + +} + =item disintegrate Returns a list of cust_bill_pkg objects each with no more than a single class