public void TestFlagsValidity() { _logger.WriteLine("Testing card validity..."); _connection.Open(); try { var invalidFlags = EcCard.LoadAll(_connection) .Where(c => !c.IsFlagsValid) .ToList(); foreach (var card in invalidFlags) { _logger.WriteLine("{0}", card); _logger.Write(" flags:"); foreach (var flag in card.Flags) { _logger.Write(" {0}", flag ? "1" : "0"); } _logger.Write(" expected:"); foreach (var flag in EcCard.ExpectedFlags(card.ProjectNumber)) { _logger.Write(" {0}", flag ? "1" : "0"); } _logger.WriteLine(); } } finally { _connection.Close(); } }
public void CreateMissingCards() { _logger.WriteLine("Creating missing cards..."); _connection.Open(); try { var allCards = EcCard.LoadAll(_connection).ToList(); var cardIds = new HashSet <string>(); foreach (var c in allCards) { cardIds.Add(c.CardIdentity); } foreach (var id in cardIds) { bool unique = true; var cards = allCards.Where(c => string.Equals(c.CardIdentity, id)).ToList(); if (cards.Count != 3) { _logger.WriteLine("{0} have {1} entries", id, cards.Count); } if (cards.Any(c => c.CardNumber != cards[0].CardNumber)) { unique = false; _logger.WriteLine("{0} have different card numbers: {1}", id, string.Join(", ", cards.Select(c => c.CardNumber))); } if (cards.Any(c => c.CustomerNumber != cards[0].CustomerNumber)) { unique = false; _logger.WriteLine("{0} have different customer numbers: {1}", id, string.Join(", ", cards.Select(c => c.CustomerNumber))); } if (unique && cards.Count < 3) { foreach (var projectId in EcCard.ProjectIds) { if (cards.Any(c => c.ProjectNumber == projectId)) { continue; } var card = EcCard.Create(cards[0].CustomerNumber, projectId, cards[0].CardNumber, cards[0].CardIdentity); card.Text = cards[0].Text; card.SetFlags(cards[0].IsActive); _logger.WriteLine("Creating new card {0}", card); card.Save(_connection); } } } } finally { _connection.Close(); } }
public static EcCard Create(int id, int projectNumber, int cardNumber, string cardIdentity) { var card = new EcCard(); card.ID = id; card.ProjectNumber = projectNumber; card.CardNumber = cardNumber; card.CardIdentity = cardIdentity; return(card); }
public void CreateMissingCards() { _logger.WriteLine("Creating missing cards..."); var cardIds = new HashSet <string>(); foreach (var c in _allCards) { cardIds.Add(c.CardIdentity); } foreach (var id in cardIds) { bool unique = true; var cards = _allCards.Where(c => string.Equals(c.CardIdentity, id)).ToList(); if (cards.Count != 3) { _logger.WriteLine("{0} have {1} entries", id, cards.Count); } if (cards.Any(c => c.CardNumber != cards[0].CardNumber)) { unique = false; _logger.WriteLine("{0} have different card numbers: {1}", id, string.Join(", ", cards.Select(c => c.CardNumber))); } if (unique && cards.Count < 3) { foreach (var projectId in EcCard.ProjectIds) { if (cards.Any(c => c.ProjectNumber == projectId)) { continue; } int newId; if (!_allCards.Any(c => c.ProjectNumber == projectId && c.ID == cards[0].CardNumber)) { newId = cards[0].CardNumber; } else { newId = _allCards.Where(c => c.ProjectNumber == projectId).Max(c => c.ID) + 1; } var card = EcCard.Create(newId, projectId, cards[0].CardNumber, cards[0].CardIdentity); card.Text = cards[0].Text; card.SetFlags(cards[0].IsActive); _allCards.Add(card); _logger.WriteLine("Creating new card {0}", card); } } } }
public void FixDescriptionTexts() { _logger.WriteLine("Fixing card text comments..."); _connection.Open(); try { var allCards = EcCard.LoadAll(_connection).ToList(); var masterCards = allCards.Where(c => c.ProjectNumber == EcCard.ProjectIds[0]).ToList(); var slaveCards = allCards.Where(c => c.ProjectNumber != EcCard.ProjectIds[0]).ToList(); _logger.WriteLine("Master unique cards:"); foreach (var card in masterCards.Where(m => !slaveCards.Any(s => string.Equals(s.CardIdentity, m.CardIdentity)))) { _logger.WriteLine(card); } _logger.WriteLine(); _logger.WriteLine("Slave unique cards:"); foreach (var card in slaveCards.Where(s => !masterCards.Any(m => string.Equals(s.CardIdentity, m.CardIdentity)))) { _logger.WriteLine(card); } _logger.WriteLine(); foreach (var masterCard in masterCards.Where(m => !string.IsNullOrWhiteSpace(m.Text))) { var identity = masterCard.CardIdentity; var slaves = slaveCards.Where(s => string.Equals(s.CardIdentity, identity)).ToList(); if (slaves.Any(s => !string.Equals(s.Text, masterCard.Text) && !string.IsNullOrWhiteSpace(s.Text))) { _logger.WriteLine("different texts:"); _logger.WriteLine("\t" + masterCard); foreach (var slave in slaves) { _logger.WriteLine("\t" + slave); } continue; } foreach (var slave in slaves.Where(s => string.IsNullOrWhiteSpace(s.Text))) { _logger.WriteLine("Copying '{0}' to card '{1}' in project {2}", masterCard.Text, slave.CardIdentity, slave.ProjectNumber); slave.Text = masterCard.Text; slave.Save(_connection); } } } finally { _connection.Close(); } }
public void CommitChanges() { _logger.WriteLine("Testing consistency..."); if (TestConsistency()) { _logger.WriteLine("Can't save broken database"); return; } _logger.WriteLine("Saving..."); for (int i = 0; i < _xDocuments.Length; i++) { int projectId = EcCard.GetProjectNumber(_xDocuments[i]); EcCard.UpdateAll(_xDocuments[i], _allCards.Where(c => c.ProjectNumber == projectId).OrderBy(c => c.ID)); } // Make backups foreach (var fileName in _fileNames) { File.Delete($"{fileName}.5"); } for (int i = 5; i > 0; i--) { foreach (var fileName in _fileNames) { var dest = $"{fileName}.{i}"; var src = fileName; if (i > 1) { src += "." + (i - 1); } if (File.Exists(src)) { File.Move(src, dest); } } } for (int i = 0; i < _xDocuments.Length; i++) { _xDocuments[i].Save(_fileNames[i]); } }
private static EcCard LoadFromElement(XElement xCardElement) { if (xCardElement == null) { return(null); } var card = new EcCard(); card.ID = (int)xCardElement.Attribute("index"); card.ProjectNumber = GetProjectNumber(xCardElement.Document); card.CardNumber = (int)xCardElement.Attribute("eintragsnummer"); card.CardIdentity = (string)xCardElement.Attribute("kartennummer"); card.Text = xCardElement.Element("Beschreibung")?.Value; for (int i = 0; i < FlagNames.Length; i++) { card._flags[i] = (bool)xCardElement.Attribute(FlagNames[i]); } return(card); }
public void TrimTexts() { _logger.WriteLine("Fixing texts..."); _connection.Open(); try { var cardsToTrim = EcCard.LoadAll(_connection) .Where(c => c.Text != null && c.Text != c.Text.Trim()) .ToList(); foreach (var card in cardsToTrim) { _logger.WriteLine("{0}", card); card.Text = card.Text.Trim(); card.Save(_connection); } } finally { _connection.Close(); } }
public void TestFlagsValidity() { _logger.WriteLine("Testing card validity..."); foreach (var card in _allCards.Where(c => !c.IsFlagsValid)) { _logger.WriteLine("{0}", card); _logger.Write(" flags:"); foreach (var flag in card.Flags) { _logger.Write(" {0}", flag ? "1" : "0"); } _logger.Write(" expected:"); foreach (var flag in EcCard.ExpectedFlags(card.ProjectNumber)) { _logger.Write(" {0}", flag ? "1" : "0"); } card.ClearSurplusFlags(); _logger.WriteLine(); } }
public void FindNumberingHoles() { _logger.WriteLine("Finding card numbering holes..."); _connection.Open(); try { var allCards = EcCard.LoadAll(_connection).ToList(); int cardIndex = 0; foreach (var card in allCards.OrderBy(c => c.CardNumber)) { if (card.CardNumber > cardIndex + 1) { _logger.WriteLine("No card(s) at position {0}-{1}", cardIndex + 1, card.CardNumber); } cardIndex = card.CardNumber; } } finally { _connection.Close(); } }
public void LoadDocuments(FileInfo projectFile1, FileInfo projectFile2, FileInfo projectFile3) { // Load all documents _fileNames = new[] { projectFile1.FullName, projectFile2.FullName, projectFile3.FullName }; _xDocuments = new XDocument[3]; _allCards = new List <EcCard>(); var projects = new HashSet <int>(); for (int i = 0; i < _xDocuments.Length; i++) { _xDocuments[i] = XDocument.Load(_fileNames[i]); int projectId = EcCard.GetProjectNumber(_xDocuments[i]); if (!EcCard.ProjectIds.Contains(projectId)) { throw new Exception($"Project {i+1} has an invalid Project id of {projectId}"); } if (projects.Contains(projectId)) { throw new Exception($"Project {projectId} already loaded"); } projects.Add(projectId); _allCards.AddRange(EcCard.LoadAll(_xDocuments[i])); } }
private static IEnumerable <EcCard> LoadFromReader(OleDbDataReader reader) { if (reader == null) { yield break; } int idIndex = reader.GetOrdinal("ID"); int custIndex = reader.GetOrdinal("KndNr"); int projIndex = reader.GetOrdinal("ProjNr"); int cardNoIndex = reader.GetOrdinal("Kartennr"); int cardIdIndex = reader.GetOrdinal("CardZK"); int textIndex = reader.GetOrdinal("Text"); int[] flagIndexes = new int[13]; for (int i = 0; i < FlagNames.Length; i++) { flagIndexes[i] = reader.GetOrdinal(FlagNames[i]); } while (reader.Read()) { var card = new EcCard(); card.ID = reader.GetInt32(idIndex); card.CustomerNumber = (int)reader.GetDouble(custIndex); card.ProjectNumber = (int)reader.GetDouble(projIndex); card.CardNumber = reader.GetInt16(cardNoIndex); card.CardIdentity = reader.GetString(cardIdIndex); card.Text = reader.GetValue(textIndex) as string; for (int i = 0; i < FlagNames.Length; i++) { card._flags[i] = reader.GetBoolean(flagIndexes[i]); } yield return(card); } }