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