public static void AssignValues(ProductItemInfo source, ProductItem target)
 {
     target.ProductId = source.ProductId.GetValueOrDefault();
     //target.Currency = source.Currency;
     target.NetWeight   = source.NetWeight;
     target.Comments    = source.Comments;
     target.ReceiveTime = source.ReceiveTime;
     //target.SalesGuidePrice = source.SalesGuidePrice;
     target.Status    = source.ImportStatus.GetValueOrDefault();//.Status;
     target.Quantity  = source.Quantity;
     target.UnitPrice = source.UnitPrice;
     target.Units     = source.Units;
 }
        public static void AssignValues(ProductItem source, ProductItemInfo target)
        {
            //target.Currency = source.Currency;
            target.Comments         = source.Comments;
            target.ImportStatus     = source.Status;
            target.NetWeight        = source.NetWeight.GetValueOrDefault();
            target.OrderContractId  = source.OrderContractId;
            target.OrderContractKey = source.OrderContractKey;
            target.ProductId        = source.ProductId;
            target.ProductItemId    = source.ProductItemId;
            target.ProductName      = source.ProductName;
            target.ProductKey       = source.ProductKey;
            target.Quantity         = source.Quantity;
            target.ReceiveTime      = source.ReceiveTime;
            target.SalesGuidePrice  = (source.Product != null) ?
                                      (new Nullable <double>(source.Product.GuidingPrice)) : null;//source.SalesGuidePrice.GetValueOrDefault();
            target.UnitPrice = source.UnitPrice;
            target.Units     = source.Units;

            target.Product = new ProductViewModel(source.Product);
        }
        private ProductItemViewModel GetIndexListProductItemsNonStock(ExtendedIdentityDbContext db,
                                                                      IOwinContext owinContext, ContractListCondition condition, ProductItemStatus?productItemStatus)
        {
            int userEntityPriv = PrivilegeManager.Instance.GetEntityPrivilegeLevel(condition.UserName);

            //IQueryable<ProductItem>
            var productItemQueryable = db.ProductItems.Include(
                "OrderContract").Where(pEntity => (
                                           (pEntity.OrderContract.EntityPrivLevRequired < userEntityPriv ||
                                            (pEntity.OrderContract.EntityPrivLevRequired == userEntityPriv &&
                                             pEntity.OrderContract.OrderSysUserKey == condition.UserName)) && //根据OrderContract进行数据权限控制
                                           !db.StockItems.Any(
                                               stEntity => stEntity.ProductItemId == pEntity.ProductItemId))
                                       )
                                       .Select(ProductItem => new
            {
                ProductItem,
                ProductItem.OrderContract,
                ProductItem.OrderContract.OrderContractKey,
                ProductItem.OrderContract.EntityPrivLevRequired,
            });

            //.Join(db.StockItems, pi => pi.ProductItemId,
            //si => si.ProductItemId, (pi, si) => new {pi,si}).Where(
            //entity =>( entity.si !=null && entity.si.)
            if (condition.OrderType.HasValue)
            {
                productItemQueryable = productItemQueryable.Where(
                    item => item.OrderContract != null &&
                    item.OrderContract.OrderType == condition.OrderType.Value);
            }

            AggregationsViewModel aggr = new AggregationsViewModel();

            if (ContractListInclude.WithAggregations ==
                (condition.ListInclude & ContractListInclude.WithAggregations))
            {
                aggr.IsEnable = true;
                aggr.Count    = productItemQueryable.Count();
            }

            if (condition.OrderField == ContractOrderField.CONTRACT_KEY_ASC)
            {
                productItemQueryable = productItemQueryable.OrderBy(m => m.OrderContractKey);
            }
            else if (condition.OrderField == ContractOrderField.CONTRACT_KEY_DESC)
            {
                productItemQueryable = productItemQueryable
                                       .OrderByDescending(m => m.OrderContractKey);
            }
            else if (condition.OrderField == ContractOrderField.CTIME_DESC)
            {
                productItemQueryable = productItemQueryable
                                       .OrderByDescending(m => m.OrderContract.OrderCreateTime);
            }
            else
            {
                productItemQueryable = productItemQueryable
                                       .OrderBy(m => m.OrderContract.OrderCreateTime);
            }

            if (condition.Page.HasValue && condition.Rows.HasValue)
            {
                productItemQueryable = productItemQueryable.Skip(
                    (condition.Page.Value - 1) * condition.Rows.Value)
                                       .Take(condition.Rows.Value);
            }

            var list = productItemQueryable.ToList();
            List <ProductItemInfo> result = new List <ProductItemInfo>();

            foreach (var item in list)
            {
                ProductItemInfo info = new ProductItemInfo(item.ProductItem);
                result.Add(info);
            }

            return(new ProductItemViewModel()
            {
                IsEnable = true,
                Aggregations = aggr,
                ContractItems = result
            });
        }