Example #1
0
        private static void GenerateErststimmenVotes(ElectionDBEntities context, int electionId, int wahlkreisId,
            int amount, Person person)
        {
            if (amount <= 0)
            {
                return;
            }

            context.ErststimmeAmounts.Add(new ErststimmeAmount
            {
                Election_Id = electionId,
                Person = person,
                Wahlkreis_Id = wahlkreisId,
                Amount = amount
            });

            Console.WriteLine("Created {0} erststimmen for candidate {1}", amount, person == null ? -1 : person.Id);
        }
Example #2
0
        // Quite similar to GenerateVotesFor2013. High number of clones!
        public static void GenerateVotesFor2009(string filename)
        {
            const int electionId = 1;

            const int partyNameLineIndex = 2;
            const int startLineIndex = 4;

            const int wahlkreisIdIndex = 0;
            const int allowedVoterIndex = 3;
            const int voterIndex = 4;
            const int invalidErststimmeIndex = 5;
            const int invalidZweitstimmeIndex = 6;
            const int startPartyColumnIndex = 9;

            const int skippedBundeslandId = 900;

            var parsedFile = DataImportGeneral.ParseFile(filename);

            using (var context = new ElectionDBEntities())
            {
                var election = context.Elections.Single(e => e.Id == electionId);
                Console.WriteLine("Generate votes for election {0}", electionId);
                Console.WriteLine();

                var partyDictionary = context.Parties.ToDictionary(p => p.Name, p => p.Id);

                for (var i = startLineIndex; i < parsedFile.Count; i++)
                {
                    var line = parsedFile.ElementAt(i);

                    int wahlkreisId;
                    var parsed = int.TryParse(line[wahlkreisIdIndex], out wahlkreisId);
                    if (!parsed || wahlkreisId >= skippedBundeslandId)
                    {
                        // Increse i because net line is empty
                        i++;
                        continue;
                    }

                    Console.WriteLine("Process wahlkreis {0}", wahlkreisId);

                    var amountAllowedVoters = int.Parse(line[allowedVoterIndex].Replace(" ", ""));
                    var amountVoters = int.Parse(line[voterIndex].Replace(" ", ""));
                    var invalidErstimmen = int.Parse(line[invalidErststimmeIndex].Replace(" ", ""));
                    var invalidZweitstimmen = int.Parse(line[invalidZweitstimmeIndex].Replace(" ", ""));

                    GeneratePeopleForWahlkreis(context, election, wahlkreisId, amountAllowedVoters, amountVoters);

                    GenerateErststimmenVotes(context, electionId, wahlkreisId, invalidErstimmen, null);
                    GenerateZweitstimmenVotes(context, electionId, wahlkreisId, invalidZweitstimmen, null);

                    // Generate votes for parties
                    for (var k = startPartyColumnIndex; k < line.Count; k++)
                    {
                        var partyName = parsedFile.ElementAt(partyNameLineIndex)[k].Trim();
                        var filteredPartyName = DataImportGeneral.PartyNameDictionary.ContainsKey(partyName)
                            ? DataImportGeneral.PartyNameDictionary[partyName]
                            : partyName;

                        var partyId = partyDictionary[filteredPartyName];

                        var erststimme = parsedFile.ElementAt(partyNameLineIndex + 1)[k].Trim().Equals("Erststimmen");

                        if (erststimme)
                        {
                            // Erststimmen
                            int partyErststimmen;
                            var parsedErst = int.TryParse(line[k].Replace(" ", ""), out partyErststimmen);
                            if (!parsedErst)
                            {
                                partyErststimmen = 0;
                            }

                            // Calculate only if needed afterwards
                            var person = partyErststimmen == 0
                                ? null
                                : context.People.FirstOrDefault(
                                    p =>
                                        p.IsElectableCandidates.Any(
                                            c => c.Election_Id == electionId && c.Wahlkreis_Id == wahlkreisId) &&
                                        p.PartyAffiliations.Any(
                                            a => a.Election_Id == electionId && a.Party_Id == partyId));

                            // Hack because some candidates are missing
                            if (person == null && partyErststimmen > 0)
                            {
                                person = new Person
                                {
                                    Lastname = GeneratedPeopleLastname
                                };
                                context.People.Add(person);

                                context.PartyAffiliations.Add(new PartyAffiliation
                                {
                                    Election_Id = electionId,
                                    Party_Id = partyId,
                                    Person = person
                                });

                                context.IsElectableCandidates.Add(new IsElectableCandidate
                                {
                                    Election_Id = electionId,
                                    Wahlkreis_Id = wahlkreisId,
                                    Person = person
                                });
                            }

                            GenerateErststimmenVotes(context, electionId, wahlkreisId, partyErststimmen, person);
                        }
                        else
                        {
                            // Zweitstimmen
                            int partyZweitstimmen;
                            var parsedZweit = int.TryParse(line[k].Replace(" ", ""), out partyZweitstimmen);
                            if (!parsedZweit)
                            {
                                partyZweitstimmen = 0;
                            }

                            GenerateZweitstimmenVotes(context, electionId, wahlkreisId, partyZweitstimmen, partyId);
                        }
                    }

                    Console.WriteLine("");
                }

                context.SaveChanges();
            }
        }
