public OrderViewData Create(OrderDetail orderDetail) { var orderDetailOrganizationRoleUserCreator = GetOrganizationRoleUser(orderDetail, od => od.DataRecorderMetaData.DataRecorderCreator.Id); var orderDetailOrganizationRoleUserFor = GetOrganizationRoleUser(orderDetail, od => od.ForOrganizationRoleUserId); var description = orderDetail.Description; if (orderDetail.DetailType == OrderItemType.EventPackageItem) { var package = _eventPackageRepository.GetById(orderDetail.OrderItem.ItemId); description = package == null ? "" : package.Package.Name; } else if (orderDetail.DetailType == OrderItemType.EventTestItem) { var eventTest = _eventTestRepository.GetbyId(orderDetail.OrderItem.ItemId); description = eventTest == null ? "" : eventTest.Test.Name; } else if (orderDetail.DetailType == OrderItemType.ProductItem) { description = _electronicProductRepository.GetElectronicProductNameForOrder(orderDetail.OrderItemId); } var customer = _customerRepository.GetCustomerByUserId(orderDetailOrganizationRoleUserFor.FirstValue.UserId); //var creatorRoleName = // ((Roles)orderDetailOrganizationRoleUserCreator.FirstValue.RoleId).ToString(); var orderDetailDateCreated = orderDetail.DataRecorderMetaData != null ? orderDetail.DataRecorderMetaData.DateCreated.ToString("MMM dd yyyy") : null; var eventCustomerId = (orderDetail.DetailType == OrderItemType.EventPackageItem || orderDetail.DetailType == OrderItemType.EventTestItem) && orderDetail.EventCustomerOrderDetail != null ? orderDetail.EventCustomerOrderDetail.EventCustomerId : 0; var orderViewData = new OrderViewData { CreationMode = orderDetailOrganizationRoleUserCreator.SecondValue.SecondValue, CreatorName = orderDetailOrganizationRoleUserCreator.SecondValue.FirstValue, CreatorRole = orderDetailOrganizationRoleUserCreator.SecondValue.SecondValue, CustomerId = customer.CustomerId, CustomerName = customer.NameAsString, Description = description, EventCustomerId = eventCustomerId, OrderDetailDateCreated = orderDetailDateCreated, OrderDetailStatus = orderDetail.OrderItemStatus.Name, OrderDetailType = orderDetail.OrderItemStatus.ItemTypeName, Price = orderDetail.Price, Quantity = orderDetail.Quantity, ShippingDetails = GetShippingDetailUserPair(orderDetail.Id).ToList() }; if ((orderDetail.DetailType == OrderItemType.EventPackageItem || orderDetail.DetailType == OrderItemType.EventTestItem) && orderDetail.SourceCodeOrderDetail != null) { orderViewData.SourceCode = GetSourceCodeUserPair(orderDetail.SourceCodeOrderDetail); } return(orderViewData); }
private IEnumerable <OrderViewData> SortOrderViewData(IEnumerable <OrderViewData> orderViewData) { const string eventPackageItem = "Event Package"; const string eventTestItem = "Event Test"; const string refundItem = "Refund"; const string productItem = "Product"; const string cancelFeeItem = "Cancellation Fee"; const string giftCertificateItem = "Gift Certificate"; var sortedOrderViewData = new List <OrderViewData>(); // Get all the event Package order Items. var eventPackageOrderDetails = orderViewData.Where(odv => odv.OrderDetailType == eventPackageItem); var orderedEventPackageOrderDetails = eventPackageOrderDetails.Where(epod => epod.OrderDetailStatus == EventPackageItemStatus.Ordered.Name). OrderBy(epod => epod.OrderDetailDateCreated); foreach (var orderedEventPackageOrderDetail in orderedEventPackageOrderDetails) { // Get the cancelled EventPackageOrderDetails for this ordered order detail. OrderViewData detail = orderedEventPackageOrderDetail; var cancelledEventPackageOrderDetail = eventPackageOrderDetails.FirstOrDefault( epod => (epod.OrderDetailStatus == EventPackageItemStatus.Cancelled.Name) && ((epod.TotalCost * (-1)) == detail.TotalCost) && (epod.Description == detail.Description)); // It can never be null, but there can be data problem. if (cancelledEventPackageOrderDetail != null) { // Add to the sorted list. sortedOrderViewData.Add(detail); sortedOrderViewData.Add(cancelledEventPackageOrderDetail); } } // Get all the event test order Items. var eventTestOrderDetails = orderViewData.Where(odv => odv.OrderDetailType == eventTestItem); var orderedEventTestOrderDetails = eventTestOrderDetails.Where(etod => etod.OrderDetailStatus == EventTestItemStatus.Ordered.Name). OrderBy(etod => etod.OrderDetailDateCreated); foreach (var orderedEventTestOrderDetail in orderedEventTestOrderDetails) { // Get the cancelled EventPackageOrderDetails for this ordered order detail. OrderViewData detail = orderedEventTestOrderDetail; var cancelledEventTestOrderDetail = eventTestOrderDetails.FirstOrDefault( etod => (etod.OrderDetailStatus == EventTestItemStatus.Cancelled.Name) && ((etod.TotalCost * (-1)) == detail.TotalCost) && (etod.Description == detail.Description)); // It can never be null, but there can be data problem. if (cancelledEventTestOrderDetail != null) { // Add to the sorted list. sortedOrderViewData.Add(detail); sortedOrderViewData.Add(cancelledEventTestOrderDetail); } } // Get all the product order Items. var productOrderDetails = orderViewData.Where(odv => odv.OrderDetailType == productItem); var orderedProductOrderDetails = productOrderDetails.Where(pod => pod.OrderDetailStatus == ProductItemStatus.Ordered.Name). OrderBy(pod => pod.OrderDetailDateCreated); foreach (var orderedProductOrderDetail in orderedProductOrderDetails) { // Get the cancelled product for this ordered order detail. OrderViewData detail = orderedProductOrderDetail; var cancelledProductOrderDetail = productOrderDetails.FirstOrDefault( pod => (pod.OrderDetailStatus == ProductItemStatus.Cancelled.Name) && ((pod.TotalCost * (-1)) == detail.TotalCost) && (pod.Description == detail.Description)); // It can never be null, but there can be data problem. if (cancelledProductOrderDetail != null) { // Add to the sorted list. sortedOrderViewData.Add(detail); sortedOrderViewData.Add(cancelledProductOrderDetail); } } // Get all the cancelled fee order Items. var cancelFeeOrderDetails = orderViewData.Where(odv => odv.OrderDetailType == cancelFeeItem); sortedOrderViewData.AddRange(cancelFeeOrderDetails); // Add the availed packages to the sorted list. sortedOrderViewData.AddRange( orderViewData.Where( odv => odv.OrderDetailType == eventPackageItem && odv.OrderDetailStatus == EventPackageItemStatus.Availed.Name).OrderBy( odv => odv.OrderDetailDateCreated)); // Add the availed tests to the sorted list. sortedOrderViewData.AddRange( orderViewData.Where( odv => odv.OrderDetailType == eventTestItem && odv.OrderDetailStatus == EventTestItemStatus.Availed.Name).OrderBy( odv => odv.OrderDetailDateCreated)); // Add the availed products to the sorted list. sortedOrderViewData.AddRange( orderViewData.Where( odv => odv.OrderDetailType == productItem && odv.OrderDetailStatus == ProductItemStatus.Availed.Name).OrderBy( odv => odv.OrderDetailDateCreated)); // Add the availed gift certificate to the sorted list. sortedOrderViewData.AddRange( orderViewData.Where( odv => odv.OrderDetailType == giftCertificateItem && odv.OrderDetailStatus == GiftCertificateItemStatus.PaidFor.Name).OrderBy( odv => odv.OrderDetailDateCreated)); // Get the last order detail to which we will attach the source code and shipping detail. var lastOrderDetail = sortedOrderViewData.LastOrDefault(); // Finally we have to bind source code and shipping to the last order detail. var sourceCodeOrderDetail = sortedOrderViewData.SingleOrDefault(sovd => sovd.SourceCode != null); if (sourceCodeOrderDetail != null && lastOrderDetail != null && lastOrderDetail.SourceCode == null) { lastOrderDetail.SourceCode = sourceCodeOrderDetail.SourceCode; sourceCodeOrderDetail.SourceCode = null; } var shippingDetailOrderDetails = sortedOrderViewData.Where(sovd => !sovd.ShippingDetails.IsNullOrEmpty()).ToList(); foreach (var shippingDetailOrderDetail in shippingDetailOrderDetails) { if (shippingDetailOrderDetail != null && !shippingDetailOrderDetail.ShippingDetails.IsNullOrEmpty() && lastOrderDetail != null && lastOrderDetail != shippingDetailOrderDetail)// && lastOrderDetail.ShippingDetails.IsNullOrEmpty() { if (lastOrderDetail.ShippingDetails == null) { lastOrderDetail.ShippingDetails = new List <ShippingDetailViewData>(); } lastOrderDetail.ShippingDetails.AddRange(shippingDetailOrderDetail.ShippingDetails); } if (lastOrderDetail != shippingDetailOrderDetail) { shippingDetailOrderDetail.ShippingDetails = null; } } sortedOrderViewData.AddRange(orderViewData.Where( odv => odv.OrderDetailType == refundItem).OrderBy(odv => odv.OrderDetailDateCreated)); //&& odv.OrderDetailStatus == RefundItemStatus.Applied.Name return(sortedOrderViewData); }