예제 #1
0
 public LocationVisitTabViewModel(MainWindow mainWindow)
 {
     window = mainWindow;
     locationVisitDayUnderCreation = new LocationVisitDay();
     locationVisitDayUnderCreation.VisitingCitizens.Add(new Citizen());
 }
예제 #2
0
        public async void CitizenWasAtLocationSaveCommandHandler()
        {
            bool verificationFailed = false;

            if (LocationVisitDayUnderCreation.VisitedLocation == null)
            {
                window.LocationVisitLocationRequired.Visibility = Visibility.Visible;
                verificationFailed = true;
            }
            else
            {
                window.LocationVisitLocationRequired.Visibility = Visibility.Hidden;
            }
            if (LocationVisitDayUnderCreation.VisitingCitizens[0].Age == -1)
            {
                window.LocationVisitCitizenRequired.Visibility = Visibility.Visible;
                verificationFailed = true;
            }
            else
            {
                window.LocationVisitCitizenRequired.Visibility = Visibility.Hidden;
            }

            if (LocationVisitDayUnderCreation.DateOfVisit == default)
            {
                window.LocationVisitDateRequired.Visibility = Visibility.Visible;
                verificationFailed = true;
            }
            else
            {
                window.LocationVisitDateRequired.Visibility = Visibility.Hidden;
            }

            if (verificationFailed)
            {
                return;
            }
            else
            {
                try
                {
                    var client = new MongoClient("mongodb://127.0.0.1:27017");
                    var db     = client.GetDatabase("CovidTracking");
                    var locationVisitCollection = db.GetCollection <LocationVisitDay>("LocationVisitDays");
                    var citizenCollection       = db.GetCollection <Citizen>("Citizens");
                    var locationsCollection     = db.GetCollection <Location>("Locations");
                    var foundVisit = locationVisitCollection.FindSync(l =>
                                                                      l.VisitedLocationId == LocationVisitDayUnderCreation.VisitedLocationId &&
                                                                      l.DateOfVisit == LocationVisitDayUnderCreation.DateOfVisit);

                    if (foundVisit.ToList().Count != 0)
                    {
                        var update = Builders <LocationVisitDay> .Update.AddToSet("VisitingCitizensId",
                                                                                  LocationVisitDayUnderCreation.VisitingCitizensId[0]);

                        locationVisitCollection.FindOneAndUpdate(
                            l => l.VisitedLocationId == LocationVisitDayUnderCreation.VisitedLocationId &&
                            l.DateOfVisit == LocationVisitDayUnderCreation.DateOfVisit, update);
                    }
                    else
                    {
                        locationVisitCollection.InsertOne(LocationVisitDayUnderCreation);
                        var updateCitizen =
                            Builders <Citizen> .Update.AddToSet("VisitsId", LocationVisitDayUnderCreation.Id);

                        var updateLocation = Builders <Location> .Update.AddToSet("VisitIds", LocationVisitDayUnderCreation.Id);

                        citizenCollection.FindOneAndUpdate(c =>
                                                           c.Id == LocationVisitDayUnderCreation.VisitingCitizensId[0], updateCitizen);
                        locationsCollection.FindOneAndUpdate(
                            l => l.Id == LocationVisitDayUnderCreation.VisitedLocationId, updateLocation);
                    }

                    LocationVisitDayUnderCreation = new LocationVisitDay();
                    locationVisitDayUnderCreation.VisitingCitizens.Add(new Citizen());
                    RaisePropertyChanged("Locations");
                }
                catch (Exception e)
                {
                    StringBuilder exceptionString = new StringBuilder();
                    while (e != null)
                    {
                        exceptionString.AppendLine(e.Message);
                        e = e.InnerException;
                    }
                    MessageBox.Show(exceptionString.ToString());
                }
            }
        }
