109 lines
3.7 KiB
C#

using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using Avalonia.Controls.Notifications;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using Seyounth.Hyosung.Data.Models;
using Seyounth.Hyosung.Data.Services;
using SukiUI.Toasts;
namespace Seyounth.Hyosung.Ava.ViewModels;
public partial class VarietyManagerViewModel : ObservableObject
{
[ObservableProperty] private ObservableCollection<Variety> _varieties;
[ObservableProperty] private ObservableCollection<Pallet> _pallets;
[ObservableProperty] private ObservableCollection<Pallet> _honeyPallets = new();
[ObservableProperty] private ObservableCollection<Pallet> _paperPallets = new();
[ObservableProperty] private ObservableCollection<Pallet> _trays = new();
private readonly ISukiToastManager _toastManager;
private readonly IVarietyService _varietyService;
private readonly IPalletService _palletService;
public void Reload()
{
Pallets = new ObservableCollection<Pallet>(_palletService.GetPallets());
HoneyPallets = new ObservableCollection<Pallet>(Pallets.Where(p => p.Type == PalletType.Honey));
var papers = Pallets.Where(p => p.Type == PalletType.Paper).ToList();
papers.Add(new Pallet());
papers = papers.OrderBy(p => p.Length).ToList();
PaperPallets = new ObservableCollection<Pallet>(papers);
Trays = new ObservableCollection<Pallet>(Pallets.Where(p =>
p.Type is PalletType.Plywood or PalletType.Wood));
var varieties = _varietyService.GetAll().Select(v =>
{
// 匹配相同ID的托盘对象
v.TopAndBottomPallet = HoneyPallets.FirstOrDefault(p => p.Id == v.TopAndBottomPallet.Id);
v.MiddlePallet = HoneyPallets.FirstOrDefault(p => p.Id == v.MiddlePallet.Id);
v.Tray = Trays.FirstOrDefault(p => p.Id == v.Tray.Id);
v.PaperTray = v.PaperTray is null
? PaperPallets.First()
: PaperPallets.FirstOrDefault(p =>
p.Id == v.PaperTray.Id);
return v;
});
Varieties = new ObservableCollection<Variety>(varieties);
}
public VarietyManagerViewModel(IVarietyService varietyService, ISukiToastManager toastManager,
IPalletService palletService)
{
_toastManager = toastManager;
_palletService = palletService;
_varietyService = varietyService;
Reload();
}
[RelayCommand]
private void AddNewRow()
{
Varieties.Add(new Variety());
}
[RelayCommand]
private void OnDeletePallet(object obj)
{
if (obj is Variety variety)
{
Varieties.Remove(variety);
_varietyService.DeleteVarietyAsync(variety);
_toastManager.CreateToast()
.WithTitle("删除成功")
.Dismiss().After(TimeSpan.FromSeconds(3))
.OfType(NotificationType.Success)
.Dismiss().ByClicking()
.Queue();
}
else
{
Console.Write("Object is not a Pallet");
}
}
[RelayCommand]
private async Task OnSavePallet(object obj)
{
if (obj is Variety variety)
{
await _varietyService.AddVarietyAsync(variety);
_toastManager.CreateToast()
.WithTitle("保存成功")
.Dismiss().After(TimeSpan.FromSeconds(3))
.OfType(NotificationType.Success)
.Dismiss().ByClicking()
.Queue();
//Pallets = new ObservableCollection<Pallet>(_palletService.GetPallets());
}
}
}