private void RaiseRemoveLineItemInteractionRequest(ShipmentItem removingItem)
        {
            var itemVM = _lineItemVmFactory.GetViewModelInstance();

            itemVM.Initialize(removingItem);

            CommonShipmentConfirmRequest.Raise(
                new ConditionalConfirmation {
                Title = "Item removal details".Localize(), Content = itemVM
            },
                (x) =>
            {
                if (x.Confirmed)
                {
                    // removing is moving item to fake shipment
                    var fakeShipment = new Shipment {
                        OrderForm = CurrentShipment.OrderForm
                    };
                    _currentOrder.MoveShippingItem(removingItem, itemVM.Quantity, fakeShipment, CurrentShipment);

                    // update LineItem Quantity or remove it completely
                    var lineItem = removingItem.LineItem;
                    if (lineItem.Quantity > itemVM.Quantity)
                    {
                        lineItem.Quantity -= itemVM.Quantity;
                    }
                    else
                    {
                        _currentOrder.OrderForms[0].LineItems.Remove(lineItem);
                    }

                    ParentViewModel.Recalculate();
                }
            });
        }
 private void Shipment_PropertyChanged(object sender, PropertyChangedEventArgs e)
 {
     // Status property is changed in commands. Some Status changes may affect whole Order Status. Recalculate every time.
     if (e.PropertyName == "Status" || e.PropertyName == "ShippingAddressId" || e.PropertyName == "ShippingMethodId")
     {
         ParentViewModel.Recalculate();
     }
 }
        private void RaiseMoveLineItemInteractionRequest(ShipmentItem movingItem)
        {
            if (movingItem != null)
            {
                var itemVM = _splitVmFactory.GetViewModelInstance(
                    new KeyValuePair <string, object>("currentOrder", _currentOrder.InnerItem)
                    , new KeyValuePair <string, object>("sourceShipment", CurrentShipment)
                    , new KeyValuePair <string, object>("movingItem", movingItem));

                var confirmation = new ConditionalConfirmation {
                    Title = "Split shipment".Localize(), Content = itemVM
                };

                CommonShipmentConfirmRequest.Raise(confirmation, (x) =>
                {
                    if (x.Confirmed)
                    {
                        var quantity       = itemVM.MoveQuantity;
                        var targetShipment = itemVM.TargetShipment;

                        var anyOperationSucceded = false;
                        try
                        {
                            ParentViewModel.CloseAllSubscription1();

                            _currentOrder.MoveShippingItem(movingItem, quantity, targetShipment, CurrentShipment);
                            if (itemVM.IsNewShipmentSelected)
                            {
                                targetShipment.ShipmentId  = targetShipment.GenerateNewKey();
                                targetShipment.OrderFormId = _currentOrder.OrderForms[0].OrderFormId;
                                _currentOrder.OrderForms[0].Shipments.Add(targetShipment);
                            }

                            ParentViewModel.OrderShipmentViewModels.Clear();
                            ParentViewModel.InitializeOrderShipmentViewModels();

                            ParentViewModel.Recalculate();
                            anyOperationSucceded = true;
                        }
                        finally
                        {
                            ParentViewModel.SetAllSubscription1();
                            // fake assignment for triggers to fire
                            if (anyOperationSucceded)
                            {
                                ParentViewModel.InnerItem.OrderGroupId = ParentViewModel.InnerItem.OrderGroupId;
                            }
                        }
                        RaiseCanExecuteChanged();
                    }
                });
            }
        }
        private void RaiseAddLineItemInteractionRequest()
        {
            var itemVM = _wizardLineItemVmFactory.GetViewModelInstance();

            var confirmation = new ConditionalConfirmation {
                Title = "Add new items".Localize(), Content = itemVM
            };

            CommonShipmentConfirmRequest.Raise(confirmation, (x) =>
            {
                if (x.Confirmed)
                {
                    ParentViewModel.CloseAllSubscription1();
                    var builder = new ShipmentBuilder(CurrentShipment, _currentOrder.OrderForms[0], _entityFactory, _repositoryFactory, _priceListClient);
                    itemVM.SelectedItemsToAdd.ToList().ForEach(i => builder.AddShipmentItem(i.ItemToAdd, i.Quantity));

                    ParentViewModel.Recalculate();
                    // fake assignment for triggers to fire
                    ParentViewModel.InnerItem.OrderGroupId = ParentViewModel.InnerItem.OrderGroupId;
                }
            });
        }