예제 #1
0
        public async Task Process(CreateTransactionRequest request, CreateTransactionResponse response, CancellationToken cancellationToken)
        {
            var budget = await _budgetPlannerService.GetBudgetPlanner(request.BudgetId, cancellationToken);

            response.Reference       = budget.Reference;
            budget.LastTransactionId = response.Result.Id;
            await _budgetPlannerService.Save(budget, cancellationToken);
        }
예제 #2
0
        public async Task <RetrieveBudgetPlannerResponse> Handle(RetrieveBudgetPlannerRequest request, CancellationToken cancellationToken)
        {
            Budget budget;

            if (request.BudgetPlannerId.HasValue)
            {
                budget = await _budgetPlannerService.GetBudgetPlanner(request.BudgetPlannerId.Value, cancellationToken);
            }
            else
            {
                budget = await _budgetPlannerService.GetBudgetPlanner(request.Reference, cancellationToken);
            }

            if (budget.AccountId == request.AccountId)
            {
                return(Response.Success <RetrieveBudgetPlannerResponse>(budget));
            }

            return(Response.Failed <RetrieveBudgetPlannerResponse>());
        }
        public async Task <CreateTransactionResponse> Handle(CreateTransactionRequest request, CancellationToken cancellationToken)
        {
            var transaction = _mapperProvider.Map <CreateTransactionRequest, Transaction>(request);

            var budgetPlanner = await _budgetPlannerService.GetBudgetPlanner(transaction.BudgetId, cancellationToken);

            budgetPlanner.LastUpdated = SqlDateTime.MinValue.Value;

            var previousBalance = await _transactionProvider.GetBalance(transaction.BudgetId, cancellationToken, true);

            if (transaction.Id != default)
            {
                transaction = await _transactionService.SaveTransaction(transaction, cancellationToken);

                return(Response.Success <CreateTransactionResponse>(transaction));
            }

            transaction = await _transactionService.SaveTransaction(transaction, cancellationToken, false);

            var transactionLedger = new TransactionLedger
            {
                Transaction = transaction,
                Amount      = transaction.Type == Domains.Enumerations.TransactionType.Expense
                    ? -transaction.Amount
                    : transaction.Amount,
                PreviousBalance = previousBalance,
                NewBalance      = transaction.Type == Domains.Enumerations.TransactionType.Expense
                    ? previousBalance - transaction.Amount
                    : previousBalance + transaction.Amount
            };

            await _transactionLedgerService
            .SaveTransactionLedger(transactionLedger, true, cancellationToken);

            return(Response.Success <CreateTransactionResponse>(transaction));
        }
        private async Task <bool> BudgetPlannerExists(int budgetPlannerId, CancellationToken cancellationToken)
        {
            var budgetPlanner = await _budgetPlannerService.GetBudgetPlanner(budgetPlannerId, cancellationToken);

            return(budgetPlanner != null);
        }