Ejemplo n.º 1
0
        public async void RefreshMarkersAsync(IList <FactoryEVM> factories)
        {
            tempMarker    = null;
            tempPosMarker = null;

            var tasks = new Dictionary <FactoryEVM, Task <PointLatLng?> >();

            var factoriesToAdd = factories.Where(f => !factoriesMapControl.Markers.Any(m => m.Tag != null && (m.Tag as FactoryEVM).Id == f.Id));

            foreach (FactoryEVM factory in factoriesToAdd)
            {
                tasks.Add(factory, GetFactoryCoordsAsync(factory));
            }

            await Task.WhenAll(tasks.Values);

            foreach (var task in tasks)
            {
                FactoryEVM  factory = task.Key;
                PointLatLng?point   = task.Value.Result;

                if (point.HasValue)
                {
                    GMapMarker marker = CreateMarker((PointLatLng)point, factory, FactoryMarkerColor.Red);
                    factoriesMapControl.Markers.Add(marker);
                }
            }
        }
Ejemplo n.º 2
0
        private void FactoriesMapControl_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton == MouseButton.Left)
            {
                Point       mousePos    = e.GetPosition(factoriesMapControl);
                PointLatLng mapPosition = factoriesMapControl.FromLocalToLatLng((int)mousePos.X, (int)mousePos.Y);

                GeoCoderStatusCode status;
                Placemark?         placemark = (factoriesMapControl.MapProvider as GeocodingProvider).GetPlacemark(mapPosition, out status);

                if (status == GeoCoderStatusCode.OK && placemark.HasValue)
                {
                    if (tempMarker != null)
                    {
                        factoriesMapControl.Markers.Remove(tempMarker);
                    }

                    FactoryEVM factory = new FactoryEVM()
                    {
                        Name = ApplicationSettings.Map.NewFactoryName, Address = placemark.Value.Address.Trim(), Latitude = mapPosition.Lat, Longitude = mapPosition.Lng
                    };
                    GMapMarker marker = CreateMarker(mapPosition, factory, FactoryMarkerColor.Green);
                    tempMarker = marker;
                    factoriesMapControl.Markers.Add(marker);

                    _viewModel.SelectedFactory = factory;
                }
            }
        }
Ejemplo n.º 3
0
        private void SearchLocation(string address)
        {
            PointLatLng?point = GetPointFromAddress(address.Trim());

            if (point.HasValue)
            {
                if (tempMarker != null)
                {
                    factoriesMapControl.Markers.Remove(tempMarker);
                }

                GeoCoderStatusCode status;
                Placemark?         placemark = (factoriesMapControl.MapProvider as GeocodingProvider).GetPlacemark(point.Value, out status);

                if (status == GeoCoderStatusCode.OK && placemark.HasValue)
                {
                    FactoryEVM factory = new FactoryEVM()
                    {
                        Name = ApplicationSettings.Map.NewFactoryName, Address = placemark.Value.Address.Trim(), Latitude = point.Value.Lat, Longitude = point.Value.Lng, CountryCode = placemark.Value.CountryNameCode.ToUpper()
                    };
                    GMapMarker marker = CreateMarker(point.Value, factory, FactoryMarkerColor.Green);
                    tempMarker = marker;
                    factoriesMapControl.Markers.Add(marker);

                    ZoomOnPoint(point.Value, ApplicationSettings.Map.ZoomMarker);

                    _viewModel.SelectedFactory = factory;
                }
            }
        }
Ejemplo n.º 4
0
        private bool CompileFactoriesTable()
        {
            bool result = false;

            if (stopImport)
            {
                return(result);
            }

            StatusChanged("Importing Factories...");

            try
            {
                using (DBArchive db = new DBArchive())
                {
                    //Get enumerable rows fron datatable
                    IEnumerable <DataRow> collection = dtPlants.Rows.Cast <DataRow>();

                    foreach (DataRow r in collection)
                    {
                        if (stopImport)
                        {
                            break;
                        }

                        FactoryEVM f = new FactoryEVM();

                        try
                        {
                            f.Name        = r.Field <string>("dbf_Stabilimento");
                            f.CompanyName = r.Field <string>("dbf_RagioneSociale");
                            f.Address     = r.Field <string>("dbf_Indirizzo");
                            f.IsForfait   = r.Field <bool>("dbf_Forfettario");

                            long transferType = r.Field <byte>("dbf_Tipo_Trasf");
                            f.TransferType = transferType != 4 ? transferType : 0;

                            f.Save(db);

                            _factories.Add(r.Field <int>("dbf_Index"), f.Id);

                            Message($"Factory {f.Name} OK");
                        }
                        catch (Exception ex)
                        {
                            Error($"Failed to import factory {f.Name}. {ex}", ex);
                        }
                    }

                    result = true;
                }
            }
            catch (Exception ex)
            {
                result = false;
                Error($"Failed importing factories. {ex}", ex);
            }

            return(result);
        }
