Example #1
0
        /// <summary>
        /// 操作预留
        /// </summary>
        /// <param name="result"></param>
        /// <returns></returns>
        public bool OperateReserve(STK_StockReserveResult result)
        {
            this.CheckSession();
            try
            {
                //预留调整量
                int?tempReserveQty = 0;
                ORD_SalesOrderLineResult orderLineResult = new ORD_SalesOrderLineResult();
                ORD_SalesOrderLineBLL    orderLineBLL    = new ORD_SalesOrderLineBLL();
                orderLineBLL.SessionInfo = this.SessionInfo;
                ORD_PurchaseReturnLineResult returnLineResult = new ORD_PurchaseReturnLineResult();
                ORD_PurchaseReturnLineBLL    returnLineBLL    = new ORD_PurchaseReturnLineBLL();
                returnLineBLL.SessionInfo = this.SessionInfo;

                //空值转换为零
                if (result.ReserveQty == null)
                {
                    result.ReserveQty = 0;
                }
                // 预留明细的业务类型
                switch (result.SourceBillType)
                {
                case "销售出库":
                    orderLineResult = orderLineBLL.GetInfo(new ORD_SalesOrderLineParam()
                    {
                        SOLineGuid = result.SourceBillLineGuid
                    });
                    if (orderLineResult != null)
                    {
                        if (orderLineResult.Qty == null)
                        {
                            orderLineResult.Qty = 0;
                        }
                        if (orderLineResult.ReserveQty == null)
                        {
                            orderLineResult.ReserveQty = 0;
                        }
                        tempReserveQty = orderLineResult.Qty - orderLineResult.ReserveQty;
                    }
                    break;

                case "采购退货出库":
                    returnLineResult = returnLineBLL.GetInfo(new ORD_PurchaseReturnLineParam()
                    {
                        PRLineGuid = result.SourceBillLineGuid
                    });
                    if (returnLineResult != null)
                    {
                        if (returnLineResult.Qty == null)
                        {
                            returnLineResult.Qty = 0;
                        }
                        if (returnLineResult.ReserveQty == null)
                        {
                            returnLineResult.ReserveQty = 0;
                        }
                        tempReserveQty = returnLineResult.Qty - returnLineResult.ReserveQty;
                    }
                    break;
                }

                //获取已存在的预留信息
                STK_StockReserveResult oldReserveResult = null;
                if (result.SRGuid != null)
                {
                    STK_StockReserveParam reserveParam = new STK_StockReserveParam();
                    reserveParam.SRGuid = result.SRGuid;
                    oldReserveResult    = this.GetInfo(reserveParam);
                }
                if (oldReserveResult != null)
                {
                    if (oldReserveResult.ReserveQty == null)
                    {
                        orderLineResult.ReserveQty = 0;
                    }
                    //修改预留数量,预留量增加
                    if (result.ReserveQty >= oldReserveResult.ReserveQty)
                    {
                        tempReserveQty  = result.ReserveQty - oldReserveResult.ReserveQty;
                        result.OperFlag = true;
                    }
                    //修改预留数量,预留量减少
                    else if (result.ReserveQty < oldReserveResult.ReserveQty)
                    {
                        tempReserveQty  = oldReserveResult.ReserveQty - result.ReserveQty;
                        result.OperFlag = false;
                    }
                }
                //获取库存信息
                STK_StockBLL stockBLL = new STK_StockBLL();
                stockBLL.SessionInfo = this.SessionInfo;
                STK_StockResult stockResult = stockBLL.GetInfo(new STK_StockParam()
                {
                    ItemCode = result.ItemCode
                });
                if (stockResult != null)
                {
                    //空值转换为零
                    if (stockResult.UsableQty == null)
                    {
                        stockResult.UsableQty = 0;
                    }
                    if (stockResult.BookedQty == null)
                    {
                        stockResult.BookedQty = 0;
                    }
                }

                int?UsableQty = stockResult.UsableQty;
                //删除预留信息
                if (result.IsDeleted.ToBooleanHasNull())
                {
                    result = oldReserveResult;
                    stockResult.UsableQty += result.ReserveQty;
                    stockResult.BookedQty -= result.ReserveQty;
                    switch (result.SourceBillType)
                    {
                    case "销售出库":
                        orderLineResult.ReserveQty -= result.ReserveQty;
                        break;

                    case "采购退货出库":
                        returnLineResult.ReserveQty -= result.ReserveQty;
                        break;
                    }
                }
                //新增或者修改预留信息
                else
                {
                    switch (result.OperFlag)
                    {
                    case true:      //增加
                        //预留信息已经存在
                        if (oldReserveResult != null)
                        {
                            result = oldReserveResult;
                            if (UsableQty >= tempReserveQty)      //大于需要预留数量
                            {
                                result.ReserveQty += tempReserveQty;
                            }
                            else      //小于需要预留数量
                            {
                                result.ReserveQty += UsableQty;
                            }
                        }
                        //新的预留
                        else
                        {
                            if (UsableQty >= tempReserveQty)      //大于需要预留数量
                            {
                                result.ReserveQty = tempReserveQty;
                            }
                            else      //小于需要预留数量
                            {
                                result.ReserveQty = UsableQty;
                            }
                        }
                        if (UsableQty >= tempReserveQty)      //大于需要预留数量
                        {
                            stockResult.UsableQty -= tempReserveQty;
                            stockResult.BookedQty += tempReserveQty;
                            switch (result.SourceBillType)
                            {
                            case "销售出库":
                                orderLineResult.ReserveQty += tempReserveQty;
                                break;

                            case "采购退货出库":
                                returnLineResult.ReserveQty += tempReserveQty;
                                break;
                            }
                        }
                        else
                        {
                            stockResult.UsableQty -= UsableQty;
                            stockResult.BookedQty += UsableQty;
                            switch (result.SourceBillType)
                            {
                            case "销售出库":
                                orderLineResult.ReserveQty += UsableQty;
                                break;

                            case "采购退货出库":
                                returnLineResult.ReserveQty += UsableQty;
                                break;
                            }
                        }
                        break;

                    case false:      //减少库存量
                        result                 = oldReserveResult;
                        result.ReserveQty     -= tempReserveQty;
                        stockResult.UsableQty += tempReserveQty;
                        stockResult.BookedQty -= tempReserveQty;
                        switch (result.SourceBillType)
                        {
                        case "销售出库":
                            orderLineResult.ReserveQty -= tempReserveQty;
                            break;

                        case "采购退货出库":
                            returnLineResult.ReserveQty -= tempReserveQty;
                            break;
                        }

                        break;
                    }  // end of switch
                }   //end of if  else
                    //更改预留表
                this.AddOrUpdate(result);
                //更改库存
                stockBLL.AddOrUpdate(stockResult);
                //更新预留关联单据明细
                switch (result.SourceBillType)
                {
                case "销售出库":
                    orderLineBLL.AddOrUpdate(orderLineResult);
                    break;

                case "采购退货出库":
                    returnLineBLL.AddOrUpdate(returnLineResult);
                    break;
                }    // end of if else
            }
            catch (WarnException exp)
            {
                throw exp;
            }
            catch (System.Exception exp)
            {
                LogInfoBLL.WriteLog(this.SessionInfo, exp);
                throw exp;
            }
            return(true);
        }