示例#1
0
        /// <summary>
        /// 检查
        /// </summary>
        /// <param name="sell"></param>
        /// <returns></returns>
        private ResultData <string> CheckValid(WSell sell)
        {
            ResultData <string> rt = new ResultData <string>();

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

            foreach (var item in sell.Lines)
            {
                //删除行,不验证
                if (item.CURD == CurdEnum.Delete)
                {
                    continue;
                }
                if (item.PositionID < 1)
                {
                    rt.status  = -1;
                    rt.message = BuilderErrorMessage(item, "货位不能为空");
                    break;
                }
                else if (item.OutCount <= 0)
                {
                    rt.status  = -1;
                    rt.message = BuilderErrorMessage(item, "出库数量必须大于0");
                    break;
                }
            }

            return(rt);
        }
示例#2
0
        /// <summary>
        /// 退库
        /// </summary>
        /// <returns></returns>
        public ContentResult PushDown()
        {
            ResultData <string> rt = new ResultData <string>();

            //获取前台传会的删除ID
            WSell sell = GetParam <WSell>("app");

            rt = srService.AddSellReturn(sell, CurrentUser.ID);
            return(ReturnResult(rt));
        }
示例#3
0
        public ContentResult Add()
        {
            ResultData <string> rt = new ResultData <string>();

            WSell purchase = GetAdd <WSell>();

            purchase.CreateBy = this.CurrentUser.ID;
            rt = snService.AddSell(purchase);
            return(ReturnResult(rt));
        }
示例#4
0
        public ActionResult Approve()
        {
            ResultData <string> rt = new ResultData <string>();

            WSell purchase = GetParam <WSell>("app");

            purchase.UpdateBy = this.CurrentUser.ID;
            rt = snService.ApproveSell(purchase);

            return(ReturnResult(rt));
        }
示例#5
0
        /// <summary>
        /// 入库通知单转换入库单
        /// </summary>
        /// <param name="sell"></param>
        /// <returns></returns>
        private WSellReturn CloneInNotice(WSell sell)
        {
            WSellReturn sellReturn = new WSellReturn();

            sellReturn.BusinessPartnerID = sell.BusinessPartnerID;
            sellReturn.CreateBy          = sell.CreateBy;
            sellReturn.CreateDate        = DateTime.Now;
            sellReturn.SourceCode        = sell.SellCode;
            sellReturn.SourceID          = sell.ID;
            sellReturn.StockStatus       = StockStatusEnum.New;
            sellReturn.WarehouseCode     = sell.WarehouseCode;
            sellReturn.WarehouseID       = sell.WarehouseID;
            return(sellReturn);
        }
示例#6
0
        /// <summary>
        /// 出库通知单转换出库单
        /// </summary>
        /// <param name="outNotice"></param>
        /// <returns></returns>
        private WSell CloneOutNotice(WSellNotice outNotice)
        {
            WSell Sell = new WSell();

            Sell.BusinessPartnerID = outNotice.BusinessPartnerID;
            Sell.CreateBy          = outNotice.CreateBy;
            Sell.CreateDate        = DateTime.Now;
            Sell.SourceCode        = outNotice.OutNoticeCode;
            Sell.SourceID          = outNotice.ID;
            Sell.StockStatus       = StockStatusEnum.New;
            Sell.WarehouseCode     = outNotice.WarehouseCode;
            Sell.WarehouseID       = outNotice.WarehouseID;
            return(Sell);
        }
示例#7
0
        public ContentResult Delete()
        {
            ResultData <string> rt = new ResultData <string>();

            //获取前台传会的删除ID
            WSell purchase = GetDelete <WSell>();
            int   result   = snService.RemoveSell(purchase);

            if (result < 1)
            {
                rt.status  = -1;
                rt.message = "删除失败,只能删除新建单据.";
            }
            return(ReturnResult(rt));
        }
示例#8
0
        /// <summary>
        /// 插入新采购出库
        /// </summary>
        /// <param name="sell"></param>
        /// <returns></returns>
        public ResultData <string> AddSell(WSell sell)
        {
            ResultData <string> rData = CheckValid(sell);

            if (rData.status != 0)
            {
                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);
                }

                dbContext.CompleteTransaction();
            }
            catch (Exception ex)
            {
                dbContext.AbortTransaction();
                throw ex;
            }
            return(rData);
        }
示例#9
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);
        }
