Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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());
        }