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); }