예제 #1
0
        /// <summary>
        /// 调拨出库单出库
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        /// <remarks>2016-07-01 陈海裕 创建</remarks>
        public Result DoAAOutConfirm(WhInventoryOut model)
        {
            var result = new Result()
            {
                Status = false, Message = "出库失败"
            };

            var wareList = WhWarehouseBo.Instance.GetAllWarehouseList();
            //出库单是否处于待出库状态
            var tempInvenOut = BLL.Warehouse.WhInventoryOutBo.Instance.GetWhInventoryOut(model.SysNo);

            if (tempInvenOut == null)
            {
                result.Message = "出库单不存在";
                return(result);
            }

            model.ItemList = BLL.Warehouse.WhInventoryOutBo.Instance.GetInventoryOutItemList(model.SysNo, 1, 4000).TData.ToList();
            //检查实际出库数量
            foreach (var item in model.ItemList)
            {
                if (BLL.Warehouse.PdProductStockBo.Instance.HasProductStock(model.WarehouseSysNo, item.ProductSysNo, item.RealStockOutQuantity))
                {
                    var warehouseName = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouseName(model.WarehouseSysNo);
                    result.Message = "仓库[" + warehouseName + "]商品(" + item.ProductSysNo + ")出库数量大于库存数";
                    return(result);
                }
            }

            var tempOutWarehouse = wareList.First(p => p.SysNo == model.WarehouseSysNo);
            var tempInStock      = AtAllocationBo.Instance.GetAtAllocationEntity(tempInvenOut.SourceSysNO);
            var tempInWarehouse  = wareList.First(p => p.SysNo == tempInStock.EnterWarehouseSysNo);
            int currentUserSysNo = BLL.Authentication.AdminAuthenticationBo.Instance.Current == null ? 12 : BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo;

            //var tempOutItemList = BLL.Warehouse.WhInventoryOutBo.Instance.GetInventoryOutItemList(model.SysNo, 1, 4000).TData;
            foreach (var item in model.ItemList)
            {
                //减库存
                BLL.Warehouse.PdProductStockBo.Instance.UpdateStockQuantity(model.WarehouseSysNo, item.ProductSysNo, item.RealStockOutQuantity);
                // 更新出库单实际出库数量RealStockOutQuantity
                //WhInventoryOutItem tempOutItem = tempOutItemList.Where(o => o.SysNo == item.SysNo).FirstOrDefault();
                item.LastUpdateBy         = currentUserSysNo;
                item.LastUpdateDate       = DateTime.Now;
                item.RealStockOutQuantity = item.RealStockOutQuantity;
                BLL.Warehouse.WhInventoryOutBo.Instance.UpdateWhInventoryOutItem(item);
            }

            //更新出库单状态
            tempInvenOut.LastUpdateBy   = currentUserSysNo;
            tempInvenOut.LastUpdateDate = DateTime.Now;
            tempInvenOut.Status         = (int)WarehouseStatus.库存调拨出库单状态.已出库;
            if (BLL.Warehouse.WhInventoryOutBo.Instance.UpdateWhInventoryOut(tempInvenOut) > 0)
            {
                result.Status  = true;
                result.Message = "出库成功";
            }
            return(result);
        }
예제 #2
0
        /// <summary>
        /// 更新出库单
        /// </summary>
        /// <param name="model">出库单明细</param>
        /// <returns>出库单系统编号</returns>
        /// <remarks>2016-06-24 王耀发 创建</remarks>
        public override int UpdateWhInventoryOut(WhInventoryOut model)
        {
            var rowsAffected = Context.Update <WhInventoryOut>("WhInventoryOut", model)
                               .AutoMap(x => x.SysNo, x => x.ItemList).Where(x => x.SysNo)
                               .Execute();

            if (model.ItemList != null)
            {
                foreach (var item in model.ItemList)
                {
                    UpdateWhInventoryOutItem(item);
                }
            }
            return(rowsAffected);
        }
