public CustomerUpsellListModel Create(IEnumerable <Order> orders, IEnumerable <EventBasicInfoViewModel> eventListModel, IEnumerable <Customer> customers, IEnumerable <OrderedPair <long, string> > packages, IEnumerable <OrderedPair <long, string> > tests, IEnumerable <OrderedPair <long, string> > products, IEnumerable <OrderedPair <long, string> > agents) { var model = new CustomerUpsellListModel(); var customerUpsellModels = new List <CustomerUpsellModel>(); orders.ToList().ForEach(o => { var customer = customers.FirstOrDefault(c => c.CustomerId == o.CustomerId); var eventModel = eventListModel.FirstOrDefault(e => e.Id == o.EventId.Value); var eventCustomer = new CustomerUpsellModel { CustomerId = customer.CustomerId, CustomerCode = customer.CustomerId, EventDate = eventModel.EventDate, Name = customer.Name, Pod = eventModel.PodNames() }; Associate(eventCustomer, o, packages, tests, products, agents); customerUpsellModels.Add(eventCustomer); }); model.Collection = customerUpsellModels; return(model); }
private void Associate(CustomerUpsellModel model, Order order, IEnumerable <OrderedPair <long, string> > packages, IEnumerable <OrderedPair <long, string> > tests, IEnumerable <OrderedPair <long, string> > products, IEnumerable <OrderedPair <long, string> > agents) { var previousCompositionofOrderItems = GetPreviousSuccesfulCompositionofOrderDetails(order); var newValidCompositionofOrderItems = order.OrderDetails.Where( od => od.OrderItemStatus.OrderStatusState == OrderStatusState.FinalSuccess).ToList(); model.ScheduledCost = previousCompositionofOrderItems.Sum(od => od.Price); model.RevisedCost = newValidCompositionofOrderItems.Sum(od => od.Price); var orgRoleUserId = order.OrderDetails.LastOrDefault().DataRecorderMetaData.DataRecorderCreator.Id; model.ChangingAgent = agents.Where(a => a.FirstValue == orgRoleUserId).FirstOrDefault().SecondValue; model.ScheduledPackage = GetPurchasedProductName(previousCompositionofOrderItems, packages, tests, products); model.EventPackage = GetPurchasedProductName(newValidCompositionofOrderItems, packages, tests, products); }