public async Task Edit(TransactionEditViewModel model)
        {
            var transaction = Mapper.Map <Domains.DataObject.Transaction>(model);

            _dbContext.Entry(transaction).State = EntityState.Modified;
            await _dbContext.SaveChangesAsync();
        }
        // GET: Transactions/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Transaction transaction = db.Transactions.Find(id);

            if (transaction == null)
            {
                return(HttpNotFound());
            }
            Account account       = transaction.Account;
            string  currentUserId = User.Identity.GetUserId();

            if (!account.Household.Members.Select(m => m.Id).Contains(currentUserId))
            {
                return(RedirectToAction("Unauthorized", "Home"));
            }
            ViewBag.AccountName      = account.Name;
            ViewBag.BudgetCategoryId = new SelectList(db.BudgetCategories, "Id", "Name", transaction.BudgetCategoryId);
            TransactionEditViewModel vm = new TransactionEditViewModel();

            vm.Id               = transaction.Id;
            vm.Description      = transaction.Description;
            vm.Amount           = transaction.Amount;
            vm.Expense          = transaction.Expense;
            vm.Date             = transaction.Date;
            vm.AccountId        = transaction.AccountId;
            vm.BudgetCategoryId = transaction.BudgetCategoryId;
            vm.MadeById         = transaction.MadeById;
            return(View(vm));
        }
예제 #3
0
        // GET: Transaction/Edit/5
        public async Task <ActionResult> Edit(Guid?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Transaction transaction = await db.Transactions.FindAsync(id);

            if (transaction == null)
            {
                return(HttpNotFound());
            }

            TransactionEditViewModel vm = new TransactionEditViewModel
            {
                Id              = transaction.Id,
                Description     = transaction.Description,
                Amount          = transaction.Amount,
                Date            = transaction.Date,
                TransactionType = transaction.TransactionType,
                BankAccount_Id  = transaction.BankAccount.Id,
            };

            return(View(vm));
        }
        // GET: Transactions/Edit/5
        public ActionResult Details(int id, int?budgetId)
        {
            var transaction = db.Transactions.Find(id);
            var user        = db.Users.Find(User.Identity.GetUserId());
            var group       = db.Groups.Find(user.GroupId);


            var viewModel = new TransactionEditViewModel
            {
                Group       = group,
                User        = user,
                Transaction = transaction
            };

            if (budgetId == null)
            {
                viewModel.Budget = transaction.Budget;
            }
            else
            {
                viewModel.Budget = db.Budgets.Find(budgetId);
            }

            return(View(viewModel));
        }
예제 #5
0
        public void EditTransaction(TransactionEditViewModel model)
        {
            var transaction = Mapper.Map <Domains.DataObject.Transaction>(model);

            _dbContext.Entry(transaction).State = EntityState.Modified;

            var originalTransaction = _dbContext.GetOriginal(transaction);

            // When Transaction Amount has changed
            if (((originalTransaction.Income ? 1 : -1) * originalTransaction.Amount) != ((transaction.Income ? 1 : -1) * transaction.Amount))
            {
                // Set original Project's Actual value
                if (originalTransaction.ProjectID.HasValue)
                {
                    var originalProject = _dbContext.Projects.Find(originalTransaction.ProjectID.Value);
                    originalProject.ActualValue             = originalProject.ActualValue + ((originalTransaction.Income ? -1 : 1) * originalTransaction.Amount);
                    _dbContext.Entry(originalProject).State = EntityState.Modified;
                }

                // and also set the actual Project's Actual value
                if (transaction.ProjectID.HasValue)
                {
                    var project = _dbContext.Projects.Find(transaction.ProjectID.Value);
                    project.ActualValue             = project.ActualValue + ((transaction.Income ? 1 : -1) * transaction.Amount);
                    _dbContext.Entry(project).State = EntityState.Modified;
                }
            }
            _dbContext.SaveChanges();
        }
예제 #6
0
        // Teste sendo ignorado pois não consegui fazer os Controllers funcionarem
        public void Save_TransaçãoComValorMaiorQueLimiteCredito_RetornaErros()
        {
            //Arrange
            transactionsController = new TransactionsController();

            transactionTypeApiName = "credito";
            var transactionEVM = new TransactionEditViewModel
            {
                Amount           = "120,00",
                CardBrandApiName = cardBrandApiName,
                CardHolderName   = "PEDRITA FLINTSTONE",
                Cvv                    = "999",
                ExpirationMonth        = 01,
                ExpirationYear         = 2019,
                Installments           = 0,
                Number                 = "5555666677778888",
                Password               = cardPassword,
                TransactionTypeApiName = transactionTypeApiName
            };

            //Act
            var transactionResult = transactionsController.Save(transactionEVM);
            var test = new RedirectResult("test");

            //Assert
            Assert.IsNotNull(transactionResult);
            Assert.AreSame(test, transactionResult);
        }
