示例#1
0
        private static async Task RateRBA(string Currency, DateTime date)
        {
            IBank       ibank  = BankFactory.GetBank(BankFactory.SupportedBanks.RBA);
            IBankResult result = await ibank.GetRateAsync(Currency, date);

            PrintReSult(Currency, result);
        }
示例#2
0
        public override void OnSaved(object sender, EntityAfterEventArgs e)
        {
            base.OnSaved(sender, e);
            Entity entity = (Entity)sender;
            //UserConnection = entity.UserConnection;

            var    amountFC      = entity.GetTypedColumnValue <decimal>("AmountFC");
            var    date          = entity.GetTypedColumnValue <DateTime>("TransactionDate");
            var    currencyId    = entity.GetTypedColumnValue <Guid>("CurrencyId");
            string shortCurrency = entity.FindValueById <string>("Currency", currencyId, "ShortName");

            IBank       ibank  = BankFactory.GetBank(BankFactory.SupportedBanks.BOC);
            IBankResult result = null;

            Task.Run(async() =>
            {
                result = await ibank.GetRateAsync(shortCurrency, date);
            }).Wait();


            entity.SetColumnValue("FxRate", result.ExchangeRate);
            entity.SetColumnValue("AmountHC", amountFC * result.ExchangeRate);
            entity.Save();
            _log.Info($"rate:{result.ExchangeRate} on {result.RateDate:dd-MMM-yyyy}");
        }
示例#3
0
        public static void SynchronizeAtBankLevelInterlocked()
        {
            var tasks  = new List <Task>();
            var number = new Random();
            var bank   = new BankFactory().Build(BankType.InterlockedBank);

            tasks.Add(Task.Factory.StartNew(() =>
            {
                for (int j = 0; j < 1000; j++)
                {
                    bank.Deposit(1);
                    Console.WriteLine($"Task: {Task.CurrentId} is depositing 1 buck.");
                }
            }));


            tasks.Add(Task.Factory.StartNew(() =>
            {
                for (int j = 0; j < 1000; j++)
                {
                    bank.Withdraw(1);
                    Console.WriteLine($"Task: {Task.CurrentId} is withdrawing 1 buck.");
                }
            }));

            Task.WaitAll(tasks.ToArray());

            Console.WriteLine($"Final balance: {bank.Balance}");
        }
        public async Task RBA_GetRateAsyncShoudReturn()
        {
            DateTime date = new DateTime(2018, 1, 17);

            #region Arrange
            IBankResult expected = new BankResult()
            {
                BankName     = "Reserve Bank of Australia",
                HomeCurrency = "AUD",
                ExchangeRate = 1.2571M,
                RateDate     = date
            };
            #endregion

            #region Act
            IBank       ibank  = BankFactory.GetBank(BankFactory.SupportedBanks.RBA);
            IBankResult actual = await ibank.GetRateAsync("USD", date);

            #endregion

            #region Assert
            //Assert.Equal(expected, actual);
            Assert.Equal(expected.RateDate, actual.RateDate);
            Assert.Equal(expected.ExchangeRate, actual.ExchangeRate);
            Assert.Equal(expected.BankName, actual.BankName);
            Assert.Equal(expected.HomeCurrency, actual.HomeCurrency);
            #endregion
        }
示例#5
0
        public IActionResult Edit(int id,
                                  [Bind("AccountNumber,AccountType,EmailAddress")] Account account)
        {
            if (id != account.AccountNumber)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    BankFactory.EditAccount(account);
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (BankFactory.AccountExists(account.AccountNumber))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(account));
        }
示例#6
0
        public async Task BOC_GetRateAsyncShoudReturn(decimal expectedExchangeRate,
                                                      DateTime requestedRateDate, DateTime expectedRateDate, string currency)
        {
            #region Arrange
            IBankResult expected = new BankResult()
            {
                BankName     = "Bank of Canada",
                HomeCurrency = "CAD",
                ExchangeRate = expectedExchangeRate,
                RateDate     = expectedRateDate
            };
            IBank ibank = BankFactory.GetBank(BankFactory.SupportedBanks.BOC);
            #endregion

            #region Act
            IBankResult actual = await ibank.GetRateAsync(currency, requestedRateDate);

            #endregion

            #region Assert
            //Assert.Equal(expected, actual);
            Assert.Equal(expected.RateDate, actual.RateDate);
            Assert.Equal(expected.ExchangeRate, actual.ExchangeRate);
            Assert.Equal(expected.BankName, actual.BankName);
            Assert.Equal(expected.HomeCurrency, actual.HomeCurrency);

            #endregion
        }