Example #3
0
        public static void AddPeople(string filename)
        {
            const int titleIndex = 2;
            const int lastnameIndex = 3;
            const int firstnameIndex = 4;

            var parsedFile = DataImportGeneral.ParseFile(filename);

            const int startIndex = 1;

            using (var context = new ElectionDBEntities())
            {
                for (var i = startIndex; i < parsedFile.Count; i++)
                {
                    var line = parsedFile.ElementAt(i);

                    var person = new Person
                    {
                        Title = string.IsNullOrWhiteSpace(line[titleIndex]) ? null : line[titleIndex].Trim(),
                        Firstname = string.IsNullOrWhiteSpace(line[firstnameIndex]) ? null : line[firstnameIndex].Trim(),
                        Lastname = line[lastnameIndex].Trim()
                    };

                    context.People.Add(person);
                    Console.WriteLine("Added {0} {1} {2}", person.Title, person.Firstname, person.Lastname);
                }

                Console.WriteLine("Save changes...");
                context.SaveChanges();
            }
        }
Example #4
0
        public static void AddPeople(string filename)
        {
            const int titleIndex = 0;
            const int firstnameIndex = 1;
            const int lastnameIndex = 2;
            const int partynameIndex = 3;

            var parsedFile = DataImportGeneral.ParseFile(filename);

            const int startIndex = 1;

            using (var context = new ElectionDBEntities())
            {
                for (var i = startIndex; i < parsedFile.Count; i++)
                {
                    var line = parsedFile.ElementAt(i);

                    var result = GetTitleFirstnameLastnamePartynameFromLine(line);
                    var title = result.ElementAt(titleIndex);
                    var firstname = result.ElementAt(firstnameIndex);
                    var lastname = result.ElementAt(lastnameIndex);
                    var partyname = result.ElementAt(partynameIndex);

                    var existing = context.People.Where(p => p.Firstname == firstname && p.Lastname == lastname);
                    if (existing.Any(e => e.PartyAffiliations.Any(a => a.Party.Name == partyname)))
                    {
                        if (!(firstname == "Andreas" && lastname == "Müller" && int.Parse(line[2]) == 1959))
                        {
                            Console.WriteLine("{0} {1} {2} ({3}) does already exist", title ?? "", firstname, lastname,
                                partyname);
                            continue;
                        }
                    }

                    var entry = new Person
                    {
                        Title = title,
                        Firstname = firstname,
                        Lastname = lastname
                    };

                    context.People.Add(entry);

                    Console.WriteLine("Added {0} {1} {2} ({3})", title ?? "", firstname, lastname, partyname);
                }

                context.SaveChanges();
            }
        }
Example #5
0
        public static PersonWithPartyViewModel GetPersonWithPartyViewModel(int electionId, Person person,
            IEnumerable<Party> allParties)
        {
            var partyId = person.PartyAffiliations.Single(a => a.Election_Id == electionId).Party_Id;

            return new PersonWithPartyViewModel
            {
                Person = new PersonViewModel
                {
                    Id = person.Id,
                    Title = person.Title,
                    Firstname = person.Firstname,
                    Lastname = person.Lastname
                },
                Party = new PartyViewModel
                {
                    Id = partyId,
                    Name = allParties.Single(pa => pa.Id == partyId).Name
                }
            };
        }