예제 #1
0
        public void UndoCancelShippingRequest(RefundRequest refundRequest)
        {
            var order             = _orderRepository.GetOrder(refundRequest.OrderId);
            var activeOrderDetail = _orderController.GetActiveOrderDetail(order);

            var cancelledShippingDetails = _shippingDetailRepository.GetAllCancelledShippingForOrder(order.Id).OrderByDescending(sd => sd.Id).ToArray();
            var shippingDetail           = cancelledShippingDetails.FirstOrDefault(cd => cd.ActualPrice == refundRequest.RequestedRefundAmount);

            if (shippingDetail == null)
            {
                throw new Exception("No cancelled shipping item found in the order for requested amount.");
            }

            var eventCustomer          = _eventCustomerRepository.GetById(activeOrderDetail.EventCustomerOrderDetail.EventCustomerId);
            var isExclusivelyRequested = _shippingDetailService.CheckShippingIsExclusivelyRequested(eventCustomer.EventId, eventCustomer.CustomerId);

            var address = _addressRepository.GetAddress(shippingDetail.ShippingAddress.Id);

            address.Id        = 0;
            shippingDetail.Id = 0;
            shippingDetail.ShippingAddress        = address;
            shippingDetail.Status                 = ShipmentStatus.Processing;
            shippingDetail.IsExclusivelyRequested = isExclusivelyRequested;
            shippingDetail.DataRecorderMetaData   = new DataRecorderMetaData
            {
                DataRecorderCreator = _organizationRoleUserRepository.GetOrganizationRoleUser(_sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId),
                DateCreated         = DateTime.Now,
                DateModified        = DateTime.Now
            };

            IShippingController shippingController = new ShippingController();

            shippingDetail = shippingController.OrderShipping(shippingDetail);

            IRepository <ShippingDetailOrderDetail> shippingDetailOrderDetailRepository = new ShippingDetailOrderDetailRepository();

            var shippingDetailOrderDetail = new ShippingDetailOrderDetail
            {
                Amount           = shippingDetail.ActualPrice,
                IsActive         = true,
                OrderDetailId    = activeOrderDetail.Id,
                ShippingDetailId = shippingDetail.Id
            };

            shippingDetailOrderDetailRepository.Save(shippingDetailOrderDetail);

            var productDetail = order.OrderDetails.Where(od => od.DetailType == OrderItemType.ProductItem && od.IsCompleted).Select(od => od).OrderByDescending(od => od.Id).FirstOrDefault();

            SaveProductShipping(productDetail, activeOrderDetail, isExclusivelyRequested);

            var repository = ((IRepository <RefundRequest>)_refundRequestRepository);

            refundRequest.RequestStatus       = (long)RequestStatus.Reverted;
            refundRequest.RefundRequestResult = new RefundRequestResult
            {
                ProcessedOn = DateTime.Now,
                ProcessedByOrgRoleUserId = _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId
            };
            repository.Save(refundRequest);
        }
예제 #2
0
        /// <summary>
        /// Negating a provided certain order item ids
        /// </summary>
        /// <param name="orderDetailIds"></param>
        /// <param name="order"></param>
        /// <param name="dataRecorderCreatorId"></param>
        public void NegateOrderLineItems(IEnumerable <long> orderDetailIds, Order order, long dataRecorderCreatorId)
        {
            if (order == null)
            {
                throw new InvalidOperationException("The order can not be null.");
            }

            var orderDetailsToBeCancelled = new List <OrderDetail>();

            orderDetailsToBeCancelled.AddRange(order.OrderDetails.Where(od => orderDetailIds.Contains(od.Id)));
            order.OrderDetails.RemoveAll(od => orderDetailIds.Contains(od.Id));
            var  shippingDetailsToCancelled = new List <ShippingDetail>();
            long orderDetailId = 0;

            foreach (var detailsToBeCancelled in orderDetailsToBeCancelled)
            {
                var cancelledOrderDetail = _orderDetailFactory.CreateNewOrderDetail(detailsToBeCancelled,
                                                                                    detailsToBeCancelled.ForOrganizationRoleUserId,
                                                                                    dataRecorderCreatorId);
                order.OrderDetails.Add(detailsToBeCancelled);
                order.OrderDetails.Add(cancelledOrderDetail);

                if (detailsToBeCancelled.DetailType == OrderItemType.ProductItem)
                {
                    OrderDetail orderDetail = GetActiveOrderDetail(order);
                    orderDetailId = orderDetail.Id;
                    var shippingDetails = _shippingDetailRepository.GetProductShippingDetailsForCancellation(orderDetail.Id).ToList();
                    shippingDetails = shippingDetails.Where(sd => sd.Status == ShipmentStatus.Processing).Select(sd => sd).ToList();
                    var shippingDetail = shippingDetails.FirstOrDefault();

                    if (shippingDetail != null)
                    {
                        shippingDetailsToCancelled.Add(shippingDetail);
                        shippingDetails.Remove(shippingDetail);
                    }
                }
            }

            //var lineItem = _lineItems.FirstOrDefault();
            //OrderItem orderItem = _orderItemRepository.SaveOrderItem(lineItem.SecondValue.Id, lineItem.SecondValue.OrderItemType);
            //lineItem.FirstValue.OrderItemId = orderItem.Id;
            //lineItem.FirstValue.OrderId = order.Id;

            //order.OrderDetails.Add(lineItem.FirstValue);

            order = _orderRepository.SaveOrder(order);

            if (shippingDetailsToCancelled.Count > 0)
            {
                IShippingDetailOrderDetailRepository shippingDetailOrderDetailRepository =
                    new ShippingDetailOrderDetailRepository();
                foreach (var shippingDetail in shippingDetailsToCancelled)
                {
                    shippingDetailOrderDetailRepository.UpdateStatus(shippingDetail.Id, orderDetailId, false);
                    var shipping = _shippingDetailRepository.GetById(shippingDetail.Id);
                    shipping.Status = ShipmentStatus.Cancelled;
                    _shippingDetailRepository.Save(shipping);
                }
            }
        }
