Exemplo n.º 1
0
        /// <summary>
        /// 入库通知单行转换入库单行
        /// </summary>
        /// <param name="outNoticeLine"></param>
        /// <returns></returns>
        protected WSellReturnLine CloneInNoticeLine(WSellLine outNoticeLine)
        {
            //如果通知数量-下推-完成<0 则返回
            decimal outCount = outNoticeLine.OutCount - outNoticeLine.ReturnCount;

            if (outCount <= 0)
            {
                return(null);
            }
            WSellReturnLine line = new WSellReturnLine()
            {
                Batch        = outNoticeLine.Batch,
                CreateDate   = DateTime.Now,
                Factory      = outNoticeLine.Factory,
                InCount      = outCount,
                MaterialCode = outNoticeLine.MaterialCode,
                MaterialID   = outNoticeLine.MaterialID,
                OwnerCode    = outNoticeLine.OwnerCode,
                UnitID       = outNoticeLine.UnitID,
                SourceLineID = outNoticeLine.ID,
                PositionID   = outNoticeLine.PositionID,
                PositionCode = outNoticeLine.PositionCode,
                InPutCount   = outCount
            };

            return(line);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 出库通知单行转换出库单行
        /// </summary>
        /// <param name="outNoticeLine"></param>
        /// <returns></returns>
        protected WSellLine CloneOutNoticeLine(WSellNoticeLine outNoticeLine)
        {
            //如果通知数量-下推-完成<0 则返回
            decimal outCount = outNoticeLine.OutCount - outNoticeLine.DownCount - outNoticeLine.CompleteCount;

            if (outCount <= 0)
            {
                return(null);
            }
            WSellLine line = new WSellLine()
            {
                Batch        = outNoticeLine.Batch,
                CreateDate   = DateTime.Now,
                Factory      = outNoticeLine.Factory,
                OutCount     = outCount,
                OutPutCount  = outCount,
                MaterialCode = outNoticeLine.MaterialCode,
                MaterialID   = outNoticeLine.MaterialID,
                OwnerCode    = outNoticeLine.OwnerCode,
                UnitID       = outNoticeLine.UnitID,
                SourceLineID = outNoticeLine.ID
            };

            return(line);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 构建通知单不足提示
        /// </summary>
        /// <param name="stockOut"></param>
        /// <returns></returns>
        private string BuilderNoticeLessMessage(WSellLine inNoticeLine)
        {
            StringBuilder sb = new StringBuilder("出库数量大于通知数量");

            sb.AppendLine(",物料:" + inNoticeLine.MaterialCode);
            if (!string.IsNullOrWhiteSpace(inNoticeLine.Batch))
            {
                sb.AppendLine(",批次:" + inNoticeLine.Batch);
            }
            if (!string.IsNullOrWhiteSpace(inNoticeLine.OwnerCode))
            {
                sb.AppendLine(",货主:" + inNoticeLine.OwnerCode);
            }
            return(sb.ToString());
        }
Exemplo n.º 4
0
        /// <summary>
        /// 构建库存不足提示
        /// </summary>
        /// <param name="line"></param>
        /// <param name="msg">错误信息</param>
        /// <returns></returns>
        private string BuilderErrorMessage(WSellLine line, string msg)
        {
            StringBuilder sb = new StringBuilder(msg);

            sb.AppendLine(",货位:" + line.PositionCode);
            sb.AppendLine(",物料:" + line.MaterialCode);
            if (!string.IsNullOrWhiteSpace(line.Batch))
            {
                sb.AppendLine(",批次:" + line.Batch);
            }
            if (!string.IsNullOrWhiteSpace(line.OwnerCode))
            {
                sb.AppendLine(",货主:" + line.OwnerCode);
            }
            return(sb.ToString());
        }
Exemplo n.º 5
0
        /// <summary>
        /// 其他出库复制入口记录
        /// </summary>
        /// <param name="line"></param>
        /// <param name="other"></param>
        /// <returns></returns>
        private WStockOut CloneSell(WSellLine line, WSell Sell)
        {
            WStockOut stockOut = new WStockOut();

            stockOut.Batch         = line.Batch;
            stockOut.Factory       = line.Factory;
            stockOut.OutCount      = line.OutCount;
            stockOut.MaterialCode  = line.MaterialCode;
            stockOut.MaterialID    = line.MaterialID;
            stockOut.OwnerCode     = line.OwnerCode;
            stockOut.PositionCode  = line.PositionCode;
            stockOut.PositionID    = line.PositionID;
            stockOut.SourceCode    = Sell.SellCode;
            stockOut.SourceID      = line.ParentID;
            stockOut.SourceLineID  = line.ID;
            stockOut.StockInDate   = Sell.CreateDate;
            stockOut.StockOutType  = StockOutEnum.Sell;
            stockOut.UnitID        = line.UnitID;
            stockOut.WarehouseCode = Sell.WarehouseCode;
            stockOut.WarehouseID   = Sell.WarehouseID;
            stockOut.StockID       = line.StockID;
            return(stockOut);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 根据通知单生成出库单
        /// </summary>
        /// <param name="outNotice"></param>
        /// <returns></returns>
        public ResultData <string> AddSell(WSellNotice outNotice, int createBy)
        {
            ResultData <string> rData = new ResultData <string>();

            if (outNotice.NoticeStatus == NoticeStatusEnum.Complete)
            {
                rData.status  = -1;
                rData.message = "单据已完成不能下推.";
                return(rData);
            }

            //查询明细
            if (outNotice.Lines.Count < 1)
            {
                outNotice.Lines = snlRepository.GetLinesByParentId(outNotice.ID);
            }

            //克隆主表
            WSell sell = CloneOutNotice(outNotice);

            sell.CreateBy = createBy;
            //克隆子表
            foreach (var item in outNotice.Lines)
            {
                WSellLine line = CloneOutNoticeLine(item);
                if (line != null)
                {
                    sell.Lines.Add(line);
                }
            }

            if (sell.Lines.Count < 1)
            {
                rData.status  = -1;
                rData.message = "单据已经全部下推.";
                return(rData);
            }

            DatabaseContext dbContext = sRepository.DbCondext;

            try
            {
                dbContext.BeginTransaction();

                //添加出库单
                sell.CreateDate  = DateTime.Now;
                sell.StockStatus = StockStatusEnum.New;
                sell.SellCode    = nuRepository.GetNextNumber("XSCK");
                sRepository.Insert(sell);

                foreach (var line in sell.Lines)
                {
                    //插入出库明细
                    line.ParentID   = sell.ID;
                    line.CreateBy   = sell.CreateBy;
                    line.CreateDate = DateTime.Now;
                    line.Batch      = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch;
                    slRepository.Insert(line);

                    //更新通知单 添加下推
                    decimal rt = snlRepository.AddDownCount(line.OutCount, line.SourceLineID);
                    if (rt < 0)
                    {
                        dbContext.AbortTransaction();
                        rData.status  = -1;
                        rData.message = BuilderNoticeLessMessage(line);
                        return(rData);
                    }
                }

                //将插入主键赋值给返回值
                rData.result = sell.ID.ToString();

                //更新通知单状态
                if (sell.SourceID > 0)
                {
                    snRepository.UpdateNoticeStatus(NoticeStatusEnum.Executing, sell.SourceID);
                }

                dbContext.CompleteTransaction();
            }
            catch (Exception ex)
            {
                dbContext.AbortTransaction();
                throw ex;
            }

            return(rData);
        }