Example #1
0
        public static void AddAccountNumberToTransactionsIfEmpty(this AnalystDbContext db, string accountNumber)
        {
            var transactionsToEdit = db.Transactions.Where(t => string.IsNullOrEmpty(t.AccountNumber)).ToArray();

            foreach (var transaction in transactionsToEdit)
            {
                transaction.AccountNumber = accountNumber;
            }

            db.SaveChanges();
        }
Example #2
0
        public static void SeedDb(AnalystDbContext db)
        {
            var filepath = Path.Combine(Directory.GetCurrentDirectory(), "seed.json");

            using (var fs = File.OpenRead(filepath))
                using (var reader = new StreamReader(fs))
                {
                    var content = reader.ReadToEnd();
                    var seed    = JsonConvert.DeserializeObject <Seed>(content);

                    Save(db, seed);
                }
        }
Example #3
0
        public static void MigrateTransactionIgnore(this AnalystDbContext db)
        {
            var ignoredTransactions = db.Transactions.Where(t => t.Ignored).ToArray();
            var ignores             = ignoredTransactions.Select(t => new TransactionIgnore {
                TransactionId = t.Id
            });

            db.IgnoredTransactions.AddRange(ignores);

            foreach (var transaction in ignoredTransactions)
            {
                transaction.Ignored = false;
            }

            db.SaveChanges();
        }
Example #4
0
        public static void AddDefaultValuesToZeroAmountTagAssignments(this AnalystDbContext db)
        {
            var zeroAmountAssignments = db.TagAssignments
                                        .Where(x => x.Amount == 0)
                                        .ToArray();
            var zeroAmountAssignmentsGroupedByTransaction = zeroAmountAssignments
                                                            .GroupBy(x => x.TransactionId);
            var transactionsWithZeroTagAssignments = db.Transactions
                                                     .Where(x => zeroAmountAssignments
                                                            .Select(y => y.TransactionId)
                                                            .Distinct()
                                                            .Contains(x.Id))
                                                     .ToArray();
            var anotherAssignmentsOfFoundTransactions = db.TagAssignments
                                                        .Where(x => transactionsWithZeroTagAssignments
                                                               .Select(y => y.Id)
                                                               .Contains(x.TransactionId))
                                                        .Where(x => x.Amount != 0)
                                                        .ToArray();
            var transactionsWithOnlyZeroAmountTag = transactionsWithZeroTagAssignments
                                                    .Where(x => !anotherAssignmentsOfFoundTransactions
                                                           .Select(y => y.TransactionId)
                                                           .Distinct()
                                                           .Contains(x.Id))
                                                    .ToArray();
            var assignmentsToUpdate = zeroAmountAssignments
                                      .Where(x => transactionsWithOnlyZeroAmountTag
                                             .Select(y => y.Id)
                                             .Distinct()
                                             .Contains(x.TransactionId))
                                      .Where(x => zeroAmountAssignmentsGroupedByTransaction.First(y => y.Key == x.TransactionId).Count() == 1)
                                      .ToArray();

            if (assignmentsToUpdate.Length < zeroAmountAssignments.Length)
            {
                Console.WriteLine($"COULD NOT UPDATE {zeroAmountAssignments.Length - assignmentsToUpdate.Length} TAG ASSIGNMENTS AMOUNT :((");
            }

            foreach (var assignment in assignmentsToUpdate)
            {
                assignment.Amount = Math.Abs(transactionsWithOnlyZeroAmountTag.First(x => x.Id == assignment.TransactionId).Amount);
            }

            db.TagAssignments.UpdateRange(assignmentsToUpdate);

            db.SaveChanges();
        }
Example #5
0
        public static void MigrateTransactionIgnoreToTags(this AnalystDbContext db)
        {
            var ignoredTransactions    = db.IgnoredTransactions.Select(i => i.TransactionId).ToArray();
            var transactionsToIgnore   = db.Transactions.Where(t => ignoredTransactions.Contains(t.Id)).ToArray();
            var existingTagAssignments = db.TagAssignments.Where(a => a.TagName == "IGNORE" && transactionsToIgnore.Select(t => t.Id).Contains(a.TransactionId)).ToArray();
            var unassignedTransactions = transactionsToIgnore.Where(t => !existingTagAssignments.Select(a => a.TransactionId).Contains(t.Id));

            var assignments = unassignedTransactions.Select(t => new TagAssignment
            {
                TransactionId = t.Id,
                TagName       = "IGNORE",
                Amount        = Math.Abs(t.Amount),
            });

            db.TagAssignments.AddRange(assignments);

            db.SaveChanges();
        }
Example #6
0
        public static void ApplyAutomaticIgnoreForHistoricalTransactions(this AnalystDbContext db)
        {
            var ignoredTransactionsIds = db.IgnoredTransactions.Select(x => x.TransactionId).ToArray();
            var notIgnoredTransactions = db.Transactions.Where(t => !ignoredTransactionsIds.Contains(t.Id)).ToArray();
            var filtersWithIgnoreTag   = db.Filters.Where(f => f.TagNamesIfTrue.Contains("IGNORE"));

            var transactionsToIgnore = filtersWithIgnoreTag
                                       .SelectMany(f => f.Apply(notIgnoredTransactions))
                                       .Select(t => t.Id)
                                       .Distinct();

            var ignores = transactionsToIgnore
                          .Select(x => new TransactionIgnore {
                TransactionId = x
            });

            db.IgnoredTransactions.AddRange(ignores);

            db.SaveChanges();
        }
Example #7
0
        private static void Save(AnalystDbContext db, Seed seed)
        {
            foreach (var tag in seed.Tags)
            {
                if (!db.Tags.Any(x => x.Equals(tag)))
                {
                    db.Tags.Add(tag);
                }
            }

            foreach (var filter in seed.Filters)
            {
                if (!db.Filters.Any(x => x.Equals(filter)))
                {
                    db.Filters.Add(filter);
                }
            }

            db.SaveChanges();
        }
Example #8
0
 public Store(AnalystDbContext dbContext)
 {
     this.dbContext = dbContext;
 }