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); }
// 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(); } }
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(); } }
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(); } }
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 } }; }