/// <summary> /// 删除 /// </summary> /// <param name="purReturn"></param> /// <returns></returns> public int RemovePurchaseReturn(WPurchaseReturn purReturn) { //查询明细 if (purReturn.Lines.Count < 1) { purReturn.Lines = prlRepository.GetLinesByParentId(purReturn.ID); } //删除其他出库 int result = prRepository.RemovePurchaseReturnByStatus(purReturn.ID, StockStatusEnum.New); if (result > 0) { //如果退库单据,则更新出库数量 foreach (WPurchaseReturnLine line in purReturn.Lines) { if (line.SourceLineID > 0) { //退库数量 plRepository.RemoveReturnCount(line.OutCount, line.SourceLineID); } } prlRepository.RemoveLinesByParentId(purReturn.ID); } return(result); }
/// <summary> /// 审核 /// </summary> /// <param name="purReturn"></param> /// <returns></returns> public ResultData <string> ApprovePurchaseReturn(WPurchaseReturn purReturn) { if (purReturn.Lines.Count < 1) { purReturn.Lines = prlRepository.GetLinesByParentId(purReturn.ID); } ResultData <string> rData = CheckValid(purReturn); if (rData.status != 0) { return(rData); } DatabaseContext dbContext = prRepository.DbCondext; try { dbContext.BeginTransaction(); //出库记录 List <WStockOut> stockOuts = new List <WStockOut>(purReturn.Lines.Count); //添加其他出库 int result = prRepository.ApprovePurchaseReturn(purReturn); if (result < 1) { rData.status = -1; rData.message = "单据已经审核或删除."; dbContext.AbortTransaction(); return(rData); } foreach (var line in purReturn.Lines) { stockOuts.Add(ClonePurchaseReturn(line, purReturn)); } //更新库存 WStockService sService = new WStockService(dbContext); rData = sService.DeleteStocks(stockOuts); if (rData.status != 0) { dbContext.AbortTransaction(); } else { dbContext.CompleteTransaction(); } } catch (Exception ex) { dbContext.AbortTransaction(); throw ex; } return(rData); }
/// <summary> /// 插入新采购出库 /// </summary> /// <param name="purReturn"></param> /// <returns></returns> public ResultData <string> AddPurchaseReturn(WPurchaseReturn purReturn) { ResultData <string> rData = CheckValid(purReturn); if (rData.status != 0) { return(rData); } DatabaseContext dbContext = prRepository.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); } dbContext.CompleteTransaction(); } catch (Exception ex) { dbContext.AbortTransaction(); throw ex; } return(rData); }
/// <summary> /// 更新 /// </summary> /// <param name="purchase"></param> /// <returns></returns> public ResultData <string> UpdatePurchaseReturn(WPurchaseReturn purReturn) { ResultData <string> rData = CheckValid(purReturn); if (rData.status != 0) { return(rData); } if (purReturn.StockStatus != StockStatusEnum.New) { rData.status = -1; rData.message = "单据已经审核,不能编辑."; return(rData); } DatabaseContext db = prRepository.DbCondext; try { db.BeginTransaction(); foreach (var line in purReturn.Lines) { switch (line.CURD) { case CurdEnum.Add: if (line.SourceLineID > 0) { //添加退库 decimal result = plRepository.AddReturnCount(line.OutCount, line.SourceLineID); if (result < 0) { db.AbortTransaction(); rData.status = -1; rData.message = BuilderErrorMessage(line, "出库数量大于入库单数量."); return(rData); } } line.ParentID = purReturn.ID; line.CreateBy = purReturn.CreateBy; line.CreateDate = DateTime.Now; line.OutPutCount = line.OutCount; line.Batch = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch; prlRepository.Insert(line); break; case CurdEnum.Delete: prlRepository.Delete(line); if (line.SourceLineID > 0) { //删除退库 plRepository.RemoveReturnCount(line.OutCount, line.SourceLineID); } break; case CurdEnum.Update: if (line.SourceLineID > 0) { decimal result = plRepository.UpdateReturnCount(line.SourceLineID, line.OutCount, line.OutPutCount); if (result < 0) { db.AbortTransaction(); rData.status = -1; rData.message = BuilderErrorMessage(line, "入库数量大于入库单数量."); return(rData); } } line.UpdateBy = purReturn.UpdateBy; line.OutPutCount = line.OutCount; line.UpdateDate = DateTime.Now; line.Batch = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch; prlRepository.Update(line); break; } } db.CompleteTransaction(); } catch (Exception ex) { db.AbortTransaction(); throw ex; } return(rData); }
/// <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); }