예제 #7
0
        public IActionResult Edit(int id, TransactionEditViewModel model)
        {
            var transaction = _transactionData.Get(id);

            if (ModelState.IsValid)
            {
                transaction.Amount   = model.Amount;
                transaction.Date     = model.Date;
                transaction.Type     = model.Type;
                transaction.Category = _transactionData.GetCategoryBasedOnName(model.Category);
                transaction.Wallet   = _transactionData.GetWalletBasedOnName(model.Wallet);
                if (transaction.Type == TransactionType.Invest)
                {
                    transaction.Price = model.Price;
                }
                else
                {
                    transaction.Price = null;
                }
                transaction.UserId = _currentUserId;
                _transactionData.Commit();
                return(RedirectToAction("Details", new { id = transaction.Id }));
            }
            return(View(transaction));
        }
        public ActionResult Edit([Bind(Include = "Id,Description,Amount,Expense,Date,AccountId,BudgetCategoryId,MadeById")] TransactionEditViewModel vm)
        {
            Transaction transaction = new Transaction();

            if (ModelState.IsValid)
            {
                transaction.Id               = vm.Id;
                transaction.Description      = vm.Description;
                transaction.Amount           = vm.Amount;
                transaction.Expense          = vm.Expense;
                transaction.Date             = vm.Date;
                transaction.AccountId        = vm.AccountId;
                transaction.BudgetCategoryId = vm.BudgetCategoryId;
                transaction.MadeById         = vm.MadeById;
                transaction.ForReconciled    = false;
                db.Entry(transaction).State  = EntityState.Modified;
                db.SaveChanges();

                Transaction rTransaction = db.Transactions.FirstOrDefault(t => t.ReconciledTransactionId == transaction.Id);
                if (rTransaction != null)
                {
                    rTransaction.Description      = transaction.Description;
                    rTransaction.BudgetCategoryId = transaction.BudgetCategoryId;

                    db.Entry(rTransaction).Property("Description").IsModified = true;
                    db.SaveChanges();
                    db.Entry(rTransaction).Property("BudgetCategoryId").IsModified = true;
                    db.SaveChanges();
                }

                return(RedirectToAction("Index", "Accounts"));
            }
            ViewBag.BudgetCategoryId = new SelectList(db.BudgetCategories, "Id", "Name", transaction.BudgetCategoryId);
            return(View(transaction));
        }
예제 #9
0
        public virtual async Task <ActionResult> Edit(TransactionEditViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            model.CreatorID = await GetCurrentUserIdAsync();

            _transactionService.EditTransaction(model);

            return(RedirectToAction(MVC.Project.ActionNames.Index));
        }
예제 #10
0
        public PartialViewResult GetEditRow(int id)
        {
            var model = new TransactionEditViewModel();

            model.Transaction = _db.Query(new GetTransactionByIdQuery(id));

            // list all active ledgers AND the transactions current ledger (in case it's not active)
            var ledgers = _db.Query(new GetAllLedgersQuery()).Where(l => l.IsActive || l.Ledger == model.Transaction.Ledger);

            model.LedgerList   = new SelectList(ledgers, "Ledger", "LedgerDesc", model.Transaction.Ledger);
            model.AccountsList = new SelectList(_db.Query(new GetAllAccountsQuery()), "Id", "Desc", model.Transaction.Account);
            return(PartialView(model));
        }
예제 #11
0
        public ServiceResult Update(TransactionEditViewModel model)
        {
            var oldEntity = _context.Transactions.FirstOrDefault(c => c.id_get.Equals(model.id_get));
            var entity    = AutoMapper.Mapper.Map(model, oldEntity);

            _context.Update(entity);
            var result = _context.SaveChanges();

            if (result > 0)
            {
                return(ServiceResult.Okay());
            }
            return(ServiceResult.Error());
        }
예제 #12
0
        public async Task <ActionResult> Edit(TransactionEditViewModel vm)
        {
            if (ModelState.IsValid)
            {
                Transaction transaction = await db.Transactions.FindAsync(vm.Id);

                transaction.Description     = vm.Description;
                db.Entry(transaction).State = EntityState.Modified;
                await db.SaveChangesAsync();

                return(RedirectToAction("Index", new { acctId = transaction.BankAccount.Id }));
            }
            return(View(vm));
        }
