/// <summary> /// 下级调拨单汇总 /// </summary> public static DataTable AggregateSubordinateCannibalize(CompositeFilterDescriptorCollection filters) { var lp = _query.LinqOP; var oids = OrganizationListVM.CurrentOrganization.ChildrenOrganizations.Select(o => o.ID).ToArray(); var cannibalizeContext = lp.Search <BillCannibalize>(o => oids.Contains(o.ToOrganizationID) && oids.Contains(o.OrganizationID)); var detailsContext = lp.GetDataContext <BillCannibalizeDetails>(); var productContext = lp.GetDataContext <ViewProduct>(); var brandIDs = VMGlobal.PoweredBrands.Select(o => o.ID); FilterBillWithBrand(cannibalizeContext, filters, brandIDs); var data = from cannibalize in cannibalizeContext from details in detailsContext where cannibalize.ID == details.BillID from product in productContext where product.ProductID == details.ProductID //&& brandIDs.Contains(product.BrandID) select new CannibalizeEntityForAggregation { OrganizationID = cannibalize.OrganizationID, ToOrganizationID = cannibalize.ToOrganizationID, ProductID = product.ProductID, BrandID = product.BrandID, CreateTime = cannibalize.CreateTime.Date, StyleCode = product.StyleCode, Quantity = details.Quantity, Status = cannibalize.Status }; data = (IQueryable <CannibalizeEntityForAggregation>)data.Where(filters); return(new BillReportHelper().TransferSizeToHorizontal <DistributionProductShow>(AggregateBill(data, false))); }
public static List <StoreMoveAggregationEntity> AggregateStoreMove(CompositeFilterDescriptorCollection filters) { var lp = _query.LinqOP; var brandIDs = VMGlobal.PoweredBrands.Select(o => o.ID); var storemoveContext = lp.Search <BillStoreMove>(o => o.OrganizationID == VMGlobal.CurrentUser.OrganizationID); FilterBillWithBrand(storemoveContext, filters, brandIDs); var detailsContext = lp.GetDataContext <BillStoreMoveDetails>(); var productContext = lp.GetDataContext <ViewProduct>(); var data = from sm in storemoveContext from details in detailsContext where sm.ID == details.BillID from product in productContext where product.ProductID == details.ProductID //&& brandIDs.Contains(product.BrandID) select new StoreMoveEntityForAggregation { ID = sm.ID, ProductID = product.ProductID, BrandID = product.BrandID, Code = sm.Code, CreateTime = sm.CreateTime.Date, StorageIDIn = sm.StorageIDIn, StorageIDOut = sm.StorageIDOut, StyleCode = product.StyleCode, Quantity = details.Quantity }; var filtedData = (IQueryable <StoreMoveEntityForAggregation>)data.Where(filters); var sum = filtedData.GroupBy(o => new { o.ProductID, o.StorageIDOut, o.StorageIDIn }).Select(g => new { Key = g.Key, Quantity = g.Sum(o => o.Quantity) }).ToList(); var pids = sum.Select(o => o.Key.ProductID).ToArray(); var products = _query.LinqOP.Search <ViewProduct>(o => pids.Contains(o.ProductID)).ToList(); var result = sum.Select(o => { var product = products.First(p => p.ProductID == o.Key.ProductID); return(new StoreMoveAggregationEntity { BYQID = product.BYQID, ProductID = product.ProductID, ProductCode = product.ProductCode, StyleCode = product.StyleCode, ColorID = product.ColorID, SizeID = product.SizeID, Quantity = o.Quantity, OutStorageName = Storages.Find(s => s.ID == o.Key.StorageIDOut).Name, InStorageName = Storages.Find(s => s.ID == o.Key.StorageIDIn).Name }); }).ToList(); foreach (var r in result) { r.ColorCode = VMGlobal.Colors.Find(o => o.ID == r.ColorID).Code; r.BrandID = VMGlobal.BYQs.Find(o => o.ID == r.BYQID).BrandID; r.BrandCode = VMGlobal.PoweredBrands.Find(o => o.ID == r.BrandID).Code; r.SizeName = VMGlobal.Sizes.Find(o => o.ID == r.SizeID).Name; } return(result); }
/// <summary> /// 本级退货单汇总 /// </summary> public static DataTable AggregateSelfGoodReturn(CompositeFilterDescriptorCollection filters) { var lp = _query.LinqOP; var goodReturnContext = lp.Search <BillGoodReturn>(o => o.OrganizationID == VMGlobal.CurrentUser.OrganizationID); var detailsContext = lp.GetDataContext <BillGoodReturnDetails>(); var productContext = lp.GetDataContext <ViewProduct>(); var brandIDs = VMGlobal.PoweredBrands.Select(o => o.ID); FilterBillWithBrand(goodReturnContext, filters, brandIDs); var data = from goodreturn in goodReturnContext from details in detailsContext where goodreturn.ID == details.BillID from product in productContext where product.ProductID == details.ProductID //&& brandIDs.Contains(product.BrandID) select new MultiStatusBillEntityForAggregation { StorageID = goodreturn.StorageID, ProductID = product.ProductID, BrandID = product.BrandID, CreateTime = goodreturn.CreateTime.Date, StyleCode = product.StyleCode, Quantity = details.Quantity, Status = goodreturn.Status }; data = (IQueryable <MultiStatusBillEntityForAggregation>)data.Where(filters); return(new BillReportHelper().TransferSizeToHorizontal <DistributionProductShow>(AggregateBill(data))); }
/// <summary> /// 入库单明细 /// </summary> //public static IList GetBillStoringDetails(int billID) //{ // var detailsContext = _query.LinqOP.Search<BillStoringDetails>(o => o.BillID == billID); // var productContext = _query.LinqOP.GetDataContext<ViewProduct>(); // var data = from details in detailsContext // from product in productContext // where details.ProductID == product.ProductID // select new ProductForBill // { // ProductCode = product.ProductCode, // BrandCode = product.BrandCode, // StyleCode = product.StyleCode, // ColorCode = product.ColorCode, // SizeName = product.SizeName, // Price = product.Price, // Quantity = details.Quantity // }; // return data.ToList(); //} /// <summary> /// 入库汇总 /// </summary> //public static DataTable AggregateStoring(CompositeFilterDescriptorCollection filters) //{ // var lp = _query.LinqOP; // var storingContext = lp.GetDataContext<BillStoring>().Where(o => o.OrganizationID == VMGlobal.CurrentUser.OrganizationID); // var storingDetailsContext = lp.GetDataContext<BillStoringDetails>(); // var productContext = lp.GetDataContext<ViewProduct>(); // //var storageContext = lp.GetDataContext<Storage>(); // var brandIDs = VMGlobal.PoweredBrands.Select(o => o.ID); // FilterBillWithBrand(storingContext, filters, brandIDs); // var data = from storing in storingContext // from storingDetails in storingDetailsContext // where storing.ID == storingDetails.BillID // from product in productContext // where product.ProductID == storingDetails.ProductID //&& brandIDs.Contains(product.BrandID) // //from storage in storageContext // //where storing.StorageID == storage.ID // select new StoreOIEntityForAggregation // { // ProductID = product.ProductID, // BrandID = product.BrandID, // StorageID = storing.StorageID, // CreateTime = storing.CreateTime.Date, // BillType = storing.BillType, // //ProductCode = product.ProductCode, // //BrandCode = product.BrandCode, // StyleCode = product.StyleCode, // //ColorCode = product.ColorCode, // //SizeName = product.SizeName, // //Price = product.Price, // NameID = product.NameID, // Quantity = storingDetails.Quantity // }; // data = (IQueryable<StoreOIEntityForAggregation>)data.Where(filters); // return new BillReportHelper().TransferSizeToHorizontal<DistributionProductForBrush>(AggregateBill(data)); //} #endregion public static IEnumerable <DistributionEntity> GetOtherShopStock(CompositeFilterDescriptorCollection filters) { var lp = _query.LinqOP; var shops = OrganizationLogic.GetSiblingShops(VMGlobal.CurrentUser.OrganizationID); var oids = shops.Where(o => o.ID != VMGlobal.CurrentUser.OrganizationID).Select(o => o.ID); var stockContext = lp.GetDataContext <Stock>(); var storageContext = lp.Search <Storage>(o => oids.Contains(o.OrganizationID) && o.Flag); var brandIDs = VMGlobal.PoweredBrands.Select(o => o.ID); var productContext = lp.Search <ViewProduct>(o => brandIDs.Contains(o.BrandID)); var data = from stock in stockContext from storage in storageContext where stock.StorageID == storage.ID && stock.Quantity != 0 from product in productContext where stock.ProductID == product.ProductID select new BillEntityForAggregation { OrganizationID = storage.OrganizationID, StyleCode = product.StyleCode, BrandID = product.BrandID, ProductID = product.ProductID, Quantity = stock.Quantity }; var filtedData = (IQueryable <BillEntityForAggregation>)data.Where(filters);//即使filters中有data没有的过滤属性,也不会出错,但是会产生0<>0的恒为假条件 var sum = filtedData.GroupBy(o => new { o.ProductID, o.OrganizationID }).Select(g => new { Key = g.Key, Quantity = g.Sum(o => o.Quantity) }).ToList(); var pids = sum.Select(o => o.Key.ProductID).ToArray(); var products = lp.Search <ViewProduct>(o => pids.Contains(o.ProductID)).ToList(); var result = sum.Select(o => { var product = products.First(p => p.ProductID == o.Key.ProductID); return(new DistributionEntity { ProductID = product.ProductID, ProductCode = product.ProductCode, StyleCode = product.StyleCode, BYQID = product.BYQID, ColorID = product.ColorID, SizeID = product.SizeID, Quantity = o.Quantity, OrganizationID = o.Key.OrganizationID, OrganizationName = shops.Find(c => c.ID == o.Key.OrganizationID).Name }); }).ToList(); foreach (var r in result) { r.ColorCode = VMGlobal.Colors.Find(o => o.ID == r.ColorID).Code; r.SizeName = VMGlobal.Sizes.Find(o => o.ID == r.SizeID).Name; var byq = VMGlobal.BYQs.Find(o => o.ID == r.BYQID); r.BrandID = byq.BrandID; r.BrandCode = VMGlobal.PoweredBrands.Find(o => o.ID == r.BrandID).Code; } return(result); //return new BillReportHelper().TransferSizeToHorizontal<DistributionEntity>(result); }
public void AppendFilters(CompositeFilterDescriptorCollection filters) { FilterDescriptor fd_paisId = null; if (filters == null) { throw new ArgumentNullException(); } if (this.paisId == -1) { return; } fd_paisId = new FilterDescriptor(PAIS_ID_ELEMENT, FilterOperator.IsEqualTo, this.paisId, false, typeof(int)); // Verify this filter does not exist prior to adding it filters.Add(fd_paisId); }
private void btnSearch_Click(object sender, RoutedEventArgs e) { if (cbxStorage.SelectedIndex == -1) { cbxStorage.Focus(); MessageBox.Show("请选择盘点仓库"); return; } var filters = new CompositeFilterDescriptorCollection(); //filters.AddRange(billFilter.FilterDescriptors.ToList()); filters.Add(billFilter.FilterDescriptors); int storageID = (int)cbxStorage.SelectedValue; filters.Add(new FilterDescriptor("StorageID", FilterOperator.IsEqualTo, cbxStorage.SelectedValue)); filters.Add(new FilterDescriptor("Status", FilterOperator.IsEqualTo, false)); var data = ReportDataContext.AggregateStocktakeForStockUpdate(filters, out _refrenceStocktakeIDs); var pids = data.Select(o => o.ProductID); var stocks = VMGlobal.DistributionQuery.LinqOP.Search <Stock>(o => o.StorageID == storageID && pids.Contains(o.ProductID)).ToList(); var result = data.Select(o => { var d = new StocktakeAggregationEntityForStockUpdate { BrandID = o.BrandID, BrandCode = o.BrandCode, ColorCode = o.ColorCode, ProductCode = o.ProductCode, ProductID = o.ProductID, Quantity = o.Quantity, SizeCode = o.SizeCode, SizeName = o.SizeName, StyleCode = o.StyleCode }; var stock = stocks.FirstOrDefault(s => s.ProductID == o.ProductID); d.StockQuantity = (stock == null ? 0 : stock.Quantity); return(d); }).ToList(); RadGridView1.ItemsSource = result; }
/// <summary> /// 获取零售业绩 /// <remarks>不涉及品牌过滤</remarks> /// </summary> public static IEnumerable <RetailAchievementEntity> GetSelfRetailAchievement(CompositeFilterDescriptorCollection filters) { var lp = _query.LinqOP; var retailContext = lp.Search <BillRetail>(o => o.OrganizationID == VMGlobal.CurrentUser.OrganizationID); retailContext = retailContext.Select(o => new BillRetail { CreateTime = o.CreateTime.Date, CostMoney = o.CostMoney, ReceiveMoney = o.ReceiveMoney, TicketMoney = o.TicketMoney, Quantity = o.Quantity }); var data = (IQueryable <BillRetail>)retailContext.Where(filters); //return data.ToList();//CreateTime转换成Date之后虽然对filters有效,但获取的数据仍然是原来的带时分秒的CreateTime,只是在从数据库获取之后再转换为不带时分秒的Date值 //目前groupby只能生成纯列名形式,如虽然是GroupBy(o => o.CreateTime.Date),但生成的sql语句仍然是groupby(CreateTime),而不是groupby(Convert(10,CreateTime,120))这种形式 //var result = data.GroupBy(o => o.CreateTime).Select(g => new BillRetail //{ // CreateTime = g.Key, // Quantity = g.Sum(o => o.Quantity), // CostMoney = g.Sum(o => o.CostMoney), // ReceiveMoney = g.Sum(o => o.ReceiveMoney), // TicketMoney = g.Sum(o => o.TicketMoney) //}).ToList(); //数据返回后再汇总可能会导致传输效率低下的问题 var result = data.ToList().GroupBy(o => o.CreateTime).Select(g => new RetailAchievementEntity { CreateTime = g.Key, Year = g.Key.Year, YearMonth = g.Key.ToString("yyyy-MM"), Quantity = g.Sum(o => o.Quantity), CostMoney = g.Sum(o => o.CostMoney), ReceiveMoney = g.Sum(o => o.ReceiveMoney), TicketMoney = g.Sum(o => o.TicketMoney) }).OrderByDescending(o => o.CreateTime);; return(result); }
public static List <DistributionProductShow> AggregateStocktakeForStockUpdate(CompositeFilterDescriptorCollection filters, out List <int> refrenceStocktakeIDs) { var filtedData = GetStocktakeAggregation(filters); refrenceStocktakeIDs = filtedData.Select(o => o.ID).Distinct().ToList(); return(AggregateBill(filtedData)); }
public static DataTable AggregateStocktake(CompositeFilterDescriptorCollection filters) { var filtedData = GetStocktakeAggregation(filters); return(new BillReportHelper().TransferSizeToHorizontal <DistributionProductShow>(AggregateBill(filtedData))); }
private static IQueryable <StocktakeEntityForAggregation> GetStocktakeAggregation(CompositeFilterDescriptorCollection filters) { var lp = _query.LinqOP; var brandIDs = VMGlobal.PoweredBrands.Select(o => o.ID); var stocktakeContext = lp.Search <BillStocktake>(o => o.OrganizationID == VMGlobal.CurrentUser.OrganizationID && !o.IsDeleted); FilterBillWithBrand(stocktakeContext, filters, brandIDs); var detailsContext = lp.GetDataContext <BillStocktakeDetails>(); var productContext = lp.GetDataContext <ViewProduct>(); var data = from st in stocktakeContext from details in detailsContext where st.ID == details.BillID from product in productContext where product.ProductID == details.ProductID //&& brandIDs.Contains(product.BrandID) select new StocktakeEntityForAggregation { ID = st.ID, ProductID = product.ProductID, BrandID = product.BrandID, Code = st.Code, CreateTime = st.CreateTime.Date, Status = st.Status, StorageID = st.StorageID, StyleCode = product.StyleCode, Quantity = details.Quantity }; return((IQueryable <StocktakeEntityForAggregation>)data.Where(filters)); }
/// <summary> /// Get FilterDescriptorCollection from Expression /// </summary> /// <param name="filterExpression">Expression</param> /// <param name="radDataFilter">The RAD data filter.</param> /// <returns>CompositeFilterDescriptorCollection</returns> public static CompositeFilterDescriptorCollection GetFilterDescriptorCollection(this string filterExpression, RadDataFilter radDataFilter) { var descriptor = Veyron.SharedTypes.FilterDescriptor.FromJSON(filterExpression); var result = new CompositeFilterDescriptorCollection { LogicalOperator = descriptor.LogicalOperator.ToRadLogicalOperator() }; if (descriptor.FilterDescriptors == null || descriptor.FilterDescriptors.Count == 0) { if (descriptor.Operator != FilterOperator.Any) { result.Add(GetRadFilterDescriptor(descriptor, radDataFilter)); } } else { CompositeFilterDescriptor(descriptor, result, radDataFilter); } return result; }
/// <summary> /// Get FilterDescriptorCollection from Expression. /// </summary> /// <param name="filterDescriptor">Filter Descriptor.</param> /// <param name="radDataFilter">The RAD data filter.</param> /// <returns>CompositeFilterDescriptorCollection.</returns> public static CompositeFilterDescriptorCollection GetFilterDescriptorCollection(this Veyron.SharedTypes.IFilterDescriptor filterDescriptor, RadDataFilter radDataFilter) { if (filterDescriptor == null) return null; var result = new CompositeFilterDescriptorCollection { LogicalOperator = filterDescriptor.LogicalOperator.ToRadLogicalOperator() }; if (filterDescriptor.FilterDescriptors == null || filterDescriptor.FilterDescriptors.Count == 0) { if (filterDescriptor.Operator != FilterOperator.Any) result.Add(GetRadFilterDescriptor(filterDescriptor, radDataFilter)); } else CompositeFilterDescriptor(filterDescriptor, result, radDataFilter); return result; }
/// <summary> /// 下级调拨单分布 /// </summary> public static List <CannibalizeDistributionEntity> GetSubordinateCannibalizeDistribution(CompositeFilterDescriptorCollection filters) { var lp = _query.LinqOP; var childOrganizations = OrganizationListVM.CurrentOrganization.ChildrenOrganizations; var oids = childOrganizations.Select(o => o.ID).ToArray(); var cannibalizeContext = lp.Search <BillCannibalize>(o => oids.Contains(o.ToOrganizationID) && oids.Contains(o.OrganizationID)); var detailsContext = lp.GetDataContext <BillCannibalizeDetails>(); var productContext = lp.GetDataContext <ViewProduct>(); var brandIDs = VMGlobal.PoweredBrands.Select(o => o.ID); FilterBillWithBrand(cannibalizeContext, filters, brandIDs); var data = from cannibalize in cannibalizeContext from details in detailsContext where cannibalize.ID == details.BillID from product in productContext where product.ProductID == details.ProductID //&& brandIDs.Contains(product.BrandID) select new CannibalizeEntityForAggregation { OrganizationID = cannibalize.OrganizationID, ToOrganizationID = cannibalize.ToOrganizationID, ProductID = product.ProductID, BrandID = product.BrandID, CreateTime = cannibalize.CreateTime.Date, StyleCode = product.StyleCode, Quantity = details.Quantity, Status = cannibalize.Status }; var filtedData = (IQueryable <CannibalizeEntityForAggregation>)data.Where(filters); var sum = filtedData.GroupBy(o => new { o.ProductID, o.OrganizationID, o.ToOrganizationID }).Select(g => new { Key = g.Key, Quantity = g.Sum(o => o.Quantity) }).ToList(); var pids = sum.Select(o => o.Key.ProductID).ToArray(); var products = lp.Search <ViewProduct>(o => pids.Contains(o.ProductID)).ToList(); var result = sum.Select(o => { var product = products.First(p => p.ProductID == o.Key.ProductID); return(new CannibalizeDistributionEntity { BYQID = product.BYQID, ProductID = product.ProductID, ProductCode = product.ProductCode, StyleCode = product.StyleCode, ColorID = product.ColorID, SizeID = product.SizeID, Quantity = o.Quantity, OutOrganizationName = childOrganizations.Find(s => s.ID == o.Key.OrganizationID).Name, InOrganizationName = childOrganizations.Find(s => s.ID == o.Key.ToOrganizationID).Name }); }).ToList(); foreach (var r in result) { r.ColorCode = VMGlobal.Colors.Find(o => o.ID == r.ColorID).Code; r.SizeName = VMGlobal.Sizes.Find(o => o.ID == r.SizeID).Name; var byq = VMGlobal.BYQs.Find(o => o.ID == r.BYQID); r.BrandID = byq.BrandID; r.BrandCode = VMGlobal.PoweredBrands.Find(o => o.ID == r.BrandID).Code; } return(result); }
private static void FilterBillWithBrand <TBill>(IQueryable <TBill> billContext, CompositeFilterDescriptorCollection condition, IEnumerable <int> brandIDs) where TBill : BillWithBrand { //if (!FilterConditionHelper.IsConditionSetted(condition, "BrandID")) billContext = billContext.Where(o => brandIDs.Contains(o.BrandID)); }
public static List <ContrastDetailsSearchEntity> AggregateSubordinateStocktakeContrast(CompositeFilterDescriptorCollection filters) { var lp = _query.LinqOP; var childOrganizations = OrganizationListVM.CurrentOrganization.ChildrenOrganizations; var oids = childOrganizations.Select(o => o.ID); var contrastContext = lp.Search <BillStocktakeContrast>(o => oids.Contains(o.OrganizationID)); var brandIDs = VMGlobal.PoweredBrands.Select(o => o.ID); FilterBillWithBrand(contrastContext, filters, brandIDs); var detailsContext = lp.GetDataContext <BillStocktakeContrastDetails>(); var productContext = lp.GetDataContext <ViewProduct>(); var data = from st in contrastContext from details in detailsContext where st.ID == details.BillID from product in productContext where product.ProductID == details.ProductID //&& brandIDs.Contains(product.BrandID) select new ContrastEntityForAggregation { ID = st.ID, ProductID = product.ProductID, BrandID = product.BrandID, Code = st.Code, CreateTime = st.CreateTime.Date, StyleCode = product.StyleCode, Quantity = details.Quantity, QuaStocktake = details.QuaStocktake, QuaStockOrig = details.QuaStockOrig, OrganizationID = st.OrganizationID }; var filtedData = (IQueryable <ContrastEntityForAggregation>)data.Where(filters); var sum = filtedData.GroupBy(o => o.ProductID).Select(g => new { ProductID = g.Key, Quantity = g.Sum(o => o.Quantity), QuaStocktake = g.Sum(o => o.QuaStocktake), QuaStockOrig = g.Sum(o => o.QuaStockOrig), QuaContrast = g.Sum(o => Math.Abs(o.QuaStocktake - o.QuaStockOrig)) }).ToList(); var pids = sum.Select(o => o.ProductID).ToArray(); var products = _query.LinqOP.Search <ViewProduct>(o => pids.Contains(o.ProductID)).ToList(); var result = sum.Select(o => { var product = products.First(p => p.ProductID == o.ProductID); return(new ContrastDetailsSearchEntity { ProductID = product.ProductID, ProductCode = product.ProductCode, StyleCode = product.StyleCode, BYQID = product.BYQID, ColorID = product.ColorID, SizeID = product.SizeID, Quantity = o.Quantity, QuaStocktake = o.QuaStocktake, QuaStockOrig = o.QuaStockOrig, QuaContrast = o.QuaContrast }); }).ToList(); foreach (var r in result) { r.ColorCode = VMGlobal.Colors.Find(o => o.ID == r.ColorID).Code; r.SizeName = VMGlobal.Sizes.Find(o => o.ID == r.SizeID).Name; var byq = VMGlobal.BYQs.Find(o => o.ID == r.BYQID); r.BrandID = byq.BrandID; r.BrandCode = VMGlobal.PoweredBrands.Find(o => o.ID == r.BrandID).Code; } return(result); }