/// <summary>
        /// Worker completed event handler.
        /// Parses results.
        /// </summary>
        /// <param name="sender">Background worker.</param>
        /// <param name="e">Run worker completed event arguments.</param>
        private void _worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            var bw = sender as BackgroundWorker;

            Debug.Assert(null != bw); // supported object

            // stop events
            bw.DoWork             -= _worker_DoWork;
            bw.ProgressChanged    -= _worker_ProgressChanged;
            bw.RunWorkerCompleted -= _worker_RunWorkerCompleted;

            // free resources
            bw.Dispose();
            _worker = null;

            // parse operation results
            Storage storage = _ParseResults(e.Error, e.Cancelled);

            // fire import completed
            if (null != ImportCompleted)
            {
                Debug.Assert(null != storage); // inited
                var events = new ImportCompletedEventArgs(storage.UpdatedObjects, e.Cancelled);
                ImportCompleted(this, events);
            }
        }
        /// <summary>
        /// Worker completed event handler.
        /// Parses results.
        /// </summary>
        /// <param name="sender">Background worker.</param>
        /// <param name="e">Run worker completed event arguments.</param>
        private void _worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            var bw = sender as BackgroundWorker;
            Debug.Assert(null != bw); // supported object

            // stop events
            bw.DoWork -= _worker_DoWork;
            bw.ProgressChanged -= _worker_ProgressChanged;
            bw.RunWorkerCompleted -= _worker_RunWorkerCompleted;

            // free resources
            bw.Dispose();
            _worker = null;

            // parse operation results
            Storage storage = _ParseResults(e.Error, e.Cancelled);

            // fire import completed
            if (null != ImportCompleted)
            {
                Debug.Assert(null != storage); // inited
                var events = new ImportCompletedEventArgs(storage.UpdatedObjects, e.Cancelled);
                ImportCompleted(this, events);
            }
        }
        /// <summary>
        /// React on import completed.
        /// </summary>
        /// <param name="sender">Importer.</param>
        /// <param name="e">Ignored.</param>
        private void _ImportCompleted(object sender, ImportCompletedEventArgs e)
        {
            var manager = sender as ImportManager;
            Debug.Assert(manager != null);
            manager.ImportCompleted -= _ImportCompleted;
            manager.Dispose();

            // Special logic for Optimize and edit page.
            if (ParentPage is AppPages.OptimizeAndEditPage)
            {
                // Get ungeocoded orders collection.
                var ungeocodedOrders = new List<Order>();
                foreach (Order order in e.ImportedObjects)
                {
                    if (!order.IsGeocoded)
                    {
                        Debug.Assert(!ungeocodedOrders.Contains(order));
                        ungeocodedOrders.Add(order);
                    }
                }

                // If at least one ungeocoded order present on current day -
                // show ungeocoded orders page.
                if (ungeocodedOrders.Count > 0)
                {
                    var ordersPage =
                        new FleetSetupWizardUngeocodedOrdersPage(ungeocodedOrders);

                    // React on page load and unload.
                    ordersPage.Loaded +=
                        new RoutedEventHandler(_UngeocodedOrdersPageLoaded);
                    ordersPage.Unloaded +=
                        new RoutedEventHandler(_UngeocodedOrdersPageUnloaded);

                    ordersPage.NextRequired += new EventHandler(_OrdersPageNextRequired);
                    // Show orders geocoding page.
                    App.Current.MainWindow.PageFrame.Navigate(ordersPage);
                }
            }
        }