예제 #3
0
        /// <summary>
        /// 生成调拨出库单
        /// </summary>
        /// <param name="atAllocationSysNo"></param>
        /// <returns></returns>
        /// <remarks>2016-06-30 陈海裕 创建</remarks>
        public int CreateALCInventoryOutOrder(int atAllocationSysNo)
        {
            var atAllocationEntity = BLL.Warehouse.AtAllocationBo.Instance.GetAtAllocationEntity(atAllocationSysNo);
            var itemList           = BLL.Warehouse.AtAllocationBo.Instance.GetAtAllocationProducts(atAllocationSysNo);

            if (atAllocationEntity == null || itemList == null || !itemList.Any())
            {
                return(0);
            }

            WhInventoryOut invenOutEntity = new WhInventoryOut();

            invenOutEntity.CreatedBy        = BLL.Authentication.AdminAuthenticationBo.Instance.Current == null ? 12 : BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo;
            invenOutEntity.CreatedDate      = DateTime.Now;
            invenOutEntity.DeliveryType     = 0;
            invenOutEntity.IsPrinted        = 0;
            invenOutEntity.LastUpdateBy     = invenOutEntity.CreatedBy;
            invenOutEntity.LastUpdateDate   = invenOutEntity.CreatedDate;
            invenOutEntity.Remarks          = "调拨出库";
            invenOutEntity.SourceSysNO      = atAllocationEntity.SysNo;
            invenOutEntity.SourceType       = (int)WarehouseStatus.出库单来源.调货单;
            invenOutEntity.Stamp            = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
            invenOutEntity.Status           = (int)WarehouseStatus.采购退货出库单状态.待出库;
            invenOutEntity.TransactionSysNo = BLL.Basic.ReceiptNumberBo.Instance.GetAllocationOutNo();
            invenOutEntity.WarehouseSysNo   = atAllocationEntity.OutWarehouseSysNo;
            invenOutEntity.ItemList         = new List <WhInventoryOutItem>();
            foreach (var item in itemList)
            {
                var productName         = BLL.Product.PdProductBo.Instance.GetProductEasName(item.ProductSysNo);
                WhInventoryOutItem temp = new WhInventoryOutItem();
                temp.CreatedBy            = invenOutEntity.CreatedBy;
                temp.CreatedDate          = invenOutEntity.CreatedDate;
                temp.LastUpdateBy         = invenOutEntity.CreatedBy;
                temp.LastUpdateDate       = invenOutEntity.CreatedDate;
                temp.ProductName          = productName;
                temp.ProductSysNo         = item.ProductSysNo;
                temp.RealStockOutQuantity = item.Quantity;  //0
                temp.Remarks          = "";
                temp.SourceItemSysNo  = item.SysNo;
                temp.StockOutQuantity = item.Quantity;
                invenOutEntity.ItemList.Add(temp);
            }

            return(WhInventoryOutBo.Instance.CreateWhInventoryOut(invenOutEntity));
        }
예제 #4
0
        /// <summary>
        /// 插入出库单
        /// </summary>
        /// <param name="model">出库单明细</param>
        /// <returns>出库单系统编号</returns>
        /// <remarks>2016-06-24 王耀发 创建</remarks>
        public override int InsertWhInventoryOut(WhInventoryOut model)
        {
            var sysNo = Context.Insert <WhInventoryOut>("WhInventoryOut", model)
                        .AutoMap(x => x.SysNo, x => x.ItemList)
                        .ExecuteReturnLastId <int>("SysNo");

            model.SysNo = sysNo;
            #region 添加出库单明细
            if (null != model.ItemList && model.ItemList.Count > 0)
            {
                foreach (var item in model.ItemList)
                {
                    item.InventoryOutSysNo = sysNo;
                    InsertWhInventoryOutItem(item);
                }
            }
            #endregion
            return(sysNo);
        }
