RT# 38217 Log context list includes all contexts, not just predefined
authorMitch Jackson <mitch@freeside.biz>
Tue, 8 Jan 2019 22:13:15 +0000 (17:13 -0500)
committerMitch Jackson <mitch@freeside.biz>
Tue, 8 Jan 2019 22:49:21 +0000 (17:49 -0500)
FS/FS/log_context.pm

index 3aed73c..6b69a80 100644 (file)
@@ -4,7 +4,9 @@ use strict;
 use base qw( FS::Record );
 use FS::Record qw( qsearch qsearchs );
 
-my @contexts = ( qw(
+# Items in @default_contexts will always be included in the
+# output of contexts() method
+my @default_contexts = ( qw(
   bill_and_collect
   FS::cust_main::Billing::bill_and_collect
   FS::cust_main::Billing::bill
@@ -30,6 +32,10 @@ my @contexts = ( qw(
   freeside-paymentech-upload
   freeside-paymentech-download
   test
+  FS::TaxEngine::billsoft
+  wa_sales
+  wa_tax_rate_update
+  tax_rate_update
 ) );
 
 =head1 NAME
@@ -126,11 +132,25 @@ sub check {
 
 =item contexts
 
-Returns a list of all valid contexts.
+Returns a list of all log contexts, by combining @default_contexts
+with all context values seen in the log_context table
 
 =cut
 
-sub contexts { @contexts }
+sub contexts {
+  my $self = shift;
+
+  my %contexts = map { $_ => 1 } @default_contexts;
+
+  $contexts{ $_->context } = 1
+    for qsearch({
+      select  => 'DISTINCT context AS context',
+      table   => 'log_context',
+      hashref => {},
+    });
+
+  sort { lc $a cmp lc $b } keys %contexts;
+}
 
 =back