private void ExecuteLoadCommand()
        {
            //iterate through modules and execute force unload
            foreach (var moduleVM in ListModules.Where(m => m.Selected))
            {
                AggregateDataProvider.ForceLoad(moduleVM.SerialNumber);
            }

            LoadData(ListID);
        }
        private void ExecuteForceUnloadCommand()
        {
            //iterate through modules and execute force unload
            var snsOnTruck = AggregateDataProvider.SerialNumbersOnTruck.ToArray();

            foreach (var moduleVM in ListModules.Where(m => m.Selected && snsOnTruck.Any(s => s == m.SerialNumber)))
            {
                AggregateDataProvider.ForceUnload(moduleVM.SerialNumber);
            }

            LoadData(ListID);
        }
예제 #3
0
        private void ExecuteForceUnloadCommand()
        {
            //iterate through modules and execute force unload

            foreach (var moduleVM in ModulesOnTruck.Where(m => m.Selected))
            {
                AggregateDataProvider.ForceUnload(moduleVM.SerialNumber);
            }


            _windowService.CloseModalWindow(WindowType.UnloadCorrectionWindow);
            Messenger.Default.Send <ManualUnloadCorrectionMessage>(new ManualUnloadCorrectionMessage());
        }
        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            try
            {
                Messenger.Default.Unregister <FirstSetupWizardComplete>(this);

                CottonDBMS.TruckApp.Tasks.TruckPullFromCloudTask.Cancel();
                AggregateDataProvider.Cleanup();
                TagDataProvider.Disconnect();
                GPSDataProvider.Disconnect();
                QuadratureEncoderDataProvider.Dispose();
                Logging.Logger.CleanUp();
                base.OnClosed(e);
            }
            catch (Exception exc)
            {
                System.Diagnostics.Trace.Write(exc.Message);
            }

            //if (ConfigurationManager.AppSettings["AllowStartupAndShutdown"].ToLower() == "true")
            //System.Diagnostics.Process.Start("Shutdown", "-s -t 10");
        }
        private void initialize()
        {
            if (vm == null)
            {
                vm          = SimpleIoc.Default.GetInstance <NavViewModel>();
                DataContext = vm;
                unlockSettingsControl.DataContext = vm;
                passwordModalControl.DataContext  = vm;
                busyModal.DataContext             = vm;
            }

            this.Visibility = Visibility.Visible;

            //check for gps offsett setting
            using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
            {
                var repo          = dp.SettingsRepository;
                var offsetSetting = repo.FindSingle(s => s.Key == TruckClientSettingKeys.GPS_OFFSET_FEET);

                if (offsetSetting == null)
                {
                    repo.UpsertSetting(TruckClientSettingKeys.GPS_OFFSET_FEET, "45");
                    GPSDataProvider.SetGpsOffsetFeet(45.0);
                }
                else
                {
                    GPSDataProvider.SetGpsOffsetFeet(double.Parse(offsetSetting.Value));
                }
            }

            if (!vm.HasCloudSettings)
            {
                MessageBox.Show("Data sync settings have not been configured.  Please configure then restart the application.");
                navTabControl.SelectedIndex = 2;
            }
            else
            {
                Task.Run(() =>
                {
                    try
                    {
                        try
                        {
                            if (!TagDataProvider.IsConnected)
                            {
                                Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                    IsBusy = true, Message = "Looking for RFID reader..."
                                });
                                //System.Threading.Thread.Sleep(35000);
                                int tryNumber = 1;

                                do
                                {
                                    //todo fix error hangs when no reader on rugged pc
                                    TagDataProvider.Connect();
                                    tryNumber++;
                                    System.Threading.Thread.Sleep(3000);
                                } while (tryNumber < 10 && !TagDataProvider.IsConnected);

                                //Messenger.Default.Send<BusyMessage>(new Messages.BusyMessage { IsBusy = true, Message = "Connecting to RFID reader..." });
                                //TagDataProvider.Connect();
                                //System.Threading.Thread.Sleep(1400);
                            }

                            if (!TagDataProvider.IsConnected)
                            {
                                Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                    IsBusy = true, Message = "Not connected to RFID Reader."
                                });
                                System.Threading.Thread.Sleep(1200);
                            }
                            else
                            {
                                TagDataProvider.Stop();
                                Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                    IsBusy = true, Message = "RFID Reader found."
                                });
                                TagDataProvider.SyncReaderTime();
                                System.Threading.Thread.Sleep(1200);
                            }
                        }
                        catch (Exception readerExc)
                        {
                            Logging.Logger.Log(readerExc);
                        }

                        Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                            IsBusy = true, Message = "Initializing shaft sensor..."
                        });
                        QuadratureEncoderDataProvider.StartEvents();
                        System.Threading.Thread.Sleep(1000);

                        if (!QuadratureEncoderDataProvider.IsStarted)
                        {
                            Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                IsBusy = true, Message = "Shaft Sensor not found."
                            });
                            System.Threading.Thread.Sleep(1200);
                        }

                        if (!GPSDataProvider.IsConnected)
                        {
                            Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                IsBusy = true, Message = "Connecting to GPS receiver..."
                            });

                            Task.Run(() =>
                            {
                                GPSDataProvider.Connect();
                            });

                            int waitCount = 0;
                            while (waitCount < 60 && !GPSDataProvider.IsConnected)
                            {
                                System.Threading.Thread.Sleep(500);
                                waitCount++;
                            }

                            if (GPSDataProvider.IsConnected)
                            {
                                Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                    IsBusy = true, Message = "GPS connected."
                                });
                                System.Threading.Thread.Sleep(1000);
                            }
                            else
                            {
                                Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                    IsBusy = true, Message = "GPS not connected."
                                });
                                System.Threading.Thread.Sleep(2000);
                            }
                        }

                        Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                            IsBusy = false, Message = ""
                        });

                        TagDataProvider.Initialize();
                        AggregateDataProvider.Initialize();
                        CottonDBMS.TruckApp.Tasks.TruckPullFromCloudTask.Init();
                        readerSettingsControl.Initialize();
                    }
                    catch (Exception exc)
                    {
                        CottonDBMS.Logging.Logger.Log(exc);
                    }
                });
            }

            navTabControl.Height = canvasLayout.ActualHeight;
            navTabControl.Width  = canvasLayout.ActualWidth;
            modalBG.Height       = canvasLayout.ActualHeight;
            modalBG.Width        = canvasLayout.ActualWidth;
        }
