You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
3.5 KiB

using BBWYB.Client.APIServices;
using BBWYB.Client.Models;
using BBWYB.Client.Views.Order;
using BBWYB.Client.Views.Purchase;
using BBWYB.Common.Extensions;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace BBWYB.Client.ViewModels
{
public class ChoosePurchaseSchemeViewModel : BaseVM
{
private PurchaseService purchaseService;
private GlobalContext globalContext;
private Order order;
private bool freeChoice;
private bool isResponse;
public IList<PurchaseSchemeSkuGroup> SkuGroup { get; set; }
public ICommand ConfirmCommand { get; set; }
public bool FreeChoice { get => freeChoice; set { SetProperty(ref freeChoice, value); } }
public ChoosePurchaseSchemeViewModel(PurchaseService purchaseService, GlobalContext globalContext)
{
this.purchaseService = purchaseService;
this.globalContext = globalContext;
this.SkuGroup = new ObservableCollection<PurchaseSchemeSkuGroup>();
ConfirmCommand = new RelayCommand(Confirm);
}
protected override void Load()
{
Task.Factory.StartNew(() => LoadScheme());
}
public void SetData(Order order)
{
this.order = order;
}
private void LoadScheme()
{
var skuIdList = order.ItemList.Select(osku => osku.SkuId).ToList();
var response = purchaseService.GetPurchaseSchemeList(skuIdList, shopId: globalContext.User.Shop.ShopId);
if (!response.Success)
{
App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "提示"));
return;
}
if (response.Data == null || response.Data.Count() == 0)
return;
var groups = response.Data.GroupBy(s => s.SkuId);
App.Current.Dispatcher.Invoke(() =>
{
foreach (var g in groups)
{
var skuGroup = new PurchaseSchemeSkuGroup()
{
SkuId = g.Key,
SchemeList = g.Select(p => PurchaseScheme.Convert(p)).ToList()
};
skuGroup.OnSchemeChanged = OnSchemeChanged;
SkuGroup.Add(skuGroup);
}
});
}
private void Confirm()
{
if (SkuGroup.Any(s => s.SelectedScheme == null))
{
App.Current.Dispatcher.Invoke(() => MessageBox.Show("采购方案选择不完整", "提示"));
return;
}
var schemeList = new List<PurchaseScheme>();
foreach (var g in SkuGroup)
{
schemeList.Add(g.SelectedScheme);
}
var p = new OnlinePurchase(order, schemeList);
p.ShowDialog();
// GalaSoft.MvvmLight.Messaging.Messenger.Default.Send<object>(null, "ChoosePurchaseScheme_Close");
WeakReferenceMessenger.Default.Send(new Message_ChoosePurchaseSchemeClose(null));
}
private void OnSchemeChanged(PurchaseSchemeSkuGroup skuGroup)
{
if (FreeChoice)
return;
isResponse = false;
isResponse = true;
}
}
}