private async Task createWelcomeTransaction(string accountId)
        {
            var amount             = 500;
            var explanation        = "Gift from us to get started";
            var senderAccountId    = "systemAccount";
            var welcomeTransaction = TransactionFactory.CreateTransaction(Guid.NewGuid().ToString(), amount,
                                                                          explanation, senderAccountId,
                                                                          accountId, DateTime.Now);
            await transations.AddObject(welcomeTransaction);

            var senderObject = await repository.GetObject(senderAccountId);

            senderObject.Data.Balance = senderObject.Data.Balance - amount;
            await repository.UpdateObject(senderObject);

            await generateTransactionNotification(welcomeTransaction);
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Create([Bind(properties)] TransactionView model)
        {
            bool receiverExists = await checkIfReceiverAccountExists(model.ReceiverAccountId);

            if (receiverExists)
            {
                var receiverObject = await accounts.GetObject(model.ReceiverAccountId);

                var senderObject = await accounts.GetObject(model.SenderAccountId);

                bool senderIsOk =
                    validateSender(senderObject,
                                   model.Amount);                                            //check if has enough balance and active card
                bool receiverIsOk = validateReceiverAndSender(receiverObject, senderObject); //c

                if (senderIsOk && receiverIsOk)
                {
                    //receiverBalance
                    receiverObject.Data.Balance = receiverObject.Data.Balance + model.Amount;

                    //senderBalance
                    senderObject.Data.Balance = senderObject.Data.Balance - model.Amount;

                    //Transaction
                    model.ID = Guid.NewGuid().ToString();
                    var transaction = TransactionFactory.CreateTransaction(model.ID, model.Amount,
                                                                           model.Explanation, model.SenderAccountId, model.ReceiverAccountId,
                                                                           DateTime.Now, model.ValidTo);

                    await accounts.UpdateObject(senderObject);

                    await accounts.UpdateObject(receiverObject);

                    await transactions.AddObject(transaction);
                    await generateTransactionNotification(transaction);

                    TempData["Status"] =
                        "Transaction successfully done to " + model.ReceiverAccountId + " from " +
                        model.SenderAccountId +
                        " in the amount of " + model.Amount + ". ";

                    await confirmIfTransactionWasRequested(transaction);
                }
            }
            return(RedirectToAction("Index", new { id = model.SenderAccountId }));
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> Create([Bind(properties)] InsuranceView model)
        {
            //if (!ModelState.IsValid) return View(model);
            var accountObject = await accounts.GetObject(model.AccountId);

            bool isAccountOk       = checkIfHasEnoughPaymentMoney(accountObject, model.Payment);
            bool isInsuranceDataOk = checkIfIsntInPast(model.ValidFrom, model.ValidTo);

            if (isAccountOk && isInsuranceDataOk)
            {
                model.ID = Guid.NewGuid().ToString();
                var insurance = InsuranceViewFactory.Create(model);
                insurance.Data.Payment   = model.Payment;
                insurance.Data.Type      = model.Type;
                insurance.Data.ValidFrom = model.ValidFrom ?? DateTime.MinValue;
                insurance.Data.ValidTo   = model.ValidTo ?? DateTime.MaxValue;
                insurance.Data.AccountId = model.AccountId;
                insurance.Data.Status    = Status.Active.ToString();

                accountObject.Data.Balance = accountObject.Data.Balance - model.Payment;

                var transaction = TransactionFactory.CreateTransaction(model.ID, model.Payment,
                                                                       model.Type + " insurance", "systemAccount", model.AccountId,
                                                                       model.ValidFrom, model.ValidTo);

                await insurances.AddObject(insurance);

                await accounts.UpdateObject(accountObject);
                await generateInsuranceNotification(insurance);

                await transactions.AddObject(transaction);

                TempData["Status"] =
                    insurance.Data.Type + " insurance is now valid from " + insurance.Data.ValidFrom.ToString("dd/M/yyyy", CultureInfo.InvariantCulture) + " to "
                    + insurance.Data.ValidTo.ToString("dd/M/yyyy", CultureInfo.InvariantCulture) + " in payment of " + insurance.Data.Payment;
            }

            return(RedirectToAction("Index"));
        }