Пример #1
0
        /// <summary>
        /// 检查
        /// </summary>
        /// <param name="transferIn"></param>
        /// <returns></returns>
        private ResultData <string> CheckValid(WTransferIn transferIn)
        {
            ResultData <string> rt = new ResultData <string>();

            if (transferIn.WarehouseID < 0)
            {
                rt.status  = -1;
                rt.message = "仓库不能为空";
                return(rt);
            }

            foreach (var item in transferIn.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);
        }
Пример #2
0
        public ActionResult Approve()
        {
            ResultData <string> rt = new ResultData <string>();

            WTransferIn otherIn = GetParam <WTransferIn>("app");

            otherIn.UpdateBy = this.CurrentUser.ID;
            rt = inService.ApproveOtherIn(otherIn);

            return(ReturnResult(rt));
        }
Пример #3
0
        /// <summary>
        /// 审核
        /// </summary>
        /// <param name="transferIn"></param>
        /// <returns></returns>
        public ResultData <string> ApproveOtherIn(WTransferIn transferIn)
        {
            ResultData <string> rData = new ResultData <string>();

            if (transferIn.Lines.Count < 1)
            {
                transferIn.Lines = tilRepository.GetLinesByParentId(transferIn.ID);
            }

            DatabaseContext dbContext = tiRepository.DbCondext;

            try
            {
                dbContext.BeginTransaction();
                //入库记录
                List <WStockIn> stockIns = new List <WStockIn>(transferIn.Lines.Count);

                //添加其他入库
                int result = tiRepository.ApproveTransferIn(transferIn);
                if (result < 1)
                {
                    rData.status  = -1;
                    rData.message = "单据已经审核或删除.";
                    dbContext.AbortTransaction();
                    return(rData);
                }

                foreach (var line in transferIn.Lines)
                {
                    stockIns.Add(CloneTransferIn(line, transferIn));
                }

                //更新库存
                WStockService sService = new WStockService(dbContext);
                rData = sService.AddStocks(stockIns);
                if (rData.status != 0)
                {
                    dbContext.AbortTransaction();
                }
                else
                {
                    dbContext.CompleteTransaction();
                }
            }
            catch (Exception ex)
            {
                dbContext.AbortTransaction();
                throw ex;
            }
            return(rData);
        }
Пример #4
0
        /// <summary>
        /// 入库通知单转换入库单
        /// </summary>
        /// <param name="inNotice"></param>
        /// <returns></returns>
        private WTransferIn CloneInNotice(WTransferInNotice inNotice)
        {
            WTransferIn transferIn = new WTransferIn();

            transferIn.BusinessPartnerID = inNotice.BusinessPartnerID;
            transferIn.CreateBy          = inNotice.CreateBy;
            transferIn.CreateDate        = DateTime.Now;
            transferIn.SourceCode        = inNotice.InNoticeCode;
            transferIn.SourceID          = inNotice.ID;
            transferIn.StockStatus       = StockStatusEnum.New;
            transferIn.WarehouseCode     = inNotice.WarehouseCode;
            transferIn.WarehouseID       = inNotice.WarehouseID;
            return(transferIn);
        }
Пример #5
0
        /// <summary>
        /// 添加调拨入库
        /// </summary>
        /// <param name="transferIn"></param>
        /// <returns></returns>
        public ResultData <string> AddTransferIn(WTransferIn transferIn)
        {
            ResultData <string> rData = CheckValid(transferIn);

            if (rData.status != 0)
            {
                return(rData);
            }

            DatabaseContext dbContext = tiRepository.DbCondext;

            try
            {
                dbContext.BeginTransaction();

                transferIn.CreateDate     = DateTime.Now;
                transferIn.StockStatus    = StockStatusEnum.New;
                transferIn.TransferInCode = nuRepository.GetNextNumber("DBRK");
                tiRepository.Insert(transferIn);

                foreach (var line in transferIn.Lines)
                {
                    line.ParentID   = transferIn.ID;
                    line.CreateBy   = transferIn.CreateBy;
                    line.CreateDate = DateTime.Now;
                    line.Batch      = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch;
                    tilRepository.Insert(line);
                }

                dbContext.CompleteTransaction();
            }
            catch (Exception ex)
            {
                dbContext.AbortTransaction();
                throw ex;
            }
            return(rData);
        }
