void CancelBackOrder()
        {
            using (var container = NestedContainer)
            {
               
                IApproveSalesmanOrderWFManager _approveOrderWFManager = Using<IApproveSalesmanOrderWFManager>(container);
                IOrderRepository _orderService = Using<IOrderRepository>(container);
                _approveOrderWFManager.remvdLineItemIds = new List<Guid>();
                _order = _orderService.GetById(_order.Id) as Order; //refresh and discard changes on line items
                //send back order to lost sale
                foreach (var lineItem in LineItems)
                {
                    //find the original order line item
                    var oli =
                        _order.LineItems.First(
                            n =>
                            n.Product.Id == lineItem.ProductId && n.LineItemType == OrderLineItemType.PostConfirmation);

                    decimal lostSaleQty = 0;
                    var existingBackOrder =
                        _order.LineItems.FirstOrDefault(
                            n => n.Description == oli.Description && n.LineItemType == OrderLineItemType.BackOrder);
                    if (existingBackOrder != null)
                    {
                        existingBackOrder.Qty = 0;
                    }

                    var existingLostSale =
                        _order.LineItems.FirstOrDefault(
                            n => n.Id == lineItem.LineItemId && n.LineItemType == OrderLineItemType.LostSale);
                    if (existingLostSale != null)
                    {
                        existingLostSale.Qty += lineItem.Qty;
                        lostSaleQty = existingLostSale.Qty;
                    }
                    else
                    {
                        //create a new lost sale li
                        OrderLineItem lostSale = CreateNewLineItem(Guid.NewGuid(), lineItem);
                        lostSale.LineItemType = OrderLineItemType.LostSale;
                        _order.CreateLineItem(lostSale);
                        lostSaleQty = lostSale.Qty;
                    }

                    //update order
                    if (oli != null)
                    {
                        if (lostSaleQty > 0)
                            _order.ChangeLineItemQty(oli.Id, (oli.Qty - lostSaleQty));
                    }

                    //_approveOrderWFManager.remvdLineItemIds.Add(lineItem.LineItemId);
                }
                _approveOrderWFManager.CancelBackOrder(_order);

                ProcessingBackOrder = false;
            }
        }