示例#1
0
        public async Task MakeTransfer(TransferInputModel inputModel, string userId)
        {
            var outWarehouseId = inputModel.OutWarehouseId;
            var inWarehouseId  = inputModel.InWarehouseId;
            var transferGoods  = inputModel.TransferGoods;

            //    foreach (var goods in transferGoods)
            //    {
            //        var outGoodsToChange = this.goodsRepository.All().FirstOrDefault(x => x.Id == goods.Id);

            //        if (outGoodsToChange != null)
            //        {
            //            outGoodsToChange.Quantity -= goods.Quantity;
            //            outGoodsToChange.WarehouseId = outWarehouseId;
            //            this.goodsRepository.Update(outGoodsToChange);
            //        }

            //        var inGoods = new Good
            //        {
            //            SKU = goods.SKU,
            //            Name = goods.Name,
            //            Barcode = goods.Barcode,
            //            MeasureId = goods.MeasureId,
            //            DeliveryPrice = goods.DeliveryPrice,
            //            SalePrice = goods.SalePrice,
            //            Quantity = goods.Quantity,
            //            WarehouseId = inWarehouseId,
            //        };
            //        await this.goodsRepository.AddAsync(inGoods);
            //        await this.goodsRepository.SaveChangesAsync();
            //    }

            //    var transfer = new Transfer
            //    {
            //        Date = inputModel.Date,
            //        InWarehouseId = inWarehouseId,
            //        OutWarehouseId = outWarehouseId,
            //        Number = 0,
            //        TransferGoods = transferGoods,
            //        UserId = userId,
            //    };
            //    await this.transfersRepository.AddAsync(transfer);
            //    await this.transfersRepository.SaveChangesAsync();
        }
示例#2
0
        public void When_Accumulated_Between_0_And_100000_Should_Be_False(double transferAmount)
        {
            var transferInput = new TransferInputModel {
                transfer_amount        = transferAmount,
                destination_account_id = "7581233661",
                destination_bank       = "KBANK",
                destination_bank_area  = "BKK01",
                origin_account_id      = "6320445476",
                origin_account_balance = 50000,
                origin_bank            = "KBANK",
                origin_bank_area       = "BKK01",
                origin_account_daily_accumulated_transfer = 95000
            };

            TransferService     transferService = new TransferService();
            TransferOutputModel actualResult    = transferService.TransferMoney(transferInput);

            Assert.Equal("400-03", actualResult.header.code);
        }
示例#3
0
        public void When_TransferAmount_With_Fee_More_Than_Account_Balance_Should_Be_Cant_Transfer()
        {
            var transferInput = new TransferInputModel {
                transfer_amount        = 5000,
                destination_account_id = "7581233661",
                destination_bank       = "SCB",
                destination_bank_area  = "",
                origin_account_id      = "6320445476",
                origin_account_balance = 5000,
                origin_bank            = "KBANK",
                origin_bank_area       = "BKK01",
                origin_account_daily_accumulated_transfer = 0
            };

            TransferService     transferService = new TransferService();
            TransferOutputModel actualResult    = transferService.TransferMoney(transferInput);

            Assert.Equal("400-04", actualResult.header.code);
        }
示例#4
0
        public void When_TransferAmount_Difference_Bank__Should_Be_Fee_35THB()
        {
            var transferInput = new TransferInputModel {
                transfer_amount        = 100,
                destination_account_id = "7581233661",
                destination_bank       = "SCB",
                destination_bank_area  = "",
                origin_account_id      = "6320445476",
                origin_account_balance = 50000,
                origin_bank            = "KBANK",
                origin_bank_area       = "BKK01",
                origin_account_daily_accumulated_transfer = 0
            };

            TransferService     transferService = new TransferService();
            TransferOutputModel actualResult    = transferService.TransferMoney(transferInput);

            Assert.Equal("200", actualResult.header.code);
            Assert.Equal("35", actualResult.body.fee_amount);
        }
示例#5
0
        public void When_TransferAmount_Between_1_And_20000_Should_Be_Can_Transfer(double transferAmount)
        {
            var transferInput = new TransferInputModel {
                transfer_amount        = transferAmount,
                destination_account_id = "7581233661",
                destination_bank       = "KBANK",
                destination_bank_area  = "BKK01",
                origin_account_id      = "6320445476",
                origin_account_balance = 50000,
                origin_bank            = "KBANK",
                origin_bank_area       = "BKK01",
                origin_account_daily_accumulated_transfer = 0
            };

            TransferService     transferService = new TransferService();
            TransferOutputModel actualResult    = transferService.TransferMoney(transferInput);

            Assert.Equal("200", actualResult.header.code);
            Assert.Equal(transferAmount.ToString(), actualResult.body.transfer_amount);
        }
示例#6
0
        public JsonResult Post([FromBody] TransferInputModel transferDataInput)
        {
            var transferResult = _service.TransferMoney(transferDataInput);

            return(Json(transferResult));
        }
