/// <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="returnLine"></param> /// <returns></returns> private string BuilderNoticeLessMessage(WPurchaseReturnLine returnLine) { StringBuilder sb = new StringBuilder("出库数量大于入库数量"); sb.AppendLine(",物料:" + returnLine.MaterialCode); if (!string.IsNullOrWhiteSpace(returnLine.Batch)) { sb.AppendLine(",批次:" + returnLine.Batch); } if (!string.IsNullOrWhiteSpace(returnLine.OwnerCode)) { sb.AppendLine(",货主:" + returnLine.OwnerCode); } return(sb.ToString()); }
/// <summary> /// 构建库存不足提示 /// </summary> /// <param name="line"></param> /// <param name="msg">错误信息</param> /// <returns></returns> private string BuilderErrorMessage(WPurchaseReturnLine 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 WStockOut ClonePurchaseReturn(WPurchaseReturnLine line, WPurchaseReturn purReturn) { WStockOut stockOut = new WStockOut(); stockOut.Batch = line.Batch; stockOut.Factory = line.Factory; stockOut.OutCount = line.OutCount; stockOut.MaterialCode = line.MaterialCode; stockOut.MaterialID = line.MaterialID; stockOut.OwnerCode = line.OwnerCode; stockOut.PositionCode = line.PositionCode; stockOut.PositionID = line.PositionID; stockOut.SourceCode = purReturn.PurchaseReturnCode; stockOut.SourceID = line.ParentID; stockOut.SourceLineID = line.ID; stockOut.StockInDate = purReturn.CreateDate; stockOut.StockOutType = StockOutEnum.PurchaseReturn; stockOut.UnitID = line.UnitID; stockOut.WarehouseCode = purReturn.WarehouseCode; stockOut.WarehouseID = purReturn.WarehouseID; stockOut.StockID = line.StockID; return(stockOut); }
/// <summary> /// 根据入库单下推出库单 /// </summary> /// <param name="purchase"></param> /// <returns></returns> public ResultData <string> AddPurchaseReturn(WPurchase purchase, int createBy) { ResultData <string> rData = new ResultData <string>(); if (purchase.StockStatus != StockStatusEnum.Approve) { rData.status = -1; rData.message = "单据未审核不能退库."; return(rData); } //查询明细 if (purchase.Lines.Count < 1) { purchase.Lines = plRepository.GetLinesByParentId(purchase.ID); } //克隆主表 WPurchaseReturn purReturn = ClonePuchase(purchase); purReturn.CreateBy = createBy; //克隆子表 foreach (var item in purchase.Lines) { WPurchaseReturnLine line = ClonePurchaseLine(item); if (line != null) { purReturn.Lines.Add(line); } } if (purReturn.Lines.Count < 1) { rData.status = -1; rData.message = "单据已经全部退库."; return(rData); } DatabaseContext dbContext = pRepository.DbCondext; try { dbContext.BeginTransaction(); //添加入库单 purReturn.CreateDate = DateTime.Now; purReturn.StockStatus = StockStatusEnum.New; purReturn.PurchaseReturnCode = nuRepository.GetNextNumber("CGTK"); prRepository.Insert(purReturn); foreach (var line in purReturn.Lines) { //插入入库明细 line.ParentID = purReturn.ID; line.CreateBy = purReturn.CreateBy; line.CreateDate = DateTime.Now; line.Batch = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch; prlRepository.Insert(line); //更新入库单 添加退库 decimal rt = plRepository.AddReturnCount(line.OutCount, line.SourceLineID); if (rt < 0) { dbContext.AbortTransaction(); rData.status = -1; rData.message = BuilderNoticeLessMessage(line); return(rData); } } //将插入主键赋值给返回值 rData.result = purReturn.ID.ToString(); dbContext.CompleteTransaction(); } catch (Exception ex) { dbContext.AbortTransaction(); throw ex; } return(rData); }