public async Task Update(Account account, IFinanceStatement financeStatement) { Entities.FinanceStatement financeStatementEntity = new Entities.FinanceStatement { Id = financeStatement.Id, Title = financeStatement.Title, ReferenceDate = financeStatement.ReferenceDate, AccountId = account.Id, }; var replaceOptions = new ReplaceOptions { IsUpsert = true }; var financeStatementFilter = Builders <Entities.FinanceStatement> .Filter.Eq(x => x.Id, financeStatement.Id); if (financeStatement is Income) { await _context.Incomes.ReplaceOneAsync(financeStatementFilter, financeStatementEntity, replaceOptions); } if (financeStatement is Expense) { await _context.Expenses.ReplaceOneAsync(financeStatementFilter, financeStatementEntity, replaceOptions); } if (financeStatement is Investment) { await _context.Investments.ReplaceOneAsync(financeStatementFilter, financeStatementEntity, replaceOptions); } await _context.AmountRecords .Find(x => x.FinanceStatementId == financeStatement.Id) .ForEachAsync(entity => { if (!financeStatement.AmountRecords.Contains(entity.Id)) { _context.AmountRecords.DeleteOneAsync(x => x.Id == entity.Id && x.FinanceStatementId == financeStatement.Id); } }); foreach (var amountRecord in financeStatement .AmountRecords .GetAmountRecords()) { var amountRecordEntity = new Entities.AmountRecord { Id = amountRecord.Id, Amount = amountRecord.Amount, Description = amountRecord.Description, FinanceStatementId = financeStatement.Id }; await _context.AmountRecords .ReplaceOneAsync(x => x.Id == amountRecord.Id && x.FinanceStatementId == financeStatement.Id, amountRecordEntity, replaceOptions); } }
public void Add(IFinanceStatement item) { if (Any(x => x.Title == item.Title)) { throw new FinanceStatementAlreadyExistsException($"{item.Title} already exists!"); } _financeStatements.Add(item); }
public async Task Remove(Account account, IFinanceStatement financeStatement) { await _context.AmountRecords.DeleteManyAsync(x => x.FinanceStatementId == financeStatement.Id); if (financeStatement is Expense) { await _context.Expenses.DeleteOneAsync(x => x.Id == financeStatement.Id && x.AccountId == account.Id); } else if (financeStatement is Income) { await _context.Incomes.DeleteOneAsync(x => x.Id == financeStatement.Id && x.AccountId == account.Id); } else if (financeStatement is Investment) { await _context.Investments.DeleteOneAsync(x => x.Id == financeStatement.Id && x.AccountId == account.Id); } }
public void Remove(IFinanceStatement item) { _financeStatements.Remove(item); }