Ejemplo n.º 5
0
 private void factoryListViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
 {
     if (e.ChangedButton == MouseButton.Left && factoriesListView.SelectedItem != null)
     {
         FactoryEVM factory = (FactoryEVM)factoriesListView.SelectedItem;
         ZoomOnFactory(factory);
     }
 }
Ejemplo n.º 6
0
        private void Factories_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            try
            {
                switch (e.Action)
                {
                case NotifyCollectionChangedAction.Add:
                    foreach (var obj in e.NewItems)
                    {
                        FactoryEVM factory = obj as FactoryEVM;

                        if (tempMarker != null)
                        {
                            factoriesMapControl.Markers.Remove(tempMarker);
                        }

                        if (factoriesMapControl.Markers.Any(f => f.Tag != null && f.Tag is FactoryEVM && (f.Tag as FactoryEVM).Id == factory.Id))
                        {
                            return;
                        }

                        var point = Task.Run(async() => await GetFactoryCoordsAsync(factory));

                        if (point.Result.HasValue)
                        {
                            factoriesMapControl.Markers.Add(CreateMarker((PointLatLng)point.Result, factory, FactoryMarkerColor.Red));
                        }
                    }
                    break;

                case NotifyCollectionChangedAction.Remove:
                    foreach (var obj in e.OldItems)
                    {
                        FactoryEVM factory = obj as FactoryEVM;
                        var        markers = factoriesMapControl.Markers.Where(f => f.Tag != null && f.Tag is FactoryEVM && (f.Tag as FactoryEVM).Id == factory.Id);

                        foreach (var marker in markers)
                        {
                            try
                            {
                                factoriesMapControl.Markers.Remove(marker);
                            }
                            catch { }
                        }
                    }
                    break;
                }
            }
            catch (Exception ex)
            {
            }
        }
Ejemplo n.º 7
0
        private void factoryListViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton == MouseButton.Left && factoriesListView.SelectedItem != null)
            {
                if (tempMarker != null)
                {
                    factoriesMapControl.Markers.Remove(tempMarker);
                }

                FactoryEVM factory = (FactoryEVM)factoriesListView.SelectedItem;
                ZoomOnFactory(factory);
            }
        }
Ejemplo n.º 8
0
        private void ZoomOnFactory(FactoryEVM factory)
        {
            if (factory.Latitude.HasValue && factory.Longitude.HasValue)
            {
                PointLatLng?point = new PointLatLng(factory.Latitude.Value, factory.Longitude.Value);

                if (point.HasValue)
                {
                    ZoomOnPoint(point.Value, ApplicationSettings.Map.ZoomMarker);
                    FactoryMarker marker = factoriesMapControl.Markers.Where(m => ((FactoryEVM)((FactoryMarker)m.Shape).DataContext).Id == factory.Id).Select(m => m.Shape as FactoryMarker).FirstOrDefault();

                    if (marker != null)
                    {
                        marker.PlayBounce();
                    }
                }
            }
        }
Ejemplo n.º 9
0
        private GMapMarker CreateMarker(PointLatLng point, FactoryEVM factory, FactoryMarkerColor color)
        {
            FactoryMarker shape = new FactoryMarker()
            {
                DataContext = factory, Color = color
            };

            GMapMarker marker = new GMapMarker(point);

            marker.Tag    = factory;
            marker.Shape  = shape;
            marker.Offset = new Point(-(shape.Rectangle.Width / 2), -shape.Rectangle.Height);

            factory.Latitude  = point.Lat;
            factory.Longitude = point.Lng;

            return(marker);
        }
Ejemplo n.º 10
0
        private void Factories_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            switch (e.Action)
            {
            case NotifyCollectionChangedAction.Add:
                foreach (var obj in e.NewItems)
                {
                    FactoryEVM factory = obj as FactoryEVM;

                    if (tempMarker != null)
                    {
                        factoriesMapControl.Markers.Remove(tempMarker);
                    }

                    if (factoriesMapControl.Markers.Any(f => f.Tag != null && f.Tag is FactoryEVM && (f.Tag as FactoryEVM).Id == factory.Id))
                    {
                        return;
                    }

                    var point = GetFactoryCoordsAsync(factory);

                    if (point.Result.HasValue)
                    {
                        factoriesMapControl.Markers.Add(CreateMarker((PointLatLng)point.Result, factory, FactoryMarkerColor.Red));
                    }
                }
                break;

            case NotifyCollectionChangedAction.Remove:
                foreach (var obj in e.OldItems)
                {
                    FactoryEVM factory = obj as FactoryEVM;
                    var        marker  = factoriesMapControl.Markers.SingleOrDefault(f => f.Tag != null && f.Tag is FactoryEVM && (f.Tag as FactoryEVM).Id == factory.Id);

                    if (marker != null)
                    {
                        factoriesMapControl.Markers.Remove(marker);
                    }
                }
                break;
            }
        }
