+sub make_filter_summary {
+  my ($self) = @_;
+
+  my $filter = $::form->{filter} || {};
+  my @filter_strings;
+
+  my @filters = (
+    [ $filter->{"projectnumber:substr::ilike"},  t8('Project Number') ],
+    [ $filter->{"description:substr::ilike"},    t8('Description')    ],
+    [ $filter->{customer}{"name:substr::ilike"}, t8('Customer')       ],
+    [ $filter->{"project_type_id"},              t8('Project Type'),    sub { SL::DB::Manager::ProjectType->find_by(id => $filter->{"project_type_id"})->description }   ],
+    [ $filter->{"project_status_id"},            t8('Project Status'),  sub { SL::DB::Manager::ProjectStatus->find_by(id => $filter->{"project_status_id"})->description } ],
+  );
+
+  my @flags = (
+    [ $filter->{active} eq 'active',    $::locale->text('Active')      ],
+    [ $filter->{active} eq 'inactive',  $::locale->text('Inactive')    ],
+    [ $filter->{valid}  eq 'valid',     $::locale->text('Valid')       ],
+    [ $filter->{valid}  eq 'invalid',   $::locale->text('Invalid')     ],
+    [ $filter->{orphaned},              $::locale->text('Orphaned')    ],
+  );
+
+  for (@flags) {
+    push @filter_strings, "$_->[1]" if $_->[0];
+  }
+  for (@filters) {
+    push @filter_strings, "$_->[1]: " . ($_->[2] ? $_->[2]->() : $_->[0]) if $_->[0];
+  }
+
+  $self->{filter_summary} = join ', ', @filter_strings;
+}