X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=FS%2FFS%2Fcust_bill_pkg.pm;h=c8c242eb0bf2f57b165f868f456daf4b1bf626d9;hb=947c1f964f1304242f8a6ffabacccf040f1d505e;hp=fbc67c542bcb3b5dbf5b3e84d05a96aac877f74a;hpb=fa19c2c557f7abd72f94357373290b99dd3297bf;p=freeside.git diff --git a/FS/FS/cust_bill_pkg.pm b/FS/FS/cust_bill_pkg.pm index fbc67c542..c8c242eb0 100644 --- a/FS/FS/cust_bill_pkg.pm +++ b/FS/FS/cust_bill_pkg.pm @@ -1,7 +1,7 @@ package FS::cust_bill_pkg; use strict; -use vars qw( @ISA $DEBUG ); +use vars qw( @ISA $DEBUG $me ); use FS::Record qw( qsearch qsearchs dbdef dbh ); use FS::cust_main_Mixin; use FS::cust_pkg; @@ -12,10 +12,14 @@ use FS::cust_bill_pkg_display; use FS::cust_bill_pay_pkg; use FS::cust_credit_bill_pkg; use FS::cust_tax_exempt_pkg; +use FS::cust_bill_pkg_tax_location; +use FS::cust_bill_pkg_tax_rate_location; +use FS::cust_tax_adjustment; @ISA = qw( FS::cust_main_Mixin FS::Record ); -$DEBUG = 0; +$DEBUG = 2; +$me = '[FS::cust_bill_pkg]'; =head1 NAME @@ -40,28 +44,57 @@ supported: =over 4 -=item billpkgnum - primary key +=item billpkgnum -=item invnum - invoice (see L) +primary key -=item pkgnum - package (see L) or 0 for the special virtual sales tax package, or -1 for the virtual line item (itemdesc is used for the line) +=item invnum -=item pkgpart_override - optional package definition (see L) override -=item setup - setup fee +invoice (see L) -=item recur - recurring fee +=item pkgnum -=item sdate - starting date of recurring fee +package (see L) or 0 for the special virtual sales tax package, or -1 for the virtual line item (itemdesc is used for the line) -=item edate - ending date of recurring fee +=item pkgpart_override -=item itemdesc - Line item description (overrides normal package description) +optional package definition (see L) override -=item quantity - If not set, defaults to 1 +=item setup -=item unitsetup - If not set, defaults to setup +setup fee -=item unitrecur - If not set, defaults to recur +=item recur + +recurring fee + +=item sdate + +starting date of recurring fee + +=item edate + +ending date of recurring fee + +=item itemdesc + +Line item description (overrides normal package description) + +=item quantity + +If not set, defaults to 1 + +=item unitsetup + +If not set, defaults to setup + +=item unitrecur + +If not set, defaults to recur + +=item hidden + +If set to Y, indicates data should not appear as separate line item on invoice =back @@ -109,7 +142,7 @@ sub insert { return $error; } - if ( defined dbdef->table('cust_bill_pkg_detail') && $self->get('details') ) { + if ( $self->get('details') ) { foreach my $detail ( @{$self->get('details')} ) { my $cust_bill_pkg_detail = new FS::cust_bill_pkg_detail { 'billpkgnum' => $self->billpkgnum, @@ -117,22 +150,23 @@ sub insert { 'detail' => (ref($detail) ? $detail->[1] : $detail ), 'amount' => (ref($detail) ? $detail->[2] : '' ), 'classnum' => (ref($detail) ? $detail->[3] : '' ), + 'phonenum' => (ref($detail) ? $detail->[4] : '' ), }; $error = $cust_bill_pkg_detail->insert; if ( $error ) { $dbh->rollback if $oldAutoCommit; - return $error; + return "error inserting cust_bill_pkg_detail: $error"; } } } - if ( defined dbdef->table('cust_bill_pkg_display') && $self->get('display') ){ + if ( $self->get('display') ) { foreach my $cust_bill_pkg_display ( @{ $self->get('display') } ) { $cust_bill_pkg_display->billpkgnum($self->billpkgnum); $error = $cust_bill_pkg_display->insert; if ( $error ) { $dbh->rollback if $oldAutoCommit; - return $error; + return "error inserting cust_bill_pkg_display: $error"; } } } @@ -143,7 +177,7 @@ sub insert { $error = $cust_tax_exempt_pkg->insert; if ( $error ) { $dbh->rollback if $oldAutoCommit; - return $error; + return "error inserting cust_tax_exempt_pkg: $error"; } } } @@ -157,7 +191,7 @@ sub insert { warn $error; if ( $error ) { $dbh->rollback if $oldAutoCommit; - return $error; + return "error inserting cust_bill_pkg_tax_location: $error"; } } } @@ -170,7 +204,7 @@ sub insert { warn $error; if ( $error ) { $dbh->rollback if $oldAutoCommit; - return $error; + return "error inserting cust_bill_pkg_tax_rate_location: $error"; } } } @@ -182,7 +216,7 @@ sub insert { warn $error; if ( $error ) { $dbh->rollback if $oldAutoCommit; - return $error; + return "error replacing cust_tax_adjustment: $error"; } } @@ -193,13 +227,65 @@ sub insert { =item delete -Currently unimplemented. I don't remove line items because there would then be -no record the items ever existed (which is bad, no?) +Not recommended. =cut sub delete { - return "Can't delete cust_bill_pkg records!"; + my $self = shift; + + local $SIG{HUP} = 'IGNORE'; + local $SIG{INT} = 'IGNORE'; + local $SIG{QUIT} = 'IGNORE'; + local $SIG{TERM} = 'IGNORE'; + local $SIG{TSTP} = 'IGNORE'; + local $SIG{PIPE} = 'IGNORE'; + + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + my $dbh = dbh; + + foreach my $table (qw( + cust_bill_pkg_detail + cust_bill_pkg_display + cust_bill_pkg_tax_location + cust_bill_pkg_tax_rate_location + cust_tax_exempt_pkg + cust_bill_pay_pkg + cust_credit_bill_pkg + )) { + + foreach my $linked ( qsearch($table, { billpkgnum=>$self->billpkgnum }) ) { + my $error = $linked->delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + + } + + foreach my $cust_tax_adjustment ( + qsearch('cust_tax_adjustment', { billpkgnum=>$self->billpkgnum }) + ) { + $cust_tax_adjustment->billpkgnum(''); #NULL + my $error = $cust_tax_adjustment->replace; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + + my $error = $self->SUPER::delete(@_); + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + $dbh->commit or die $dbh->errstr if $oldAutoCommit; + + ''; + } #alas, bin/follow-tax-rename @@ -236,6 +322,7 @@ sub check { || $self->ut_numbern('edate') || $self->ut_textn('itemdesc') || $self->ut_textn('itemcomment') + || $self->ut_enum('hidden', [ '', 'Y' ]) ; return $error if $error; @@ -259,6 +346,7 @@ Returns the package (see L) for this invoice line item. sub cust_pkg { my $self = shift; + warn "$me $self -> cust_pkg"; qsearchs( 'cust_pkg', { 'pkgnum' => $self->pkgnum } ); } @@ -273,7 +361,10 @@ sub part_pkg { if ( $self->pkgpart_override ) { qsearchs('part_pkg', { 'pkgpart' => $self->pkgpart_override } ); } else { - $self->cust_pkg->part_pkg; + my $part_pkg; + my $cust_pkg = $self->cust_pkg; + $part_pkg = $cust_pkg->part_pkg if $cust_pkg; + $part_pkg; } } @@ -296,6 +387,7 @@ Returns the previous cust_bill_pkg for this package, if any. sub previous_cust_bill_pkg { my $self = shift; + return unless $self->sdate; qsearchs({ 'table' => 'cust_bill_pkg', 'hashref' => { 'pkgnum' => $self->pkgnum, @@ -367,7 +459,7 @@ sub details { $format_sub = $opt{format_function} if $opt{format_function}; map { ( $_->format eq 'C' - ? &{$format_sub}( $_->detail ) + ? &{$format_sub}( $_->detail, $_ ) : &{$escape_function}( $_->detail ) ) }