using HandyControl.Controls; using Ping9719.WpfEx.Mvvm; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; using WCS.BLL.DbModels; using WCS.Model; using WCS.Model.ApiModel.Home; using WCS.Model.ApiModel.MatInventoryDetail; using 智能仓储WCS管理系统.Api; namespace 智能仓储WCS管理系统.ViewModels { public class OutInventoryAddDucumentViewModel : BindableBase { #region Property private ObservableCollection dataGridItemSource; public ObservableCollection DataGridItemSource { get { return dataGridItemSource; } set { SetProperty(ref dataGridItemSource, value); } } private MatInventorySummaryModel selectedItemSource; public MatInventorySummaryModel SelectedItemSource { get { return selectedItemSource; } set { SetProperty(ref selectedItemSource, value); } } private List shelfTypeItems; public List ShelfTypeItems { get { return shelfTypeItems; } set { SetProperty(ref shelfTypeItems, value); } } public void InitShelfTypeItems() { //调用接口更新! Task.Run(() => { var body = new RequestBase() { UserName = LocalStatic.CurrentUser, DeviceType = LocalFile.Config.DeviceType, }; var Result = ApiHelp.GetDataFromHttp>(LocalFile.Config.ApiIpHost + "home/getShelfTypes", body, "POST"); if (Result != null && Result.Data != null && Result.Data.Lists.Count() > 0) { ShelfTypeItems = Result.Data.Lists; SelectedShelfTypeItem = Result.Data.Lists.First(); } }); } private ShelfTypeModel selectedShelfTypeItem; public ShelfTypeModel SelectedShelfTypeItem { get { return selectedShelfTypeItem; } set { SetProperty(ref selectedShelfTypeItem, value); } } private int selectedTypeCount = 0; public int SelectedTypeCount { get => selectedTypeCount; set { SetProperty(ref selectedTypeCount, value); if (selectedTypeCount == 0) { ShelfTypeIsEnabled = true; } else { ShelfTypeIsEnabled = false; } } } private bool shelfTypeIsEnabled = true; public bool ShelfTypeIsEnabled { get => shelfTypeIsEnabled; set { SetProperty(ref shelfTypeIsEnabled, value); } } #endregion #region Command /// /// 新增物料 /// public ICommand BtnAddCommand { get => new DelegateCommand(BtnAdd); } public void BtnAdd() { if (SelectedShelfTypeItem == null) { HandyControl.Controls.MessageBox.Show("请选择货架类型!"); } var window = new OutInventoryAddMatView(SelectedShelfTypeItem.Id); window.Owner = Application.Current.MainWindow; window.Topmost = true; var result = window.ShowDialog(); if (result == true) { if (DataGridItemSource == null) DataGridItemSource = new ObservableCollection(); DataGridItemSource.Add(window.inventorySummary); SelectedTypeCount = DataGridItemSource.Count; } else { return; } } public ICommand DelCommand { get => new DelegateCommand(Del); } public void Del(MatInventorySummaryModel obj) { try { DataGridItemSource.Remove(obj); SelectedTypeCount = DataGridItemSource.Count; } catch (Exception ex) { Growl.Info(ex.Message); Logs.Write($"删除物料时发生异常", LogsType.Err); } } // 定义一个事件,当需要关闭窗口时触发 public event Action TrueClose; public event Action FalseClose; // 一个方法,当满足某些条件时调用,以触发关闭窗口 protected virtual void OnRequestClose(bool IsTrue) { if (IsTrue) TrueClose?.Invoke(); else FalseClose?.Invoke(); } public ICommand GenerateOutOrderCommand { get => new DelegateCommand(GenerateOutOrder); } public void GenerateOutOrder() { //数据校验 if (DataGridItemSource == null || DataGridItemSource.Count == 0) { HandyControl.Controls.MessageBox.Show("选择的物料为空无法生成出库单!"); return; } foreach (var itemSource in DataGridItemSource) { if (itemSource.NeedQty == 0) { Growl.Warning("需求数量未填!"); SelectedItemSource = itemSource; return; } //问一下此处是否要做限制 TO DO 物料分类(Group By)的规则 分到哪一类 //else if (itemSource.NeedQty > itemSource.TotalQty) //{ // Growl.Warning("需求数量大于库存数量!"); // SelectedItemSource = itemSource; // return; //} } #region 调用接口生成出库单据 try { var body = new SysOutOrderByMatCodeRequest() { OrderType = "出库", OrderSource = "WCS前端", ShelfTypeId = SelectedShelfTypeItem.Id, ShelfTypeName = SelectedShelfTypeItem.ShelfTypeName, ItemList = DataGridItemSource.Select(t => new MatCodeItemList() { MatCode = t.MatCode, MatName = t.MatName, MatBatch = t.MatBatch, ReqQty = t.NeedQty, }).ToList(), DeviceType = LocalFile.Config.DeviceType, UserName = LocalStatic.CurrentUser }; var Result = ApiHelp.GetDataFromHttp(LocalFile.Config.ApiIpHost + "outstore/sysOutOrderByMatCode", body, "POST"); if (Result != null && Result.Code == 200) { Growl.Success(Result.Message); OnRequestClose(true); } else if (Result != null) { Growl.Warning(Result.Message); return; } } catch (Exception ex) { Growl.Error("加载数据失败:" + ex.Message); } finally { } #endregion } #endregion } }