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();
            }
        }
Пример #3
0
        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]);
            }
        }
Пример #7
0
        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]));
            }
        }
Пример #12
0
        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);
            }
        }