示例#7
0
        private static async Task RateBOMX(string Currency, DateTime date)
        {
            IBank       ibank  = BankFactory.GetBank(BankFactory.SupportedBanks.BOMX, Resources.bmxSecret);
            IBankResult result = await ibank.GetRateAsync(Currency, date);

            PrintReSult(Currency, result);
        }
示例#8
0
        private static async Task RateBOE(string Currency, DateTime date)
        {
            IBank       ibank  = BankFactory.GetBank(BankFactory.SupportedBanks.BOE);
            IBankResult result = await ibank.GetRateAsync(Currency, date);

            result.ExchangeRate = Decimal.Round((1 / result.ExchangeRate), 4);
            PrintReSult(Currency, result);
        }
示例#9
0
        private static void SynchronizeAtTaskLevelSpinLock()
        {
            var tasks  = new List <Task>();
            var number = new Random();
            var bank   = new BankFactory().Build(BankType.Unsafe); // <== !

            var spinLock = new SpinLock();

            tasks.Add(Task.Factory.StartNew(() =>
            {
                for (int j = 0; j < 1000; j++)
                {
                    bool lockTaken = false;
                    try
                    {
                        spinLock.Enter(ref lockTaken);
                        bank.Deposit(1);
                    }
                    finally
                    {
                        if (lockTaken)
                        {
                            spinLock.Exit();
                        }
                    }

                    Thread.Sleep(number.Next(100));
                    Console.WriteLine($"Task: {Task.CurrentId} is depositing 1 buck.");
                }
            }));

            tasks.Add(Task.Factory.StartNew(() =>
            {
                for (int j = 0; j < 1000; j++)
                {
                    bool lockTaken = false;
                    try
                    {
                        spinLock.Enter(ref lockTaken);
                        bank.Withdraw(1);
                    }
                    finally
                    {
                        if (lockTaken)
                        {
                            spinLock.Exit();
                        }
                    }

                    Thread.Sleep(number.Next(100));
                    Console.WriteLine($"Task: {Task.CurrentId} is withdrawing 1 buck.");
                }
            }));

            Task.WaitAll(tasks.ToArray());

            Console.WriteLine($"Final balance: {bank.Balance}");
        }
示例#10
0
 public IActionResult Create
     ([Bind("AccountType,EmailAddress")] Account account)
 {
     if (ModelState.IsValid)
     {
         BankFactory.CreateAccount(account.EmailAddress, account.AccountType);
         return(RedirectToAction(nameof(Index)));
     }
     return(View(account));
 }
示例#11
0
        public async Task AddBankWithoutNameShouldGiveError()
        {
            var repo = await GetRepository <Bank>();

            var         bank = new BankFactory().WithName().Build();
            Func <Task> add  = async() => {
                await repo.AddAsync(bank, default);
            };

            add.Should().Throw <ValidationException>();
        }
示例#12
0
        public void CreatingBankWithSameNameGetsSameBank()
        {
            _bank.CreateAccount(1);
            _bank.CreateAccount(2);
            var accounts = _bank.GetAccounts();

            Assert.AreEqual(2, accounts.Count);
            var bankDuplicate = BankFactory.GetBank("DNB");

            accounts = bankDuplicate.GetAccounts();
            Assert.AreEqual(2, accounts.Count);
        }
示例#13
0
        private IPaymentGatewayService GetGatewayService(Card card)
        {
            IPaymentGatewayService PaymentGatewayService = null;
            string       cardbranc = card.CardBrand;
            CardTypeEnum cardType  = (CardTypeEnum)card.CardType;

            if (cardType == CardTypeEnum.Credit)
            {
                PaymentGatewayService = BankFactory.GetPaymentGateway(BankFactory.BANCO_X);
            }
            return(PaymentGatewayService);
        }
示例#14
0
        DV_10132020_EN_INTERFACES.BankResult IForeignExchangeApi.GetEcbRate(string currency, DateTime date)
        {
            var         ECB       = BankFactory.GetBank(BankFactory.SupportedBanks.ECB);
            IBankResult EcbResult = ECB.GetRateAsync(currency, date).Result;

            DV_10132020_EN_INTERFACES.BankResult result = new DV_10132020_EN_INTERFACES.BankResult();

            result.BankName     = EcbResult.BankName;
            result.ExchangeRate = EcbResult.ExchangeRate;
            result.RateDate     = EcbResult.RateDate;
            result.HomeCurrency = EcbResult.HomeCurrency;
            return(result);
        }
示例#15
0
        public DV_10132020_EN_INTERFACES.BankResult GetBOCRate(string currency, DateTime date)
        {
            var         BOC       = BankFactory.GetBank(BankFactory.SupportedBanks.BOC);
            IBankResult BocResult = BOC.GetRateAsync(currency, date).Result;

            DV_10132020_EN_INTERFACES.BankResult result = new DV_10132020_EN_INTERFACES.BankResult();

            result.BankName     = BocResult.BankName;
            result.ExchangeRate = BocResult.ExchangeRate;
            result.RateDate     = BocResult.RateDate;
            result.HomeCurrency = BocResult.HomeCurrency;
            return(result);
        }
