public List <DailyBalanceDTO> GetDailyBalances(DailyBalanceCommand cmd, int userId, ref int pagesCount) { var userData = new UserBL().GetAccountUser(userId); bool isAdmin = userData.PositionRole == 1; return(new DailyBalanceDalFacade().GetDailyBalancesStats(cmd, userData.WorkPlace.Id.Value, isAdmin, ref pagesCount)); }
public List <DailyBalanceDTO> GetDailyBalancesStats(DailyBalanceCommand cmd, int workplaceId, bool isAdmin, ref int pagesCount) { IQueryable <DailyBalanceDTO> query; if (isAdmin) { if (cmd.TargetWorkPlace.HasValue && cmd.TargetWorkPlace > 0) { query = from c in db.DailyBalances where c.WorkPlaceId == cmd.TargetWorkPlace group c by new { c.Product, c.BalanceDate.Date } into grp let sumQuantity = grp.Sum(x => x.Quantity) select new DailyBalanceDTO() { ProductId = grp.Key.Product.Id, Product = ProductMapper(grp.Key.Product), BalanceDate = grp.Key.Date, Quantity = sumQuantity, Measurement = grp.Key.Product.MeasurementUnit }; } else { query = from c in db.DailyBalances group c by new { c.Product, c.BalanceDate.Date } into grp let sumQuantity = grp.Sum(x => x.Quantity) select new DailyBalanceDTO() { ProductId = grp.Key.Product.Id, Product = ProductMapper(grp.Key.Product), BalanceDate = grp.Key.Date, Quantity = sumQuantity, Measurement = grp.Key.Product.MeasurementUnit }; } } else { query = from c in db.DailyBalances where c.WorkPlaceId == workplaceId group c by new { c.Product, c.BalanceDate.Date } into grp let sumQuantity = grp.Sum(x => x.Quantity) select new DailyBalanceDTO() { ProductId = grp.Key.Product.Id, Product = ProductMapper(grp.Key.Product), BalanceDate = grp.Key.Date, Quantity = sumQuantity, Measurement = grp.Key.Product.MeasurementUnit }; } if (cmd.Date != null) { query = from c in query where c.BalanceDate >= cmd.Date.Value.Date && c.BalanceDate <= cmd.Date.Value.Date select c; } if (cmd.FromDate != null && cmd.ToDate != null) { query = from p in query where p.BalanceDate.Date == cmd.FromDate.Value.Date || p.BalanceDate.Date == cmd.ToDate.Value.Date select p; } if (cmd.FromDate == null && cmd.ToDate == null && cmd.Date == null) { query = from p in query where p.BalanceDate.Date == DateTime.Now.AddDays(-10).Date || p.BalanceDate.Date == DateTime.Now.Date select p; } pagesCount = (int)Math.Ceiling((double)(from p in query select p).Count() / cmd.PageSize); query = query.Page(cmd.PageSize, cmd.Page); return(query.ToList()); }