private async void ItemName_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter && ItemName.TextLength > 0) { inventoryItemBindingSource.DataSource = await InventoryManager.GetItemStockAsync(ItemName.Text); bindingSource1.DataSource = await InventoryManager.GetItemCheckInsAsync(ItemName.Text); bindingSource2.DataSource = await InventoryManager.GetItemCheckOutsAsync(ItemName.Text); Current.ClearSelection(); InventoryIn.ClearSelection(); InventoryOut.ClearSelection(); IsTime = true; } }
private async void Current_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Delete && e.Shift && Login.Role != "Operator") { DataGridViewRow row = Current.CurrentRow; if (row != null) { InventoryItem item = inventoryItemBindingSource.List[row.Index] as InventoryItem; InventoryManager.DeleteInventoryItem(item); MessageBox.Show($"{item.ItemName} was successfully deleted.", ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); inventoryItemBindingSource.DataSource = await InventoryManager.GetItemStockAsync(ItemName.Text); bindingSource1.DataSource = await InventoryManager.GetItemCheckInsAsync(ItemName.Text); bindingSource2.DataSource = await InventoryManager.GetItemCheckOutsAsync(ItemName.Text); Current.ClearSelection(); InventoryIn.ClearSelection(); InventoryOut.ClearSelection(); } } }
/// <summary> /// 自动计算 /// </summary> /// <param name="orderID">生产订单ID</param> /// <param name="Type">1,表示有配色,2表示无配色</param> /// <param name="currentUser">当前用户</param> /// <returns>计算是否成功</returns> public async Task <ResponseObject <MrpResultModel> > AutoComputeMRP(int orderID, int Type, CurrentUser currentUser) { try { TMMProductionOrderMainDbModel mainEntity = _db.Instance.Queryable <TMMProductionOrderMainDbModel>().Where(p => p.ID == orderID && p.CompanyId == currentUser.CompanyID && p.MRPStatus == false).First(); if (mainEntity == null) { return(ResponseUtil <MrpResultModel> .FailResult(null, "生产订单不存在,或MRP已经算过了不能重复计算")); } List <TBMMaterialFileCacheModel> MMaterialList = BasicCacheGet.GetMaterial(currentUser); _db.Instance.BeginTran(); var bomResult = await _iTMMProductionOrderMainService.CreateOrderBom(mainEntity.ID, currentUser); //生成BOM清单 if (!bomResult.Result) { throw new Exception(bomResult.ErrorInfo); } //数据字典 var tBMDictionary = _db.Instance.Queryable <TBMDictionaryDbModel>().Where(p => p.CompanyId == currentUser.CompanyID).ToList().ToDictionary(p => p.ID, p => p.DicValue); //仓库 var warehouseDic = _db.Instance.Queryable <TBMWarehouseFileDbModel>().Where(t => SqlFunc.IsNull(t.DeleteFlag, false) != true && t.CompanyId == currentUser.CompanyID).ToList().ToDictionary(p => p.ID, p => new { Name = p.WarehouseName, Code = p.Code }); List <InventoryResultModel> result = new List <InventoryResultModel>(); //其他出入库 var otherCount = _db.Instance.Queryable <TWMOtherCountDbModel>(). Select(p => new InAndOutModel() { MaterialId = p.MaterialId, WarehouseId = p.WarehouseId, WhNumber = p.WhNumber, WhSendNumber = p.WhSendNumber }); //盘亏盘盈出入库 var pCount = _db.Instance.Queryable <TWMProfitDeficitCountDbModel>(). Select(p => new InAndOutModel() { MaterialId = p.MaterialId, WarehouseId = p.WarehouseId, WhNumber = p.WhNumber, WhSendNumber = p.WhSendNumber }); //销售出入库 var SaleCount = _db.Instance.Queryable <TWMSalesCountDbModel>(). Select(p => new InAndOutModel() { MaterialId = p.MaterialId, WarehouseId = p.WarehouseId, WhNumber = p.WhNumber, WhSendNumber = p.WhSendNumber }); //采购出入库 var PurchaseCount = _db.Instance.Queryable <TWMPurchaseCountDbModel>(). Select(p => new InAndOutModel() { MaterialId = p.MaterialId, WarehouseId = p.WarehouseId, WhNumber = p.WhNumber, WhSendNumber = p.WhSendNumber }); //生产出入库 var ProductCount = _db.Instance.Queryable <TWMProductionCountDbModel>(). Select(p => new InAndOutModel() { MaterialId = p.MaterialId, WarehouseId = p.WarehouseId, WhNumber = p.WhNumber, WhSendNumber = p.WhSendNumber }); //出入库数量 var allCount = _db.Instance.UnionAll(otherCount, pCount, SaleCount, PurchaseCount, ProductCount).GroupBy(p => new { p.MaterialId }). Select(p => new TradeInventoryModel() { TradeNumber = SqlFunc.AggregateSum(p.WhNumber) - SqlFunc.AggregateSum(p.WhSendNumber), MaterialId = p.MaterialId, }).AS("t100"); var materialFileQuery = _db.Instance.Queryable <TMMProductionOrderBOMSumDbModel>().Where(p => p.ProOrderId == orderID); var ts = _db.Instance.Queryable(materialFileQuery, allCount, JoinType.Inner, (p1, p2) => p1.MaterialId == p2.MaterialId).Select((p1, p2) => new InventoryOut { MaterialId = p2.MaterialId, Amount = p2.TradeNumber }); //销售单 所有物料的出入库数量 var tsout1 = ts.ToList(); var tsOut = tsout1.GroupBy(p => p.MaterialId).Select(p => new InventoryOut() { MaterialId = p.Key, Amount = p.Sum(m => m.Amount) }).ToList(); #region 待出库数量 //其他待出库 var otherToOut = _db.Instance.Queryable <TWMOtherWhSendMainDbModel, TWMOtherWhSendDetailDbModel>((t1, t2) => new object[] { JoinType.Inner, t1.ID == t2.MainId }).Where((t1, t2) => t1.AuditStatus != 2 && t1.DeleteFlag == false).Select((t1, t2) => new InventoryOut { MaterialId = t2.MaterialId, Amount = t2.ActualNumber }); //盘亏出库 var deficitToOut = _db.Instance.Queryable <TWMDeficitMainDbModel, TWMDeficitDetailDbModel>((t1, t2) => new object[] { JoinType.Inner, t1.ID == t2.MainId }).Where((t1, t2) => t1.AuditStatus != 2 && t1.DeleteFlag == false).Select((t1, t2) => new InventoryOut { MaterialId = t2.MaterialId, Amount = t2.ActualNumber }); //销售出库 var saleToOut = _db.Instance.Queryable <TWMSalesMainDbModel, TWMSalesDetailDbModel>((t1, t2) => new object[] { JoinType.Inner, t1.ID == t2.MainId }).Where((t1, t2) => t1.AuditStatus != 2 && t1.DeleteFlag == false).Select((t1, t2) => new InventoryOut { MaterialId = t2.MaterialId, Amount = t2.ActualNum }); //生产待出库 var productToOut = _db.Instance.Queryable <TWMProductionMainDbModel, TWMProductionDetailDbModel>((t1, t2) => new object[] { JoinType.Inner, t1.ID == t2.MainId }).Where((t1, t2) => t1.AuditStatus != 2 && t1.DeleteFlag == false).Select((t1, t2) => new InventoryOut { MaterialId = t2.MaterialId, Amount = t2.ActualNum }); var allToOut = _db.Instance.UnionAll(otherToOut, deficitToOut, saleToOut, productToOut).AS("t101"); var materialFileQuery1 = _db.Instance.Queryable <TMMProductionOrderBOMSumDbModel>().Where(p => p.ProOrderId == orderID); var tsToOut = _db.Instance.Queryable(materialFileQuery1, allToOut, JoinType.Inner, (p1, p2) => p1.ID == p2.MaterialId).Select((p1, p2) => new InventoryOut { MaterialId = p2.MaterialId, Amount = p2.Amount }); //销售单所有物料的待出库数量 var tsToOutSum = tsToOut.ToList().GroupBy(p => p.MaterialId).Select(p => new InventoryOut() { MaterialId = p.Key, Amount = p.Sum(m => m.Amount) }).ToList(); #endregion //期初 List <InventoryOut> prime = _db.Instance.Queryable <TMMProductionOrderBOMSumDbModel, TWMPrimeCountDbModel>((t, t1) => new object[] { JoinType.Inner, t.MaterialId == t1.MaterialId }).Select((t, t1) => t1).Distinct().ToList().GroupBy(p => p.MaterialId).Select(p => new InventoryOut() { MaterialId = p.Key, Amount = p.Sum(m => m.PrimeNum) }).ToList();; var Allmaterial = _db.Instance.Queryable <TMMProductionOrderBOMSumDbModel>().Where(p => p.ProOrderId == orderID).ToList(); Dictionary <int, string> colorSolution = _db.Instance.Queryable <TMMColorSolutionMainDbModel, TBMPackageDbModel>((t1, t2) => new object[] { JoinType.Inner, t1.PackageId == t2.ID }). Where((t1, t2) => t2.CompanyId == currentUser.CompanyID).ToList().ToDictionary(p => p.ID, p => p.SolutionCode); List <int> colorIDS = colorSolution.Keys.ToList(); //生产订单的所有物料 List <TMMProductionOrderBOMSumDbModel> sumList = _db.Instance.Queryable <TMMProductionOrderBOMSumDbModel>().Where(p => p.ProOrderId == orderID).ToList(); foreach (var item in sumList) { decimal primeAmount = 0; //期初数量 decimal TradeNumber = 0; //出入库数量 decimal toOutAmount = 0; //待出数量 TBMMaterialFileCacheModel materialFile = MMaterialList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); if (materialFile == null) { throw new Exception($"物料ID:{item.MaterialId},不存在"); } InventoryOut primeEntity = prime.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault(); if (primeEntity != null) { primeAmount = primeEntity.Amount; } InventoryOut tradeEntity = tsOut.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault(); if (tradeEntity != null) { TradeNumber = tradeEntity.Amount; } InventoryOut toOutEntity = tsToOutSum.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault(); if (toOutEntity != null) { toOutAmount = toOutEntity.Amount; } decimal avaibleAmountUnit = primeAmount + TradeNumber - toOutAmount; //仓库数量 decimal avaibleAmount = UnitChange.TranserUnit(materialFile, UnitType.Warehouse, UnitType.Produce, avaibleAmountUnit); //生产数量 if (avaibleAmount >= item.TotalValue) { item.PurchaseNum = 0; item.PickNum = item.TotalValue; } else { if (avaibleAmount < 0) { avaibleAmount = 0; } item.PurchaseNum = item.TotalValue - avaibleAmount; item.PickNum = avaibleAmount; } item.PurchaseTransNum = 0; item.PickTransNum = 0; } if (sumList.Count() > 0) { _db.Instance.Updateable(sumList).ExecuteCommand(); } mainEntity.MRPStatus = true; mainEntity.MRPTime = DateTime.Now; _db.Instance.Updateable(mainEntity).UpdateColumns(p => new { p.MRPStatus, p.MRPTime }).ExecuteCommand(); _db.Instance.CommitTran(); MrpResultModel bomList; if (Type == 1) { bomList = GetProcuctBomByOrderID(orderID, currentUser); } else { bomList = GetProcuctBomByOrderID(orderID, currentUser); } return(ResponseUtil <MrpResultModel> .SuccessResult(bomList)); } catch (Exception ex) { _db.Instance.RollbackTran(); return(ResponseUtil <MrpResultModel> .FailResult(null, ex.Message)); } }