Added Slop
This commit is contained in:
119
ViewModels/AdditionsViewModel.cs
Normal file
119
ViewModels/AdditionsViewModel.cs
Normal file
@@ -0,0 +1,119 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user