private void CheckBlanks() { var electionIdToBlankIdMap = new Dictionary <string, string>(); var electionVotingModes = new Hashtable(); foreach (var blank in _sourceData.Blanks) { if (blank.Sections.Length == 0) { throw new SourceDataVerifierException(String.Format("Бланк {0} не содержит секций", blank.Id)); } electionVotingModes.Clear(); foreach (var section in blank.Sections) { var electionOnSect = _sourceData.GetElectionByNum(section); if (electionOnSect == null) { throw new SourceDataVerifierException( String.Format("Бланк {0} ссылается на несуществующие выборы {1}", blank.Id, section)); } if (electionIdToBlankIdMap.ContainsKey(electionOnSect.ElectionId)) { throw new SourceDataVerifierException( String.Format("Выборы {0} размещены на двух бланках: {1}, {2}", electionOnSect.ElectionId, blank.Id, electionIdToBlankIdMap[electionOnSect.ElectionId])); } electionIdToBlankIdMap[electionOnSect.ElectionId] = blank.Id; foreach (var mode in electionOnSect.VotingModes) { if (electionVotingModes.Contains(mode)) { electionVotingModes[mode] = (int)electionVotingModes[mode] + 1; } else { electionVotingModes.Add(mode, 1); } } } foreach (var mode in electionVotingModes.Keys) { if ((int)electionVotingModes[mode] != blank.Sections.Length) { throw new SourceDataVerifierException( String.Format("Не все выборы на бланке {0} содержат режим {1}", blank.Id, mode)); } } } foreach (var election in _sourceData.Elections) { if (string.CompareOrdinal( _sourceData.GetBlankIdByElectionNumber(election.ElectionId), SourceData.UNDEFINED_ID) == 0) { throw new SourceDataVerifierException( String.Format("Для выборов {0} не определен бланк", election.ElectionId)); } } }