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