Example #1
0
        /// <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);
        }