Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }