/// <summary> /// 出库入库单行转换出库单行 /// </summary> /// <param name="purchaseLine"></param> /// <returns></returns> protected WPurchaseReturnLine ClonePurchaseLine(WPurchaseLine purchaseLine) { //如果通知数量-下推-完成<0 则返回 decimal inCount = purchaseLine.InCount - purchaseLine.ReturnCount; if (inCount <= 0) { return(null); } WPurchaseReturnLine line = new WPurchaseReturnLine() { Batch = purchaseLine.Batch, CreateDate = DateTime.Now, Factory = purchaseLine.Factory, OutCount = inCount, MaterialCode = purchaseLine.MaterialCode, MaterialID = purchaseLine.MaterialID, OwnerCode = purchaseLine.OwnerCode, UnitID = purchaseLine.UnitID, SourceLineID = purchaseLine.ID, PositionID = purchaseLine.PositionID, PositionCode = purchaseLine.PositionCode, OutPutCount = inCount }; return(line); }
/// <summary> /// 入库通知单行转换入库单行 /// </summary> /// <param name="inNoticeLine"></param> /// <returns></returns> protected WPurchaseLine CloneInNoticeLine(WPurchaseNoticeLine inNoticeLine) { //如果通知数量-下推-完成<0 则返回 decimal inCount = inNoticeLine.InCount - inNoticeLine.DownCount - inNoticeLine.CompleteCount; if (inCount <= 0) { return(null); } WPurchaseLine line = new WPurchaseLine() { Batch = inNoticeLine.Batch, CreateDate = DateTime.Now, Factory = inNoticeLine.Factory, InCount = inCount, InPutCount = inCount, MaterialCode = inNoticeLine.MaterialCode, MaterialID = inNoticeLine.MaterialID, OwnerCode = inNoticeLine.OwnerCode, UnitID = inNoticeLine.UnitID, SourceLineID = inNoticeLine.ID }; return(line); }
/// <summary> /// 构建通知单不足提示 /// </summary> /// <param name="stockOut"></param> /// <returns></returns> private string BuilderNoticeLessMessage(WPurchaseLine inNoticeLine) { StringBuilder sb = new StringBuilder("入库数量大于通知数量"); sb.AppendLine(",物料:" + inNoticeLine.MaterialCode); if (!string.IsNullOrWhiteSpace(inNoticeLine.Batch)) { sb.AppendLine(",批次:" + inNoticeLine.Batch); } if (!string.IsNullOrWhiteSpace(inNoticeLine.OwnerCode)) { sb.AppendLine(",货主:" + inNoticeLine.OwnerCode); } return(sb.ToString()); }
/// <summary> /// 构建库存不足提示 /// </summary> /// <param name="line"></param> /// <param name="msg">错误信息</param> /// <returns></returns> private string BuilderErrorMessage(WPurchaseLine line, string msg) { StringBuilder sb = new StringBuilder(msg); sb.AppendLine(",货位:" + line.PositionCode); sb.AppendLine(",物料:" + line.MaterialCode); if (!string.IsNullOrWhiteSpace(line.Batch)) { sb.AppendLine(",批次:" + line.Batch); } if (!string.IsNullOrWhiteSpace(line.OwnerCode)) { sb.AppendLine(",货主:" + line.OwnerCode); } return(sb.ToString()); }
/// <summary> /// 其他入库复制入口记录 /// </summary> /// <param name="line"></param> /// <param name="other"></param> /// <returns></returns> private WStockIn ClonePurchase(WPurchaseLine line, WPurchase purchase) { WStockIn stockIn = new WStockIn(); stockIn.Batch = line.Batch; stockIn.Factory = line.Factory; stockIn.InCount = line.InCount; stockIn.MaterialCode = line.MaterialCode; stockIn.MaterialID = line.MaterialID; stockIn.OwnerCode = line.OwnerCode; stockIn.PositionCode = line.PositionCode; stockIn.PositionID = line.PositionID; stockIn.SourceCode = purchase.PurchaseCode; stockIn.SourceID = line.ParentID; stockIn.SourceLineID = line.ID; stockIn.StockInDate = purchase.CreateDate; stockIn.StockInType = StockInEnum.Purchase; stockIn.UnitID = line.UnitID; stockIn.WarehouseCode = purchase.WarehouseCode; stockIn.WarehouseID = purchase.WarehouseID; stockIn.StockID = line.StockID; return(stockIn); }
/// <summary> /// 根据入库通知添加入库 /// </summary> /// <param name="inNotice"></param> /// <returns></returns> public ResultData <string> AddPurchase(WPurchaseNotice inNotice, int createBy) { ResultData <string> rData = new ResultData <string>(); if (inNotice.NoticeStatus == NoticeStatusEnum.Complete) { rData.status = -1; rData.message = "单据已完成不能下推."; return(rData); } //查询明细 if (inNotice.Lines.Count < 1) { inNotice.Lines = pnlRepository.GetLinesByParentId(inNotice.ID); } //克隆主表 WPurchase Purchase = CloneInNotice(inNotice); Purchase.CreateBy = createBy; //克隆子表 foreach (var item in inNotice.Lines) { WPurchaseLine line = CloneInNoticeLine(item); if (line != null) { Purchase.Lines.Add(line); } } if (Purchase.Lines.Count < 1) { rData.status = -1; rData.message = "单据已经全部下推."; return(rData); } DatabaseContext dbContext = pRepository.DbCondext; try { dbContext.BeginTransaction(); //添加入库单 Purchase.CreateDate = DateTime.Now; Purchase.StockStatus = StockStatusEnum.New; Purchase.PurchaseCode = nuRepository.GetNextNumber("CGRK"); pRepository.Insert(Purchase); foreach (var line in Purchase.Lines) { //插入入库明细 line.ParentID = Purchase.ID; line.CreateBy = Purchase.CreateBy; line.CreateDate = DateTime.Now; plRepository.Insert(line); //更新通知单 添加下推 decimal rt = pnlRepository.AddDownCount(line.InCount, line.SourceLineID); if (rt < 0) { dbContext.AbortTransaction(); rData.status = -1; rData.message = BuilderNoticeLessMessage(line); return(rData); } } //将插入主键赋值给返回值 rData.result = Purchase.ID.ToString(); //更新通知单状态 if (Purchase.SourceID > 0) { pnRepository.UpdateNoticeStatus(NoticeStatusEnum.Executing, Purchase.SourceID); } dbContext.CompleteTransaction(); } catch (Exception ex) { dbContext.AbortTransaction(); throw ex; } return(rData); }