public void CreateDistributions()
        {
            try
            {
                Distributions = new ObservableCollection <Distribution>();

                // divide packages into distributions
                List <Package>[] DividedPackages = AddDistributionM.DividePackages(Packages.ToList());

                Application.Current.Dispatcher.BeginInvoke(
                    new Action(() => { AddDistributions(DividedPackages); }));

                // show areas on map
                Application.Current.Dispatcher.BeginInvoke(
                    new Action(() => { ShowAreasOnMap(); }));

                //  add to database
                Application.Current.Dispatcher.BeginInvoke(
                    new Action(() => { AddDistributionM.AddDistributions(new List <Distribution>(Distributions)); }));

                IsDistributionReady = true;

                // finish
                Recipients = new ObservableCollection <Recipient>(AddDistributionM.Recipients);
            }

            catch (Exception e)
            {
                Message = new Message("משהו השתבש.", e.Message, false, true);
            }
        }
        private void AssignVolunteers()
        {
            // find closest volunteer for each distribution
            List <Volunteer> volunteers = new List <Volunteer>(AddDistributionM.GetAllVolunteers());

            foreach (Distribution d in Distributions)
            {
                Volunteer closestVolunteer = AddDistributionM.FindClosestVolunteer(volunteers, d.Packages[0].Recipient.Address);
                d.VolunteerId = closestVolunteer.VolunteerId;
                volunteers.Remove(closestVolunteer);
            }
        }
        public AddDistributionVM()
        {
            AddDistributionM = new AddDistributionM();
            Recipients       = new ObservableCollection <Recipient>(AddDistributionM.Recipients);

            DistributionDate = DateTime.Now.Date;

            GetAllCities();
            SelectedCity = Cities.First(x => x.Equals("כל הארץ"));

            AreasMap = new MapUC();
        }