/// <summary> /// 入库通知单行转换入库单行 /// </summary> /// <param name="outNoticeLine"></param> /// <returns></returns> protected WSellReturnLine CloneInNoticeLine(WSellLine outNoticeLine) { //如果通知数量-下推-完成<0 则返回 decimal outCount = outNoticeLine.OutCount - outNoticeLine.ReturnCount; if (outCount <= 0) { return(null); } WSellReturnLine line = new WSellReturnLine() { Batch = outNoticeLine.Batch, CreateDate = DateTime.Now, Factory = outNoticeLine.Factory, InCount = outCount, MaterialCode = outNoticeLine.MaterialCode, MaterialID = outNoticeLine.MaterialID, OwnerCode = outNoticeLine.OwnerCode, UnitID = outNoticeLine.UnitID, SourceLineID = outNoticeLine.ID, PositionID = outNoticeLine.PositionID, PositionCode = outNoticeLine.PositionCode, InPutCount = outCount }; return(line); }
/// <summary> /// 出库通知单行转换出库单行 /// </summary> /// <param name="outNoticeLine"></param> /// <returns></returns> protected WSellLine CloneOutNoticeLine(WSellNoticeLine outNoticeLine) { //如果通知数量-下推-完成<0 则返回 decimal outCount = outNoticeLine.OutCount - outNoticeLine.DownCount - outNoticeLine.CompleteCount; if (outCount <= 0) { return(null); } WSellLine line = new WSellLine() { Batch = outNoticeLine.Batch, CreateDate = DateTime.Now, Factory = outNoticeLine.Factory, OutCount = outCount, OutPutCount = outCount, MaterialCode = outNoticeLine.MaterialCode, MaterialID = outNoticeLine.MaterialID, OwnerCode = outNoticeLine.OwnerCode, UnitID = outNoticeLine.UnitID, SourceLineID = outNoticeLine.ID }; return(line); }
/// <summary> /// 构建通知单不足提示 /// </summary> /// <param name="stockOut"></param> /// <returns></returns> private string BuilderNoticeLessMessage(WSellLine 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(WSellLine 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 CloneSell(WSellLine line, WSell Sell) { 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 = Sell.SellCode; stockOut.SourceID = line.ParentID; stockOut.SourceLineID = line.ID; stockOut.StockInDate = Sell.CreateDate; stockOut.StockOutType = StockOutEnum.Sell; stockOut.UnitID = line.UnitID; stockOut.WarehouseCode = Sell.WarehouseCode; stockOut.WarehouseID = Sell.WarehouseID; stockOut.StockID = line.StockID; return(stockOut); }
/// <summary> /// 根据通知单生成出库单 /// </summary> /// <param name="outNotice"></param> /// <returns></returns> public ResultData <string> AddSell(WSellNotice outNotice, int createBy) { ResultData <string> rData = new ResultData <string>(); if (outNotice.NoticeStatus == NoticeStatusEnum.Complete) { rData.status = -1; rData.message = "单据已完成不能下推."; return(rData); } //查询明细 if (outNotice.Lines.Count < 1) { outNotice.Lines = snlRepository.GetLinesByParentId(outNotice.ID); } //克隆主表 WSell sell = CloneOutNotice(outNotice); sell.CreateBy = createBy; //克隆子表 foreach (var item in outNotice.Lines) { WSellLine line = CloneOutNoticeLine(item); if (line != null) { sell.Lines.Add(line); } } if (sell.Lines.Count < 1) { rData.status = -1; rData.message = "单据已经全部下推."; return(rData); } DatabaseContext dbContext = sRepository.DbCondext; try { dbContext.BeginTransaction(); //添加出库单 sell.CreateDate = DateTime.Now; sell.StockStatus = StockStatusEnum.New; sell.SellCode = nuRepository.GetNextNumber("XSCK"); sRepository.Insert(sell); foreach (var line in sell.Lines) { //插入出库明细 line.ParentID = sell.ID; line.CreateBy = sell.CreateBy; line.CreateDate = DateTime.Now; line.Batch = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch; slRepository.Insert(line); //更新通知单 添加下推 decimal rt = snlRepository.AddDownCount(line.OutCount, line.SourceLineID); if (rt < 0) { dbContext.AbortTransaction(); rData.status = -1; rData.message = BuilderNoticeLessMessage(line); return(rData); } } //将插入主键赋值给返回值 rData.result = sell.ID.ToString(); //更新通知单状态 if (sell.SourceID > 0) { snRepository.UpdateNoticeStatus(NoticeStatusEnum.Executing, sell.SourceID); } dbContext.CompleteTransaction(); } catch (Exception ex) { dbContext.AbortTransaction(); throw ex; } return(rData); }