예제 #13
0
        public Model.Transaction GetTransaction(TransactionEditViewModel viewModel, Model.BankAccount bankAccount)
        {
            var transaction = new Model.Transaction()
            {
                Id             = viewModel.Id,
                Name           = viewModel.Name,
                Amount         = viewModel.Balance,
                AccountBalance = viewModel.AccountBalance,
                SetDate        = viewModel.SetDate,
                Description    = viewModel.Description,
                BankAccount    = bankAccount
            };

            return(transaction);
        }
예제 #14
0
        public void ConstructorTest()
        {
            var viewModel = new TransactionEditViewModel(_storages, null);


            Assert.IsNotNull(viewModel.ChildrenTransactions);
            Assert.AreEqual(0, viewModel.Total);
            Assert.AreEqual(0, viewModel.Weight);
            Assert.IsFalse(viewModel.IsComplexTransaction);
            Assert.IsFalse(viewModel.IsExistingTransaction);
            Assert.IsNull(viewModel.Transaction);
            Assert.IsNotNull(viewModel.Categories);
            Assert.IsNotNull(viewModel.Accounts);
            Assert.IsNotNull(viewModel.Transactions);
        }
        // Ação de Nova Transação com página consumindo API
        public ActionResult NewApi()
        {
            //Pega todos os Transactiontypes(tipos de transações)
            var transactionType = _unitOfWork.TransactionTypes.GetAll();
            //Pega todos os CardBrands(bandeiras de cartões)
            var cardBrand = _unitOfWork.CardBrands.GetAll();

            //Cria nova instância vazia de TransactionEditViewModel com as listas de TransactionTypes e CardBrands
            var viewModel = new TransactionEditViewModel
            {
                TransactionTypes = transactionType,
                CardBrands       = cardBrand
            };

            //Retorna a TransactionViewModel para a view TransactionForm(nova transação)
            return(View("TransactionApiForm", viewModel));
        }
예제 #16
0
        public TransactionEditViewModel GetViewModel(Model.Transaction transaction, CurrencyLogic currencyLogic)
        {
            var viewModel = new TransactionEditViewModel()
            {
                Id             = transaction.Id,
                Name           = transaction.Name,
                Balance        = transaction.Amount,
                AccountBalance = transaction.AccountBalance,
                SetDate        = transaction.SetDate,
                Description    = transaction.Description,
                Currency       = currencyLogic.GetCurrencyIconById(transaction.BankAccount.Currency),
                BankAccountId  = transaction.BankAccount.Id,
                UserId         = transaction.BankAccount.User.Id
            };

            return(viewModel);
        }
예제 #17
0
        public void ConstructorWithTransactionTest()
        {
            var viewModel = new TransactionEditViewModel(_storages, _transaction);


            Assert.IsNotNull(viewModel.ChildrenTransactions);
            Assert.AreEqual(22m, viewModel.Total);
            Assert.AreEqual(0.451m, viewModel.Weight);
            Assert.IsFalse(viewModel.IsComplexTransaction);
            Assert.IsTrue(viewModel.IsExistingTransaction);
            Assert.IsNotNull(viewModel.Transaction);
            Assert.IsNotNull(viewModel.Categories);
            Assert.IsNotNull(viewModel.Accounts);
            Assert.IsNotNull(viewModel.Transactions);
            Assert.AreEqual(_category, viewModel.Category);
            Assert.AreEqual(_account, viewModel.Account);
            Assert.AreEqual(_transaction.Name, viewModel.Name);
        }
예제 #18
0
        public IActionResult Create(TransactionEditViewModel model)
        {
            if (ModelState.IsValid)
            {
                var newTransaction = new Transaction();
                newTransaction.Amount   = model.Amount;
                newTransaction.Date     = model.Date;
                newTransaction.Type     = model.Type;
                newTransaction.UserId   = _currentUserId;
                newTransaction.Wallet   = _transactionData.GetWalletBasedOnName(model.Wallet);
                newTransaction.Category = _transactionData.GetCategoryBasedOnName(model.Category);

                newTransaction = _transactionData.Add(newTransaction);
                _transactionData.Commit();
                return(RedirectToAction("Details", new { id = newTransaction.Id }));
            }

            return(View());
        }
