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.

156 lines
5.1 KiB

2 years ago
using BBWYB.Client.APIServices;
using BBWYB.Client.Models;
2 years ago
using BBWYB.Client.Views.Order;
using BBWYB.Client.Views.Purchase;
2 years ago
using BBWYB.Common.Extensions;
using BBWYB.Common.Models;
2 years ago
using CommunityToolkit.Mvvm.Input;
2 years ago
using CommunityToolkit.Mvvm.Messaging;
2 years ago
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
{
2 years ago
public class ChoosePurchaseSchemeViewModel : BaseVM
2 years ago
{
private PurchaseService purchaseService;
private GlobalContext globalContext;
private Order order;
2 years ago
private bool freeChoice;
2 years ago
private bool isResponse = true;
private bool isLoading;
2 years ago
2 years ago
public IList<PurchaseSchemeSkuGroup> SkuGroup { get; set; }
2 years ago
2 years ago
public ICommand ConfirmCommand { get; set; }
public ICommand RefreshCommand { get; set; }
2 years ago
public bool FreeChoice { get => freeChoice; set { SetProperty(ref freeChoice, value); } }
2 years ago
public bool IsLoading { get => isLoading; set { SetProperty(ref isLoading, value); } }
2 years ago
public ChoosePurchaseSchemeViewModel(PurchaseService purchaseService, GlobalContext globalContext)
{
this.purchaseService = purchaseService;
this.globalContext = globalContext;
2 years ago
this.SkuGroup = new ObservableCollection<PurchaseSchemeSkuGroup>();
ConfirmCommand = new RelayCommand(Confirm);
RefreshCommand = new RelayCommand(Refresh);
2 years ago
}
protected override void Load()
{
IsLoading = true;
2 years ago
Task.Factory.StartNew(() => LoadScheme());
2 years ago
}
public void SetData(Order order)
{
this.order = order;
}
2 years ago
private void LoadScheme()
2 years ago
{
var skuIdList = order.ItemList.Select(osku => osku.SkuId).ToList();
2 years ago
var response = purchaseService.GetPurchaseSchemeList(skuIdList, shopId: globalContext.User.Shop.ShopId);
LoadScheme(response);
}
private void LoadScheme(ApiResponse<IList<PurchaseSchemeResponse>> response)
{
IsLoading = false;
2 years ago
if (!response.Success)
2 years ago
{
2 years ago
App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "提示"));
2 years ago
return;
}
2 years ago
if (response.Data == null || response.Data.Count() == 0)
return;
var groups = response.Data.GroupBy(s => s.SkuId);
App.Current.Dispatcher.Invoke(() =>
2 years ago
{
2 years ago
foreach (var g in groups)
2 years ago
{
2 years ago
var skuGroup = new PurchaseSchemeSkuGroup()
{
SkuId = g.Key,
SchemeList = g.Select(p => PurchaseScheme.Convert(p)).ToList()
};
skuGroup.OnSchemeChanged = OnSchemeChanged;
SkuGroup.Add(skuGroup);
}
});
2 years ago
}
2 years ago
private void Confirm()
2 years ago
{
2 years ago
if (SkuGroup.Any(s => s.SelectedScheme == null))
2 years ago
{
2 years ago
App.Current.Dispatcher.Invoke(() => MessageBox.Show("采购方案选择不完整", "提示"));
2 years ago
return;
}
2 years ago
var schemeList = new List<PurchaseScheme>();
foreach (var g in SkuGroup)
{
schemeList.Add(g.SelectedScheme);
}
var p = new OnlinePurchase(order, schemeList);
2 years ago
p.ShowDialog();
2 years ago
// GalaSoft.MvvmLight.Messaging.Messenger.Default.Send<object>(null, "ChoosePurchaseScheme_Close");
WeakReferenceMessenger.Default.Send(new Message_ChoosePurchaseSchemeClose(null));
2 years ago
}
private void OnSchemeChanged(PurchaseSchemeSkuGroup skuGroup)
{
2 years ago
if (FreeChoice)
return;
2 years ago
if (!isResponse)
return;
2 years ago
isResponse = false;
2 years ago
//var purchaserId = skuGroup.SelectedScheme.PurchaserId;
2 years ago
2 years ago
//foreach (var otherSkuGroup in SkuGroup)
//{
// if (otherSkuGroup.SkuId == skuGroup.SkuId)
// continue;
2 years ago
2 years ago
// var samePurchaseScheme = otherSkuGroup.SchemeList.FirstOrDefault(s => s.PurchaserId == purchaserId);
// if (samePurchaseScheme != null)
// otherSkuGroup.SelectedScheme = samePurchaseScheme;
//}
2 years ago
isResponse = true;
2 years ago
}
public override void Refresh()
{
if (SkuGroup.Count() == 0)
return;
IsLoading = true;
var schemeIdList = new List<long>();
foreach (var group in SkuGroup)
{
schemeIdList.AddRange(group.SchemeList.Select(s => s.Id));
group.SchemeList.Clear();
}
SkuGroup.Clear();
Task.Factory.StartNew(() => purchaseService.RefreshPurchaseScheme(schemeIdList)).ContinueWith(t =>
{
var response = t.Result;
LoadScheme(response);
});
}
2 years ago
}
}