+=item cust_bill_pkg_tax_Xlocation
+
+Returns the list of associated cust_bill_pkg_tax_location and/or
+cust_bill_pkg_tax_rate_location objects
+
+=cut
+
+sub cust_bill_pkg_tax_Xlocation {
+ my $self = shift;
+
+ my %hash = ( 'billpkgnum' => $self->billpkgnum );
+
+ (
+ qsearch ( 'cust_bill_pkg_tax_location', { %hash } ),
+ qsearch ( 'cust_bill_pkg_tax_rate_location', { %hash } )
+ );
+
+}
+
+=item cust_bill_pkg_detail [ CLASSNUM ]
+
+Returns the list of associated cust_bill_pkg_detail objects
+The optional CLASSNUM argument will limit the details to the specified usage
+class.
+
+=cut
+
+sub cust_bill_pkg_detail {
+ my $self = shift;
+ my $classnum = shift || '';
+
+ my %hash = ( 'billpkgnum' => $self->billpkgnum );
+ $hash{classnum} = $classnum if $classnum;
+
+ qsearch( 'cust_bill_pkg_detail', \%hash ),
+
+}
+
+=item cust_bill_pkg_discount
+
+Returns the list of associated cust_bill_pkg_discount objects.
+
+=cut
+
+sub cust_bill_pkg_discount {
+ my $self = shift;
+ qsearch( 'cust_bill_pkg_discount', { 'billpkgnum' => $self->billpkgnum } );
+}
+
+=item recur_show_zero
+
+=cut
+
+sub recur_show_zero {
+ #my $self = shift;
+ # $self->recur == 0
+ #&& $self->pkgnum
+ #&& $self->cust_pkg->part_pkg->recur_show_zero;
+
+ shift->_X_show_zero('recur');
+
+}
+
+sub setup_show_zero {
+ shift->_X_show_zero('setup');
+}
+
+sub _X_show_zero {
+ my( $self, $what ) = @_;
+
+ return 0 unless $self->$what() == 0 && $self->pkgnum;
+
+ $self->cust_pkg->_X_show_zero($what);
+}