Ejemplo n.º 11
0
        public async Task <PointLatLng?> GetFactoryCoordsAsync(FactoryEVM factory)
        {
            if (factory.Latitude.HasValue && factory.Longitude.HasValue)
            {
                return(new PointLatLng(factory.Latitude.Value, factory.Longitude.Value));
            }
            else
            {
                var point = await GetCoordsFromAddressAsync(factory.Address);

                if (point.HasValue)
                {
                    factory.Latitude  = point.Value.Lat;
                    factory.Longitude = point.Value.Lng;
                    factory.Save();
                }

                return(point);
            }
        }
Ejemplo n.º 12
0
        public async Task <PointLatLng?> GetFactoryCoordsAsync(FactoryEVM factory)
        {
            if (factory.Latitude.HasValue && factory.Longitude.HasValue)
            {
                return(new PointLatLng(factory.Latitude.Value, factory.Longitude.Value));
            }
            else
            {
                var point = await GetCoordsFromAddressAsync(factory.Address);

                if (point?.Item1 != null)
                {
                    factory.Latitude     = point.Value.Item1.Lat;
                    factory.Longitude    = point.Value.Item1.Lng;
                    factory.CountryCode  = point.Value.Item2.ToString();
                    factory.TransferType = factory.GetTransferType();
                    factory.Save();
                }

                return(point?.Item1);
            }
        }
Ejemplo n.º 13
0
        private void factoriesMapControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            if (IsLatLngSelectionMode)
            {
                Point       mousePos    = e.GetPosition(factoriesMapControl);
                PointLatLng mapPosition = factoriesMapControl.FromLocalToLatLng((int)mousePos.X, (int)mousePos.Y);

                FactoryEVM factory = _viewModel.SelectedFactory;
                factory.Latitude  = mapPosition.Lat;
                factory.Longitude = mapPosition.Lng;

                if (tempPosMarker != null)
                {
                    factoriesMapControl.Markers.Remove(tempPosMarker);
                }

                GMapMarker marker = CreateMarker(mapPosition, factory, FactoryMarkerColor.Blue);
                tempPosMarker = marker;
                factoriesMapControl.Markers.Add(marker);

                LatLngSelectionMode(false);
            }
        }
Ejemplo n.º 14
0
        private void OnFactoryUpdated(FactoryEVM factory)
        {
            if (tempPosMarker != null)
            {
                factoriesMapControl.Markers.Remove(tempPosMarker);
                tempPosMarker = null;
            }

            // remove existing marker
            var marker = factoriesMapControl.Markers.SingleOrDefault(f => f.Tag != null && f.Tag is FactoryEVM && (f.Tag as FactoryEVM).Id == factory.Id);

            if (marker != null)
            {
                factoriesMapControl.Markers.Remove(marker);
            }

            // add new updated marker
            var point = Task.Run(async() => await GetFactoryCoordsAsync(factory));

            if (point.Result.HasValue)
            {
                factoriesMapControl.Markers.Add(CreateMarker((PointLatLng)point.Result, factory, FactoryMarkerColor.Red));
            }
        }
Ejemplo n.º 15
0
 private void OnZoomOnFactoryRequest(FactoryEVM factory)
 {
     ZoomOnFactory(factory);
 }
Ejemplo n.º 16
0
        private bool CompileFactoriesTable()
        {
            bool result = false;

            if (stopImport)
                return result;

            StatusChanged("Importing Factories...");

            try
            {
                using (DBArchive db = new DBArchive())
                {
                    //Get enumerable rows fron datatable
                    IEnumerable<DataRow> collection = dtPlants.Rows.Cast<DataRow>();

                    foreach (DataRow r in collection)
                    {
                        if (stopImport)
                            break;

                        string FactoryName = r.Field<string>("dbf_Stabilimento");

                        FactoryEVM factory = db.Factories.Where(f => f.Name == FactoryName).ToList().Select(f => new FactoryEVM(f)).FirstOrDefault();

                        if (factory == null)
                            factory = new FactoryEVM();

                        try
                        {
                            factory.Name = FactoryName;
                            factory.CompanyName = r.Field<string>("dbf_RagioneSociale");
                            factory.Address = r.Field<string>("dbf_Indirizzo");
                            //factory.IsForfait = r.Field<bool>("dbf_Forfettario"); DEPRECATED

                            long transferType = r.Field<byte>("dbf_Tipo_Trasf");
                            factory.TransferType = transferType != 4 ? transferType : 0;

                            factory.Save(db);

                            _factories.Add(r.Field<int>("dbf_Index"), factory.Id);

                            Message($"Factory {factory.Name} OK");
                        }
                        catch (Exception ex)
                        {
                            Error($"Failed to import factory {factory.Name}. {ex}", ex);
                        }
                    }

                    db.SaveChanges();

                    result = true;
                }
            }
            catch (Exception ex)
            {
                result = false;
                Error($"Failed importing factories. {ex}", ex);
            }

            return result;
        }