示例#10
0
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="sell"></param>
        /// <returns></returns>
        public int RemoveSell(WSell sell)
        {
            //查询明细
            if (sell.Lines.Count < 1)
            {
                sell.Lines = slRepository.GetLinesByParentId(sell.ID);
            }

            DatabaseContext db = snRepository.DbCondext;

            try
            {
                db.BeginTransaction();
                //删除其他出库
                int result = sRepository.RemoveSellByStatus(sell.ID, StockStatusEnum.New);
                if (result > 0)
                {
                    foreach (WSellLine line in sell.Lines)
                    {
                        if (line.SourceLineID > 0)
                        {
                            //删除下推
                            snlRepository.RemoveDownCount(line.OutCount, line.SourceLineID);
                        }
                    }
                    slRepository.RemoveLinesByParentId(sell.ID);
                }
                db.CompleteTransaction();
                return(result);
            }
            catch (Exception ex)
            {
                db.AbortTransaction();
                throw ex;
            }
        }
示例#11
0
        /// <summary>
        /// 根据入库通知添加入库
        /// </summary>
        /// <param name="sell"></param>
        /// <returns></returns>
        public ResultData <string> AddSellReturn(WSell sell, int createBy)
        {
            ResultData <string> rData = new ResultData <string>();

            if (sell.StockStatus != StockStatusEnum.Approve)
            {
                rData.status  = -1;
                rData.message = "单据未审核不能退库.";
                return(rData);
            }

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

            //克隆主表
            WSellReturn sellReturn = CloneInNotice(sell);

            sellReturn.CreateBy = createBy;

            foreach (var item in sell.Lines)
            {
                WSellReturnLine line = CloneInNoticeLine(item);
                if (line != null)
                {
                    sellReturn.Lines.Add(line);
                }
            }

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

            DatabaseContext dbContext = srRepository.DbCondext;

            try
            {
                dbContext.BeginTransaction();

                //添加入库单
                sellReturn.CreateDate     = DateTime.Now;
                sellReturn.StockStatus    = StockStatusEnum.New;
                sellReturn.SellReturnCode = nuRepository.GetNextNumber("XSTK");
                srRepository.Insert(sellReturn);
                foreach (var line in sellReturn.Lines)
                {
                    line.ParentID   = sellReturn.ID;
                    line.CreateBy   = sellReturn.CreateBy;
                    line.CreateDate = DateTime.Now;
                    line.Batch      = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch;
                    srlRepository.Insert(line);

                    //更新入库单 添加退库
                    decimal rt = slRepository.AddReturnCount(line.InCount, line.SourceLineID);
                    if (rt < 0)
                    {
                        dbContext.AbortTransaction();
                        rData.status  = -1;
                        rData.message = BuilderNoticeLessMessage(line);
                        return(rData);
                    }
                }

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

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

            return(rData);
        }
示例#12
0
        /// <summary>
        /// 审核
        /// </summary>
        /// <param name="sell"></param>
        /// <returns></returns>
        public ResultData <string> ApproveSell(WSell sell)
        {
            if (sell.Lines.Count < 1)
            {
                sell.Lines = slRepository.GetLinesByParentId(sell.ID);
            }

            ResultData <string> rData = CheckValid(sell);

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

            DatabaseContext dbContext = sRepository.DbCondext;

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

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

                foreach (var line in sell.Lines)
                {
                    stockOuts.Add(CloneSell(line, sell));
                    //添加完成数量
                    if (line.SourceLineID > 0)
                    {
                        snlRepository.AddCompleteCount(line.SourceLineID, line.OutCount);
                    }
                }

                //更新库存
                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);
        }
示例#13
0
        /// <summary>
        /// 更新销售
        /// </summary>
        /// <param name="sell"></param>
        /// <returns></returns>
        public ResultData <string> UpdateSell(WSell sell)
        {
            ResultData <string> rData = CheckValid(sell);

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

            DatabaseContext db = snRepository.DbCondext;

            try
            {
                db.BeginTransaction();

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

                        break;

                    case CurdEnum.Delete:
                        slRepository.Delete(line);
                        if (line.SourceLineID > 0)
                        {
                            //删除下推
                            snlRepository.RemoveDownCount(line.OutCount, line.SourceLineID);
                        }
                        break;

                    case CurdEnum.Update:
                        if (line.SourceLineID > 0)
                        {
                            decimal result = snlRepository.UpdateDownCount(line.SourceLineID, line.OutCount, line.OutPutCount);
                            if (result < 0)
                            {
                                db.AbortTransaction();
                                rData.status  = -1;
                                rData.message = BuilderErrorMessage(line, "出库数量大于通知单数量.");
                                return(rData);
                            }
                        }
                        line.UpdateBy    = sell.UpdateBy;
                        line.OutPutCount = line.OutCount;
                        line.UpdateDate  = DateTime.Now;
                        line.Batch       = string.IsNullOrEmpty(line.Batch) ? "" : line.Batch;
                        slRepository.Update(line);
                        break;
                    }
                }

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