Пример #6
0
        /// <summary>
        /// 其他入库复制入口记录
        /// </summary>
        /// <param name="line"></param>
        /// <param name="other"></param>
        /// <returns></returns>
        private WStockIn CloneTransferIn(WTransferInLine line, WTransferIn transferIn)
        {
            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    = transferIn.TransferInCode;
            stockIn.SourceID      = line.ParentID;
            stockIn.SourceLineID  = line.ID;
            stockIn.StockInDate   = transferIn.CreateDate;
            stockIn.StockInType   = StockInEnum.TransferIn;
            stockIn.UnitID        = line.UnitID;
            stockIn.WarehouseCode = transferIn.WarehouseCode;
            stockIn.WarehouseID   = transferIn.WarehouseID;
            stockIn.StockID       = line.StockID;
            return(stockIn);
        }
Пример #7
0
        /// <summary>
        /// 根据入库通知添加入库
        /// </summary>
        /// <param name="inNotice"></param>
        /// <returns></returns>
        public ResultData <string> AddTransferIn(WTransferInNotice inNotice, int createBy)
        {
            ResultData <string> rData = new ResultData <string>();

            if (inNotice.NoticeStatus == NoticeStatusEnum.Complete)
            {
                rData.status  = -1;
                rData.message = "单据已完成不能入库.";
                return(rData);
            }
            //克隆主表
            WTransferIn transferIn = CloneInNotice(inNotice);

            transferIn.CreateBy = createBy;

            foreach (var item in inNotice.Lines)
            {
                if (item.InPutCount <= 0)
                {
                    continue;
                }
                //如果通知数量+下推数量+完成数量>当前入库数量
                if (item.InPutCount + item.DownCount + item.CompleteCount > item.InCount)
                {
                    rData.status  = -1;
                    rData.message = BuilderNoticeLessMessage(item);
                    return(rData);
                }
                //克隆明细
                transferIn.Lines.Add(CloneInNoticeLine(item));
                //更新下推数量和当前输入数量
                item.DownCount = item.DownCount + item.InPutCount;
            }

            if (transferIn.Lines.Count < 1)
            {
                rData.status  = -1;
                rData.message = "入库明细为空.";
                return(rData);
            }

            rData = CheckValid(transferIn);
            if (rData.status != 0)
            {
                return(rData);
            }

            DatabaseContext dbContext = tiRepository.DbCondext;

            try
            {
                dbContext.BeginTransaction();

                //添加入库单
                transferIn.CreateDate     = DateTime.Now;
                transferIn.StockStatus    = StockStatusEnum.New;
                transferIn.TransferInCode = nuRepository.GetNextNumber("DBRK");
                tiRepository.Insert(transferIn);
                foreach (var line in transferIn.Lines)
                {
                    line.ParentID   = transferIn.ID;
                    line.CreateBy   = transferIn.CreateBy;
                    line.CreateDate = DateTime.Now;
                    line.Batch      = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch;
                    tilRepository.Insert(line);
                }

                //更新通知单
                foreach (var item in inNotice.Lines)
                {
                    tinlRepository.AddDownCount(item);
                }

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

            //没有放到事务,因为状态更新不是很重要,不影响业务
            bool isAll = tinlRepository.IsAllDownload(inNotice.ID);

            if (isAll)
            {
                tinRepository.UpdateNoticeStatus(NoticeStatusEnum.Complete, inNotice.ID);
            }
            else
            {
                tinRepository.UpdateNoticeStatus(NoticeStatusEnum.Executing, inNotice.ID);
            }
            return(rData);
        }