예제 #19
0
        public ActionResult Edit(TransactionEditViewModel viewModel)
        {
            var status = false;

            if (ModelState.IsValid && User.Identity.GetUserId() == viewModel.UserId && Request.IsAjaxRequest() &&
                _readTransaction.IsTransactionCorrect(viewModel.Id, viewModel.BankAccountId, viewModel.UserId))
            {
                var binder      = new FromTransactionEditViewModel();
                var bankAccount = _readBankAccount.GetBankAccountById(viewModel.BankAccountId);
                var model       = binder.GetTransaction(viewModel, bankAccount);
                _writeTransaction.Edit(model);
                status = true;

                return(new JsonResult()
                {
                    Data = new { status = status }
                });
            }

            return(new JsonResult()
            {
                Data = new { status = status }
            });
        }
        public ActionResult Save(TransactionEditViewModel transEditView)
        {
            //Coloca valor do parâmetro show_errors numa var booleana para uso futuro
            var showErros = true;

            //Cria lista de erros encontrados durante a validação
            List <Error> errors = new List <Error>();

            TransactionApiInputDto inputTransaction;
            var transactionType = new TransactionType();
            var cardBrand       = new CardBrand();
            var card            = new Card();
            var clientInDB      = new Client();

            decimal transAmountInDecimal = 0m;

            //A transação é presumida recusada inicialmente
            var statusCode   = Constantes.scRecusada;
            var statusReason = Constantes.srErroInesperado;

            //Pega todos os Transactiontypes(tipos de transações)
            var transactionTypes = _unitOfWork.TransactionTypes.GetAll();
            //Pega todos os CardBrands(bandeiras de cartões)
            var cardBrands = _unitOfWork.CardBrands.GetAll();

            //Atribuindo os TransactionTypes e os CardBrands a viewmodel caso tenhamos que voltar para a view
            transEditView.TransactionTypes = transactionTypes;
            transEditView.CardBrands       = cardBrands;

            //Se algum erro foi gerado até aqui...
            if (!ModelState.IsValid)
            {
                //Retorna a TransactionEditViewModel para a view TransactionForm(nova transação)
                return(View("TransactionForm", transEditView));
            }

            //Esse teste é executado somente aqui e antes de chamar o validador (não é executado no validador)
            var tempAmount    = transEditView.Amount.Replace(",", "");
            var amountIsDigit = tempAmount.All(char.IsDigit);

            //Verifica se todos os caracteres do campo card_number são números
            if (!amountIsDigit)
            {
                ModelState.AddModelError("", "410 - O valor informado não é válido.");
            }

            if (!ModelState.IsValid)
            {
                //Retorna a TransactionEditViewModel para a view TransactionForm(nova transação)
                return(View("TransactionForm", transEditView));
            }

            var dblAmount = Convert.ToDouble(transEditView.Amount);
            var intAmount = Convert.ToInt32(dblAmount * 100);

            //Move os dados da Edit View para a Dto.
            inputTransaction = new TransactionApiInputDto
            {
                amount           = intAmount,
                card_brand       = transEditView.CardBrandApiName,
                card_holder_name = transEditView.CardHolderName,
                card_number      = transEditView.Number,
                cvv = transEditView.Cvv,
                expiration_month = transEditView.ExpirationMonth,
                expiration_year  = transEditView.ExpirationYear,
                installments     = transEditView.Installments,
                password         = transEditView.Password,
                show_errors      = showErros,
                transaction_type = transEditView.TransactionTypeApiName,
            };

            var validador = new Validador(_unitOfWork, showErros);

            validador.ProcessTransaction(inputTransaction);

            statusCode   = validador.statusCode;
            statusReason = validador.statusReason;

            transAmountInDecimal = validador.transAmountInDecimal;

            transactionType = validador.transactionType;
            cardBrand       = validador.cardBrand;
            card            = validador.card;
            clientInDB      = validador.clientInDB;

            errors = validador.errors;

            // *** FIM DAS VALIDAÇÕES ***

            //Adiciona todos os error do validador ao ModelState
            if (errors.Count > 0)
            {
                foreach (var e in errors)
                {
                    ModelState.AddModelError("", e.error_code + " - " + e.error_message);
                }
            }

            if (!ModelState.IsValid)
            {
                //Retorna a TransactionEditViewModel para a view TransactionForm(nova transação)
                return(View("TransactionForm", transEditView));
            }


            // Validação Terminada com Sucesso \__________________

            var cardNumberFirst = "";
            var cardNumberLast  = "";

            if (!String.IsNullOrEmpty(transEditView.Number))
            {
                cardNumberFirst = transEditView.Number.Substring(1, 4);
                if (transEditView.Number.Length >= 4)
                {
                    cardNumberLast = transEditView.Number.Substring(transEditView.Number.Length - 4, 4);
                }
            }

            //Gera registro da transação(transaction log) solicitada para ser salva na base de dados
            var transactionLog = new TransactionLog
            {
                Amount             = Convert.ToInt32(transAmountInDecimal * 100),
                Card_brand         = card.CardBrand.ApiName,
                Card_holder_name   = transEditView.CardHolderName,
                Card_number_first  = cardNumberFirst,
                Card_number_last   = cardNumberLast,
                Installments       = transEditView.Installments,
                Transaction_type   = transEditView.TransactionTypeApiName,
                Status_code        = statusCode,
                Status_reason      = statusReason,
                Creation_timestamp = DateTime.Now,
                //Errors = null
            };

            //Adiciona registro no log de transações ao banco de dados
            _unitOfWork.TransactionLogs.Add(transactionLog);

            if (errors.Count > 0)
            {
                foreach (var e in errors)
                {
                    var errorLog = new ErrorLog
                    {
                        TransactionLogId = transactionLog.Id,
                        Error_code       = e.error_code,
                        Error_message    = e.error_message
                    };
                    _unitOfWork.ErrorLogs.Add(errorLog);
                }
            }
            ;

            //Criar a transação vinculada ao cartão e coloca a data de criação
            var transaction = new Transaction {
                Amount            = transAmountInDecimal,
                CardId            = card.Id,
                CreationTimestamp = DateTime.Now,
                Installments      = transEditView.Installments,
                TransactionTypeId = transactionType.Id,
                TransactionLogId  = transactionLog.Id
            };

            //Adiciona a transação ao banco de dados
            _unitOfWork.Transactions.Add(transaction);

            //Atualiza o saldo do cliente com o valor da transação.
            clientInDB.Saldo = clientInDB.Saldo - transaction.Amount;

            _unitOfWork.Complete();

            //Retorna a TransactionEditViewModel para a view Index(listagem de transações)
            return(RedirectToAction("Index", new { cardId = transaction.CardId }));
        }
