X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_bill_pkg.pm;h=96f09c91578d198a52099117e2a543a6bdad6bda;hb=539b6216a17a5423431d430022c4e0f9581a9d2f;hp=ddda50452d662b91c4b3a81fa554b55519baedbe;hpb=808b89d9c1f34c9c66064da212ab7036b85973a1;p=freeside.git diff --git a/FS/FS/cust_bill_pkg.pm b/FS/FS/cust_bill_pkg.pm index ddda50452..96f09c915 100644 --- a/FS/FS/cust_bill_pkg.pm +++ b/FS/FS/cust_bill_pkg.pm @@ -11,6 +11,7 @@ use FS::cust_bill_pkg_detail; use FS::cust_bill_pkg_display; use FS::cust_bill_pay_pkg; use FS::cust_credit_bill_pkg; +use FS::cust_tax_exempt_pkg; @ISA = qw( FS::cust_main_Mixin FS::Record ); @@ -29,10 +30,6 @@ FS::cust_bill_pkg - Object methods for cust_bill_pkg records $error = $record->insert; - $error = $new_record->replace($old_record); - - $error = $record->delete; - $error = $record->check; =head1 DESCRIPTION @@ -66,6 +63,8 @@ supported: =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 sdate and edate are specified as UNIX timestamps; see L. Also @@ -112,7 +111,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, @@ -120,26 +119,76 @@ 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"; + } + } + } + + if ( $self->_cust_tax_exempt_pkg ) { + foreach my $cust_tax_exempt_pkg ( @{$self->_cust_tax_exempt_pkg} ) { + $cust_tax_exempt_pkg->billpkgnum($self->billpkgnum); + $error = $cust_tax_exempt_pkg->insert; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "error inserting cust_tax_exempt_pkg: $error"; } } } + my $tax_location = $self->get('cust_bill_pkg_tax_location'); + if ( $tax_location ) { + foreach my $cust_bill_pkg_tax_location ( @$tax_location ) { + $cust_bill_pkg_tax_location->billpkgnum($self->billpkgnum); + warn $cust_bill_pkg_tax_location; + $error = $cust_bill_pkg_tax_location->insert; + warn $error; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "error inserting cust_bill_pkg_tax_location: $error"; + } + } + } + + my $tax_rate_location = $self->get('cust_bill_pkg_tax_rate_location'); + if ( $tax_rate_location ) { + foreach my $cust_bill_pkg_tax_rate_location ( @$tax_rate_location ) { + $cust_bill_pkg_tax_rate_location->billpkgnum($self->billpkgnum); + $error = $cust_bill_pkg_tax_rate_location->insert; + warn $error; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "error inserting cust_bill_pkg_tax_rate_location: $error"; + } + } + } + + my $cust_tax_adjustment = $self->get('cust_tax_adjustment'); + if ( $cust_tax_adjustment ) { + $cust_tax_adjustment->billpkgnum($self->billpkgnum); + $error = $cust_tax_adjustment->replace; + warn $error; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "error replacing cust_tax_adjustment: $error"; + } + } + $dbh->commit or die $dbh->errstr if $oldAutoCommit; ''; @@ -156,16 +205,18 @@ sub delete { return "Can't delete cust_bill_pkg records!"; } -=item replace OLD_RECORD - -Currently unimplemented. This would be even more of an accounting nightmare -than deleteing the items. Just don't do it. - -=cut - -sub replace { - return "Can't modify cust_bill_pkg records!"; -} +#alas, bin/follow-tax-rename +# +#=item replace OLD_RECORD +# +#Currently unimplemented. This would be even more of an accounting nightmare +#than deleteing the items. Just don't do it. +# +#=cut +# +#sub replace { +# return "Can't modify cust_bill_pkg records!"; +#} =item check @@ -187,6 +238,8 @@ sub check { || $self->ut_numbern('sdate') || $self->ut_numbern('edate') || $self->ut_textn('itemdesc') + || $self->ut_textn('itemcomment') + || $self->ut_enum('hidden', [ '', 'Y' ]) ; return $error if $error; @@ -239,6 +292,24 @@ sub cust_bill { qsearchs( 'cust_bill', { 'invnum' => $self->invnum } ); } +=item previous_cust_bill_pkg + +Returns the previous cust_bill_pkg for this package, if any. + +=cut + +sub previous_cust_bill_pkg { + my $self = shift; + return unless $self->sdate; + qsearchs({ + 'table' => 'cust_bill_pkg', + 'hashref' => { 'pkgnum' => $self->pkgnum, + 'sdate' => { op=>'<', value=>$self->sdate }, + }, + 'order_by' => 'ORDER BY sdate DESC LIMIT 1', + }); +} + =item details [ OPTION => VALUE ... ] Returns an array of detail information for the invoice line item. @@ -287,10 +358,10 @@ sub details { foreach ($csv->fields) { $result .= ' & ' if $column > 1; if ($column > 6) { # KLUDGE ALERT! - $result .= '\multicolumn{1}{l}{\small{'. + $result .= '\multicolumn{1}{l}{\scriptsize{'. &$escape_function($_). '}}'; }else{ - $result .= '\small{'. &$escape_function($_). '}'; + $result .= '\scriptsize{'. &$escape_function($_). '}'; } $column++; } @@ -301,7 +372,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 ) ) } @@ -327,7 +398,9 @@ sub desc { if ( $self->pkgnum > 0 ) { $self->itemdesc || $self->part_pkg->pkg; } else { - $self->itemdesc || 'Tax'; + my $desc = $self->itemdesc || 'Tax'; + $desc .= ' '. $self->itemcomment if $self->itemcomment =~ /\S/; + $desc; } } @@ -612,6 +685,17 @@ sub cust_bill_pkg_display { } +# reserving this name for my friends FS::{tax_rate|cust_main_county}::taxline +# and FS::cust_main::bill + +sub _cust_tax_exempt_pkg { + my ( $self ) = @_; + + $self->{Hash}->{_cust_tax_exempt_pkg} or + $self->{Hash}->{_cust_tax_exempt_pkg} = []; + +} + =back