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