示例#16
0
        // GET: Accounts/Edit/5
        public IActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var account = BankFactory.GetAccountDetails(id.Value);

            if (account == null)
            {
                return(NotFound());
            }
            return(View(account));
        }
示例#17
0
        public BankResult Validate(PrevalidateExpenseReportLineDataContract request)
        {
            //Call: [APP]/0/rest/PrevalidateExpenseReportLine/Validate
            userConnection = UserConnection ?? SystemUserConnection;

            IBank      Bank          = BankFactory.GetBank(BankFactory.SupportedBanks.BOC);
            BankResult result        = new BankResult();
            string     shortCurrency = FindValueById <string>("Currency", request.CurrencyId, "ShortName");

            System.Threading.Tasks.Task.Run(async() =>
            {
                IBankResult response = await Bank.GetRateAsync(shortCurrency, request.TransactionDate);
                result = (BankResult)response;
            }).Wait();
            return(result);
        }
示例#18
0
        public async Task GetBankShouldIncludeAccountsByDefault()
        {
            var repo = await GetRepository <Bank>();

            var bank      = new BankFactory().WithName("Test Bank").Build();
            var addedBank = await repo.AddAsync(bank, default);

            var acc = new AccountFactory().WithDefaultValues().Build();

            addedBank.AddAccount(acc);
            await repo.UpdateAsync(bank, default);

            var rBank = await repo.GetByIdAsync(addedBank.Id, default);

            rBank.Accounts.Should().NotBeEmpty();
        }
示例#19
0
        static void Main(string[] args)
        {
            string testDataFolderPath = @"C:\ProjectsRepos\CsvProcessor\CsvProcessorClient\TestData\";

            // initialise writer classes
            CsvHelper <Account>     csvAccount     = new CsvHelper <Account>(testDataFolderPath + AccountFactory.FileName);
            CsvHelper <Bank>        csvBank        = new CsvHelper <Bank>(testDataFolderPath + BankFactory.FileName);
            CsvHelper <Transaction> csvTransaction = new CsvHelper <Transaction>(testDataFolderPath + TransactionFactory.FileName);

            // test the save functionality

            csvAccount.WriteToFile(AccountFactory.GetAccounts());

            csvBank.WriteToFile(BankFactory.GetBanks());

            csvTransaction.WriteToFile(TransactionFactory.GetTransactions());


            // test the read functionality

            List <Account> csvReadAccounts = csvAccount.ReadFromFile().ToList();

            Console.WriteLine("Accounts");
            foreach (Account acc in csvReadAccounts)
            {
                Console.WriteLine(acc.ConvertToCsv());
            }

            List <Bank> csvReadBank = csvBank.ReadFromFile().ToList();

            Console.WriteLine("Banks");
            foreach (Bank bank in csvReadBank)
            {
                Console.WriteLine(bank.ConvertToCsv());
            }

            List <Transaction> csvReadTransaction = csvTransaction.ReadFromFile().ToList();

            Console.WriteLine("Transactions");
            foreach (Transaction tran in csvReadTransaction)
            {
                Console.WriteLine(tran.ConvertToCsv());
            }

            Console.ReadLine();
        }
        public override void OnSaved(object sender, EntityAfterEventArgs e)
        {
            base.OnSaved(sender, e);
            Entity entity = (Entity)sender;

            userConnection = entity.UserConnection;

            string[] ObservableColumns   = { "AmountHC", "AmountFC", "Currency" };
            bool     isChangeInteresting = false;

            foreach (EntityColumnValue mc in e.ModifiedColumnValues)
            {
                if (Array.IndexOf(ObservableColumns, mc.Column.Name) > -1)
                {
                    isChangeInteresting = true;
                }
            }

            if (!isChangeInteresting)
            {
                return;
            }


            Guid   currencyId   = entity.GetTypedColumnValue <Guid>("CurrencyId");
            string currencyName = GetCurrencyName(currencyId);

            IBank       bank       = BankFactory.GetBank(BankFactory.SupportedBanks.BOC);
            IBankResult bankResult = Task.Run(() => bank.GetRateAsync(currencyName, DateTime.Today)).Result;

            decimal rate = bankResult.ExchangeRate;

            decimal amountFC = entity.GetTypedColumnValue <decimal>("AmountFC");
            decimal amountHC = rate * amountFC;

            entity.SetColumnValue("AmountHC", amountHC);
            entity.Save();

            Guid expenseReportId = entity.GetTypedColumnValue <Guid>("ExpenseReportId");

            UpdateExpenseReport(entity.UserConnection, expenseReportId);

            MsgChannelUtilities.PostMessage(userConnection, GetType().Name, "UpdatedExpenseReportLine");
        }
        public async void AddAccountUsingBankShouldNotTrow()
        {
            var bank     = new BankFactory().WithName("Test Name Bank").Build();
            var repoBank = await GetRepository <Bank>();

            bank = await repoBank.AddAsync(bank, default);

            var acc = new AccountFactory().WithName("Check account").WithNumber("910-5").Build();

            bank.AddAccount(acc);
            Func <Task> update = async() => {
                await repoBank.UpdateAsync(bank, default);
            };

            update.Should().NotThrow();
            acc.Bank.Should().Be(bank);
            acc.BankId.Should().Be(bank.Id);
            acc.Bank.Name.Should().Be(bank.Name);
        }
