diff options
-rw-r--r-- | FS/FS/cust_bill_pkg.pm | 45 | ||||
-rw-r--r-- | FS/FS/cust_event.pm | 5 | ||||
-rw-r--r-- | httemplate/search/cust_event.html | 7 | ||||
-rw-r--r-- | httemplate/search/report_cust_event.html | 8 |
4 files changed, 54 insertions, 11 deletions
diff --git a/FS/FS/cust_bill_pkg.pm b/FS/FS/cust_bill_pkg.pm index a36520b77..f6b40f6b2 100644 --- a/FS/FS/cust_bill_pkg.pm +++ b/FS/FS/cust_bill_pkg.pm @@ -365,8 +365,10 @@ sub void { return $error; } + #more efficiently than below, because there could be lots + $self->void_cust_bill_pkg_detail($reprocess_cdrs); + foreach my $table (qw( - cust_bill_pkg_detail cust_bill_pkg_display cust_bill_pkg_discount cust_bill_pkg_tax_location @@ -374,17 +376,13 @@ sub void { cust_tax_exempt_pkg cust_bill_pkg_fee )) { - my %delete_args = (); - $delete_args{'reprocess_cdrs'} = $reprocess_cdrs - if $table eq 'cust_bill_pkg_detail'; - foreach my $linked ( qsearch($table, { billpkgnum=>$self->billpkgnum }) ) { my $vclass = 'FS::'.$table.'_void'; my $void = $vclass->new( { map { $_ => $linked->get($_) } $linked->fields }); - my $error = $void->insert || $linked->delete(%delete_args); + my $error = $void->insert || $linked->delete; if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; @@ -406,6 +404,40 @@ sub void { } +sub void_cust_bill_pkg_detail { + my( $self, $reprocess_cdrs ) = @_; + + my $from_cust_bill_pkg_detail = + 'FROM cust_bill_pkg_detail WHERE billpkgnum = ?'; + my $where_detailnum = + "WHERE detailnum IN ( SELECT detailnum $from_cust_bill_pkg_detail )"; + + if ( $reprocess_cdrs ) { + #well, technically this could have been on other invoices / termination + # partners... separate flag? + $self->scalar_sql( + "DELETE FROM cdr_termination + WHERE acctid IN ( SELECT acctid FROM cdr $where_detailnum ) + ", + $self->billpkgnum + ); + } + + my $setstatus = $reprocess_cdrs ? ', freesidestatus = NULL' : ''; + $self->scalar_sql( + "UPDATE cdr SET detailnum = NULL $setstatus $where_detailnum", + $self->billpkgnum + ); + + $self->scalar_sql("INSERT INTO cust_bill_pkg_detail_void + SELECT * $from_cust_bill_pkg_detail", + $self->billpkgnum + ); + + $self->scalar_sql("DELETE $from_cust_bill_pkg_detail", $self->billpkgnum); + +} + =item delete Not recommended. @@ -716,6 +748,7 @@ Returns the customer (L<FS::cust_main> object) for this line item. =cut sub cust_main { + carp "->cust_main called" if $DEBUG; # required for cust_main_Mixin equivalence # and use cust_bill instead of cust_pkg because this might not have a # cust_pkg diff --git a/FS/FS/cust_event.pm b/FS/FS/cust_event.pm index 094c4fa8b..2884f1278 100644 --- a/FS/FS/cust_event.pm +++ b/FS/FS/cust_event.pm @@ -315,11 +315,16 @@ sub join_sql { " JOIN part_event USING ( eventpart ) + LEFT JOIN cust_bill ON ( eventtable = 'cust_bill' AND tablenum = invnum ) LEFT JOIN cust_pkg ON ( eventtable = 'cust_pkg' AND tablenum = pkgnum ) LEFT JOIN cust_pay ON ( eventtable = 'cust_pay' AND tablenum = paynum ) + LEFT JOIN cust_pay_batch ON ( eventtable = 'cust_pay_batch' AND tablenum = paybatchnum ) + LEFT JOIN cust_statement ON ( eventtable = 'cust_statement' AND tablenum = cust_statement.statementnum ) + LEFT JOIN cust_svc ON ( eventtable = 'svc_acct' AND tablenum = svcnum ) LEFT JOIN cust_pkg AS cust_pkg_for_svc ON ( cust_svc.pkgnum = cust_pkg_for_svc.pkgnum ) + LEFT JOIN cust_main ON ( ( eventtable = 'cust_main' AND tablenum = cust_main.custnum ) OR ( eventtable = 'cust_bill' AND cust_bill.custnum = cust_main.custnum ) diff --git a/httemplate/search/cust_event.html b/httemplate/search/cust_event.html index b1ba9090e..1766c1905 100644 --- a/httemplate/search/cust_event.html +++ b/httemplate/search/cust_event.html @@ -134,6 +134,12 @@ my $trigger_link = sub { my $pkgnum = $cust_event->tablenum; my $frag = "cust_pkg$pkgnum"; #hack for IE ignoring real #fragment [ "${p}view/cust_main.cgi?custnum=$custnum$show;fragment=$frag#cust_pkg", 'tablenum' ]; + } elsif ( $eventtable eq 'cust_pay' ) { + [ "${p}view/$eventtable.html?paynum=", 'tablenum' ]; + } elsif ( $eventtable eq 'cust_statement' ) { + [ "${p}view/$eventtable.html?", 'tablenum' ]; + } elsif ( $eventtable eq 'cust_pay_batch' ) { + [ "${p}search/cust_pay_batch.cgi?batchnum=", 'cust_pay_batch_batchnum' ]; } else { [ "${p}view/$eventtable.cgi?", 'tablenum' ]; } @@ -199,6 +205,7 @@ my $sql_query = { 'part_event.*', #'cust_bill.custnum', #'cust_bill._date AS cust_bill_date', + 'cust_pay_batch.batchnum AS cust_pay_batch_batchnum', 'cust_main.custnum AS cust_main_custnum', FS::UI::Web::cust_sql_fields(), ), diff --git a/httemplate/search/report_cust_event.html b/httemplate/search/report_cust_event.html index 7aa4ff9d7..84eb45f96 100644 --- a/httemplate/search/report_cust_event.html +++ b/httemplate/search/report_cust_event.html @@ -5,11 +5,9 @@ %> <FORM ACTION="cust_event.html" METHOD="GET"> - <TABLE BGCOLOR="#cccccc" CELLSPACING=0> - <TR> - <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1">Search options</FONT></TH> - </TR> + <FONT CLASS="fsinnerbox-title"><% emt('Search options') %></FONT> + <TABLE CLASS="fsinnerbox"> <% include( '/elements/tr-select-agent.html', 'disable_empty'=>0 ) %> @@ -44,7 +42,7 @@ 'field' => 'event_status', 'multiple' => 1, 'all_selected' => 1, - 'size' => 5, + 'size' => 6, 'options' => [ qw( done_Y done_S done_N failed new locked ) ], 'option_labels' => { done_Y => 'Completed normally', done_S => 'Completed, with an error', |