예제 #6
0
        private void ExecuteSave()
        {
            Task.Run(() =>
            {
                Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                    IsBusy = true, Message = "Saving..."
                });

                try
                {
                    Settings settings = TagDataProvider.GetDefaultSettings();

                    if (settings != null)
                    {
                        settings.Antennas.TxPowerMax       = false;
                        settings.Antennas.RxSensitivityMax = false;
                        settings.HoldReportsOnDisconnect   = false;
                        settings.Report.Mode = ReportMode.Individual;
                        //settings.AutoStart.Mode = AutoStartMode.None;
                        settings.SearchMode = SearchMode.DualTarget;
                        settings.ReaderMode = ReaderMode.AutoSetStaticDRM;
                        settings.Report.IncludeFirstSeenTime      = true;
                        settings.Report.IncludeLastSeenTime       = true;
                        settings.Report.IncludeSeenCount          = true;
                        settings.Keepalives.Enabled               = true;
                        settings.Keepalives.EnableLinkMonitorMode = true;
                        settings.Keepalives.LinkDownThreshold     = 5;
                        settings.Keepalives.PeriodInMs            = 3000;

                        settings.Antennas.GetAntenna(1).RxSensitivityInDbm = (double)_antenna1ReceivePower;
                        settings.Antennas.GetAntenna(1).TxPowerInDbm       = (double)_antenna1TransmitPower;

                        settings.Antennas.GetAntenna(2).RxSensitivityInDbm = (double)_antenna2ReceivePower;
                        settings.Antennas.GetAntenna(2).TxPowerInDbm       = (double)_antenna2TransmitPower;

                        settings.Antennas.GetAntenna(3).RxSensitivityInDbm = (double)_antenna3ReceivePower;
                        settings.Antennas.GetAntenna(3).TxPowerInDbm       = (double)_antenna3TransmitPower;

                        settings.Antennas.GetAntenna(4).RxSensitivityInDbm = (double)_antenna4ReceivePower;
                        settings.Antennas.GetAntenna(4).TxPowerInDbm       = (double)_antenna4TransmitPower;

                        TagDataProvider.ApplySettings(settings);

                        Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                            IsBusy = true, Message = "Settings saved."
                        });
                        System.Threading.Thread.Sleep(3000);
                    }
                    else
                    {
                        Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                            IsBusy = true, Message = "Unable to save reader settings. Reader disconnected?"
                        });
                        System.Threading.Thread.Sleep(3000);
                    }

                    bool portChanged = false;
                    using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
                    {
                        var repo    = dp.SettingsRepository;
                        var setting = repo.FindSingle(x => x.Key == TruckClientSettingKeys.RFID_READ_DELAY);
                        if (setting != null)
                        {
                            setting.Value = RFIDReadDelay.ToString();
                            AggregateDataProvider.UpdateReadDelay(RFIDReadDelay);
                        }

                        var portSetting = repo.FindSingle(x => x.Key == TruckClientSettingKeys.GPS_COM_PORT);
                        if (portSetting != null)
                        {
                            if (PortName != "-- Select One --")
                            {
                                if (portSetting.Value != PortName)
                                {
                                    portChanged = true;
                                }
                                portSetting.Value = PortName;
                            }
                        }
                        else //Add Port setting
                        {
                            portSetting       = new Setting();
                            portSetting.Value = PortName;
                            portSetting.Key   = TruckClientSettingKeys.GPS_COM_PORT;
                            dp.SettingsRepository.Add(portSetting);
                            portChanged = true;
                        }
                        dp.SaveChanges();
                    }

                    if (portChanged)
                    {
                        System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                        {
                            System.Windows.MessageBox.Show("Please close and restart the application for new GPS settings to take effect");
                        }));
                    }
                }
                catch (Exception exc)
                {
                    System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                    {
                        System.Windows.MessageBox.Show("An error occurred saving settings to reader. " + exc.Message);
                    }));
                    Logging.Logger.Log(exc);
                }
                finally
                {
                    Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                        IsBusy = false, Message = ""
                    });
                }
            });
        }
