120 lines
3.3 KiB
C#
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);
|
|
}
|
|
}
|