public static void AddCandidateList(string filename) { const int firstnameIndex = 1; const int lastnameIndex = 2; const int partynameIndex = 3; const int bundeslandIndex = 5; const int positionIndex = 6; var parsedFile = DataImportGeneral.ParseFile(filename); const int startIndex = 1; using (var context = new ElectionDBEntities()) { var bundeslandDictionary = context.Bundeslands.ToDictionary(b => b.Name, b => b.Id); for (var i = startIndex; i < parsedFile.Count; i++) { var line = parsedFile.ElementAt(i); var result = GetTitleFirstnameLastnamePartynameFromLine(line); var firstname = result.ElementAt(firstnameIndex); var lastname = result.ElementAt(lastnameIndex); var partyname = result.ElementAt(partynameIndex); var bundeslandName = line[bundeslandIndex].Trim(); if (string.IsNullOrWhiteSpace(bundeslandName)) { continue; } var bundeslandId = bundeslandDictionary[bundeslandName]; var position = int.Parse(line[positionIndex]); var existing = GetExistingCandidate(context, firstname, lastname, partyname, line[2]); var entry = new CandidateList { Election_Id = electionId, Bundesland_Id = bundeslandId, Person_Id = existing.Id, Position = position }; context.CandidateLists.Add(entry); Console.WriteLine("Added person {0} for bundesland {1} on position {2} in election {3}", existing.Id, bundeslandId, position, electionId); } context.SaveChanges(); } }
public static void AddAdditionalParties() { var additional = new List<string> { "DVU", "ADM", "Freie Union", "Christliche Mitte", "ZENTRUM", DataImportGeneral.Impartially }; using (var context = new ElectionDBEntities()) { foreach (var entry in additional) { context.Parties.Add(new Party { Name = entry }); } context.SaveChanges(); } }
public AllMemberOfBundestagViewModel GetAllMemberOfBundestag(int electionId) { var model = new AllMemberOfBundestagViewModel { ElectionId = electionId }; using (var context = new ElectionDBEntities()) { context.Database.CommandTimeout = 5000000; var members = context.ParliamentMembers.Where(m => m.Election_Id == electionId); var allMembers = ViewModelMap.ViewModelMap.GetMemberOfBundestagViewModels(members).ToList(); model.Members = allMembers.OrderBy(r => r); } return model; }
public AllSeatsBundestagViewModel GetAllSeatsBundestag(int electionId) { var model = new AllSeatsBundestagViewModel { ElectionId = electionId }; using (var context = new ElectionDBEntities()) { context.Database.CommandTimeout = 5000000; var seatsParty = context.Sitzverteilungs.Where(s => s.Election_Id == electionId); var seatsDistribution = ViewModelMap.ViewModelMap.GetSeatsBundestagViewModels(seatsParty).ToList(); model.SeatsDistribution = seatsDistribution.OrderBy(r => r); } return model; }
public static void AddCandidateList(string filename) { const int personIdIndex = 1; const int bundeslandIndex = 8; const int positionIndex = 9; var parsedFile = DataImportGeneral.ParseFile(filename); const int startIndex = 1; using (var context = new ElectionDBEntities()) { var idDictionary = context.Bundeslands.ToDictionary(d => d.Name, d => d.Id); for (var i = startIndex; i < parsedFile.Count; i++) { var line = parsedFile.ElementAt(i); var bundeslandShort = line[bundeslandIndex]; if (string.IsNullOrWhiteSpace(bundeslandShort)) { continue; } var bundeslandName = DataImportGeneral.BundeslaenderShortDictionary[bundeslandShort]; var bundeslandId = idDictionary[bundeslandName]; var personId = int.Parse(line[personIdIndex]); var position = int.Parse(line[positionIndex]); var entry = new CandidateList { Election_Id = electionId, Person_Id = personId, Bundesland_Id = bundeslandId, Position = position }; context.CandidateLists.Add(entry); } context.SaveChanges(); } }
public ClosestWinnerForPartyViewModel GetClosestWinnerForParty(int electionId, int partyId) { ClosestWinnerForPartyViewModel model; using (var context = new ElectionDBEntities()) { var allForParty = context.ClosestErststimmeResults.Where(e => e.Election_Id == electionId && e.Party_Id == partyId); var winner = allForParty.Where(e => e.Diff > 0).OrderBy(e => e.AbsDiff).Take(10); var loser = allForParty.Where(e => e.Diff < 0).OrderBy(e => e.AbsDiff).Take(10); var party = context.Parties.Single(p => p.Id == partyId); model = ViewModelMap.ViewModelMap.GetClosestWinnerForPartyViewModel(electionId, party, winner, loser); } return model; }
public PartySelectionViewModel GetAllPartiesForClosestWinner(int electionId) { var model = new PartySelectionViewModel { ElectionId = electionId }; using (var context = new ElectionDBEntities()) { var partyIds = context.ClosestErststimmeResults.Where(r => r.Election_Id == electionId) .Select(r => r.Party_Id) .Distinct(); var parties = context.Parties.Where(p => partyIds.Contains(p.Id)); var pModel = ViewModelMap.ViewModelMap.GetPartyViewModels(parties).ToList(); model.Parties = pModel.OrderBy(r => r); } return model; }
public static void AddPartyAffiliations(string filename) { 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()) { var partyDictionary = context.Parties.ToDictionary(p => p.Name, p => p.Id); for (var i = startIndex; i < parsedFile.Count; i++) { var line = parsedFile.ElementAt(i); var result = GetTitleFirstnameLastnamePartynameFromLine(line); var firstname = result.ElementAt(firstnameIndex); var lastname = result.ElementAt(lastnameIndex); var partyname = result.ElementAt(partynameIndex); var partyId = partyDictionary[partyname]; // Hack because there are two persons with the same name that cannot be distinguished on a better way Person existing; if (firstname == "Stephan" && lastname == "Beyer") { var allExisting = context.People.Where(p => p.Firstname == firstname && p.Lastname == lastname); existing = partyname == DataImportGeneral.Impartially ? allExisting.OrderBy(r => r.Id).First() : allExisting.OrderByDescending(r => r.Id).First(); } else if (firstname == "Mario" && lastname == "Ertel") { var allExisting = context.People.Where(p => p.Firstname == firstname && p.Lastname == lastname); existing = partyname == "NPD" ? allExisting.OrderBy(r => r.Id).First() : allExisting.OrderByDescending(r => r.Id).First(); } else if (firstname == "Christian" && lastname == "Fischer") { var allExisting = context.People.Where(p => p.Firstname == firstname && p.Lastname == lastname); existing = partyname == "NPD" ? allExisting.OrderBy(r => r.Id).First() : allExisting.OrderByDescending(r => r.Id).First(); } else if (firstname == "Frank" && lastname == "Hofmann") { var allExisting = context.People.Where(p => p.Firstname == firstname && p.Lastname == lastname); existing = partyname == "SPD" ? allExisting.OrderBy(r => r.Id).First() : allExisting.OrderByDescending(r => r.Id).First(); } else if (firstname == "Andreas" && lastname == "Schwarz") { var allExisting = context.People.Where(p => p.Firstname == firstname && p.Lastname == lastname); existing = partyname == "GRÜNE" ? allExisting.OrderBy(r => r.Id).First() : allExisting.OrderByDescending(r => r.Id).First(); } else if (firstname == "Andreas" && lastname == "Weber") { var allExisting = context.People.Where(p => p.Firstname == firstname && p.Lastname == lastname); existing = partyname == "BüSo" ? allExisting.OrderBy(r => r.Id).First() : allExisting.OrderByDescending(r => r.Id).First(); } else if (firstname == "Andreas" && lastname == "Müller") { var allExisting = context.People.Where(p => p.Firstname == firstname && p.Lastname == lastname); existing = int.Parse(line[2]) == 1964 ? allExisting.OrderBy(r => r.Id).First() : allExisting.OrderByDescending(r => r.Id).First(); } else { existing = context.People.Single(p => p.Firstname == firstname && p.Lastname == lastname && (!p.PartyAffiliations.Any() || p.PartyAffiliations.Any( a => a.Election_Id == DataImport2013.electionId && a.Party_Id == partyId))); } var entry = new PartyAffiliation { Election_Id = electionId, Person_Id = existing.Id, Party_Id = partyId }; context.PartyAffiliations.Add(entry); Console.WriteLine("Added person {0} to party {1} in election {2}", existing.Id, partyId, electionId); } context.SaveChanges(); } }
public int CheckHandleRequest(string tokenString, string ip) { const int minutesTimeRange = 5; const int invalidRequestsAllowed = 3; var last5Min = DateTime.Now.AddMinutes(-minutesTimeRange); using (var context = new ElectionDBEntities()) { var invalidRequests = context.InvalidTokenRequests.Where(r => r.Timestamp >= last5Min && r.IP.Equals(ip)); var invalidRequestCount = invalidRequests.Count(); if (invalidRequestCount < invalidRequestsAllowed) { return 0; } var invalidRequestLatest = invalidRequests.Max(r => r.Timestamp); var delaySeconds = (int) Math.Max(10, Math.Pow(2, invalidRequestCount - invalidRequestsAllowed)); var nextTime = invalidRequestLatest.AddSeconds(delaySeconds); var diff = nextTime - DateTime.Now; return Math.Max(0, diff.Seconds + diff.Minutes*60 + diff.Hours*3600); } }
public Token BuildToken(string tokenString, string ip) { if (ip == null) { throw new Exception("Unknown IP-Address."); } var delaySeconds = CheckHandleRequest(tokenString, ip); if (delaySeconds > 0) { // to many invalid requests. Used to handle brute force attacks throw new PublicException( string.Format( "Sie haben bereits zu viele ungültige Token abgegeben.\n" + "Sie können ein neues Token erst wieder in {0} Sekunden ({1:hh:mm:ss}) abgeben.", delaySeconds, DateTime.Now.AddSeconds(delaySeconds))); } var token = new Token(tokenString); if (!token.IsValid()) { // save invalid token request using (var context = new ElectionDBEntities()) { context.InvalidTokenRequests.Add(new InvalidTokenRequest { IP = ip, Token = tokenString, Timestamp = DateTime.Now }); context.SaveChanges(); } throw new PublicException(string.Format("Das Token '{0}' ist ungültig.", tokenString)); } if (!ReservedToken.ContainsKey(token)) { using (var context = new ElectionDBEntities()) { var existing = context.UsedTokens.SingleOrDefault(t => t.TokenString.Equals(tokenString)); // new token requested if (existing != null) { throw new PublicException(string.Format( "Das Token '{0}' wurde bereits genutzt. Sie dürfen es daher nicht noch einmal verwenden.", existing.TokenString)); } // add new token to database context.UsedTokens.Add(new UsedToken { TokenString = tokenString }); context.SaveChanges(); } ReservedToken.Add(token, ip); } else { // token for actual voting requested var fromIp = ReservedToken[token]; if (!ip.Equals(fromIp)) { throw new Exception("Wrong IP-Address detected."); } } return token; }
public static void AddIsElectableCandidate(string filename) { const int personIdIndex = 1; const int wahlkreisIdIndex = 7; 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); int wahlkreisId; var parsed = int.TryParse(line[wahlkreisIdIndex], out wahlkreisId); if (!parsed) { continue; } var personId = int.Parse(line[personIdIndex]); var entry = new IsElectableCandidate { Election_Id = electionId, Person_Id = personId, Wahlkreis_Id = wahlkreisId }; context.IsElectableCandidates.Add(entry); Console.WriteLine("Added person {0} is electable in wahlkreis {1} for election {2}", personId, wahlkreisId, electionId); } context.SaveChanges(); } }
public WahlkreisSelectionViewModel GetWahlkreisSelection(int electionId) { var model = new WahlkreisSelectionViewModel { ElectionId = electionId }; using (var context = new ElectionDBEntities()) { var bundeslands = context.Bundeslands; var wahlkreise = context.Wahlkreis; var bModels = ViewModelMap.ViewModelMap.GetBundeslandListViewModels(bundeslands, wahlkreise).ToList(); model.Bundeslands = bModels.OrderBy(r => r); } return model; }
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 ElectionVoteViewModel ValidateToken(string tokenString, string ip) { var token = _tokenHandler.BuildToken(tokenString, ip); var model = new ElectionVoteViewModel { TokenString = tokenString }; var electionId = token.GetElectionId(); var wahlkreisId = token.GetWahlkreisId(); using (var context = new ElectionDBEntities()) { var election = context.Elections.Single(e => e.Id == electionId); var wahlkreis = context.Wahlkreis.Single(w => w.Id == wahlkreisId); var allParties = context.Parties; var parties = GetElectableParties(context, electionId, wahlkreis.Bundesland_Id); var people = GetElectablePeople(context, electionId, wahlkreisId); var partyVm = ViewModelMap.ViewModelMap.GetPartyViewModels(parties).ToList(); var peopleVm = ViewModelMap.ViewModelMap.GetPersonWithPartyViewModels(electionId, people, allParties).ToList(); model.Election = ViewModelMap.ViewModelMap.GetElectionViewModel(election); model.Wahlkreis = ViewModelMap.ViewModelMap.GetWahlkreisViewModel(wahlkreis); model.Parties = partyVm.OrderBy(r => r.Name); model.People = peopleVm.OrderBy(r => r.Party.Name); } return model; }
private static void GeneratePeopleForWahlkreis(ElectionDBEntities context, Election election, int wahlkreisId, int amountAllowedVoters, int amountVoters) { if (amountAllowedVoters < amountVoters) { throw new Exception( string.Format( "Amount of allowed voters cannot be lower than the amount of all actual voters: {0} < {1}", amountAllowedVoters, amountVoters)); } context.AllowedToElectAmounts.Add(new AllowedToElectAmount { Election_Id = election.Id, Wahlkreis_Id = wahlkreisId, Amount = amountAllowedVoters }); context.ParticipationAmounts.Add(new ParticipationAmount { Election_Id = election.Id, Wahlkreis_Id = wahlkreisId, Amount = amountVoters }); Console.WriteLine("Added {0} allowed voters", amountAllowedVoters); Console.WriteLine("Added {0} actual voters", amountVoters); }
// 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(); } }
private static Person GetExistingCandidate(ElectionDBEntities context, string firstname, string lastname, string partyname, string birthyear) { Person existing; // Hack because the two persons cannot be distinguished otherwise if (firstname == "Andreas" && lastname == "Müller" && partyname == "DIE LINKE") { var allExisting = context.People.Where( p => p.Firstname == firstname && p.Lastname == lastname && p.PartyAffiliations.Any( a => a.Election_Id == electionId && a.Party.Name == partyname)); existing = int.Parse(birthyear) == 1964 ? allExisting.OrderBy(r => r.Id).First() : allExisting.OrderByDescending(r => r.Id).First(); } else { existing = context.People.Single( p => p.Firstname == firstname && p.Lastname == lastname && p.PartyAffiliations.Any( a => a.Election_Id == electionId && a.Party.Name == partyname)); } return existing; }
public WinnerWahlkreiseViewModel GetWinnerWahlkreise(int electionId) { var model = new WinnerWahlkreiseViewModel { ElectionId = electionId }; using (var context = new ElectionDBEntities()) { var bundeslands = context.Bundeslands; var winnerEntries = context.WinnerFirstAndSecondVotes.Where(w => w.Election_Id == electionId); var bLands = ViewModelMap.ViewModelMap.GetWinnerWahlkreiseViewModel(bundeslands, winnerEntries).ToList(); model.Bundeslands = bLands.OrderBy(r => r); } return model; }
private static IEnumerable<Person> GetElectablePeople(ElectionDBEntities context, int electionId, int wahlkreisId) { var people = context.People .Include("IsElectableCandidates") .Include("PartyAffiliations") .Where( p => p.IsElectableCandidates.Any( e => e.Election_Id == electionId && e.Wahlkreis_Id == wahlkreisId)); return people; }
private static IEnumerable<Party> GetElectableParties(ElectionDBEntities context, int electionId, int bundeslandId) { var allParties = context.Parties .Include("PartyAffiliations") .Include("PartyAffiliations.Person") .Include("PartyAffiliations.Person.CandidateLists"); var parties = allParties.Where( p => p.PartyAffiliations.Any( a => a.Person.CandidateLists.Any( c => c.Election_Id == electionId && c.Bundesland_Id == bundeslandId))); return parties; }
public WahlkreisOverviewViewModel GetWahlkreisOverview(int electionId, int wahlkreisId) { WahlkreisOverviewViewModel model; using (var context = new ElectionDBEntities()) { var bundesland = context.Wahlkreis.Single(w => w.Id == wahlkreisId).Bundesland; var basicOverview = context.BasicWahlkreisOverviews.Single( w => w.Election_Id == electionId && w.Wahlkreis_Id == wahlkreisId); var firstVotes = context.ErststimmeWahlkreisOverviews.Where( v => v.election_id == electionId && v.wahlkreis_id == wahlkreisId && v.person_id != null); var secondVotes = context.ZweitstimmeWahlkreisOverviews.Where( v => v.Election_Id == electionId && v.Wahlkreis_Id == wahlkreisId && v.Party_Id != null); model = ViewModelMap.ViewModelMap.GetWahlkreisOverviewViewModel(electionId, bundesland, basicOverview, firstVotes, secondVotes); } return model; }
public WahlkreisViewModel GetWahlkreis(int wahlkreisId) { using (var context = new ElectionDBEntities()) { var wahlkreis = context.Wahlkreis.SingleOrDefault(w => w.Id == wahlkreisId); if (wahlkreis == null) { throw new PublicException(string.Format("Es gibt keinen Wahlkreis mit der Id {0}.", wahlkreisId)); } return ViewModelMap.ViewModelMap.GetWahlkreisViewModel(wahlkreis); } }
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 bool PerformVote(ElectionVoteViewModel model, string ip) { var token = _tokenHandler.BuildToken(model.TokenString, ip); var wahlkreis = GetWahlkreis(token.GetWahlkreisId()); using (var context = new ElectionDBEntities()) { //Validate voted person and party var electablePeople = GetElectablePeople(context, token.GetElectionId(), token.GetWahlkreisId()); var electableParties = GetElectableParties(context, token.GetElectionId(), wahlkreis.BundeslandId); if (model.VotedPersonId > 0 && !electablePeople.Select(p => p.Id).Contains(model.VotedPersonId ?? -1)) { throw new PublicException( string.Format( "Die Person mit Id {0} darf in diesem Wahlkreis bei dieser Wahl nicht gewählt werden.", model.VotedPersonId)); } if (model.VotedPartyId > 0 && !electableParties.Select(p => p.Id).Contains(model.VotedPartyId ?? -1)) { throw new PublicException( string.Format( "Die Partei mit Id {0} darf in diesem Wahlkreis bei dieser Wahl nicht gewählt werden.", model.VotedPartyId)); } context.Erststimmes.Add(new Erststimme { Election_Id = token.GetElectionId(), Wahlkreis_Id = token.GetWahlkreisId(), Person_Id = model.VotedPersonId > 0 ? model.VotedPersonId : null, }); context.Zweitstimmes.Add(new Zweitstimme { Election_Id = token.GetElectionId(), Wahlkreis_Id = token.GetWahlkreisId(), Party_Id = model.VotedPartyId > 0 ? model.VotedPartyId : null }); context.SaveChanges(); _tokenHandler.FinishedToken(token); } return true; }
public static void AddIsElectableCandidate(string filename) { const int firstnameIndex = 1; const int lastnameIndex = 2; const int partynameIndex = 3; const int wahlkreisIdIndex = 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 result = GetTitleFirstnameLastnamePartynameFromLine(line); var firstname = result.ElementAt(firstnameIndex); var lastname = result.ElementAt(lastnameIndex); var partyname = result.ElementAt(partynameIndex); int wahlkreisId; var parsed = int.TryParse(line[wahlkreisIdIndex], out wahlkreisId); if (!parsed) { continue; } var existing = GetExistingCandidate(context, firstname, lastname, partyname, line[2]); var entry = new IsElectableCandidate { Election_Id = electionId, Person_Id = existing.Id, Wahlkreis_Id = wahlkreisId }; context.IsElectableCandidates.Add(entry); Console.WriteLine("Added person {0} is electable at wahlkreis {1} in election {2}", existing.Id, wahlkreisId, electionId); } context.SaveChanges(); } }
public static void AddParties(string filename) { const int lineIndex = 2; const int lineStartIndex = 19; var parsedFile = DataImportGeneral.ParseFile(filename); var line = parsedFile.ElementAt(lineIndex); using (var context = new ElectionDBEntities()) { for (var i = lineStartIndex; i < line.Count; i++) { var name = line[i]; if (!string.IsNullOrWhiteSpace(name)) { context.Parties.Add(new Party { Name = name.Trim() }); } } context.SaveChanges(); } }
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); }
public static void AddPartyAffiliations(string filename) { const int personIdIndex = 1; const int partyIndex = 6; 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); // Get Party var partyName = line[partyIndex].Trim(); var filteredPartyName = DataImportGeneral.PartyNameDictionary.ContainsKey(partyName) ? DataImportGeneral.PartyNameDictionary[partyName] : partyName; var party = context.Parties.SingleOrDefault(r => r.Name == filteredPartyName); if (party == null) { // Parteilos if no party was set if (string.IsNullOrWhiteSpace(partyName)) { party = context.Parties.Single(p => p.Name == DataImportGeneral.Impartially); } else { // Error: Party was set but not found in the database throw new Exception(string.Format("Party {0} does not exist in the database!", partyName)); } } var personId = int.Parse(line[personIdIndex]); context.PartyAffiliations.Add(new PartyAffiliation { Election_Id = electionId, Person_Id = personId, Party_Id = party.Id }); Console.WriteLine("Added person {0} to party '{1}' for election {2}", personId, party.Name, electionId); } context.SaveChanges(); } }
private static void GenerateZweitstimmenVotes(ElectionDBEntities context, int electionId, int wahlkreisId, int amount, int? partyId) { if (amount <= 0) { return; } context.ZweitstimmeAmounts.Add(new ZweitstimmeAmount { Election_Id = electionId, Wahlkreis_Id = wahlkreisId, Party_Id = partyId, Amount = amount }); Console.WriteLine("Created {0} zweitstimmen for party {1}", amount, partyId); }
public UeberhangmandatViewModel GetUeberhangmandate(int electionId) { var model = new UeberhangmandatViewModel { ElectionId = electionId }; using (var context = new ElectionDBEntities()) { context.Database.CommandTimeout = 500000; var entries = context.Ueberhangmandates.Where(u => u.Election_Id == electionId && u.Number > 0); var mandate = ViewModelMap.ViewModelMap.GetUeberhangmandatEntryViewModels(entries).ToList(); model.Mandate = mandate.OrderBy(r => r); } return model; }