예제 #1
0
        public ActionResult CreditCardReconcilation(CreditCardReconcileModelFilter filter = null, int pageNumber = 1)
        {
            int totalRecords = 0;
            var model        = _financeReportingService.GetCreditCardReconcileList(pageNumber, _pageSize, filter, out totalRecords);

            if (model == null)
            {
                model = new CreditCardReconcileListModel();
            }

            model.Filter = filter;


            var currentAction          = ControllerContext.RouteData.Values["action"].ToString();
            Func <int, string> urlFunc =
                pn => Url.Action(currentAction, new { pageNumber = pn, filter.FromDate, filter.ToDate });

            model.PagingModel = new PagingModel(pageNumber, _pageSize, totalRecords, urlFunc);

            return(View(model));
        }
        public IEnumerable <ChargeCardPayment> Get(CreditCardReconcileModelFilter filter, int pageNumber, int pageSize, out int totalRecords)
        {
            using (var adapter = PersistenceLayer.GetDataAccessAdapter())
            {
                var linqMetaData = new LinqMetaData(adapter);
                if (filter == null)
                {
                    var query = (from cp in linqMetaData.ChargeCardPayment
                                 join po in linqMetaData.PaymentOrder on cp.PaymentId equals po.PaymentId
                                 select cp);

                    totalRecords = query.Count();
                    var payments = query.OrderByDescending(cp => cp.DateCreated).TakePage(pageNumber, pageSize).ToArray();
                    return(Mapper.MapMultiple(payments));
                }
                else
                {
                    var payments = (from cp in linqMetaData.ChargeCardPayment
                                    join po in linqMetaData.PaymentOrder on cp.PaymentId equals po.PaymentId
                                    select cp);

                    var query = (from ecs in linqMetaData.EventCustomers
                                 join ecod in linqMetaData.EventCustomerOrderDetail on ecs.EventCustomerId equals
                                 ecod.EventCustomerId
                                 join od in linqMetaData.OrderDetail on ecod.OrderDetailId equals od.OrderDetailId
                                 join po in linqMetaData.PaymentOrder on od.OrderId equals po.OrderId
                                 select new { po.PaymentId, ecs.EventId });


                    if (filter.FromDate.HasValue)
                    {
                        payments = payments.Where(cp => cp.DateCreated >= filter.FromDate.Value.Date);
                    }

                    if (filter.ToDate.HasValue)
                    {
                        payments = payments.Where(cp => cp.DateCreated < filter.ToDate.Value.Date.AddDays(1));
                    }

                    var eventAccounts = (from ea in linqMetaData.EventAccount select ea);

                    if (filter.AccountId > 0)
                    {
                        var eventIds = eventAccounts.Where(x => x.AccountId == filter.AccountId).Select(x => x.EventId);
                        query = query.Where(q => eventIds.Contains(q.EventId));
                    }

                    if (filter.IsRetailEvent && !filter.IsCorporateEvent)
                    {
                        var eventIds = eventAccounts.Select(x => x.EventId);
                        query = query.Where(q => !eventIds.Contains(q.EventId));
                    }
                    else if (!filter.IsRetailEvent && filter.IsCorporateEvent)
                    {
                        var eventIds = eventAccounts.Select(x => x.EventId);
                        query = query.Where(q => eventIds.Contains(q.EventId));
                    }


                    if (filter.IsRetailEvent != filter.IsCorporateEvent || filter.AccountId > 0)
                    {
                        var paymentIds = query.Select(x => x.PaymentId);

                        payments = payments.Where(p => paymentIds.Contains(p.PaymentId));
                    }

                    totalRecords = payments.Count();
                    return(Mapper.MapMultiple(payments.OrderByDescending(cp => cp.DateCreated).TakePage(pageNumber, pageSize).ToArray()));
                }
            }
        }