示例#1
0
        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);
            }
        }
示例#2
0
        public void Add(IFinanceStatement item)
        {
            if (Any(x => x.Title == item.Title))
            {
                throw new FinanceStatementAlreadyExistsException($"{item.Title} already exists!");
            }

            _financeStatements.Add(item);
        }
示例#3
0
        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);
            }
        }
示例#4
0
 public void Remove(IFinanceStatement item)
 {
     _financeStatements.Remove(item);
 }