Files
FoodsharingOnboarding/FoodsharingSiegen.Shared/Helper/FilterHelper.cs
Andre Beging 6389da4bc1 Rename 'Deleted' state to 'Archived' and update related logic
Replaced 'Deleted' with 'Archived' across the codebase to better reflect the intent of the state. Adjusted related features, including filters, UI labels, navigation, and permissions. Introduced a 'Recent Activity' filter for improved activity tracking.
2025-04-02 08:40:38 +02:00

61 lines
2.5 KiB
C#

using System.Linq.Expressions;
using FoodsharingSiegen.Contracts.Entity;
using FoodsharingSiegen.Contracts.Enums;
using FoodsharingSiegen.Contracts.Model;
namespace FoodsharingSiegen.Shared.Helper
{
public static class FilterHelper
{
#region Public Method ApplyFilter
/// <summary>
/// Filters the given prospect list based on the provided filter criteria.
/// </summary>
/// <param name="prospectList">
/// The list of prospects to be filtered. Can be null.
/// </param>
/// <param name="filter">
/// The filter criteria used to narrow down the prospect list.
/// </param>
/// <returns>
/// A filtered list of prospects that meet the criteria specified in the filter.
/// </returns>
public static List<Prospect> ApplyFilter(this List<Prospect>? prospectList, ProspectFilter filter)
{
if (prospectList == null) return [];
var filterListQ = prospectList.AsQueryable();
if (!string.IsNullOrWhiteSpace(filter.Text))
filterListQ = filterListQ
.Where(x =>
x.Name.Contains(filter.Text, StringComparison.OrdinalIgnoreCase) ||
(!string.IsNullOrWhiteSpace(x.Memo) && x.Memo.Contains(filter.Text, StringComparison.OrdinalIgnoreCase) == true) ||
x.FsId.ToString().Contains(filter.Text, StringComparison.OrdinalIgnoreCase)).AsQueryable();
// Show only prospect with missing StepIn Briefing
if (filter.WithoutStepInBriefing)
filterListQ = filterListQ.Where(x => x.Interactions.All(i => i.Type != InteractionType.StepInBriefing));
// Show only prospect with missing IdCheck
if (filter.WithoutIdCheck)
filterListQ = filterListQ.Where(x => x.Interactions.All(i => i.Type != InteractionType.IdCheck));
// Show only deleted prospects
if (filter.DeletedOnly)
filterListQ = filterListQ.Where(x => x.RecordState == RecordState.Archived);
// No Activity Filter
if (filter.NoActivity)
filterListQ = filterListQ.Where(x => DateTime.Now - x.Modified > TimeSpan.FromDays(180));
// Recent Activity Filter
if (filter.RecentActivity)
filterListQ = filterListQ.Where(x => DateTime.Now - x.Modified < TimeSpan.FromDays(180));
return filterListQ.ToList();
}
#endregion
}
}