protected async void OnNextExecute()
        {
            if (!CanGoNext)
            {
                return;
            }

            CanGoNext = false;

            if (!await UserViewModel.ValidateAndSaveInput(Items.Where(x => x is IOrderFieldsGroupVM).Select(x => x as IOrderFieldsGroupVM)) ||
                !await DeliveryViewModel.ValidateDelivery(Items.Where(x => x is IDeliveryTypeItemVM).Select(x => x as IDeliveryTypeItemVM)))
            {
                CanGoNext = true;
                return;
            }

            Loading = true;

            NextCommand.RaiseCanExecuteChanged();

            if (_orderProcessingToken == null)
            {
                _orderProcessingToken = Messenger.Subscribe <OrderProcessingMessage>(DeliveryViewModel.OrderProcessingChanged);
            }

            if (_orderPaidToken == null)
            {
                _orderPaidToken = Messenger.Subscribe <OrderPaidMessage>(DeliveryViewModel.OnOrderPaidMessageRecieved);
            }

            if (_paymentSelectedToken == null)
            {
                _paymentSelectedToken = Messenger.Subscribe <PaymentSelectedMessage>(DeliveryViewModel.OnPaymentSelectedMessage);
            }

            var selectedDelivery = Items?.FirstOrDefault(x => x is IDeliveryTypeItemVM deliveryItem && deliveryItem.IsSelected) as IDeliveryTypeItemVM;

            var isNeedToSelectPayment = await OrderVmService.IsPaymentNecessary(selectedDelivery?.Id);

            if (isNeedToSelectPayment)
            {
                NavigationVmService.NavigateToPayment(new PaymentBundle(selectedDelivery?.Id, NavigationType.PresentModal));
            }
            else
            {
                await DeliveryViewModel.CreateOrder();
            }

            CanGoNext = true;

            Loading = false;
        }