public ActionResult DeferredRevenue(DeferredRevenueListModelFilter filter = null, int pageNumber = 1) { var filterValidator = IoC.Resolve <DeferredRevenueListModelFilterValidator>(); var result = filterValidator.Validate(filter); if (result.IsValid) { int totalRecords = 0; var model = _financeReportingService.GetDeferredRevenue(pageNumber, _pageSize, filter, out totalRecords); if (model == null) { model = new DeferredRevenueListModel(); } model.Filter = filter; var currentAction = ControllerContext.RouteData.Values["action"].ToString(); Func <int, string> urlFunc = pn => Url.Action(currentAction, new { pageNumber = pn, filter.FromEventDate, filter.ToEventDate, filter.EventId, filter.Pod, filter.PaidCustomers, filter.UnPaidCustomers, filter.FromRegistrationDate, filter.ToRegistrationDate, filter.IsRetailEvent, filter.IsCorporateEvent, filter.IsPublicEvent, filter.IsPrivateEvent }); model.PagingModel = new PagingModel(pageNumber, _pageSize, totalRecords, urlFunc); return(View(model)); } var propertyNames = result.Errors.Select(e => e.PropertyName).Distinct(); var htmlString = propertyNames.Aggregate("", (current, property) => current + (result.Errors.Where(e => e.PropertyName == property).FirstOrDefault().ErrorMessage + "<br />")); return(View(new DeferredRevenueListModel { Filter = filter, FeedbackMessage = FeedbackMessageModel.CreateFailureMessage(htmlString) })); }
public DeferredRevenueListModel Create(IEnumerable <EventCustomer> eventCustomers, IEnumerable <Event> events, IEnumerable <Pod> pods, IEnumerable <Customer> customers, IEnumerable <OrderedPair <long, string> > ecAndPackagePair, IEnumerable <OrderedPair <long, string> > ecAndTestPair, IEnumerable <OrderedPair <long, long> > orderIdEventCustomerIdPairs, IEnumerable <Host> hosts, IEnumerable <DeferredRevenueViewModel> eventRevenueWiseDetails, IEnumerable <OrderedPair <long, decimal> > eventCustomerIdOrderTotalPairs, IEnumerable <OrderedPair <long, decimal> > eventCustomerIdTotalPaymentPairs) { var listModel = new DeferredRevenueListModel(); var collection = new List <DeferredRevenueViewModel>(); foreach (var @event in events) { var podNames = string.Join(", ", pods.Where(p => @event.PodIds.Contains(p.Id)).Select(p => p.Name)); var host = hosts.Where(h => h.Id == @event.HostId).First(); var viewModel = eventRevenueWiseDetails != null?eventRevenueWiseDetails.Where(e => e.EventId == @event.Id).SingleOrDefault() : null; if (viewModel == null) { viewModel = new DeferredRevenueViewModel { EventId = @event.Id, EventName = @event.Name, EventDate = @event.EventDate, EventAddress = Mapper.Map <Address, AddressViewModel>(host.Address), Pod = podNames, TotalLiability = 0 }; } else { viewModel.EventName = @event.Name; viewModel.EventDate = @event.EventDate; viewModel.EventAddress = Mapper.Map <Address, AddressViewModel>(host.Address); viewModel.Pod = podNames; } var customerModels = new List <DeferredRevenueCustomerViewModel>(); var customersOfTheEvent = eventCustomers.Where(ec => ec.EventId == @event.Id); foreach (var eventCustomer in customersOfTheEvent) { var customer = customers.Where(c => c.CustomerId == eventCustomer.CustomerId).Single(); var packagename = string.Join(", ", ecAndPackagePair.Where(p => p.FirstValue == eventCustomer.Id).Select(p => p.SecondValue).ToArray()); var tests = string.Join(", ", ecAndTestPair.Where(p => p.FirstValue == eventCustomer.Id).Select(p => p.SecondValue).ToArray()); if (string.IsNullOrEmpty(packagename)) { packagename = tests; } else if (!string.IsNullOrEmpty(tests)) { packagename += " + " + tests; } var orderId = orderIdEventCustomerIdPairs.Where(oe => oe.SecondValue == eventCustomer.Id).Select(oe => oe.FirstValue).Single(); var eventCustomerIdOrderTotalPair = eventCustomerIdOrderTotalPairs.Where(ecot => ecot.FirstValue == eventCustomer.Id).Single(); var eventCustomerIdTotalPaymentPair = eventCustomerIdTotalPaymentPairs.Where(ectp => ectp.FirstValue == eventCustomer.Id).Single(); var customerModel = new DeferredRevenueCustomerViewModel { CustomerId = customer.CustomerId, CustomerName = customer.NameAsString, CustomerPhone = customer.HomePhoneNumber, Email = customer.Email != null?customer.Email.ToString() : "", CustomerAddress = Mapper.Map <Address, AddressViewModel>(customer.Address), CustomerOrder = packagename, OrderId = orderId, DiscountedTotal = eventCustomerIdOrderTotalPair.SecondValue, TotalPayment = eventCustomerIdTotalPaymentPair.SecondValue, RegistrationDate = eventCustomer.DataRecorderMetaData.DateCreated }; customerModels.Add(customerModel); } viewModel.Customers = customerModels; collection.Add(viewModel); } listModel.Collection = collection; return(listModel); }