/// <summary> /// 出库提交 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSave_Press(object sender, EventArgs e) { try { List <ConSalesOrderRowInputDto> Rows = new List <ConSalesOrderRowInputDto>(); foreach (ListViewRow row in listCons.Rows) { frmConSOROutboundLayout Layout = row.Control as frmConSOROutboundLayout; if (Layout.getData() != null) { Rows.Add(Layout.getData()); //添加入库信息 } } if (Rows.Count == 0) { throw new Exception("请选择退库耗材!"); } ConSOOutboundInputDto outInputDto = new ConSOOutboundInputDto(); outInputDto.SOID = SOID; outInputDto.CREATEUSER = Client.Session["UserID"].ToString(); outInputDto.RowDatas = Rows; ReturnInfo RInfo = autofacConfig.ConSalesOrderService.OutboundConSalesOrder(outInputDto); if (RInfo.IsSuccess) { List <ConSalesOrderOutboundOutputDto> rows = autofacConfig.ConSalesOrderService.GetOutRowsBySOID(SOID); if (rows.Count == 0) { Toast("该销售单出库完成!"); Form.Close(); } else { Toast("出库成功!"); Bind(); //刷新当前页面入库数据 Checkall.Checked = false; } } } catch (Exception ex) { Toast(ex.Message); } }
/// <summary> /// 耗材销售单退货 /// </summary> /// <param name="entity"></param> /// <returns></returns> public ReturnInfo RetConSalesOrder(ConSOOutboundInputDto entity) { ReturnInfo RInfo = new ReturnInfo(); StringBuilder sb = new StringBuilder(); foreach (ConSalesOrderRowInputDto Row in entity.RowDatas) { //新增退库行项 List <ConSalesOrderOutbound> orderOutList = _ConSalesOrderOutboundReposity.GetBySOIDAndSOROWID(entity.SOID, Row.SOROWID).AsNoTracking().ToList(); ConSalesOrderRow orderRow = _ConSalesOrderRowReposity.GetOrderRowByCID(entity.SOID, Row.CID).FirstOrDefault(); decimal hasRet = orderRow.QUANTRETREATED; //已经退货数 decimal waitRet = Row.QUANTRETREATED; //等待退货数 foreach (ConSalesOrderOutbound orderOut in orderOutList) { if (waitRet > 0) { if (hasRet >= orderOut.QUANT) { hasRet -= orderOut.QUANT; } else { //新增退库单数据 decimal canRetNum = orderOut.QUANT - hasRet; //此行项可退库数量 ConSalesOrderRetiring orderRetiring = _ConSalesOrderRetiringReposity.GetBySOIDAndWareID(entity.SOID, Row.SOROWID, orderOut.WAREID, orderOut.STID, orderOut.SLID).FirstOrDefault(); if (orderRetiring == null) { ConSalesOrderRetiring orderNewRetiring = new ConSalesOrderRetiring(); orderNewRetiring.SOID = entity.SOID; orderNewRetiring.SOROWID = Row.SOROWID; orderNewRetiring.WAREID = orderOut.WAREID; orderNewRetiring.STID = orderOut.STID; orderNewRetiring.SLID = orderOut.SLID; if (waitRet > canRetNum) { waitRet -= canRetNum; orderNewRetiring.QUANT = canRetNum; } else { orderNewRetiring.QUANT = waitRet; waitRet = 0; } _unitOfWork.RegisterNew(orderNewRetiring); //新增或者修改ConQuant数据 ConQuant conQuant = _ConQuantRepository.GetByCID(Row.CID, orderNewRetiring.WAREID, orderNewRetiring.STID, orderNewRetiring.SLID).FirstOrDefault(); if (conQuant == null) //当前库位不存在库存,则新增 { ConQuant newQuant = new ConQuant(); newQuant.CID = Row.CID; newQuant.WAREID = orderNewRetiring.WAREID; newQuant.STID = orderNewRetiring.STID; newQuant.SLID = orderNewRetiring.SLID; newQuant.QUANTITY = orderNewRetiring.QUANT; newQuant.CREATEUSER = entity.CREATEUSER; newQuant.CREATEDATE = DateTime.Now; newQuant.MODIFYUSER = entity.CREATEUSER; newQuant.MODIFYDATE = DateTime.Now; _unitOfWork.RegisterNew(newQuant); } else //当前库位存在库存,则添加数量 { conQuant.QUANTITY += orderNewRetiring.QUANT; _unitOfWork.RegisterDirty(conQuant); } hasRet -= orderNewRetiring.QUANT; } else { decimal retNumThisTime = 0; if (waitRet > canRetNum) { waitRet -= canRetNum; retNumThisTime = canRetNum; orderRetiring.QUANT = orderRetiring.QUANT + canRetNum; } else { orderRetiring.QUANT = orderRetiring.QUANT + waitRet; retNumThisTime = waitRet; waitRet = 0; } _unitOfWork.RegisterDirty(orderRetiring); //新增或者修改ConQuant数据 ConQuant conQuant = _ConQuantRepository.GetByCID(Row.CID, orderRetiring.WAREID, orderRetiring.STID, orderRetiring.SLID).FirstOrDefault(); if (conQuant == null) //当前库位不存在库存,则新增 { ConQuant newQuant = new ConQuant(); newQuant.CID = Row.CID; newQuant.WAREID = orderRetiring.WAREID; newQuant.STID = orderRetiring.STID; newQuant.SLID = orderRetiring.SLID; newQuant.QUANTITY = retNumThisTime; newQuant.CREATEUSER = entity.CREATEUSER; newQuant.CREATEDATE = DateTime.Now; newQuant.MODIFYUSER = entity.CREATEUSER; newQuant.MODIFYDATE = DateTime.Now; _unitOfWork.RegisterNew(newQuant); } else //当前库位存在库存,则添加数量 { conQuant.QUANTITY += retNumThisTime; _unitOfWork.RegisterDirty(conQuant); } hasRet -= retNumThisTime; } } } } //修改OrderRow行项表退库数量 ConSalesOrderRow conSalesOrderRow = _ConSalesOrderRowReposity.GetOrderRowByCID(entity.SOID, Row.CID).FirstOrDefault(); conSalesOrderRow.QUANTRETREATED = conSalesOrderRow.QUANTRETREATED + Row.QUANTRETREATED; if (conSalesOrderRow.QUANTRETREATED > conSalesOrderRow.QUANTOUT) { throw new Exception("退货数量不能大于出库数量!"); } _unitOfWork.RegisterDirty(conSalesOrderRow); } try { _unitOfWork.Commit(); RInfo.IsSuccess = true; return(RInfo); } catch (Exception ex) { _unitOfWork.Rollback(); sb.Append(ex.Message); RInfo.IsSuccess = false; RInfo.ErrorInfo = sb.ToString(); return(RInfo); } }
/// <summary> /// 耗材销售单出库 /// </summary> /// <param name="entity"></param> /// <returns></returns> public ReturnInfo OutboundConSalesOrder(ConSOOutboundInputDto entity) { ReturnInfo RInfo = new ReturnInfo(); StringBuilder sb = new StringBuilder(); int thisOver = 0; //此次完成出库的行项数 foreach (ConSalesOrderRowInputDto Row in entity.RowDatas) { decimal quantSum = _ConQuantRepository.GetSumByCID(Row.CID); if (quantSum < Row.QUANTOUT) { throw new Exception("耗材" + Row.CID + "库存不足,请先补充库存!"); } List <ConQuant> conQuantList = _ConQuantRepository.GetQuantByCID(Row.CID).ToList(); decimal quantOut = Row.QUANTOUT; while (quantOut > 0) { foreach (ConQuant conQuant in conQuantList) { ConSalesOrderOutbound outbound = new ConSalesOrderOutbound(); outbound.SOID = entity.SOID; outbound.SOROWID = Row.SOROWID; outbound.WAREID = conQuant.WAREID; outbound.STID = conQuant.STID; outbound.SLID = conQuant.SLID; if (conQuant.QUANTITY > quantOut) { conQuant.QUANTITY = conQuant.QUANTITY - quantOut; _unitOfWork.RegisterDirty(conQuant); outbound.QUANT = quantOut; quantOut = 0; _unitOfWork.RegisterNew(outbound); break; } else if (conQuant.QUANTITY == quantOut) { outbound.QUANT = quantOut; _unitOfWork.RegisterDeleted(conQuant); quantOut = 0; _unitOfWork.RegisterNew(outbound); break; } else { outbound.QUANT = conQuant.QUANTITY; quantOut = quantOut - conQuant.QUANTITY; _unitOfWork.RegisterDeleted(conQuant); _unitOfWork.RegisterNew(outbound); } } } ConSalesOrderRow orderRow = _ConSalesOrderRowReposity.GetOrderRowByCID(entity.SOID, Row.CID).FirstOrDefault(); orderRow.QUANTOUT = orderRow.QUANTOUT + Row.QUANTOUT; orderRow.STATUS = (int)SalesOrderStatus.出库中; if (orderRow.QUANTOUT == orderRow.QUANTSALED) { orderRow.STATUS = (int)PurchaseOrderStatus.已完成; thisOver += 1; } if (orderRow.QUANTOUT > orderRow.QUANTSALED) { throw new Exception("出库数量不可大于实际销售数量!"); } _unitOfWork.RegisterDirty(orderRow); } ConSalesOrder conSalesOrder = _ConSalesOrderReposity.GetById(entity.SOID).AsNoTracking().FirstOrDefault(); int allRowsCount = _ConSalesOrderRowReposity.GetBySOID(entity.SOID).ToList().Count; int hasOverCount = _ConSalesOrderRowReposity.GetOrderRowsByStatus(entity.SOID, (int)PurchaseOrderStatus.已完成).ToList().Count; if (allRowsCount == hasOverCount + thisOver) { conSalesOrder.STATUS = (int)PurchaseOrderStatus.已完成; } else { conSalesOrder.STATUS = (int)PurchaseOrderStatus.入库中; } _unitOfWork.RegisterDirty(conSalesOrder); try { _unitOfWork.Commit(); RInfo.IsSuccess = true; return(RInfo); } catch (Exception ex) { _unitOfWork.Rollback(); sb.Append(ex.Message); RInfo.IsSuccess = false; RInfo.ErrorInfo = sb.ToString(); return(RInfo); } }