RT# 71289 - add contact changes to customer change history
authorChristopher Burger <burgerc@freeside.biz>
Mon, 22 Oct 2018 23:18:51 +0000 (19:18 -0400)
committerChristopher Burger <burgerc@freeside.biz>
Mon, 22 Oct 2018 23:18:51 +0000 (19:18 -0400)
httemplate/elements/change_history_common.html
httemplate/view/cust_main/change_history.html

index 4c05f4e..f22e093 100644 (file)
@@ -53,6 +53,8 @@
 %     $description = &{ $h_table_descripsub{$item->table} }( $item, $tables{'cust_tag'} )
 %        if $single_cust && $h_table_descripsub{$item->table};
 %   } else {
+%     my @fields = $item->fields;
+%     push @fields, 'message_dest' if $item->table eq 'h_contact';
 %     $description = join(', ',
 %             map  { my $value = ( $_ =~ /(^pay(info|cvv)|^ss|_password)$/ ) 
 %                                  ? 'N/A'
@@ -71,7 +73,7 @@
 %                      : ( $item->get($_) =~ /\S/ )
 %                  }
 %             grep { ! /^(history|custnum$)/i }
-%                  $item->fields
+%                  @fields
 %     );
 %     if ( $single_cust && $h_table_descripsub{$item->table} ) {
 %        $description = &{ $h_table_descripsub{$item->table} }( $item );
@@ -229,6 +231,7 @@ my %h_table_labelsub = (
   #'h_phone_device'
   #'h_cust_tag'      => $tag_labelsub,
   'h_contact'  => $contact_labelsub,
+  'h_cust_contact'  => $contact_labelsub,
 );
 
 my $tag_descripsub = sub {
index d8f0d1e..4ff604d 100644 (file)
@@ -49,6 +49,7 @@ tie my %tables, 'Tie::IxHash',
   #? it gets provisioned anyway 'phone_avail'         => 'Phone',
   'cust_tag'          => 'Tag',
   'contact'           => 'Contact',
+  'cust_contact'      => 'Contact',
 ;
 
 my $pkg_join = "JOIN cust_pkg USING ( pkgnum )";
@@ -69,7 +70,6 @@ my %table_join = (
   'radius_usergroup' => $svc_join,
   'phone_device'     => $svc_join,
   'cust_pkg_discount'=> $pkg_join,
-  'contact'          => "JOIN cust_contact USING ( contactnum )",
 );
 
 %table_join = (%table_join, map { $_ => $svc_join } @svc_tables);
@@ -147,16 +147,59 @@ my $extra_sql = ' AND custnum = '. $cust_main->custnum;
 
 my %foundsvcs;
 foreach my $table ( keys %tables ) {
-  $extra_sql = ' AND cust_contact.custnum = '. $cust_main->custnum if $table eq 'contact';
-  my @items = qsearch({
-    'table'     => "h_$table",
-    'addl_from' => $table_join{$table},
-    'hashref'   => { 'history_date' =>  { op=>'>=', value=>$newer_than }, },
-    'extra_sql' => $extra_sql,
-  });
-  %foundsvcs = (%foundsvcs, map { $_->svcnum => 1 } @items)
-    if $table =~ /^svc/;
-  push @history, @items;
+  if ($table eq 'cust_contact') { next; } #skip as dont need to search table but hack to show contact name
+  elsif ($table eq 'contact') {
+
+    my $contact_addl_from = "
+      INNER JOIN (select contactnum, min(history_date) as min_history_date, max(history_date) as max_history_date FROM h_cust_contact WHERE custnum = ".$cust_main->custnum." AND history_date >= $newer_than GROUP BY contactnum) a ON h_cust_contact.contactnum = a.contactnum
+    ";
+
+    ## get list with add and remove dates of contacts for customer
+    my @h_cust_contacts = qsearch({
+      'table' => "h_cust_contact",
+      'select' => "a.contactnum, a.min_history_date, a.max_history_date, history_action AS max_history_action",
+      'addl_from' => $contact_addl_from,
+      'extra_sql' => " WHERE history_date = a.max_history_date",
+    });
+
+    foreach my $c (@h_cust_contacts) {
+     my $max_date_sql;
+     $max_date_sql = " AND history_date <= ".$c->{Hash}->{max_history_date} if $c->{Hash}->{max_history_action} eq 'delete';
+
+     ## get history of contact while attached to customer
+     my @contact_history = qsearch({
+       'table'      => "h_contact",
+       'hashref'    => {
+          'history_date' =>  { op=>'>=', value=>$c->{Hash}->{min_history_date} },
+          'contactnum'   => $c->{Hash}->{contactnum},
+        },
+        'extra_sql' => $max_date_sql,
+     });
+
+     ## get history of customer specific changes to contact.
+     my @cust_contact_history = qsearch({
+       'table'     => "h_cust_contact",
+       'hashref'   => {
+          'history_date' =>  { op=>'>=', value=>$c->{Hash}->{min_history_date} },
+          'contactnum'   => $c->{Hash}->{contactnum},
+          'custnum'      => $cust_main->custnum,
+        },
+     });
+
+     push @history, @contact_history; push @history, @cust_contact_history;
+    }
+  }
+  else {
+    my @items = qsearch({
+      'table'     => "h_$table",
+      'addl_from' => $table_join{$table},
+      'hashref'   => { 'history_date' =>  { op=>'>=', value=>$newer_than }, },
+      'extra_sql' => $extra_sql,
+    });
+    %foundsvcs = (%foundsvcs, map { $_->svcnum => 1 } @items)
+      if $table =~ /^svc/;
+    push @history, @items;
+  }
 }
 
 ### Load svcs that are no longer linked (cust_svc has been deleted)