public async void Update_Creation_AccountBalancesAreIncreased() { EntityIdSet ids; decimal balance, availBalance; using (var session = await CreateDefaultSession()) { ids = session.CreateDefaultEntities(); balance = session.DebitCardAccount.Balance; availBalance = session.DebitCardAccount.AvailBalance; } using (var session = await CreateDefaultSession(ids)) { var commands = session.CreateIncomeCommands(); var income = new IncomeItemModel { AccountId = ids.DebitCardAccountId, DateTime = new DateTime(2018, 03, 05, 23, 45, 00), IsCorrection = false, Total = 1230.45m, IncomeTypeId = ids.GiftsIncomeId, }; await commands.Update(income); var account = await session.LoadEntity <Account>(ids.DebitCardAccountId); account.Balance.ShouldBeEquivalentTo(balance + income.Total); account.AvailBalance.ShouldBeEquivalentTo(availBalance + income.Total); } }
public async void Create_SingleTransactionCreated() { using (var session = await CreateDefaultSession()) { var ids = session.CreateDefaultEntities(); var commands = session.CreateIncomeCommands(); var income = new IncomeItemModel { AccountId = ids.DebitCardAccountId, DateTime = new DateTime(2018, 03, 05, 23, 45, 00), IsCorrection = false, Total = 1230.45m, IncomeTypeId = ids.GiftsIncomeId, }; await commands.Update(income); var transactionQueries = session.CreateTransactionQueries(); var transactions = await transactionQueries.GetInitiatorTransactions(ids.DebitCardAccountId); transactions.Count.ShouldBeEquivalentTo(1); var transaction = transactions.Single(); transaction.ShouldBeEquivalentTo(new TransactionModel { OwnerId = session.UserSession.UserId, InitiatorId = ids.DebitCardAccountId, DateTime = income.DateTime, Total = income.Total, IncomeId = income.Id, BillId = null, ParticipantId = null, Balance = session.DebitCardAccount.Balance + income.Total }, opt => opt.Excluding(x => x.Id)); } }
public async Task <IncomeItemModel> Topup(TopupAccountModel topup) { var account = await _repository.LoadAsync <Account>(topup.AccountId).ConfigureAwait(false); var incomeTypeId = topup.IncomeTypeId; if (incomeTypeId == null) { var incomeType = new IncomeType { Name = topup.AddIncomeTypeName, OwnerId = _currentSession.UserId }; _repository.Create(incomeType); await _repository.SaveChangesAsync().ConfigureAwait(false); incomeTypeId = incomeType.Id; } var income = new IncomeItemModel { AccountId = account.Id, DateTime = topup.TopupDate, IncomeTypeId = incomeTypeId.Value, Total = topup.Amount, IsCorrection = topup.Correction, }; await _incomeItemCommands.Update(income).ConfigureAwait(false); await _repository.SaveChangesAsync().ConfigureAwait(false); return(income); }
public async void Update_SameAccount_TransactionIsUpdated() { EntityIdSet ids; IncomeItemModel income; int transactionId; decimal balance; using (var session = await CreateDefaultSession()) { var transactionQueries = session.CreateTransactionQueries(); ids = session.CreateDefaultEntities(); balance = session.DebitCardAccount.Balance; var commands = session.CreateIncomeCommands(); income = new IncomeItemModel { AccountId = ids.DebitCardAccountId, DateTime = new DateTime(2018, 03, 05, 23, 45, 00), IsCorrection = false, Total = 1230.45m, IncomeTypeId = ids.GiftsIncomeId, }; await commands.Update(income); transactionId = (await transactionQueries.GetInitiatorTransactions(income.AccountId)).Single().Id; } using (var session = await CreateDefaultSession(ids)) { var transactionQueries = session.CreateTransactionQueries(); var commands = session.CreateIncomeCommands(); income.Total = 1340; await commands.Update(income); var transactions = await transactionQueries.GetInitiatorTransactions(ids.DebitCardAccountId); transactions.Count.ShouldBeEquivalentTo(1); var transaction = transactions.Single(); transaction.ShouldBeEquivalentTo( new TransactionModel { Id = transactionId, OwnerId = session.UserSession.UserId, BillId = null, DateTime = income.DateTime, IncomeId = income.Id, Total = income.Total, InitiatorId = ids.DebitCardAccountId, ParticipantId = null, Balance = balance + income.Total }); } }
public async Task <IncomeItemModel> Update(IncomeItemModel model) { var item = new IncomeItem { Id = model.Id, AccountId = model.AccountId, DateTime = model.DateTime, IncomeTypeId = model.IncomeTypeId, Total = model.Total, OwnerId = _currentSession.UserId, IsCorrection = model.IsCorrection, }; if (item.Id > 0) { var oldItem = await _repository.LoadAsync <IncomeItem>(item.Id).ConfigureAwait(false); var accountId = oldItem.AccountId; decimal balance; if (oldItem.AccountId == item.AccountId) { var account = await _repository.LoadAsync <Account>(item.AccountId).ConfigureAwait(false); if (!item.IsCorrection) { account.Balance += item.Total - oldItem.Total; } account.AvailBalance += item.Total - oldItem.Total; _repository.Update(account); balance = account.Balance; } else { var account1 = await _repository.LoadAsync <Account>(oldItem.AccountId).ConfigureAwait(false); var account2 = await _repository.LoadAsync <Account>(item.AccountId).ConfigureAwait(false); if (!oldItem.IsCorrection) { account1.Balance -= oldItem.Total; } account1.AvailBalance -= oldItem.Total; if (!item.IsCorrection) { account2.Balance += item.Total; } account2.AvailBalance += item.Total; _repository.Update(account1); _repository.Update(account2); balance = account2.Balance; } _repository.Update(item); await _transactionBuilder.UpdateIncome(accountId, item, balance).ConfigureAwait(false); await _repository.SaveChangesAsync().ConfigureAwait(false); } else { var account = await _repository.LoadAsync <Account>(item.AccountId).ConfigureAwait(false); if (!item.IsCorrection) { account.Balance += item.Total; } account.AvailBalance += item.Total; _repository.Update(account); _repository.Create(item); await _repository.SaveChangesAsync().ConfigureAwait(false); _transactionBuilder.CreateIncome(item, account.Balance); await _repository.SaveChangesAsync().ConfigureAwait(false); } model.Id = item.Id; return(model); }