/// <summary> /// 更新采购单 /// </summary> /// <param name="inputDto"></param> /// <returns></returns> public ReturnInfo UpdateSalesOrder(ConSalesOrderInputDto inputDto) { ReturnInfo RInfo = new ReturnInfo(); StringBuilder sb = new StringBuilder(); ConSalesOrder Order = _ConSalesOrderReposity.GetById(inputDto.SOID).FirstOrDefault(); if (Order == null) { sb.Append("该采购单不存在,请检查!"); RInfo.IsSuccess = false; RInfo.ErrorInfo = sb.ToString(); return(RInfo); } else //采购单存在 { Order.REALID = inputDto.REALID; Order.NAME = inputDto.NAME; Order.CUSID = inputDto.CUSID; Order.SALESPERSON = inputDto.SALESPERSON; Order.MODIFYDATE = inputDto.MODIFYDATE; Order.MODIFYUSER = inputDto.MODIFYUSER; _unitOfWork.RegisterDirty(Order); //如果原来存在行项,则先删除 List <ConSalesOrderRow> Rows = _ConSalesOrderRowReposity.GetBySOID(inputDto.SOID).ToList(); if (Rows.Count > 0) //如果存在行项 { foreach (ConSalesOrderRow Row in Rows) { _unitOfWork.RegisterDeleted(Row); } } ///添加新的选择行项 foreach (ConSalesOrderRowInputDto Row in inputDto.RowData) { ConSalesOrderRow salesOrderRow = new ConSalesOrderRow(); salesOrderRow = Mapper.Map <ConSalesOrderRowInputDto, ConSalesOrderRow>(Row); salesOrderRow.SOID = inputDto.SOID; salesOrderRow.CREATEUSER = inputDto.CREATEUSER; salesOrderRow.CREATEDATE = DateTime.Now; salesOrderRow.MODIFYUSER = inputDto.MODIFYUSER; salesOrderRow.MODIFYDATE = DateTime.Now; salesOrderRow.STATUS = 0; _unitOfWork.RegisterNew(salesOrderRow); } try { _unitOfWork.Commit(); RInfo.IsSuccess = true; return(RInfo); } catch (Exception ex) { sb.Append(ex.Message); RInfo.IsSuccess = false; RInfo.ErrorInfo = sb.ToString(); return(RInfo); } } }
/// <summary> /// 得到所有耗材销售单 /// </summary> /// <returns></returns> public DataTable GetOrders() { var FirstOrders = _ConSalesOrderReposity.GetAll().AsNoTracking(); var result = from Order in FirstOrders join User in _SMOWMSDbContext.coreUsers on Order.SALESPERSON equals User.USER_ID select new ConSalesOrderOutputDto() { SOID = Order.SOID, NAME = Order.NAME, REALID = Order.REALID, STATUS = Order.STATUS, SALESPERSON = Order.SALESPERSON, SALESPERSONNAME = User.USER_NAME, CREATEDATE = Order.CREATEDATE, CANEDIT = "", CANDELETE = "", CANSTART = "", TIME = "" }; var OrderTable = LINQToDataTable.ToDataTable(result); foreach (DataRow Row in OrderTable.Rows) { ConSalesOrderRow conSalesOrderRow = _ConSalesOrderRowReposity.GetBySOID(Row["SOID"].ToString()).FirstOrDefault(); Consumables consumables = _consumablesRepository.GetByID(conSalesOrderRow.CID).FirstOrDefault(); Row["Image"] = consumables.IMAGE; Row["STATUSNAME"] = Enum.GetName(typeof(SalesOrderStatus), int.Parse(Row["STATUS"].ToString())); Row["TIME"] = DateTime.Parse(Row["CREATEDATE"].ToString()).ToShortDateString(); } return(OrderTable); }
/// <summary> /// 创建销售单 /// </summary> /// <param name="inputDto"></param> /// <returns></returns> public ReturnInfo AddSalesOrder(ConSalesOrderInputDto inputDto) { ReturnInfo RInfo = new ReturnInfo(); if (string.IsNullOrEmpty(inputDto.NAME)) { throw new Exception("销售单名称不能为空!"); } if (string.IsNullOrEmpty(inputDto.SALESPERSON)) { throw new Exception("请选择销售人!"); } String MaxID = _ConSalesOrderReposity.GetMaxID(); //获取最大采购单ID String NowID = Helper.GenerateID("SO", MaxID); //产生销售单编号 inputDto.SOID = NowID; try { ConSalesOrder salesOrder = new ConSalesOrder(); salesOrder = Mapper.Map <ConSalesOrderInputDto, ConSalesOrder>(inputDto); salesOrder.STATUS = 0; _unitOfWork.RegisterNew(salesOrder); foreach (var Row in inputDto.RowData) { ConSalesOrderRow salesOrderRow = new ConSalesOrderRow(); salesOrderRow = Mapper.Map <ConSalesOrderRowInputDto, ConSalesOrderRow>(Row); salesOrderRow.SOID = NowID; salesOrderRow.CREATEUSER = inputDto.CREATEUSER; salesOrderRow.CREATEDATE = DateTime.Now; salesOrderRow.MODIFYUSER = inputDto.MODIFYUSER; salesOrderRow.MODIFYDATE = DateTime.Now; salesOrderRow.STATUS = 0; _unitOfWork.RegisterNew(salesOrderRow); } bool result = _unitOfWork.Commit(); RInfo.IsSuccess = result; RInfo.ErrorInfo = inputDto.SOID; return(RInfo); } catch (Exception ex) { _unitOfWork.Rollback(); RInfo.IsSuccess = false; RInfo.ErrorInfo = ex.Message; return(RInfo); } }
/// <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); } }