示例#7
0
        public async ValueTask <ActionResult <List <TransactionEntityOutputModel> > > TransferTransactionInsert(TransferInputModel transferInputModel)
        {
            string URItransfer            = $"api/transaction/transfer";
            string URIgetSenderBalance    = $"api/transaction/balance/{transferInputModel.SenderAccount.Id}";
            string URIgetRecipientAccount = $"api/transaction/balance/{transferInputModel.RecipientAccount.Id}";
            var    senderAccount          = await _accountRepository.GetAccountById(transferInputModel.SenderAccount.Id);

            var recipientAccount = await _accountRepository.GetAccountById(transferInputModel.RecipientAccount.Id);

            if (!senderAccount.IsOkay && recipientAccount.IsOkay)
            {
                var message = "";
                if (!senderAccount.IsOkay)
                {
                    message = $"Transaction failed {senderAccount.ExMessage}";
                }
                if (!recipientAccount.IsOkay)
                {
                    message += $"Transaction failed {recipientAccount.ExMessage}";
                }
                return(Problem(message, statusCode: 520));
            }
            if (senderAccount.RequestData == null)
            {
                return(NotFound($"SenderAccountId: {transferInputModel.SenderAccount.Id} not found"));
            }
            if (recipientAccount.RequestData == null)
            {
                return(NotFound($"RecipientAccountId: {transferInputModel.RecipientAccount.Id} not found"));
            }

            var senderBalance = await RequestSender.SendRequest <AccountBalanceOutputModel>(_urlOptions.Value.TransactionStoreApiUrl, URIgetSenderBalance, Method.GET);

            if (senderBalance == null)
            {
                return(Problem($"Request failed:", statusCode: 520));
            }
            transferInputModel.SenderTimeStamp = senderBalance.Data.TimeStamp;
            if (senderBalance.Data.Balance < transferInputModel.Amount)
            {
                return(BadRequest($"Not enough funds to complete the transaction"));
            }

            var recipientBalance = await RequestSender.SendRequest <AccountBalanceOutputModel>(_urlOptions.Value.TransactionStoreApiUrl, URIgetRecipientAccount, Method.GET);

            if (recipientBalance == null)
            {
                return(Problem($"Request failed:", statusCode: 520));
            }
            transferInputModel.RecipientTimeStamp = recipientBalance.Data.TimeStamp;

            var result = await RequestSender.SendRequest <List <TransactionEntityOutputModel> >(_urlOptions.Value.TransactionStoreApiUrl, URItransfer, Method.POST, transferInputModel);

            if (result.StatusCode != System.Net.HttpStatusCode.OK)
            {
                return(Problem($"Transaction failed: {result.Content}", statusCode: (int)result.StatusCode));
            }
            return(result.Data);
        }
示例#8
0
        public async ValueTask <ActionResult <TransactionEntityOutputModel> > Transfer(TransferInputModel inputModel)
        {
            if (inputModel.SenderTimeStamp == null && inputModel.RecipientTimeStamp == null)
            {
                return(BadRequest("TimeStamp should not be null!"));
            }
            if (inputModel.RecipientAccount.Id < 1 || inputModel.SenderAccount.Id < 1)
            {
                return(BadRequest("Incorrect AccountId"));
            }
            if (inputModel.Amount < 0)
            {
                return(BadRequest("Deposit amount must be more than zero!"));
            }
            var dataModels = _mapper.Map <TransferEntities>(inputModel);
            var result     = await _transactionRepository.Transfer(dataModels);

            if (result.IsOkay)
            {
                return(Ok(_mapper.Map <List <TransactionEntityOutputModel> >(result.RequestData)));
            }
            if (result.exMessage == "A timestamp constraint violation occurred.")
            {
                return(Conflict($"Transaction failed: {result.exMessage}"));
            }
            return(Problem($"Transaction failed {result.exMessage}", statusCode: 520));
        }
示例#9
0
        public async ValueTask <ActionResult <List <long> > > CreateTransferTransaction([FromBody] TransferInputModel transactionModel)
        {
            var checkingAccountId = await _repo.GetAccountById(transactionModel.AccountId);

            if (checkingAccountId.Data is null)
            {
                return(BadRequest("The account is not found"));
            }
            var checkingAccountIdReceiver = await _repo.GetAccountById(transactionModel.AccountIdReceiver);

            if (checkingAccountIdReceiver.Data is null)
            {
                return(BadRequest("The account of receiver is not found"));
            }
            if (transactionModel.Amount <= 0)
            {
                return(BadRequest("The amount is missing"));
            }
            var currencyId = await _repo.GetCurrencyByAccountId(transactionModel.AccountId);

            transactionModel.CurrencyId = currencyId.Data;
            var receiver = await _repo.GetCurrencyByAccountId(transactionModel.AccountIdReceiver);

            transactionModel.ReceiverCurrencyId = receiver.Data;
            var restRequest = new RestRequest("transaction/transfer", Method.POST, DataFormat.Json);

            restRequest.AddJsonBody(transactionModel);
            var result = await _restClient.ExecuteAsync <List <long> >(restRequest);

            string code = Convert.ToString((CurrenciesCode)transactionModel.CurrencyId.Value);

            _logger.Info($"Create new TransferTransaction from Account {transactionModel.AccountId} to Account {transactionModel.AccountIdReceiver}: " +
                         $"{transactionModel.Amount} {code}");
            return(MakeResponse(result));
        }
示例#10
0
        public async ValueTask <ActionResult <List <long> > > CreateTransferTransaction([FromBody] TransferInputModel transactionModel)
        {
            if (await _repo.GetById(transactionModel.AccountId) is null)
            {
                return(BadRequest("The account is not found"));
            }
            if (transactionModel.CurrencyId <= 0)
            {
                return(BadRequest("The currency is missing"));
            }
            string badRequest = await FormBadRequest(transactionModel.Amount, transactionModel.AccountId);

            if (!string.IsNullOrWhiteSpace(badRequest))
            {
                return(Problem("Not enough money on the account", statusCode: 418));
            }
            var transfer    = _mapper.Map <TransferTransactionDto>(transactionModel);
            var dataWrapper = await _repo.AddTransfer(transfer);

            _logger.Info($"Create Transfer Transaction with Amount = {transfer.Amount} {transfer.Currency} from AccountId [{transfer.AccountId}] for AccountId [{transfer.AccountIdReceiver}]");
            return(MakeResponse(dataWrapper));
        }