Merge branch 'master' of ssh://git.freeside.biz/home/git/freeside
authorChristopher Burger <burgerc@freeside.biz>
Fri, 18 May 2018 15:41:52 +0000 (11:41 -0400)
committerChristopher Burger <burgerc@freeside.biz>
Fri, 18 May 2018 15:41:52 +0000 (11:41 -0400)
FS/FS/cust_bill_pkg.pm
FS/FS/cust_event.pm
httemplate/search/cust_event.html
httemplate/search/report_cust_event.html

index a36520b..f6b40f6 100644 (file)
@@ -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
index 094c4fa..2884f12 100644 (file)
@@ -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 )
index b1ba909..1766c19 100644 (file)
@@ -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(),
                   ),
index 7aa4ff9..84eb45f 100644 (file)
@@ -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',