示例#22
0
        public void BOC_ShoudThrowDate()
        {
            #region Arrange
            DateTime date            = new DateTime(2017, 1, 2);
            string   expectedMessage = @"Date must be greater than 03-Jan-2017 (Parameter 'date')";
            #endregion

            #region Act
            IBank ibank = BankFactory.GetBank(BankFactory.SupportedBanks.BOC);
            #endregion

            #region Assert
            var exception = Record.ExceptionAsync(
                async() => await ibank.GetRateAsync("USD", date));
            exception.Wait();

            Assert.IsType <ArgumentOutOfRangeException>(exception.Result);
            Assert.Equal("date", ((ArgumentException)exception.Result).ParamName);
            Assert.Equal(exception.Result.Message, expectedMessage);
            #endregion
        }
        public async Task CBR_ShoudThrowDate()
        {
            #region Arrange
            DateTime date            = new DateTime(1992, 6, 1);
            string   expectedMessage = @"Date must be greater than 03-Jan-2017 (Parameter 'date')";
            IBank    ibank           = BankFactory.GetBank(BankFactory.SupportedBanks.BOC);
            #endregion

            #region Act
            var exception = Record.ExceptionAsync(
                async() => await ibank.GetRateAsync("USD", date));
            exception.Wait();
            #endregion

            #region Assert
            Assert.Equal(expectedMessage, exception.Result.Message);
            Assert.IsType <ArgumentOutOfRangeException>(exception.Result);
            await Assert.ThrowsAsync <ArgumentOutOfRangeException>(
                async() => await ibank.GetRateAsync("USD", date));

            #endregion
        }
        public async Task CBR_ShoudThrowCurrency()
        {
            #region Arrange
            DateTime date            = new DateTime(2020, 1, 8);
            string   expectedMessage = $"Central bank of the Russian Federation does not support XXX";
            IBank    ibank           = BankFactory.GetBank(BankFactory.SupportedBanks.CBR);
            #endregion

            #region Act
            var exception = Record.ExceptionAsync(
                async() => await ibank.GetRateAsync("XXX", date));
            exception.Wait();
            #endregion

            #region Assert
            Assert.Equal(expectedMessage, exception.Result.Message);
            Assert.IsType <NotImplementedException>(exception.Result);
            await Assert.ThrowsAsync <NotImplementedException>(
                async() => await ibank.GetRateAsync("XXX", date));

            #endregion
        }
示例#25
0
        public async Task RBA_ShoudThrowDate()
        {
            #region Arrange
            DateTime date            = new DateTime(2017, 1, 8);
            string   expectedMessage = @"Date must be greater than 01-Jan-2018";
            #endregion

            #region Act
            IBank ibank = BankFactory.GetBank(BankFactory.SupportedBanks.RBA);
            #endregion

            #region Assert
            var exception = Record.ExceptionAsync(
                async() => await ibank.GetRateAsync("KRW", date));
            exception.Wait();

            Assert.Equal(exception.Result.Message, expectedMessage);
            Assert.IsType <NotImplementedException>(exception.Result);
            await Assert.ThrowsAsync <NotImplementedException>(
                async() => await ibank.GetRateAsync("KRW", date));

            #endregion
        }
示例#26
0
 public void Initialize()
 {
     _bazaar = new Bazaar();
     _bank   = BankFactory.GetBank("DnB");
 }
示例#27
0
 public void SetUp()
 {
     _bank = BankFactory.GetBank("DNB");
 }
 public void Setup()
 {
     factory = new BankFactory();
 }
示例#29
0
 public IActionResult DeleteConfirmed(int id)
 {
     BankFactory.DeleteAccount(id);
     return(RedirectToAction(nameof(Index)));
 }
示例#30
0
 // GET: Accounts
 public IActionResult Index()
 {
     return(View(BankFactory.GetAllAccounts(HttpContext.User.Identity.Name)));
 }