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