/// <summary> /// 检查 /// </summary> /// <param name="transferIn"></param> /// <returns></returns> private ResultData <string> CheckValid(WTransferIn transferIn) { ResultData <string> rt = new ResultData <string>(); if (transferIn.WarehouseID < 0) { rt.status = -1; rt.message = "仓库不能为空"; return(rt); } foreach (var item in transferIn.Lines) { //删除行,不验证 if (item.CURD == CurdEnum.Delete) { continue; } if (item.PositionID < 1) { rt.status = -1; rt.message = BuilderErrorMessage(item, "货位不能为空"); break; } else if (item.InCount <= 0) { rt.status = -1; rt.message = BuilderErrorMessage(item, "入库数量必须大于0"); break; } } return(rt); }
public ActionResult Approve() { ResultData <string> rt = new ResultData <string>(); WTransferIn otherIn = GetParam <WTransferIn>("app"); otherIn.UpdateBy = this.CurrentUser.ID; rt = inService.ApproveOtherIn(otherIn); return(ReturnResult(rt)); }
/// <summary> /// 审核 /// </summary> /// <param name="transferIn"></param> /// <returns></returns> public ResultData <string> ApproveOtherIn(WTransferIn transferIn) { ResultData <string> rData = new ResultData <string>(); if (transferIn.Lines.Count < 1) { transferIn.Lines = tilRepository.GetLinesByParentId(transferIn.ID); } DatabaseContext dbContext = tiRepository.DbCondext; try { dbContext.BeginTransaction(); //入库记录 List <WStockIn> stockIns = new List <WStockIn>(transferIn.Lines.Count); //添加其他入库 int result = tiRepository.ApproveTransferIn(transferIn); if (result < 1) { rData.status = -1; rData.message = "单据已经审核或删除."; dbContext.AbortTransaction(); return(rData); } foreach (var line in transferIn.Lines) { stockIns.Add(CloneTransferIn(line, transferIn)); } //更新库存 WStockService sService = new WStockService(dbContext); rData = sService.AddStocks(stockIns); if (rData.status != 0) { dbContext.AbortTransaction(); } else { dbContext.CompleteTransaction(); } } catch (Exception ex) { dbContext.AbortTransaction(); throw ex; } return(rData); }
/// <summary> /// 入库通知单转换入库单 /// </summary> /// <param name="inNotice"></param> /// <returns></returns> private WTransferIn CloneInNotice(WTransferInNotice inNotice) { WTransferIn transferIn = new WTransferIn(); transferIn.BusinessPartnerID = inNotice.BusinessPartnerID; transferIn.CreateBy = inNotice.CreateBy; transferIn.CreateDate = DateTime.Now; transferIn.SourceCode = inNotice.InNoticeCode; transferIn.SourceID = inNotice.ID; transferIn.StockStatus = StockStatusEnum.New; transferIn.WarehouseCode = inNotice.WarehouseCode; transferIn.WarehouseID = inNotice.WarehouseID; return(transferIn); }
/// <summary> /// 添加调拨入库 /// </summary> /// <param name="transferIn"></param> /// <returns></returns> public ResultData <string> AddTransferIn(WTransferIn transferIn) { ResultData <string> rData = CheckValid(transferIn); if (rData.status != 0) { return(rData); } DatabaseContext dbContext = tiRepository.DbCondext; try { dbContext.BeginTransaction(); transferIn.CreateDate = DateTime.Now; transferIn.StockStatus = StockStatusEnum.New; transferIn.TransferInCode = nuRepository.GetNextNumber("DBRK"); tiRepository.Insert(transferIn); foreach (var line in transferIn.Lines) { line.ParentID = transferIn.ID; line.CreateBy = transferIn.CreateBy; line.CreateDate = DateTime.Now; line.Batch = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch; tilRepository.Insert(line); } dbContext.CompleteTransaction(); } catch (Exception ex) { dbContext.AbortTransaction(); throw ex; } return(rData); }
/// <summary> /// 其他入库复制入口记录 /// </summary> /// <param name="line"></param> /// <param name="other"></param> /// <returns></returns> private WStockIn CloneTransferIn(WTransferInLine line, WTransferIn transferIn) { 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 = transferIn.TransferInCode; stockIn.SourceID = line.ParentID; stockIn.SourceLineID = line.ID; stockIn.StockInDate = transferIn.CreateDate; stockIn.StockInType = StockInEnum.TransferIn; stockIn.UnitID = line.UnitID; stockIn.WarehouseCode = transferIn.WarehouseCode; stockIn.WarehouseID = transferIn.WarehouseID; stockIn.StockID = line.StockID; return(stockIn); }
/// <summary> /// 根据入库通知添加入库 /// </summary> /// <param name="inNotice"></param> /// <returns></returns> public ResultData <string> AddTransferIn(WTransferInNotice inNotice, int createBy) { ResultData <string> rData = new ResultData <string>(); if (inNotice.NoticeStatus == NoticeStatusEnum.Complete) { rData.status = -1; rData.message = "单据已完成不能入库."; return(rData); } //克隆主表 WTransferIn transferIn = CloneInNotice(inNotice); transferIn.CreateBy = createBy; foreach (var item in inNotice.Lines) { if (item.InPutCount <= 0) { continue; } //如果通知数量+下推数量+完成数量>当前入库数量 if (item.InPutCount + item.DownCount + item.CompleteCount > item.InCount) { rData.status = -1; rData.message = BuilderNoticeLessMessage(item); return(rData); } //克隆明细 transferIn.Lines.Add(CloneInNoticeLine(item)); //更新下推数量和当前输入数量 item.DownCount = item.DownCount + item.InPutCount; } if (transferIn.Lines.Count < 1) { rData.status = -1; rData.message = "入库明细为空."; return(rData); } rData = CheckValid(transferIn); if (rData.status != 0) { return(rData); } DatabaseContext dbContext = tiRepository.DbCondext; try { dbContext.BeginTransaction(); //添加入库单 transferIn.CreateDate = DateTime.Now; transferIn.StockStatus = StockStatusEnum.New; transferIn.TransferInCode = nuRepository.GetNextNumber("DBRK"); tiRepository.Insert(transferIn); foreach (var line in transferIn.Lines) { line.ParentID = transferIn.ID; line.CreateBy = transferIn.CreateBy; line.CreateDate = DateTime.Now; line.Batch = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch; tilRepository.Insert(line); } //更新通知单 foreach (var item in inNotice.Lines) { tinlRepository.AddDownCount(item); } dbContext.CompleteTransaction(); } catch (Exception ex) { dbContext.AbortTransaction(); throw ex; } //没有放到事务,因为状态更新不是很重要,不影响业务 bool isAll = tinlRepository.IsAllDownload(inNotice.ID); if (isAll) { tinRepository.UpdateNoticeStatus(NoticeStatusEnum.Complete, inNotice.ID); } else { tinRepository.UpdateNoticeStatus(NoticeStatusEnum.Executing, inNotice.ID); } return(rData); }