示例#1
0
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="purReturn"></param>
        /// <returns></returns>
        public int RemovePurchaseReturn(WPurchaseReturn purReturn)
        {
            //查询明细
            if (purReturn.Lines.Count < 1)
            {
                purReturn.Lines = prlRepository.GetLinesByParentId(purReturn.ID);
            }
            //删除其他出库
            int result = prRepository.RemovePurchaseReturnByStatus(purReturn.ID, StockStatusEnum.New);

            if (result > 0)
            {
                //如果退库单据,则更新出库数量
                foreach (WPurchaseReturnLine line in purReturn.Lines)
                {
                    if (line.SourceLineID > 0)
                    {
                        //退库数量
                        plRepository.RemoveReturnCount(line.OutCount, line.SourceLineID);
                    }
                }
                prlRepository.RemoveLinesByParentId(purReturn.ID);
            }
            return(result);
        }
示例#2
0
        /// <summary>
        /// 审核
        /// </summary>
        /// <param name="purReturn"></param>
        /// <returns></returns>
        public ResultData <string> ApprovePurchaseReturn(WPurchaseReturn purReturn)
        {
            if (purReturn.Lines.Count < 1)
            {
                purReturn.Lines = prlRepository.GetLinesByParentId(purReturn.ID);
            }

            ResultData <string> rData = CheckValid(purReturn);

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

            DatabaseContext dbContext = prRepository.DbCondext;

            try
            {
                dbContext.BeginTransaction();
                //出库记录
                List <WStockOut> stockOuts = new List <WStockOut>(purReturn.Lines.Count);

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

                foreach (var line in purReturn.Lines)
                {
                    stockOuts.Add(ClonePurchaseReturn(line, purReturn));
                }

                //更新库存
                WStockService sService = new WStockService(dbContext);
                rData = sService.DeleteStocks(stockOuts);
                if (rData.status != 0)
                {
                    dbContext.AbortTransaction();
                }
                else
                {
                    dbContext.CompleteTransaction();
                }
            }
            catch (Exception ex)
            {
                dbContext.AbortTransaction();
                throw ex;
            }
            return(rData);
        }
示例#3
0
        /// <summary>
        /// 插入新采购出库
        /// </summary>
        /// <param name="purReturn"></param>
        /// <returns></returns>
        public ResultData <string> AddPurchaseReturn(WPurchaseReturn purReturn)
        {
            ResultData <string> rData = CheckValid(purReturn);

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

            DatabaseContext dbContext = prRepository.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);
                }

                dbContext.CompleteTransaction();
            }
            catch (Exception ex)
            {
                dbContext.AbortTransaction();
                throw ex;
            }
            return(rData);
        }
示例#4
0
        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="purchase"></param>
        /// <returns></returns>
        public ResultData <string> UpdatePurchaseReturn(WPurchaseReturn purReturn)
        {
            ResultData <string> rData = CheckValid(purReturn);

            if (rData.status != 0)
            {
                return(rData);
            }
            if (purReturn.StockStatus != StockStatusEnum.New)
            {
                rData.status  = -1;
                rData.message = "单据已经审核,不能编辑.";
                return(rData);
            }

            DatabaseContext db = prRepository.DbCondext;

            try
            {
                db.BeginTransaction();

                foreach (var line in purReturn.Lines)
                {
                    switch (line.CURD)
                    {
                    case CurdEnum.Add:
                        if (line.SourceLineID > 0)
                        {
                            //添加退库
                            decimal result = plRepository.AddReturnCount(line.OutCount, line.SourceLineID);
                            if (result < 0)
                            {
                                db.AbortTransaction();
                                rData.status  = -1;
                                rData.message = BuilderErrorMessage(line, "出库数量大于入库单数量.");
                                return(rData);
                            }
                        }
                        line.ParentID    = purReturn.ID;
                        line.CreateBy    = purReturn.CreateBy;
                        line.CreateDate  = DateTime.Now;
                        line.OutPutCount = line.OutCount;
                        line.Batch       = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch;
                        prlRepository.Insert(line);

                        break;

                    case CurdEnum.Delete:
                        prlRepository.Delete(line);
                        if (line.SourceLineID > 0)
                        {
                            //删除退库
                            plRepository.RemoveReturnCount(line.OutCount, line.SourceLineID);
                        }
                        break;

                    case CurdEnum.Update:
                        if (line.SourceLineID > 0)
                        {
                            decimal result = plRepository.UpdateReturnCount(line.SourceLineID, line.OutCount, line.OutPutCount);
                            if (result < 0)
                            {
                                db.AbortTransaction();
                                rData.status  = -1;
                                rData.message = BuilderErrorMessage(line, "入库数量大于入库单数量.");
                                return(rData);
                            }
                        }
                        line.UpdateBy    = purReturn.UpdateBy;
                        line.OutPutCount = line.OutCount;
                        line.UpdateDate  = DateTime.Now;
                        line.Batch       = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch;
                        prlRepository.Update(line);
                        break;
                    }
                }

                db.CompleteTransaction();
            }
            catch (Exception ex)
            {
                db.AbortTransaction();
                throw ex;
            }
            return(rData);
        }
示例#5
0
        /// <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);
        }