Пример #1
0
        public ActionResult Download(string reportname, string option)
        {
            StoreCouponSequenceOption search = JsonConvert.DeserializeObject <StoreCouponSequenceOption>(option);

            if (null == search)
            {
                throw new ArgumentNullException("option");
            }
            return(RenderReport(reportname, r =>
            {
                r.SetDataSource(doSearch(search).ToList());
            }, ExportFormatType.Excel));
        }
Пример #2
0
        public ActionResult Search(PagerRequest request, StoreCouponSequenceOption search)
        {
            if (!ModelState.IsValid)
            {
                ViewBag.SearchOptions = search;
                return(View());
            }
            var prods = doSearch(search);
            var v     = new Pager <StoreCouponSequenceViewModel>(request, prods.Count())
            {
                Data = prods.ToList()
            };

            ViewBag.SearchOptions = search;
            return(View(v));
        }
Пример #3
0
        private IEnumerable <StoreCouponSequenceViewModel> doSearch(StoreCouponSequenceOption search)
        {
            var dbContext = _storecouponRepo.Context;
            var clinq     = from cl in dbContext.Set <CouponLogEntity>()
                            join sr in dbContext.Set <StoreRealEntity>() on cl.ConsumeStoreNo equals sr.StoreNo into cls
                            from csl in cls.DefaultIfEmpty()
                            select new { CL = cl, CS = csl };
            var linq = dbContext.Set <StoreCouponEntity>()
                       .Join(dbContext.Set <StorePromotionEntity>(), o => o.StorePromotionId, i => i.Id, (o, i) => new { SC = o, SP = i })
                       .GroupJoin(clinq
                                  , o => o.SC.Code, i => i.CL.Code, (o, i) => new { SC = o.SC, SP = o.SP, CL = i })
                       .Where(s => (string.IsNullOrEmpty(search.PromotionName) ||
                                    s.SP.Name.StartsWith(search.PromotionName)) &&
                              (!search.CreateDateFrom.HasValue || s.SC.CreateDate >= search.CreateDateFrom.Value) &&
                              (!search.CreateDateTo.HasValue || s.SC.CreateDate <= search.CreateDateTo.Value) &&
                              (!search.PointFrom.HasValue || s.SC.Points >= search.PointFrom.Value) &&
                              (!search.PointTo.HasValue || s.SC.Points < search.PointTo.Value) &&
                              (!search.CustomerId.HasValue || s.SC.UserId == search.CustomerId.Value) &&
                              (string.IsNullOrEmpty(search.StoreNo) || s.CL.Any(c => c.CL.ConsumeStoreNo == search.StoreNo)) &&
                              (!search.ConsumeDateFrom.HasValue || s.CL.Any(c => c.CL.CreateDate >= search.ConsumeDateFrom.Value && c.CL.ActionType == (int)CouponActionType.Consume)) &&
                              (!search.ConsumeDateTo.HasValue || s.CL.Any(c => c.CL.CreateDate < search.ConsumeDateTo.Value && c.CL.ActionType == (int)CouponActionType.Consume)) &&
                              (string.IsNullOrEmpty(search.ReceiptNo) || s.CL.Any(c => c.CL.ReceiptNo == search.ReceiptNo)));

            if (search.Status.HasValue)
            {
                switch (search.Status.Value)
                {
                case StoreCouponSequenceStatus.CreateNotConsume:
                    linq = linq.Where(l => l.SC.Status == (int)CouponStatus.Normal && l.SC.ValidEndDate > DateTime.Now);
                    break;

                case StoreCouponSequenceStatus.Consumed:
                    linq = linq.Where(l => l.SC.Status == (int)CouponStatus.Used);
                    break;

                case StoreCouponSequenceStatus.Expired:
                    linq = linq.Where(l => l.SC.Status == (int)CouponStatus.Normal && l.SC.ValidEndDate <= DateTime.Now);
                    break;

                case StoreCouponSequenceStatus.Rebated:
                    linq = linq.Where(l => l.SC.Status == (int)CouponStatus.Normal &&
                                      l.SC.ValidEndDate > DateTime.Now &&
                                      l.CL.Any() &&
                                      l.CL.OrderByDescending(cl => cl.CL.CreateDate).FirstOrDefault().CL.ActionType == (int)CouponActionType.Rebate);
                    break;

                case StoreCouponSequenceStatus.Void:
                    linq = linq.Where(l => l.SC.Status == (int)CouponStatus.Deleted);
                    break;
                }
            }
            var sort = search.Sort.HasValue?search.Sort.Value:StoreCouponSequenceSort.ByCreateDate;

            if (search.Sort.HasValue)
            {
                switch (sort)
                {
                case StoreCouponSequenceSort.ByCreateDate:
                    linq = linq.OrderByDescending(l => l.SC.CreateDate);
                    break;

                case StoreCouponSequenceSort.ByAmount:
                    linq = linq.OrderByDescending(l => l.SC.Amount);
                    break;

                case StoreCouponSequenceSort.ByStatus:
                    linq = linq.OrderByDescending(l => l.SC.Status);
                    break;
                }
            }

            var result = linq.ToList().Select(l => new StoreCouponSequenceViewModel()
            {
                Code          = l.SC.Code,
                Amount        = l.SC.Amount.Value,
                CustomerId    = l.SC.UserId.Value,
                CreateDate    = l.SC.CreateDate.Value,
                RawStatus     = l.SC.Status.Value,
                UpdateDate    = l.SC.UpdateDate.Value,
                PromotionName = l.SP.Name,
                ValidEndDate  = l.SC.ValidEndDate.Value,
                Logs          = l.CL.OrderByDescending(cl => cl.CL.CreateDate)
                                .Select(cl => new CouponLogViewModel().FromEntity <CouponLogViewModel>(cl.CL, p => {
                    p.StoreName = cl.CS == null?string.Empty: cl.CS.Name;
                }))
            });

            return(result);
        }