예제 #1
0
        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);
            }
        }
예제 #2
0
        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));
            }
        }
예제 #3
0
        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);
        }
예제 #4
0
        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
                });
            }
        }
예제 #5
0
        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);
        }