Files
lagerprogramm/ViewModels/AdditionsViewModel.cs
joel.leirer fb1f90a9ca Added Slop
2026-08-25 17:14:54 +02:00

120 lines
3.3 KiB
C#

using System;
using System.Collections.ObjectModel;
using System.Linq;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Lagerprogramm.Models;
using Lagerprogramm.Services;
namespace Lagerprogramm.ViewModels;
public partial class AdditionsViewModel : ObservableObject
{
private readonly JsonDataService _dataService;
private readonly AppData _appData;
public AppData AppData => _appData;
[ObservableProperty]
private ObservableCollection<Addition> _additions = new();
[ObservableProperty]
private ObservableCollection<TransactionLine> _lines = new();
[ObservableProperty]
private DateTime _date = DateTime.Now;
[ObservableProperty]
private string _comment = string.Empty;
public ObservableCollection<string> PartNumbers { get; } = new();
public AdditionsViewModel(JsonDataService dataService, AppData appData)
{
_dataService = dataService;
_appData = appData;
RefreshPartNumbers();
foreach (var a in appData.Additions.OrderByDescending(a => a.Date))
Additions.Add(a);
Lines.Add(new TransactionLine());
}
[RelayCommand]
private void AddLine() => Lines.Add(new TransactionLine());
[RelayCommand]
private void RemoveLine(TransactionLine? line)
{
if (line is null) return;
Lines.Remove(line);
}
[RelayCommand]
private void SearchPart(TransactionLine? line)
{
}
[RelayCommand]
private void SearchAddition()
{
}
[RelayCommand]
private void Save()
{
if (Lines.Count == 0) return;
if (Lines.Any(l => string.IsNullOrWhiteSpace(l.PartInternalNumber) || l.Quantity <= 0))
return;
var addition = new Addition
{
Date = Date,
Comment = Comment.Trim(),
Lines = Lines.Select(l => new TransactionLine
{
PartInternalNumber = l.PartInternalNumber.Trim(),
Quantity = l.Quantity
}).ToList()
};
_appData.Additions.Add(addition);
Additions.Insert(0, addition);
foreach (var line in addition.Lines)
{
var part = _appData.Parts.FirstOrDefault(p => p.InternalPartNumber == line.PartInternalNumber);
if (part is not null)
part.StockQuantity += line.Quantity;
}
_dataService.Save(_appData);
Comment = string.Empty;
Date = DateTime.Now;
Lines.Clear();
Lines.Add(new TransactionLine());
RefreshPartNumbers();
}
[RelayCommand]
private void DeleteAddition(Addition? addition)
{
if (addition is null) return;
foreach (var line in addition.Lines)
{
var part = _appData.Parts.FirstOrDefault(p => p.InternalPartNumber == line.PartInternalNumber);
if (part is not null)
part.StockQuantity -= line.Quantity;
}
_appData.Additions.Remove(addition);
Additions.Remove(addition);
_dataService.Save(_appData);
RefreshPartNumbers();
}
private void RefreshPartNumbers()
{
PartNumbers.Clear();
foreach (var p in _appData.Parts.OrderBy(p => p.InternalPartNumber))
PartNumbers.Add(p.InternalPartNumber);
}
}