예제 #5
0
        /// <summary>
        /// 审核采购退货单
        /// </summary>
        /// <param name="sysNo">采购单编号</param>
        /// <remarks>2016-6-18 王耀发 创建</remarks>
        public bool AuditPurchaseReturn(int sysNo)
        {
            int CreatedBy      = BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo;
            var purchaseReturn = IPrPurchaseReturnDao.Instance.GetPrPurchaseReturn(sysNo);

            if (UpdateStatus(sysNo, (int)PurchaseStatus.采购退货单状态.已审核))
            {
                var receiptVoucherMod = new FnReceiptVoucher();
                receiptVoucherMod.TransactionSysNo = "";
                receiptVoucherMod.IncomeType       = (int)Hyt.Model.WorkflowStatus.FinanceStatus.收款单收入类型.预付;
                receiptVoucherMod.Source           = (int)Hyt.Model.WorkflowStatus.FinanceStatus.收款来源类型.采购退货单;
                receiptVoucherMod.SourceSysNo      = sysNo;
                receiptVoucherMod.IncomeAmount     = purchaseReturn.ReturnTotalMoney;
                receiptVoucherMod.ReceivedAmount   = 0;
                receiptVoucherMod.Status           = (int)Hyt.Model.WorkflowStatus.FinanceStatus.收款单状态.待确认;
                receiptVoucherMod.Remark           = "采购退货收款单";
                receiptVoucherMod.CreatedBy        = CreatedBy;
                receiptVoucherMod.CreatedDate      = DateTime.Now;
                receiptVoucherMod.ConfirmedBy      = 0;
                receiptVoucherMod.ConfirmedDate    = DateTime.Now;
                receiptVoucherMod.LastUpdateBy     = CreatedBy;
                receiptVoucherMod.LastUpdateDate   = DateTime.Now;
                receiptVoucherMod.PaymentType      = null;
                FinanceBo.Instance.InsertReceiptVoucher(receiptVoucherMod);
                //创建出库单
                WhInventoryOut outEntity = new WhInventoryOut
                {
                    TransactionSysNo = ReceiptNumberBo.Instance.GetPurchaseOutNo(),
                    WarehouseSysNo   = purchaseReturn.WarehouseSysNo,
                    SourceType       = (int)WarehouseStatus.出库单来源.采购单,
                    SourceSysNO      = sysNo,
                    DeliveryType     = 0,
                    Remarks          = "采购退货出库",
                    IsPrinted        = 0,
                    Status           = (int)WarehouseStatus.采购退货出库单状态.待出库,
                    CreatedBy        = CreatedBy,
                    CreatedDate      = DateTime.Now,
                    LastUpdateBy     = CreatedBy,
                    LastUpdateDate   = DateTime.Now,
                    Stamp            = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue,
                };

                outEntity.ItemList = new List <WhInventoryOutItem>();
                var        purchaseReturnDetails = BLL.Purchase.PrPurchaseReturnDetailsBo.Instance.GetPurchaseReturnDetailsList(sysNo);
                PrPurchase purMod = PrPurchaseBo.Instance.GetPrPurchaseInfo(purchaseReturn.PurchaseSysNo);

                //出库明细
                foreach (var item in purchaseReturnDetails)
                {
                    Hyt.Model.PdProduct Product = Hyt.BLL.Product.PdProductBo.Instance.GetProductBySysNo(item.ProductSysNo);
                    outEntity.ItemList.Add(new WhInventoryOutItem
                    {
                        ProductSysNo         = item.ProductSysNo,
                        ProductName          = Product.ProductName,
                        StockOutQuantity     = item.ReturnQuantity,
                        RealStockOutQuantity = 0,
                        SourceItemSysNo      = item.SysNo,//记录出库单明细来源单号(采购退货单明细编号)
                        Remarks        = "",
                        CreatedBy      = CreatedBy,
                        CreatedDate    = DateTime.Now,
                        LastUpdateBy   = CreatedBy,
                        LastUpdateDate = DateTime.Now
                    });
                }
                var inSysNo = WhInventoryOutBo.Instance.CreateWhInventoryOut(outEntity); //保存出库单数据
            }
            return(true);
        }
예제 #6
0
 /// <summary>
 /// 插入出库单
 /// </summary>
 /// <param name="model">出库单明细</param>
 /// <returns>出库单系统编号</returns>
 /// <remarks>2016-06-24 王耀发 创建</remarks>
 public int CreateWhInventoryOut(WhInventoryOut model)
 {
     return(IWhInventoryOutDao.Instance.InsertWhInventoryOut(model));
 }