예제 #3
0
        static void Main(string[] args)
        {
            //CLEAR DATABASE

            /*
             * using (var context = new TrackerContext())
             * {
             *  context.CitizenTestedAtTestCenters.RemoveRange(context.CitizenTestedAtTestCenters);
             *  context.CitizenWasAtLocations.RemoveRange(context.CitizenWasAtLocations);
             *  context.Citizens.RemoveRange(context.Citizens);
             *  context.TestCenters.RemoveRange(context.TestCenters);
             *  context.Locations.RemoveRange(context.Locations);
             *  context.TestCenterManagements.RemoveRange(context.TestCenterManagements);
             *  context.Municipalities.RemoveRange(context.Municipalities);
             *  context.SaveChanges();
             * }
             */

            var client = new MongoClient("mongodb://127.0.0.1:27017");
            var db     = client.GetDatabase("CovidTracking");

            db.DropCollection("LocationVisitDays");
            db.DropCollection("Municipalities");
            db.DropCollection("Locations");
            db.DropCollection("TestCenters");
            db.DropCollection("Citizens");
            db.CreateCollection("Citizens");
            db.CreateCollection("TestCenters");
            db.CreateCollection("Locations");
            db.CreateCollection("Municipalities");
            db.CreateCollection("LocationVisitDays");



            //GET MUNICIPALITIES
            List <Municipality> municipalities = new List <Municipality>();

            string[] readLines = File.ReadAllLines(@"Municipality.csv");
            foreach (string line in readLines)
            {
                string[]     splitLine    = line.Split(',');
                Municipality municipality = new Municipality();
                municipality.Name       = splitLine[1];
                municipality.Population = int.Parse(splitLine[2]);
                municipalities.Add(municipality);
            }

            //GET TESTCENTERMANAGEMENTS
            List <TestCenterManagement> testCenterManagements = new List <TestCenterManagement>();

            readLines = File.ReadAllLines(@"TestCenterManagementData");
            foreach (string line in readLines)
            {
                string[]             splitLine  = line.Split(';');
                TestCenterManagement management = new TestCenterManagement();
                management.Name        = splitLine[0];
                management.PhoneNumber = int.Parse(splitLine[1]);
                management.Email       = splitLine[2];
                testCenterManagements.Add(management);
            }

            //GET LOCATIONS
            List <Location> locations = new List <Location>();

            readLines = File.ReadAllLines(@"LocationData");
            foreach (string line in readLines)
            {
                string[] splitLine = line.Split(';');
                Location location  = new Location();
                location.Address = splitLine[0];
                location.IsIn    = municipalities.Find(m => m.Name == splitLine[1]);
                //Handle circular reference
                if (location.IsIn != null)
                {
                    location.IsIn.LocationsInMunicipality.Add(location);
                }
                locations.Add(location);
            }

            //GET TEST CENTERS
            List <TestCenter> testCenters = new List <TestCenter>();

            readLines = File.ReadAllLines(@"TestCenterData");
            foreach (string line in readLines)
            {
                string[]   splitLine  = line.Split(';');
                TestCenter testCenter = new TestCenter();
                testCenter.Name          = splitLine[0];
                testCenter.Hours         = splitLine[1];
                testCenter.HasManagement = testCenterManagements.Find(t => t.Name == splitLine[2]);
                testCenter.PlacedIn      = locations.Find(t => t.Address == splitLine[3]);
                testCenter.PlacedIn.TestCentersAtLocation.Add(testCenter);
                testCenters.Add(testCenter);
            }

            //GET CITIZENS
            List <Citizen> citizens = new List <Citizen>();

            readLines = File.ReadAllLines(@"CitizenData");
            foreach (string line in readLines)
            {
                string[] splitLine = line.Split(';');
                Citizen  citizen   = new Citizen();
                citizen.FirstName = splitLine[0];
                citizen.LastName  = splitLine[1];
                citizen.Sex       = splitLine[2];
                citizen.Age       = int.Parse(splitLine[3]);
                citizen.SSN       = splitLine[4];
                citizen.LivesIn   = municipalities.Find(m => m.Name == splitLine[5]);
                citizen.LivesIn.CitizensInMunicipality.Add(citizen);
                citizens.Add(citizen);
            }

            //GET CITIZENVISITS
            List <LocationVisitDay> locationVisitDays = new List <LocationVisitDay>();

            readLines = File.ReadAllLines(@"LocationVisitedData");
            foreach (string line in readLines)
            {
                string[]         splitLine = line.Split(';');
                LocationVisitDay foundDay  = locationVisitDays.Find(l =>
                                                                    l.DateOfVisit == DateTime.Parse(splitLine[1], styles: DateTimeStyles.AssumeUniversal) &&
                                                                    l.VisitedLocation.Address == splitLine[2]);
                if (foundDay != null)
                {
                    Citizen foundCitizen = citizens.Find(c => c.SSN == splitLine[0]);
                    foundDay.VisitingCitizens.Add(foundCitizen);
                    foundCitizen.Visits.Add(foundDay);
                }
                else
                {
                    LocationVisitDay locationVisitDay = new LocationVisitDay();
                    locationVisitDay.VisitingCitizens.Add(citizens.Find(c => c.SSN == splitLine[0]));
                    locationVisitDay.DateOfVisit     = DateTime.Parse(splitLine[1], styles: DateTimeStyles.AssumeUniversal);
                    locationVisitDay.VisitedLocation = locations.Find(l => l.Address == splitLine[2]);
                    locationVisitDay.VisitedLocation.Visits.Add(locationVisitDay);
                    locationVisitDays.Add(locationVisitDay);
                }
            }

            //GET TESTS
            readLines = File.ReadAllLines(@"TestResultData");
            foreach (string line in readLines)
            {
                string[] splitLine = line.Split(';');
                CitizenTestedAtTestCenter citizenTestedAtTestCenter = new CitizenTestedAtTestCenter();
                citizenTestedAtTestCenter.TestedCitizen = citizens.Find(c => c.SSN == splitLine[0]);
                citizenTestedAtTestCenter.Date          = DateTime.Parse(splitLine[1], styles: DateTimeStyles.AssumeUniversal);
                citizenTestedAtTestCenter.TestedAt      = testCenters.Find(t => t.Name == splitLine[2]);
                citizenTestedAtTestCenter.TestedAt.Tests.Add(citizenTestedAtTestCenter);
                citizenTestedAtTestCenter.Result = splitLine[3];
                citizenTestedAtTestCenter.Status = splitLine[4];
                citizenTestedAtTestCenter.TestedCitizen.Tests.Add(citizenTestedAtTestCenter);
            }

            var municipalityCollection = db.GetCollection <Municipality>("Municipalities");

            municipalityCollection.InsertMany(municipalities);

            var locationCollection = db.GetCollection <Location>("Locations");

            locationCollection.InsertMany(locations);

            var testCenterCollection = db.GetCollection <TestCenter>("TestCenters");

            testCenterCollection.InsertMany(testCenters);

            var citizenCollection = db.GetCollection <Citizen>("Citizens");

            citizenCollection.InsertMany(citizens);

            var locationVisitCollection = db.GetCollection <LocationVisitDay>("LocationVisitDays");

            locationVisitCollection.InsertMany(locationVisitDays);
        }