예제 #3
0
        private void SaveProductShipping(OrderDetail productDetail, OrderDetail activeOrderDetail, bool isExclusivelyRequested)
        {
            if (productDetail == null || activeOrderDetail == null)
            {
                return;
            }
            var shippingOption = _shippingOptionRepository.GetShippingOptionByProductId(productDetail.OrderItem.ItemId);

            if (shippingOption != null)
            {
                var resultShippingDetails = _shippingDetailRepository.GetShippingDetailsForCancellation(activeOrderDetail.Id);
                var cdShippingDetails     = _shippingDetailRepository.GetProductShippingDetailsForCancellation(activeOrderDetail.Id);

                if (!resultShippingDetails.IsNullOrEmpty() && (cdShippingDetails == null || (cdShippingDetails.Count() < resultShippingDetails.Count())))
                {
                    var address = _addressRepository.GetAddress(resultShippingDetails.First().ShippingAddress.Id);
                    address.Id = 0;
                    var productShippingDetail = new ShippingDetail
                    {
                        ShippingAddress = address,
                        Status          = ShipmentStatus.Processing,
                        ActualPrice     = shippingOption.Price,
                        ShippingOption  = new ShippingOption {
                            Id = shippingOption.Id
                        },
                        IsExclusivelyRequested = isExclusivelyRequested,
                        DataRecorderMetaData   = new DataRecorderMetaData
                        {
                            DataRecorderCreator = _organizationRoleUserRepository.GetOrganizationRoleUser(_sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId),
                            DateCreated         = DateTime.Now,
                            DateModified        = DateTime.Now
                        }
                    };
                    IShippingController shippingController = new ShippingController();
                    productShippingDetail = shippingController.OrderShipping(productShippingDetail);

                    IRepository <ShippingDetailOrderDetail> shippingDetailOrderDetailRepository = new ShippingDetailOrderDetailRepository();

                    var shippingDetailOrderDetail = new ShippingDetailOrderDetail
                    {
                        Amount           = productShippingDetail.ActualPrice,
                        IsActive         = true,
                        OrderDetailId    = activeOrderDetail.Id,
                        ShippingDetailId = productShippingDetail.Id
                    };

                    shippingDetailOrderDetailRepository.Save(shippingDetailOrderDetail);
                }
            }
        }
예제 #4
0
        private void SaveProductShippingDetail(Core.Finance.Domain.Order order)
        {
            if (ProductId.HasValue && ProductId.Value > 0)
            {
                var shippingOptionRepository = IoC.Resolve <IShippingOptionRepository>();
                var shippingOption           = shippingOptionRepository.GetShippingOptionByProductId(ProductId.Value);

                if (shippingOption == null || ShippingDetail == null)
                {
                    return;
                }

                IOrderController orderController = new OrderController();
                OrderDetail      orderDetail     = orderController.GetActiveOrderDetail(order);

                if (shippingOption.Id == ShippingDetail.ShippingOption.Id)
                {
                    return;
                }
                var productShippingDetail = ShippingDetail;

                productShippingDetail.Id = 0;
                productShippingDetail.ShippingAddress.Id = 0;
                productShippingDetail.ShippingOption.Id  = shippingOption.Id;
                productShippingDetail.ActualPrice        = shippingOption.Price;

                if (orderDetail != null)
                {
                    IShippingController shippingController = new ShippingController();
                    productShippingDetail = shippingController.OrderShipping(productShippingDetail);

                    IRepository <ShippingDetailOrderDetail> shippingDetailOrderDetailRepository =
                        new ShippingDetailOrderDetailRepository();

                    var shippingDetailOrderDetail = new ShippingDetailOrderDetail
                    {
                        Amount           = productShippingDetail.ActualPrice,
                        IsActive         = true,
                        OrderDetailId    = orderDetail.Id,
                        ShippingDetailId = productShippingDetail.Id
                    };

                    shippingDetailOrderDetailRepository.Save(shippingDetailOrderDetail);
                }
            }
        }