From e4aff0c0af3139118b4ae02e814ba7d0d8f46774 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sun, 4 Feb 2018 17:47:57 -0800 Subject: option to reprocess CDRs when voiding an invoice, RT#79001 --- FS/FS/cust_bill_pkg_detail.pm | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'FS/FS/cust_bill_pkg_detail.pm') diff --git a/FS/FS/cust_bill_pkg_detail.pm b/FS/FS/cust_bill_pkg_detail.pm index dd118c1..19b15f7 100644 --- a/FS/FS/cust_bill_pkg_detail.pm +++ b/FS/FS/cust_bill_pkg_detail.pm @@ -106,21 +106,37 @@ sub insert { ''; } -=item delete +=item delete [ ARG => VALUE ... ] Delete this record from the database. +If the "reprocess_cdrs" argument is set to true, resets the status of any +related CDRs (and deletes their associated cdr_termination records, if any). + =cut sub delete { - my $self = shift; + my( $self, %args ) = @_; + my $error = $self->SUPER::delete; return $error if $error; + foreach my $cdr (qsearch('cdr', { detailnum => $self->detailnum })) { + $cdr->set('detailnum', ''); + $cdr->set('freesidestatus', '') if $args{'reprocess_cdrs'}; $error = $cdr->replace; return "error unlinking CDR #" . $cdr->acctid . ": $error" if $error; + + #well, technically this could have been on other invoices / termination + # partners... separate flag? + $self->scalar_sql( 'DELETE FROM cdr_termination WHERE acctid = ?', + $cdr->acctid ) + if $args{'reprocess_cdrs'}; + } + + ''; } =item replace OLD_RECORD -- cgit v1.1