private void OnDeliveryMethodButtonClick(int rowHandle)
        {
            if (rowHandle < 0 || rowHandle > this.gridSource.Count)
            {
                return;
            }

            LineLevelInformationViewModel viewModel = this.gridSource[rowHandle];

            if (string.Equals(gridView.FocusedColumn.FieldName, ColShip, StringComparison.OrdinalIgnoreCase))
            {
                ShippingInformationViewModel shippingViewModel = ShowShippingForm(rowHandle);

                if (shippingViewModel != null)
                {
                    // we clear the header...
                    this.ViewModel.ExecuteClearHeaderDelivery();

                    // ... set the values for the selected line
                    SetShipValues(shippingViewModel, viewModel);

                    // ...and switch everything to line level
                    foreach (LineLevelInformationViewModel lineViewModel in this.gridSource)
                    {
                        lineViewModel.Commit();
                    }

                    this.ResetControlBindings();
                }
            }

            if (string.Equals(gridView.FocusedColumn.FieldName, ColPickup, StringComparison.OrdinalIgnoreCase))
            {
                PickupInformationViewModel pickupViewModel = ShowPickupForm(rowHandle);

                if (pickupViewModel != null)
                {
                    // we clear the header...
                    this.ViewModel.ExecuteClearHeaderDelivery();

                    // ... set the values for the selected line
                    SetPickupValues(pickupViewModel, viewModel);

                    // ...and switch everything to line level
                    foreach (LineLevelInformationViewModel lineViewModel in this.gridSource)
                    {
                        lineViewModel.Commit();
                    }

                    this.ResetControlBindings();
                }
            }
        }
        private static void SetShipValues(
            ShippingInformationViewModel fromShippingViewModel,
            LineLevelInformationViewModel toLineViewModel)
        {
            toLineViewModel.IsShipping         = true;
            toLineViewModel.DeliveryDate       = fromShippingViewModel.DeliveryDate;
            toLineViewModel.ShippingCharge     = fromShippingViewModel.ShippingCharge;
            toLineViewModel.ShippingMethodCode = fromShippingViewModel.ShippingMethod.Code;
            toLineViewModel.ShippingAddress    = fromShippingViewModel.ShippingAddress;

            // Remove pickup related data
            toLineViewModel.DeliveryStore = null;
        }
        private static void SetPickupValues(
            PickupInformationViewModel fromPickupViewModel,
            LineLevelInformationViewModel toLineViewModel)
        {
            toLineViewModel.IsPickup      = true;
            toLineViewModel.DeliveryDate  = fromPickupViewModel.PickupDate;
            toLineViewModel.DeliveryStore = fromPickupViewModel.SelectedStore;

            // Remove any shipping related data
            toLineViewModel.ShippingCharge     = null;
            toLineViewModel.ShippingMethodCode = null;
            toLineViewModel.ShippingAddress    = null;
        }
        private PickupInformationViewModel ShowPickupForm(int rowIndex)
        {
            // Before we show the pickup form, check that a pickup code exists
            if (string.IsNullOrWhiteSpace(ApplicationSettings.Terminal.PickupDeliveryModeCode))
            {
                // "Pickup cannot be used for delivery because a pickup delivery code was not found."
                string errorMessage = LSRetailPosis.ApplicationLocalizer.Language.Translate(56382);
                SalesOrder.LogMessage(errorMessage, LSRetailPosis.LogTraceLevel.Error);
                SalesOrder.InternalApplication.Services.Dialog.ShowMessage(errorMessage, MessageBoxButtons.OK, MessageBoxIcon.Error);

                return(null);
            }

            PickupInformationViewModel vm = new PickupInformationViewModel(this.ViewModel.Transaction);

            vm.IsDeliveryChangeAllowed = this.ViewModel.IsDeliveryChangeAllowed;

            // Load any existing values
            if (rowIndex >= 0 && rowIndex < this.gridSource.Count)
            {
                LineLevelInformationViewModel viewModel = this.gridSource[rowIndex];

                vm.PickupDate    = viewModel.DeliveryDate;
                vm.SelectedStore = viewModel.DeliveryStore;
            }

            using (formPickupInformation pickup = new formPickupInformation(vm))
            {
                LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(pickup);

                if (pickup.DialogResult == DialogResult.OK)
                {
                    return(pickup.ViewModel);
                }
            }

            return(null);
        }
        private ShippingInformationViewModel ShowShippingForm(int rowIndex)
        {
            LineLevelInformationViewModel viewModel = null;

            if (rowIndex >= 0 && rowIndex < this.gridSource.Count)
            {
                viewModel = this.gridSource[rowIndex];
            }

            ShippingInformationViewModel vm = null;

            // Load any existing values
            if (viewModel != null)
            {
                vm = new ShippingInformationViewModel(this.ViewModel.Transaction, viewModel.LineItem);
                vm.DeliveryDate    = viewModel.DeliveryDate;
                vm.ShippingCharge  = viewModel.ShippingCharge;
                vm.ShippingMethod  = vm.ShippingMethods.FirstOrDefault(m => m.Code == viewModel.ShippingMethodCode);
                vm.ShippingAddress = viewModel.ShippingAddress;
            }
            else
            {
                vm = new ShippingInformationViewModel(this.ViewModel.Transaction, null);
            }
            vm.IsDeliveryChangeAllowed = this.ViewModel.IsDeliveryChangeAllowed;

            using (formShippingInformation frmShip = new formShippingInformation(vm))
            {
                LSRetailPosis.POSProcesses.POSFormsManager.ShowPOSForm(frmShip);

                if (frmShip.DialogResult == DialogResult.OK)
                {
                    return(frmShip.ViewModel);
                }
            }

            return(null);
        }
        /// <summary>
        /// Handles the display text for custom grid columns
        /// </summary>
        private void gridView_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
        {
            if (!this.gridSource.Any())
            {
                return;
            }

            LineLevelInformationViewModel viewModel = gridSource[e.ListSourceRowIndex];

            switch (e.Column.FieldName)
            {
            case ColShip:
                e.DisplayText = viewModel.IsShipping
                        ? DeliveryInformationPage.WingdingsTickCharachter
                        : string.Empty;
                break;

            case ColPickup:
                e.DisplayText = viewModel.IsPickup
                        ? DeliveryInformationPage.WingdingsTickCharachter
                        : string.Empty;
                break;
            }
        }