diff options
author | Ivan Kohler <ivan@freeside.biz> | 2012-08-01 14:01:14 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2012-08-01 14:01:14 -0700 |
commit | bec3b6c2bf97d66b992866d7ee7295f1f05452e6 (patch) | |
tree | 78fb0c2523f237ad06905fe099dc5d32330a0e6e /FS/FS/cust_bill_pkg_void.pm | |
parent | 55675d6cdd93f00b7c0ac93403e8c4d66567a729 (diff) |
invoice voiding, RT#18677
Diffstat (limited to 'FS/FS/cust_bill_pkg_void.pm')
-rw-r--r-- | FS/FS/cust_bill_pkg_void.pm | 74 |
1 files changed, 69 insertions, 5 deletions
diff --git a/FS/FS/cust_bill_pkg_void.pm b/FS/FS/cust_bill_pkg_void.pm index 7855d58..b7c6fee 100644 --- a/FS/FS/cust_bill_pkg_void.pm +++ b/FS/FS/cust_bill_pkg_void.pm @@ -2,11 +2,12 @@ package FS::cust_bill_pkg_void; use base qw( FS::TemplateItem_Mixin FS::Record ); use strict; -use FS::Record qw( qsearch qsearchs ); +use FS::Record qw( qsearch qsearchs dbh fields ); use FS::cust_bill_void; use FS::cust_bill_pkg_detail_void; use FS::cust_bill_pkg_display_void; use FS::cust_bill_pkg_discount_void; +use FS::cust_bill_pkg; =head1 NAME @@ -129,21 +130,84 @@ sub discount_table { 'cust_bill_pkg_discount_void'; } Adds this record to the database. If there is an error, returns the error, otherwise returns false. +=item unvoid + +"Un-void"s this line item: Deletes the voided line item from the database and +adds back a normal line item (and related tables). + =cut +sub unvoid { + 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; + + my $cust_bill_pkg = new FS::cust_bill_pkg ( { + map { $_ => $self->get($_) } fields('cust_bill_pkg') + } ); + my $error = $cust_bill_pkg->insert; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + foreach my $table (qw( + cust_bill_pkg_detail + cust_bill_pkg_display + cust_bill_pkg_discount + cust_bill_pkg_tax_location + cust_bill_pkg_tax_rate_location + cust_tax_exempt_pkg + )) { + + foreach my $voided ( + qsearch($table.'_void', { billpkgnum=>$self->billpkgnum }) + ) { + + my $class = 'FS::'.$table; + my $unvoid = $class->new( { + map { $_ => $voided->get($_) } fields($table) + }); + my $error = $unvoid->insert || $voided->delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + } + + } + + $error = $self->delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + $dbh->commit or die $dbh->errstr if $oldAutoCommit; + + ''; + +} + =item delete Delete this record from the database. -=cut - =item replace OLD_RECORD Replaces the OLD_RECORD with this one in the database. If there is an error, returns the error, otherwise returns false. -=cut - =item check Checks all fields to make sure this is a valid record. If there is |