예제 #7
0
        private void ExecuteClearModuleDataCommand()
        {
            Task.Run(async() => {
                System.Windows.MessageBoxResult msgResult = System.Windows.MessageBoxResult.No;

                System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                {
                    msgResult = System.Windows.MessageBox.Show("Are you sure you want to clear all module history and pickup lists from this truck?  Data already sent to gin will not be deleted from the gin database.", "Confirm", System.Windows.MessageBoxButton.YesNo);
                }));

                if (msgResult == System.Windows.MessageBoxResult.Yes)
                {
                    if (CottonDBMS.DataModels.Helpers.NetworkHelper.HasNetwork())
                    {
                        if (CottonDBMS.DataModels.Helpers.NetworkHelper.SyncProcessRunning())
                        {
                            Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                IsBusy = true, Message = "Waiting for background sync to complete."
                            });
                            CottonDBMS.DataModels.Helpers.NetworkHelper.WaitForSyncToStop();
                        }
                        else
                        {
                            //run the sync to send data collected this also ensure after it completes
                            //it will not start again during the reset operation
                            Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                IsBusy = true, Message = "Sending collected data."
                            });
                            CottonDBMS.DataModels.Helpers.NetworkHelper.RunSync(System.Reflection.Assembly.GetExecutingAssembly().Location, false);
                            CottonDBMS.DataModels.Helpers.NetworkHelper.WaitForSyncToStop();
                        }

                        Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                            IsBusy = true, Message = "Clearing data..."
                        });
                        using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
                        {
                            dp.TruckRepository.ClearTruckData();
                            AggregateDataProvider.Reset();
                            var truck = dp.SettingsRepository.GetCurrentTruck();

                            if (truck != null)
                            {
                                await DocumentDBContext.DeleteItemAsync <TruckListsDownloaded>("TRUCKDOWNLOADS_" + truck.Id);
                            }
                        }

                        Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                            IsBusy = false, Message = ""
                        });
                        Messenger.Default.Send <DataRefreshedMessage>(new DataRefreshedMessage());
                    }
                    else
                    {
                        System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                        {
                            msgResult = System.Windows.MessageBox.Show("Cannot clear data no network connection");
                        }));
                    }
                }
            });
        }
