/// <summary> /// Create a return order /// </summary> /// <param name="orderGroupId"></param> /// <param name="shipmentId"></param> /// <param name="lineItemId"></param> /// <param name="returnQuantity"></param> /// <param name="reason"></param> /// <returns></returns> public ReturnFormStatus CreateReturn(int orderGroupId, int shipmentId, int lineItemId, decimal returnQuantity, string reason) { //Get originial information about lineitem and shipment var purchaseOrder = _orderRepository.Load <IPurchaseOrder>(orderGroupId); var form = purchaseOrder.GetFirstForm(); var shipment = form.Shipments.FirstOrDefault(s => s.ShipmentId == shipmentId); var lineItem = shipment.LineItems.First(l => l.LineItemId == lineItemId); //Create return order based on original line item and shipment var returnForm = _purchaseOrderFactory.CreateReturnOrderForm(purchaseOrder); var returnShipment = _purchaseOrderFactory.CreateReturnShipment(shipment); var returnLineItem = _purchaseOrderFactory.CreateReturnLineItem(lineItem, returnQuantity, string.IsNullOrEmpty(reason) ? "Faulty" : reason); purchaseOrder.ReturnForms.Add(returnForm); returnForm.Shipments.Add(returnShipment); returnShipment.LineItems.Add(returnLineItem); //Update quantiy and extended price of return lineitem returnLineItem.ReturnQuantity = returnQuantity; var orglineItem = (form as OrderForm)?.LineItems?.FindItem(lineItemId); var extendedPrice = orglineItem != null ? orglineItem.ExtendedPrice / orglineItem.Quantity : 0m; (returnLineItem as LineItem).ExtendedPrice = returnLineItem.ReturnQuantity * extendedPrice; //Save return form _orderRepository.Save(purchaseOrder); //Return status of return order return(ReturnFormStatusManager.GetReturnFormStatus(returnForm as OrderForm)); }
public HttpResponseMessage CreateReturn(ReturnInfo returnInfo) { var returFormCalculator = ServiceLocator.Current.GetInstance <IReturnFormTotalCalculator>(); var paymentCreator = ServiceLocator.Current.GetInstance <ICreditPaymentCreator>(); var paymentRetriever = ServiceLocator.Current.GetInstance <IOrderFormPaymentRetriever>(); var returnOrderValidator = ServiceLocator.Current.GetInstance <IReturnOrderValidator>(); var order = Get(returnInfo.OrderNumber); string[] messages; if (!returnOrderValidator.TryValidateReturn(order, returnInfo, out messages)) { return(CreateResponseMessage(HttpStatusCode.NotAcceptable, string.Join(", ", messages))); } var returnForm = ReturnExchangeManager.AddNewReturnFormToPurchaseOrder(order); foreach (var item in returnInfo.ReturnItems) { var returnableLineItems = ReturnExchangeManager.GetAvailableForReturnLineItems(order.OrderForms[0].Shipments[0]).Where(l => l.CatalogEntryId == item.Sku).ToList(); ReturnExchangeManager.AddNewReturnLineItemToReturnForm(returnForm, returnableLineItems.FirstOrDefault(), item.Quantity, item.ReturnReason); ReturnExchangeManager.AddNewShipmetToReturnForm(returnForm, order.OrderForms[0].Shipments[0]); } ReturnFormStatusManager.AcknowledgeReceiptItems(returnForm); returFormCalculator.AdjustReturnTotal(returnForm); paymentCreator.CreateCreditPayment <OtherPayment>(returnForm, order, paymentRetriever.GetCapturedPayment(order).PaymentMethodId); order.AcceptChanges(); var respons = CreateResponseMessage(HttpStatusCode.OK, "Return Created"); return(respons); }
/// <summary> /// Get total returned line items /// </summary> public decimal GetTotalReturnedQuantity() { decimal total = 0; var returnForms = ReturnForms.GetEnumerator(); while (returnForms.MoveNext()) { var returnForm = returnForms.Current; Mediachase.Commerce.Orders.ReturnFormStatus formStatus = ReturnFormStatusManager.GetReturnFormStatus(returnForm); if (!formStatus.Equals(Mediachase.Commerce.Orders.ReturnFormStatus.Canceled)) { total += returnForm.LineItems.Where(x => x.OrigLineItemId == LineItem.LineItemId).Sum(x => x.Quantity); } } return(total); }