예제 #7
0
 /// <summary>
 /// 更新出库单
 /// </summary>
 /// <param name="model">出库单明细</param>
 /// <returns>返回受影响行</returns>
 /// <remarks>2013-06-09 王耀发 创建</remarks>
 public int UpdateWhInventoryOut(WhInventoryOut model)
 {
     return(IWhInventoryOutDao.Instance.UpdateWhInventoryOut(model));
 }
예제 #8
0
        /// <summary>
        /// 商品出库
        /// </summary>
        /// <param name="model">出库单实体</param>
        /// <param name="user">操作人</param>
        /// <returns>返回操作状态(Result.StatusCode大于等于0成功,小于0失败)</returns>
        /// 2016-06-24 王耀发 创建
        private void ItemInventoryOut(WhInventoryOut model, SyUser user)
        {
            if (model == null || model.ItemList == null || !model.ItemList.Any())
            {
                return;
            }

            var purchaseList = new List <PurchaseInfo>();
            var warhouseInfo = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(model.WarehouseSysNo);

            var purchaseReturnInfo = Hyt.DataAccess.Purchase.IPrPurchaseReturnDao.Instance.GetPrPurchaseReturn(model.SourceSysNO);//采购退货单
            var _purchaseList      = BLL.Purchase.PrPurchaseBo.Instance.GetPurchaseDetailsByPurchaseSysNo(purchaseReturnInfo.PurchaseSysNo);

            model.ItemList.ForEach(x =>
            {
                var data          = IWhInventoryOutDao.Instance.GetWhInventoryOutItem(x.SysNo);
                x.SourceItemSysNo = data.SourceItemSysNo;
                if (data == null)
                {
                    throw new HytException(string.Format("该出库{0}无效!", x.ProductName));
                }
                var count = data.RealStockOutQuantity + x.RealStockOutQuantity;
                if (count > data.StockOutQuantity)
                {
                    throw new HytException("实际商品出库数量总和超出商品出库数量,请检查!");
                }

                data.RealStockOutQuantity = count;
                data.LastUpdateBy         = user.SysNo;
                data.LastUpdateDate       = DateTime.Now;
                UpdateWhInventoryOutItem(data);
                //更新退货明细的出库商量
                PrPurchaseReturnDetailsBo.Instance.UpdateOutQuantity(model.SourceSysNO, data.ProductSysNo, count);
                //减库存操作
                Hyt.BLL.Warehouse.PdProductStockBo.Instance.UpdateStockQuantity(model.WarehouseSysNo, data.ProductSysNo, -1 * x.RealStockOutQuantity);

                var purchaseItemInfo = _purchaseList.Where(j => j.ProductSysNo == x.ProductSysNo).FirstOrDefault();
                var purchaseInfo     = new PurchaseInfo()
                {
                    WarehouseSysNo  = model.WarehouseSysNo,
                    FDate           = model.CreatedDate.ToString(),
                    WarehouseNumber = warhouseInfo.ErpCode,
                    Quantity        = data.RealStockOutQuantity,
                    FNote           = "平台出库单明细系统编号:" + x.SysNo,
                    Price           = purchaseItemInfo.Money,
                    Amount          = purchaseItemInfo.Money * data.RealStockOutQuantity,
                    ErpCode         = purchaseItemInfo.ErpCode,
                    SettleDate      = model.CreatedDate.ToString(),
                };
                purchaseList.Add(purchaseInfo);
            });

            //更新退货单的出库商量
            PrPurchaseReturnBo.Instance.UpdateOutQuantity(model.SourceSysNO);

            #region  步金蝶
            if (model.SourceType == (int)WarehouseStatus.出库单来源.采购单)
            {
                string flowIdentify = model.SourceSysNO.ToString(); //采购订单系统编号
                string description  = model.SysNo.ToString();       //入库单号
                var    client       = Extra.Erp.Kis.KisProviderFactory.CreateProvider();
                //单据编号
                //string voucherNo=EasBo.Instance.GetVoucherNoByTlowIdentify((int)Extra.Erp.Model.接口类型.采购入库退货, purchaseReturnInfo.PurchaseSysNo.ToString());
                string voucherNo = purchaseReturnInfo.PurchaseSysNo.ToString();//采购单系统编号
                client.PurchaseOutStock(purchaseList, description, model.SourceSysNO.ToString(), voucherNo);
            }
            #endregion
        }
