70 lines
2.1 KiB
C#
70 lines
2.1 KiB
C#
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<Deduction> _allDeductions;
|
|
private readonly ObservableCollection<Deduction> _filteredDeductions;
|
|
private string _searchText = string.Empty;
|
|
private Deduction? _selectedDeduction;
|
|
|
|
public ObservableCollection<Deduction> FilteredDeductions => _filteredDeductions;
|
|
public Deduction? SelectedDeduction
|
|
{
|
|
get => _selectedDeduction;
|
|
set
|
|
{
|
|
_selectedDeduction = value;
|
|
OnPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public string SearchText
|
|
{
|
|
get => _searchText;
|
|
set
|
|
{
|
|
_searchText = value;
|
|
FilterDeductions();
|
|
OnPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public DeductionSearchDialogViewModel(ObservableCollection<Deduction> deductions)
|
|
{
|
|
_allDeductions = deductions;
|
|
_filteredDeductions = new ObservableCollection<Deduction>(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));
|
|
}
|