Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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));
            }
        }