Example #1
0
            public JsonRule LoadAffectedLines(Db db, Client currentClient)
            {
                if (_rule != null)
                {
                    var rulesApplier = new RulesApplier();
                    var matchCount   = 0;
                    foreach (var lineText in db.Lines.Where(x => x.Account.ClientId == currentClient.Id).Select(x => x.Text ?? x.OriginalText))
                    {
                        if (rulesApplier.IsMatch(_rule, lineText))
                        {
                            matchCount++;
                        }
                    }
                    affectedLines = matchCount.ToString("N0");
                }

                return(this);
            }
Example #2
0
        public async Task <ActionResult> Apply()
        {
            var viewModel = new IndexViewModel();

            var currentClient = await GetCurrentClient();

            var applier = new RulesApplier();

            var allLinesOfClient = Db.Lines.Where(x => x.Account.ClientId == currentClient.Id);

            viewModel.ApplierResult = await applier.Apply(Db, currentClient.Id, allLinesOfClient, true);

            if (viewModel.ApplierResult.LinesUpdated > 0)
            {
                await Db.SaveChangesAsync();
            }

            return(View("Index", viewModel));
        }
Example #3
0
        public async Task <ImportResult> LoadFileAndImport(Db db, int clientId, int accountId, RulesApplier rulesApplier)
        {
            var result = new ImportResult();
            var lines  = GetRecords <Line>();

            var anyChangesToDatabase = false;

            foreach (var line in lines)
            {
                var lineExists = db.Lines.Any(x => x.AccountId == accountId &&
                                              x.OriginalDate == line.OriginalDate &&
                                              x.OriginalText == line.OriginalText &&
                                              // ReSharper disable once CompareOfFloatsByEqualityOperator
                                              x.OriginalAmount == line.OriginalAmount);

                if (!lineExists)
                {
                    line.AccountId = accountId;

                    await rulesApplier.Apply(db, clientId, line);

                    line.DateOfCreationUtc = DateTime.UtcNow;
                    db.Lines.Add(line);
                    result.NewLinesCount++;
                    anyChangesToDatabase = true;
                }
                else
                {
                    result.DuplicateLinesCount++;
                }
            }

            if (anyChangesToDatabase)
            {
                await db.SaveChangesAsync();
            }

            return(result);
        }
Example #4
0
 public void SetUp()
 {
     applier = new RulesApplier(AllProductsArray.Products);
 }