예제 #9
0
 /// <summary>
 /// 更新出库单
 /// </summary>
 /// <param name="model">出库单明细</param>
 /// <returns>出库单系统编号</returns>
 /// <remarks>2016-06-24 王耀发 创建</remarks>
 public abstract int UpdateWhInventoryOut(WhInventoryOut model);
예제 #10
0
 /// <summary>
 /// 插入出库单
 /// </summary>
 /// <param name="model">出库单明细</param>
 /// <returns>出库单系统编号</returns>
 /// <remarks>2016-06-24 王耀发 创建</remarks>
 public abstract int InsertWhInventoryOut(WhInventoryOut model);
예제 #11
0
        /// <summary>
        /// 完成调拨
        /// </summary>
        /// <param name="model">出库单</param>
        /// <remarks>2018-01-17 杨浩 创建</remarks>
        public Hyt.Model.Result CompleteTransfer(WhInventoryOut model)
        {
            var result = new Hyt.Model.Result()
            {
                Status = false
            };
            var user = BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base;

            #region 出库
            // 操作用户是否有相应的仓库权限
            if (!AdminAuthenticationBo.Instance.HasWareHousePrivilege(model.WarehouseSysNo))
            {
                result.Message = "用户没有编号为" + model.WarehouseSysNo + "仓库的权限";
                return(result);
            }
            //出库
            var tempResult = BLL.Warehouse.AtAllocationBo.Instance.DoAAOutConfirm(model);
            if (!tempResult.Status)
            {
                return(tempResult);
            }

            //生成入库单
            int whStockInSysNo = BLL.Logistics.LgDeliveryBo.Instance.CreateInStockByInventoryOut(model, user.SysNo, "仓库调拨出库生成入库单");
            if (whStockInSysNo <= 0)
            {
                result.Message = "生成入库单失败!";
                return(result);
            }

            var temInvenOut = BLL.Warehouse.WhInventoryOutBo.Instance.GetWhInventoryOut(model.SysNo);
            //更新库存调拨单状态
            var atAllocationInfo = BLL.Warehouse.AtAllocationBo.Instance.GetAtAllocationEntity(temInvenOut.SourceSysNO);
            if (atAllocationInfo == null)
            {
                result.Message = "操作失败,调拨单不存在!";
                return(result);
            }
            #endregion

            #region 入库
            var modelIn = GetStockIn(whStockInSysNo);
            if (modelIn == null || model.Status == WarehouseStatus.入库单状态.作废.GetHashCode())
            {
                throw new HytException("入库不存在或已经作废,操作无效请检查!");
            }

            modelIn.ItemList = GetStockInItemList(whStockInSysNo);
            if (modelIn.ItemList == null)
            {
                result.Message = "入库单明细不能为空!";
                return(result);
            }

            modelIn.ItemList = modelIn.ItemList.Select(x => new WhStockInItem()
            {
                SysNo               = x.SysNo,
                StockInSysNo        = x.StockInSysNo,
                RealStockInQuantity = x.StockInQuantity,
                ProductSysNo        = x.ProductSysNo,
                ProductName         = x.ProductName,
                StockInQuantity     = x.StockInQuantity,
                SourceItemSysNo     = x.SourceItemSysNo,
                Remarks             = x.Remarks,
                CreatedBy           = x.CreatedBy,
                CreatedDate         = x.CreatedDate,
                LastUpdateDate      = x.LastUpdateDate,
                ProductErpCode      = x.ProductErpCode,
            }).ToList();

            //商品入库
            ItemInStock(modelIn, user);
            // 更新调拨单状态
            if (modelIn.SourceType != (int)WarehouseStatus.入库单据类型.调拨出库单)
            {
                result.Message = "来源单据类型必须是调拨出库单!";
                return(result);
            }

            atAllocationInfo.Status = (int)Model.WorkflowStatus.WarehouseStatus.库存调拨单状态.已完成;
            BLL.Warehouse.AtAllocationBo.Instance.UpdateAtAllocation(atAllocationInfo);
            #endregion
            result.Status = true;
            return(result);
        }