예제 #8
0
        private void ExecuteSave()
        {
            Task.Run(async() =>
            {
                string key      = "";
                string endpoint = "";
                bool shutDown   = false;

                using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
                {
                    var documentDbSetting = dp.SettingsRepository.FindSingle(x => x.Key == TruckClientSettingKeys.DOCUMENT_DB_KEY);
                    var endpointSetting   = dp.SettingsRepository.FindSingle(x => x.Key == TruckClientSettingKeys.DOCUMENTDB_ENDPOINT);

                    if (documentDbSetting != null)
                    {
                        key = documentDbSetting.Value;
                    }

                    if (endpointSetting != null)
                    {
                        endpoint = endpointSetting.Value;
                    }

                    if (string.IsNullOrWhiteSpace(key) || string.IsNullOrWhiteSpace(endpoint))
                    {
                        shutDown = true;
                    }
                }

                if (string.IsNullOrWhiteSpace(_documentDbConnection))
                {
                    ShowErrorMessage = true;
                    ErrorMessage     = "Document db key is required.";
                }
                else if (string.IsNullOrWhiteSpace(_documentDbEndpoint))
                {
                    ShowErrorMessage = true;
                    ErrorMessage     = "Document db endpoint is required.";
                }
                else
                {
                    ErrorMessage     = "";
                    ShowErrorMessage = false;
                    Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                        IsBusy = true, Message = "Saving..."
                    });
                    using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
                    {
                        var documentDbEndpointSetting = dp.SettingsRepository.FindSingle(x => x.Key == TruckClientSettingKeys.DOCUMENTDB_ENDPOINT);
                        var documentDbKeySetting      = dp.SettingsRepository.FindSingle(x => x.Key == TruckClientSettingKeys.DOCUMENT_DB_KEY);
                        var syncIntervalSetting       = dp.SettingsRepository.FindSingle(x => x.Key == TruckClientSettingKeys.DATA_SYNC_INTERVAL);

                        var localTrucks  = dp.TruckRepository.GetAll();
                        var localDrivers = dp.DriverRepository.GetAll();

                        if (documentDbKeySetting != null)
                        {
                            documentDbKeySetting.Value = _documentDbConnection;
                        }
                        else
                        {
                            documentDbKeySetting       = new Setting();
                            documentDbKeySetting.Key   = TruckClientSettingKeys.DOCUMENT_DB_KEY;
                            documentDbKeySetting.Value = _documentDbConnection;
                            dp.SettingsRepository.Add(documentDbKeySetting);
                        }

                        if (documentDbEndpointSetting != null)
                        {
                            documentDbEndpointSetting.Value = _documentDbEndpoint;
                        }
                        else
                        {
                            documentDbEndpointSetting       = new Setting();
                            documentDbEndpointSetting.Key   = TruckClientSettingKeys.DOCUMENTDB_ENDPOINT;
                            documentDbEndpointSetting.Value = _documentDbEndpoint;
                            dp.SettingsRepository.Add(documentDbEndpointSetting);
                        }

                        if (syncIntervalSetting != null)
                        {
                            syncIntervalSetting.Value = _dataSyncInterval.ToString();
                        }
                        else
                        {
                            syncIntervalSetting       = new Setting();
                            syncIntervalSetting.Key   = TruckClientSettingKeys.DATA_SYNC_INTERVAL;
                            syncIntervalSetting.Value = _dataSyncInterval.ToString();
                            dp.SettingsRepository.Add(syncIntervalSetting);
                        }

                        AggregateDataProvider.UpdateReadDelay(_dataSyncInterval);
                        dp.SaveChanges();

                        try
                        {
                            var currentTruck  = dp.SettingsRepository.GetCurrentTruck();
                            var currentDriver = dp.SettingsRepository.GetCurrentDriver();

                            if (currentDriver == null || currentTruck == null) //if no truck or driver set try to pull down from cloud and set a truck/driver
                            {
                                CottonDBMS.Cloud.DocumentDBContext.Initialize(_documentDbEndpoint, _documentDbConnection);
                                var trucks  = await DocumentDBContext.GetAllItemsAsync <TruckEntity>(p => p.EntityType == EntityType.TRUCK);
                                var drivers = await DocumentDBContext.GetAllItemsAsync <DriverEntity>(p => p.EntityType == EntityType.DRIVER);

                                if (localTrucks.Count() == 0)
                                {
                                    foreach (var t in trucks)
                                    {
                                        dp.TruckRepository.Add(t);
                                    }
                                }

                                if (localDrivers.Count() == 0)
                                {
                                    foreach (var d in drivers)
                                    {
                                        dp.DriverRepository.Add(d);
                                    }
                                }

                                dp.SaveChanges();

                                localTrucks  = dp.TruckRepository.GetAll();
                                localDrivers = dp.DriverRepository.GetAll();

                                if (localTrucks.Count() > 0)
                                {
                                    dp.SettingsRepository.UpsertSetting(TruckClientSettingKeys.TRUCK_ID, localTrucks.First().Id);
                                }

                                if (localDrivers.Count() > 0)
                                {
                                    dp.SettingsRepository.UpsertSetting(TruckClientSettingKeys.DRIVER_ID, localDrivers.First().Id);
                                }

                                dp.SaveChanges();
                            }
                        }
                        catch (Exception exc)
                        {
                            ErrorMessage     = "Unable to connect to cloud.";
                            ShowErrorMessage = true;
                        }

                        try
                        {
                            var syncedSettings = await DocumentDBContext.GetAllItemsAsync <SyncedSettings>(p => p.EntityType == EntityType.SETTING_SUMMARY);
                            var settingsToSave = syncedSettings.FirstOrDefault();

                            var localSyncedSetting = dp.SyncedSettingsRepo.GetAll().FirstOrDefault();

                            settingsToSave.SyncedToCloud = true;
                            if (localSyncedSetting == null)
                            {
                                dp.SyncedSettingsRepo.Add(settingsToSave);
                                dp.SaveChanges();
                            }
                        }
                        catch (Exception exc)
                        {
                            ErrorMessage     = "Unable to retrieve system settings.";
                            ShowErrorMessage = true;
                            Logging.Logger.Log(exc);
                        }
                    }
                    Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                        IsBusy = true, Message = "Settings Saved."
                    });
                    System.Threading.Thread.Sleep(2000);
                    Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                        IsBusy = false, Message = ""
                    });

                    if (shutDown)
                    {
                        Environment.Exit(0);
                    }
                }
                CottonDBMS.TruckApp.Helpers.SettingsHelper.PersistSettingsToAppData();
            });
        }