/// <summary>
        /// 生成入库单
        /// </summary>
        private BillStoringVM GenerateStoring(BillStoringProductExchangeEntity entity)
        {
            BillStoringVM storing = new BillStoringVM();
            BillStoring   bill    = storing.Master;

            bill.OrganizationID   = VMGlobal.CurrentUser.OrganizationID;
            bill.StorageID        = entity.StorageID;
            bill.RefrenceBillCode = entity.Code;
            bill.BillType         = (int)BillTypeEnum.BillProductExchange;
            bill.Remark           = "交接入库";
            bill.BrandID          = entity.BrandID;

            List <BillStoringDetails> siDetails = new List <BillStoringDetails>();

            foreach (var p in entity.Details)
            {
                siDetails.Add(new BillStoringDetails
                {
                    ProductID = p.ProductID,
                    Quantity  = p.Quantity
                });
            }
            ;
            storing.Details = siDetails;
            return(storing);
        }
        /// <summary>
        /// 生成入库单
        /// </summary>
        private BillStoringVM GenerateStoring(int brandID)
        {
            var           bill     = this.Master;
            BillStoringVM storing  = new BillStoringVM();
            var           soMaster = storing.Master;

            soMaster.Remark         = "零售入库";
            soMaster.BillType       = (int)BillTypeEnum.BillRetail;
            soMaster.OrganizationID = VMGlobal.CurrentUser.OrganizationID;
            soMaster.StorageID      = bill.StorageID;
            soMaster.BrandID        = brandID;

            List <BillStoringDetails> soDetails = new List <BillStoringDetails>();

            this.TraverseGridDataItems(p =>
            {
                if (p.BrandID == brandID && p.Quantity < 0)
                {
                    soDetails.Add(new BillStoringDetails
                    {
                        ProductID = p.ProductID,
                        Quantity  = (-1) * p.Quantity
                    });
                }
            });
            storing.Details = soDetails;
            return(storing);
        }
        public OPResult Storing(BillStoringProductExchangeEntity entity)
        {
            if (entity.Status == (int)BillProductExchangeStatusEnum.已入库)
            {
                return(new OPResult {
                    IsSucceed = false, Message = "该单已经入库."
                });
            }
            if (entity.Status == (int)BillProductExchangeStatusEnum.被退回)
            {
                return(new OPResult {
                    IsSucceed = false, Message = "被退回单据不能入库."
                });
            }
            if (entity.StorageID == default(int))
            {
                return(new OPResult {
                    IsSucceed = false, Message = "请选择入库仓库."
                });
            }
            BillStoringVM       storingvm = this.GenerateStoring(entity);
            BillProductExchange pe        = VMGlobal.ManufacturingQuery.LinqOP.GetById <BillProductExchange>(entity.ID);

            pe.Status = (int)BillProductExchangeStatusEnum.已入库;
#if UniqueCode
            var uniqueCodes = BillStoringVM.GetSnapshotDetails(pe.Code);
#endif
            using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    storingvm.SaveWithNoTran();
                    VMGlobal.ManufacturingQuery.LinqOP.Update <BillProductExchange>(pe);
#if UniqueCode
                    storingvm.SaveUniqueCodes(uniqueCodes);
#endif
                    scope.Complete();
                }
                catch (Exception e)
                {
                    return(new OPResult {
                        IsSucceed = false, Message = "入库失败\n失败原因:" + e.Message
                    });
                }
            }
            entity.Status = (int)BillProductExchangeStatusEnum.已入库;
            ((ObservableCollection <BillStoringProductExchangeEntity>) this.Entities).Remove(entity);
            return(new OPResult {
                IsSucceed = true, Message = "入库成功."
            });
        }