/// <summary> /// 检查 /// </summary> /// <param name="purchase"></param> /// <returns></returns> private ResultData <string> CheckValid(WPurchase purchase) { ResultData <string> rt = new ResultData <string>(); if (purchase.WarehouseID < 0) { rt.status = -1; rt.message = "仓库不能为空"; return(rt); } foreach (var item in purchase.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); }
/// <summary> /// 退库 /// </summary> /// <returns></returns> public ContentResult PushDown() { ResultData <string> rt = new ResultData <string>(); //获取前台传会的删除ID WPurchase purchase = GetParam <WPurchase>("app"); rt = prService.AddPurchaseReturn(purchase, CurrentUser.ID); return(ReturnResult(rt)); }
public ContentResult Add() { ResultData <string> rt = new ResultData <string>(); WPurchase purchase = GetAdd <WPurchase>(); purchase.CreateBy = this.CurrentUser.ID; rt = pnService.AddPurchase(purchase); return(ReturnResult(rt)); }
public ActionResult Approve() { ResultData <string> rt = new ResultData <string>(); WPurchase purchase = GetParam <WPurchase>("app"); purchase.UpdateBy = this.CurrentUser.ID; rt = pnService.ApprovePurchase(purchase); return(ReturnResult(rt)); }
/// <summary> /// 采购订单转换采购退 /// </summary> /// <param name="purchase"></param> /// <returns></returns> private WPurchaseReturn ClonePuchase(WPurchase purchase) { WPurchaseReturn purchaseReturn = new WPurchaseReturn(); purchaseReturn.BusinessPartnerID = purchase.BusinessPartnerID; purchaseReturn.CreateBy = purchase.CreateBy; purchaseReturn.CreateDate = DateTime.Now; purchaseReturn.SourceCode = purchase.PurchaseCode; purchaseReturn.SourceID = purchase.ID; purchaseReturn.StockStatus = StockStatusEnum.New; purchaseReturn.WarehouseCode = purchase.WarehouseCode; purchaseReturn.WarehouseID = purchase.WarehouseID; return(purchaseReturn); }
/// <summary> /// 入库通知单转换入库单 /// </summary> /// <param name="inNotice"></param> /// <returns></returns> private WPurchase CloneInNotice(WPurchaseNotice inNotice) { WPurchase Purchase = new WPurchase(); Purchase.BusinessPartnerID = inNotice.BusinessPartnerID; Purchase.CreateBy = inNotice.CreateBy; Purchase.CreateDate = DateTime.Now; Purchase.SourceCode = inNotice.InNoticeCode; Purchase.SourceID = inNotice.ID; Purchase.StockStatus = StockStatusEnum.New; Purchase.WarehouseCode = inNotice.WarehouseCode; Purchase.WarehouseID = inNotice.WarehouseID; return(Purchase); }
public ContentResult Delete() { ResultData <string> rt = new ResultData <string>(); //获取前台传会的删除ID WPurchase purchase = GetDelete <WPurchase>(); int result = pnService.RemovePurchase(purchase); if (result < 1) { rt.status = -1; rt.message = "删除失败,只能删除新建单据."; } return(ReturnResult(rt)); }
/// <summary> /// 插入新采购入库 /// </summary> /// <param name="purchase"></param> /// <returns></returns> public ResultData <string> AddPurchase(WPurchase purchase) { ResultData <string> rData = CheckValid(purchase); if (rData.status != 0) { 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; line.Batch = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch; plRepository.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 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="purchase"></param> /// <returns></returns> public int RemovePurchase(WPurchase purchase) { //查询明细 if (purchase.Lines.Count < 1) { purchase.Lines = plRepository.GetLinesByParentId(purchase.ID); } DatabaseContext db = pRepository.DbCondext; try { db.BeginTransaction(); //删除其他出库 int result = pRepository.RemovePurchaseByStatus(purchase.ID, StockStatusEnum.New); if (result > 0) { foreach (WPurchaseLine line in purchase.Lines) { if (line.SourceLineID > 0) { //删除下推 pnlRepository.RemoveDownCount(line.InCount, line.SourceLineID); } } plRepository.RemoveLinesByParentId(purchase.ID); } db.CompleteTransaction(); return(result); } catch (Exception ex) { db.AbortTransaction(); throw ex; } }
/// <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); }
/// <summary> /// 审核 /// </summary> /// <param name="purchase"></param> /// <returns></returns> public ResultData <string> ApprovePurchase(WPurchase purchase) { if (purchase.Lines.Count < 1) { purchase.Lines = plRepository.GetLinesByParentId(purchase.ID); } ResultData <string> rData = CheckValid(purchase); if (rData.status != 0) { return(rData); } DatabaseContext dbContext = pRepository.DbCondext; try { dbContext.BeginTransaction(); //入库记录 List <WStockIn> stockIns = new List <WStockIn>(purchase.Lines.Count); //更新主表状态 int result = pRepository.ApprovePurchase(purchase); if (result < 1) { rData.status = -1; rData.message = "单据已经审核或删除."; dbContext.AbortTransaction(); return(rData); } foreach (var line in purchase.Lines) { stockIns.Add(ClonePurchase(line, purchase)); //添加完成数量 if (line.SourceLineID > 0) { pnlRepository.AddCompleteCount(line.SourceLineID, line.InCount); } } //更新库存 WStockService sService = new WStockService(dbContext); rData = sService.AddStocks(stockIns); if (rData.status != 0) { dbContext.AbortTransaction(); } //更新通知单状态 if (purchase.SourceID > 0) { bool isAll = pnlRepository.IsAllComplete(purchase.SourceID); if (isAll) { pnRepository.UpdateNoticeStatus(NoticeStatusEnum.Complete, purchase.SourceID); } } dbContext.CompleteTransaction(); } catch (Exception ex) { dbContext.AbortTransaction(); throw ex; } return(rData); }
/// <summary> /// 更新 /// </summary> /// <param name="purchase"></param> /// <returns></returns> public ResultData <string> UpdatePurchase(WPurchase purchase) { ResultData <string> rData = CheckValid(purchase); if (rData.status != 0) { return(rData); } if (purchase.StockStatus != StockStatusEnum.New) { rData.status = -1; rData.message = "单据已经审核,不能编辑."; return(rData); } DatabaseContext db = pnRepository.DbCondext; try { db.BeginTransaction(); foreach (var line in purchase.Lines) { switch (line.CURD) { case CurdEnum.Add: if (line.SourceLineID > 0) { //添加下推 decimal result = pnlRepository.AddDownCount(line.InCount, line.SourceLineID); if (result < 0) { db.AbortTransaction(); rData.status = -1; rData.message = BuilderErrorMessage(line, "入库数量大于通知单数量."); return(rData); } } line.ParentID = purchase.ID; line.CreateBy = purchase.CreateBy; line.CreateDate = DateTime.Now; line.InPutCount = line.InCount; line.Batch = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch; plRepository.Insert(line); break; case CurdEnum.Delete: plRepository.Delete(line); if (line.SourceLineID > 0) { //删除下推 pnlRepository.RemoveDownCount(line.InCount, line.SourceLineID); } break; case CurdEnum.Update: if (line.SourceLineID > 0) { decimal result = pnlRepository.UpdateDownCount(line.SourceLineID, line.InCount, line.InPutCount); if (result < 0) { db.AbortTransaction(); rData.status = -1; rData.message = BuilderErrorMessage(line, "入库数量大于通知单数量."); return(rData); } } line.UpdateBy = purchase.UpdateBy; line.InPutCount = line.InCount; line.UpdateDate = DateTime.Now; line.Batch = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch; plRepository.Update(line); break; } } db.CompleteTransaction(); } catch (Exception ex) { db.AbortTransaction(); throw ex; } return(rData); }
/// <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); }