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