using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using Lagerprogramm.Models; namespace Lagerprogramm.ViewModels; public class DeductionSearchDialogViewModel : INotifyPropertyChanged { private readonly ObservableCollection _allDeductions; private readonly ObservableCollection _filteredDeductions; private string _searchText = string.Empty; private Deduction? _selectedDeduction; public ObservableCollection FilteredDeductions => _filteredDeductions; public Deduction? SelectedDeduction { get => _selectedDeduction; set { _selectedDeduction = value; OnPropertyChanged(); } } public string SearchText { get => _searchText; set { _searchText = value; FilterDeductions(); OnPropertyChanged(); } } public DeductionSearchDialogViewModel(ObservableCollection deductions) { _allDeductions = deductions; _filteredDeductions = new ObservableCollection(deductions); } private void FilterDeductions() { _filteredDeductions.Clear(); if (string.IsNullOrWhiteSpace(SearchText)) { foreach (var d in _allDeductions) _filteredDeductions.Add(d); return; } var query = SearchText.ToLower(); var matches = _allDeductions.Where(d => d.Customer.ToLower().Contains(query) || d.Comment.ToLower().Contains(query) || d.Date.ToString("yyyy-MM-dd").Contains(query) || d.Lines.Any(l => l.PartInternalNumber.ToLower().Contains(query)) ).ToList(); foreach (var d in matches) _filteredDeductions.Add(d); } public event PropertyChangedEventHandler? PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string? name = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); }