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);
        }
Esempio n. 2
0
        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);
            });
        }
Esempio n. 5
0
        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;
        }
Esempio n. 9
0
        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();
 }
Esempio n. 12
0
        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);
                }
            }
        }
Esempio n. 13
0
        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);
                }
            }
        }