private void ExecuteDirectionsCommand() { var currentCoords = GPSDataProvider.GetLastCoords(); double?destLat = null; double?destLng = null; double?myLat = null; double?myLong = null; if (Modules.Count() > 0) { destLat = Modules[0].Latitude; destLng = Modules[0].Longitude; } else { destLat = FieldLat; destLng = FieldLong; } if (currentCoords != null) { myLat = currentCoords.Latitude; myLong = currentCoords.Longitude; } else { myLat = 33.5779; myLong = -101.8552; } _windowService.LaunchDirections(destLat, destLng, myLat, myLong); }
public void Refresh() { //initialize using ActiveListID to lookup info ModulesOnTruck = new ObservableCollection <ModuleViewModel>(); foreach (var sn in AggregateDataProvider.SerialNumbersOnTruck) { ModulesOnTruck.Add(new ViewModels.ModuleViewModel { SerialNumber = sn }); } var coords = GPSDataProvider.GetLastCoords(); double lat = 0.00; double lng = 0.00; if (coords != null) { lat = coords.NonNullLatitude; lng = coords.NonNullLongitude; } using (var uow = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork()) { if (uow.SettingsRepository.CoordsAtFeeder(lat, lng)) { Location = "Gin Feeder"; } else if (uow.SettingsRepository.CoordsOnGinYard(lat, lng)) { Location = "Gin Yard"; } } }
public void NewModuleDetected(string serialNumber) { var lat = GPSDataProvider.GetAverageLatitude(DateTime.Now.ToUniversalTime().AddSeconds(-3), DateTime.Now.ToUniversalTime()); var lng = GPSDataProvider.GetAverageLongitude(DateTime.Now.ToUniversalTime().AddSeconds(-3), DateTime.Now.ToUniversalTime()); foreach (var sn in AggregateDataProvider.SerialNumbersOnTruckIncludingBuffered) { if (sn != serialNumber && !ModulesOnTruck.Any(t => t.SerialNumber == sn)) { ModulesOnTruck.Add(new ModuleViewModel { SerialNumber = sn, Latitude = lat, Longitude = lng, Loaded = true }); } } SerialNumber = serialNumber; }
public void Initialize() { MapVisible = defaultToMap; var lastCoords = GPSDataProvider.GetLastCoords(DateTime.Now.ToUniversalTime().AddSeconds(-5), DateTime.Now.ToUniversalTime()); CurrentLat = CottonDBMS.DataModels.Helpers.GPSHelper.SafeLat(lastCoords); CurrentLong = CottonDBMS.DataModels.Helpers.GPSHelper.SafeLong(lastCoords); FieldLat = 0.000; FieldLong = 0.000; HasCheckedModules = false; using (var uow = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork()) { if (InitiatingEvent != null) //find the list based on serial number { PickupListDestination dest = PickupListDestination.GIN_YARD; if (uow.SettingsRepository.CoordsOnGinYard(CurrentLat, CurrentLong) || uow.SettingsRepository.CoordsAtFeeder(CurrentLat, CurrentLong)) { dest = PickupListDestination.GIN_FEEDER; } ListID = uow.PickupListRepository.GetListIDWithSerialNumber(InitiatingEvent.SerialNumber, CurrentLat, CurrentLong, dest); } } LoadData(ListID); Messenger.Default.Register <GPSEventMessage>(this, (action) => ProcessGPSMessage(action)); Messenger.Default.Register <TagLoadingMessage>(this, (action) => ProcessTagLoadingMessage(action)); Messenger.Default.Register <AggregateEvent>(this, (action) => ProcessAggregatedEvent(action)); if (InitiatingEvent != null) { ProcessTagLoadingMessage(InitiatingEvent); } Task.Run(() => { checkForInternet(); timer = new System.Threading.Timer(timerCallback, null, 500, 1000); }); }
private void ProcessTagUnloadingMessage(TagUnloadingMessage msg) { Task.Run(() => { if (!_windowService.IsWindowOpen(WindowType.WaitingForUnloadWindow)) { using (var uow = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork()) { Logging.Logger.Log("DEBUG", "Processing unload message from home view model."); DateTime gpsStart = DateTime.Now.ToUniversalTime().AddSeconds(-3); DateTime gpsEnd = DateTime.Now.ToUniversalTime(); double latitude = GPSDataProvider.GetAverageLatitude(gpsStart, gpsEnd); double longitude = GPSDataProvider.GetAverageLongitude(gpsStart, gpsEnd); /*if (_windowService.IsWindowOpen(WindowType.PickupWindow)) * { * _windowService.CloseModalWindow(WindowType.PickupWindow); * }*/ System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => { UnloadingAtGinViewModel vm = SimpleIoc.Default.GetInstance <UnloadingAtGinViewModel>(); vm.SerialNumber = msg.SerialNumber; vm.Refresh(); if (!_windowService.IsWindowOpen(WindowType.UnloadingAtGin)) { vm.Initialize(); _windowService.ShowModalWindow(WindowType.UnloadingAtGin, vm); } else { vm.Refresh(); } })); } } }); }
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 string getInitScript() { StringBuilder sb = new StringBuilder(); string parmLat; string parmLong; var coords = GPSDataProvider.GetLastCoords(DateTime.UtcNow.AddMinutes(-1), DateTime.UtcNow); if (vm.FieldLat != 0.000 && vm.FieldLong != 0.000) { parmLat = vm.FieldLat.ToString(); parmLong = vm.FieldLong.ToString(); } else if (coords != null) { parmLat = coords.Latitude.ToString(); parmLong = coords.Longitude.ToString(); } else { parmLat = "33.5749"; parmLong = "-101.8572"; } //browser.InvokeScript("setMyLocation", parms.ToArray()); sb.AppendLine(string.Format("setMyLocation('{0}', '{1}');", parmLat, parmLong)); foreach (var point in vm.Modules.Where(m => m.ShowOnMap && !m.Loaded)) { sb.AppendLine(string.Format("addModule('{0}', '{1}', '{2}');", point.Latitude.ToString(), point.Longitude.ToString(), point.SerialNumber)); } if (vm.Modules.Count() == 0) { sb.AppendLine(string.Format("addModule('{0}', '{1}', '{2}');", parmLat.ToString(), parmLong.ToString(), vm.Client + " - " + vm.Farm + " - " + vm.Field)); } return(sb.ToString()); }
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; }
private void ProcessTagLoadingMessage(TagLoadingMessage msg) { Task.Run(() => { using (var uow = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork()) { DateTime gpsStart = DateTime.Now.ToUniversalTime().AddSeconds(-4); DateTime gpsEnd = DateTime.Now.ToUniversalTime(); double latitude = GPSDataProvider.GetAverageLatitude(gpsStart, gpsEnd); double longitude = GPSDataProvider.GetAverageLongitude(gpsStart, gpsEnd); //PickupListEntity pickupList = uow.PickupListRepository.GetListIDWithSerialNumber(msg.SerialNumber); //IF LOADING WINDOW NOT OPEN AND WE ARE ON THE GIN YARD /*if (!_windowService.IsWindowOpen(WindowType.LoadingWindow) && (uow.SettingsRepository.CoordsAtFeeder(latitude, longitude) || uow.SettingsRepository.CoordsOnGinYard(latitude, longitude))) * { * if (!_windowService.IsWindowOpen(WindowType.LoadingAtGin)) * { * Logging.Logger.Log("DEBUG", "Processing load message from home view model for gin load."); * //we are at the gin yard or feeder so just show loading window with no list checks * System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => * { * LoadingAtGinViewModel vm = SimpleIoc.Default.GetInstance<LoadingAtGinViewModel>(); * vm.SerialNumber = msg.SerialNumber; * vm.Initialize(); * _windowService.ShowModalWindow(WindowType.LoadingAtGin, vm); * })); * } * else * { * System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => * { * LoadingAtGinViewModel vm = SimpleIoc.Default.GetInstance<LoadingAtGinViewModel>(); * vm.AddModule(msg.SerialNumber); * })); * } * } * else * {*/ Logging.Logger.Log("DEBUG", "Processing load message from home view model."); //if we're in the field then if (!_windowService.IsWindowOpen(WindowType.PickupWindow)) { System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => { PickUpListViewModel vm = SimpleIoc.Default.GetInstance <PickUpListViewModel>(); if (this.SelectedItem != null) { vm.ListID = this.SelectedItem.ListID; } else { vm.ListID = GUIDS.UNASSIGNED_LIST_ID; } vm.InitiatingEvent = msg; _windowService.ShowModalWindow(WindowType.PickupWindow, vm); })); } //} } }); }
private void ProcessTagLoadingMessage(TagLoadingMessage msg) { if (!_windowService.IsWindowOpen(WindowType.LoadingAtGin)) { Task.Run(() => { Logging.Logger.Log("DEBUG", "Processing tag loading message from pickup list " + msg.SerialNumber); using (var uow = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork()) { System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => { DateTime gpsStart = DateTime.Now.ToUniversalTime().AddSeconds(-3); DateTime gpsEnd = DateTime.Now.ToUniversalTime(); double latitude = GPSDataProvider.GetAverageLatitude(gpsStart, gpsEnd); double longitude = GPSDataProvider.GetAverageLongitude(gpsStart, gpsEnd); //if we're not at the gin yard or feeder - we must be loading in the field //if (!uow.SettingsRepository.CoordsAtFeeder(latitude, longitude) && !uow.SettingsRepository.CoordsOnGinYard(latitude, longitude)) // { bool moduleOnList = this.Modules.Any(m => m.SerialNumber.Trim().ToLower() == msg.SerialNumber.Trim().ToLower()); if (moduleOnList && !_windowService.IsWindowOpen(WindowType.LoadingIncorrectModuleWindow) && !_windowService.IsWindowOpen(WindowType.WaitingForUnloadWindow)) { if (!_windowService.IsWindowOpen(WindowType.LoadingWindow)) { LoadingWindowViewModel vm = SimpleIoc.Default.GetInstance <LoadingWindowViewModel>(); vm.SerialNumber = msg.SerialNumber; vm.Initialize(this.ListID); _windowService.ShowModalWindow(WindowType.LoadingWindow, vm); } else //window is already open but another module passed under antenna view { LoadingWindowViewModel vm = SimpleIoc.Default.GetInstance <LoadingWindowViewModel>(); vm.NewModuleDetected(msg.SerialNumber); } } else //we're in the incorrect module sequence or we detected an incorrect module previously { if (_windowService.IsWindowOpen(WindowType.LoadingWindow)) { _windowService.CloseModalWindow(WindowType.LoadingWindow); } if (!_windowService.IsWindowOpen(WindowType.LoadingIncorrectModuleWindow)) { if (_windowService.IsWindowOpen(WindowType.WaitingForUnloadWindow)) { _windowService.CloseModalWindow(WindowType.WaitingForUnloadWindow); } if (_windowService.IsWindowOpen(WindowType.UnloadCorrectionWindow)) { _windowService.CloseModalWindow(WindowType.UnloadCorrectionWindow); } incorrectModuleVM.ActiveListID = this.ListID; incorrectModuleVM.ListName = this.ListName; incorrectModuleVM.Client = this.Client; incorrectModuleVM.Farm = this.Farm; incorrectModuleVM.Field = this.Field; incorrectModuleVM.Initialize(false); incorrectModuleVM.NewModuleLoaded(msg.SerialNumber, moduleOnList); _windowService.ShowModalWindow(WindowType.LoadingIncorrectModuleWindow, incorrectModuleVM); } else //window is already open { incorrectModuleVM.NewModuleLoaded(msg.SerialNumber, moduleOnList); } } //} Logging.Logger.Log("DEBUG", "Done Processing tag loading message from pickup list " + msg.SerialNumber); })); } }); } }
private void ExecuteClearGpsCommand() { GPSEvents.Clear(); GPSDataProvider.ClearBuffer(); }
private void ExecuteSaveCommand() { refreshErrorState(); if (!HasErrors) { try { using (var uow = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork()) { //get this truck var syncedSetting = uow.SyncedSettingsRepo.GetAll().FirstOrDefault(); TruckEntity thisTruck = uow.SettingsRepository.GetCurrentTruck(); string clientName = ""; if (_selectedProducer.ID == "") { clientName = _NewProducerText.Trim(); } else { clientName = _selectedProducer.DisplayText.Trim(); } string farmName = ""; if (ShowNewFarmText) { farmName = _NewFarmText.Trim(); } else { farmName = _selectedFarm.DisplayText.Trim(); } string fieldName = ""; if (ShowFieldText) { fieldName = _NewFieldText.Trim(); } else { fieldName = _selectedField.DisplayText.Trim(); } ClientEntity client = uow.ClientRepository.EnsureClientCreated(clientName, InputSource.TRUCK); uow.SaveChanges(); FarmEntity farm = uow.FarmRepository.EnsureFarmCreated(client, farmName, InputSource.TRUCK); uow.SaveChanges(); FieldEntity field = uow.FieldRepository.EnsureFieldCreated(farm, fieldName, InputSource.TRUCK); uow.SaveChanges(); var coords = GPSDataProvider.GetLastCoords(); double lat = CottonDBMS.DataModels.Helpers.GPSHelper.SafeLat(coords); double lng = CottonDBMS.DataModels.Helpers.GPSHelper.SafeLong(coords); PickupListEntity list = new PickupListEntity(); list.Id = Guid.NewGuid().ToString(); list.Name = _listName.Trim(); list.Source = InputSource.TRUCK; list.AssignedModules = new List <ModuleEntity>(); list.AssignedTrucks = new List <TruckEntity>(); list.DownloadedToTrucks = new List <TruckEntity>(); list.FieldId = field.Id; list.PickupListStatus = PickupListStatus.OPEN; list.ModulesPerLoad = (syncedSetting != null) ? syncedSetting.ModulesPerLoad : 4; if (uow.SettingsRepository.CoordsOnGinYard(lat, lng) || uow.SettingsRepository.CoordsAtFeeder(lat, lng)) { list.Destination = PickupListDestination.GIN_FEEDER; } else { list.Destination = PickupListDestination.GIN_YARD; } if (thisTruck != null) { list.AssignedTrucks.Add(thisTruck); list.DownloadedToTrucks.Add(thisTruck); } uow.PickupListRepository.Add(list); uow.SaveChanges(); GalaSoft.MvvmLight.Messaging.Messenger.Default.Send <PickupListAddedMessage>(new PickupListAddedMessage { Id = list.Id }); } _windowService.CloseModalWindow(WindowType.AddFieldWindow); } catch (Exception exc) { Logging.Logger.Log(exc); System.Windows.MessageBox.Show("An error occured trying to save list. " + exc.Message); } } }
private void ExecuteSaveCommand() { refreshErrorState(); if (!HasErrors) { using (var uow = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork()) { string clientName = ""; if (ShowNewProducerText) { clientName = NewProducerText.Trim(); } else { clientName = SelectedProducer.DisplayText; } string farmName = ""; if (ShowNewFarmText) { farmName = NewFarmText.Trim(); } else { farmName = SelectedFarm.DisplayText; } string fieldName = ""; if (ShowFieldText) { fieldName = NewFieldText.Trim(); } else { fieldName = SelectedField.DisplayText.Trim(); } var coords = GPSDataProvider.GetLastCoords(); double lat = CottonDBMS.DataModels.Helpers.GPSHelper.SafeLat(coords); double lng = CottonDBMS.DataModels.Helpers.GPSHelper.SafeLong(coords); var client = uow.ClientRepository.EnsureClientCreated(clientName, InputSource.TRUCK); uow.SaveChanges(); var farm = uow.FarmRepository.EnsureFarmCreated(client, farmName, InputSource.TRUCK); uow.SaveChanges(); var field = uow.FieldRepository.EnsureFieldCreated(farm, fieldName, InputSource.TRUCK); field.Latitude = lat; field.Longitude = lng; uow.SaveChanges(); var currentTruck = uow.SettingsRepository.GetCurrentTruck(); PickupListEntity list = null; if (ShowListText) { list = new PickupListEntity(); list.Id = Guid.NewGuid().ToString(); list.Created = DateTime.UtcNow; list.FieldId = field.Id; list.Latitude = lat; list.Longitude = lng; list.Name = ListName; list.PickupListStatus = PickupListStatus.OPEN; list.Source = InputSource.TRUCK; list.SyncedToCloud = false; list.AssignedModules = new List <ModuleEntity>(); list.AssignedTrucks = new List <TruckEntity>(); list.DownloadedToTrucks = new List <TruckEntity>(); if (uow.SettingsRepository.CoordsOnGinYard(lat, lng) || uow.SettingsRepository.CoordsAtFeeder(lat, lng)) { list.Destination = PickupListDestination.GIN_FEEDER; } else { list.Destination = PickupListDestination.GIN_YARD; } if (currentTruck != null) { list.AssignedTrucks.Add(currentTruck); list.DownloadedToTrucks.Add(currentTruck); } uow.PickupListRepository.Add(list); uow.SaveChanges(); } else { list = uow.PickupListRepository.GetById(SelectedPickupList.ID, "Field.Farm.Client", "AssignedModules", "DownloadedToTrucks", "AssignedTrucks"); } GalaSoft.MvvmLight.Messaging.Messenger.Default.Send <PickupListAddedMessage>(new PickupListAddedMessage { Id = list.Id }); //assign all serial numbers on truck to the new list uow.PickupListRepository.MoveModulesToList(list, AggregateDataProvider.SerialNumbersOnTruck, lat, lng); _windowService.CloseModalWindow(WindowType.ChangeListWindow); _windowService.CloseModalWindow(WindowType.LoadingIncorrectModuleWindow); _windowService.CloseModalWindow(WindowType.PickupWindow); //re-open pickup window with new list assignment PickUpListViewModel vm = SimpleIoc.Default.GetInstance <PickUpListViewModel>(); vm.ListID = list.Id; vm.InitiatingEvent = null; _windowService.ShowModalWindow(WindowType.PickupWindow, vm); } } }