예제 #21
0
 public async Task PutTransaction(TransactionEditViewModel model)
 {
     await _apiTransactionService.Edit(model);
 }
        public void TestTransactionEditViewModelOK()
        {
            ILoggerFactory loggerFactory = new LoggerFactory();

            using (var sqliteMemoryWrapper = new SqliteMemoryWrapper())
            {
                var currencyFactory   = new CurrencyFactory();
                var usdCurrencyEntity = currencyFactory.Create(CurrencyPrefab.Usd, true);
                currencyFactory.Add(sqliteMemoryWrapper.DbContext, usdCurrencyEntity);

                var accountFactory = new AccountFactory();
                Entities.Account incomeAccountEntity   = accountFactory.Create(AccountPrefab.Income, usdCurrencyEntity);
                Entities.Account checkingAccountEntity = accountFactory.Create(AccountPrefab.Checking, usdCurrencyEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, incomeAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, checkingAccountEntity);

                var transactionEntity = new Entities.Transaction
                {
                    CreditAccount = incomeAccountEntity,
                    DebitAccount  = checkingAccountEntity,
                    Amount        = 10m,
                    At            = new DateTime(2018, 1, 1, 9, 0, 0)
                };
                sqliteMemoryWrapper.DbContext.Transactions.Add(transactionEntity);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                var accountService = new AccountService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext);

                var transactionService = new TransactionService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext);

                var mockViewModelFactory = new Mock <IAccountLinkViewModelFactory>();
                mockViewModelFactory
                .Setup(f => f.Create(It.IsAny <AccountLink>()))
                .Returns((AccountLink accountLink) =>
                {
                    return(new AccountLinkViewModel(
                               loggerFactory,
                               accountLink));
                });

                var viewModel = new TransactionEditViewModel(
                    loggerFactory,
                    accountService,
                    transactionService,
                    mockViewModelFactory.Object,
                    transactionEntity.TransactionId
                    );

                viewModel.Amount = 20m;
                viewModel.At     = new DateTime(2018, 1, 1, 9, 25, 0);
                viewModel.OKCommand.Execute(this);

                List <Transaction> transactions = transactionService.GetAll().ToList();

                Assert.AreEqual(1, transactions.Count);
                Assert.AreEqual(transactionEntity.CreditAccount.AccountId, transactions[0].CreditAccount.AccountId);
                Assert.AreEqual(transactionEntity.DebitAccount.AccountId, transactions[0].DebitAccount.AccountId);
                Assert.AreEqual(viewModel.Amount, transactions[0].Amount);
                Assert.AreEqual(viewModel.At, transactions[0].At);
            }
        }