public string Add(SaveCurrencyExchangeData model)
        {
            string message;

            if (_queries.GetCurrencyExchanges().Any(c => c.Brand.Id == model.BrandId && c.IsBaseCurrency && c.Brand.BaseCurrencyCode == model.Currency))
            {
                throw new RegoException("Base currency can't set as Currency To");
            }

            if (_queries.GetCurrencyExchanges().Any(c => c.BrandId == model.BrandId && !c.IsBaseCurrency && c.CurrencyToCode == model.Currency))
            {
                throw new RegoException("Currency Exchange Rate already exists");
            }

            using (var scope = CustomTransactionScope.GetTransactionScope())
            {
                var currencyExchange = new CurrencyExchange
                {
                    BrandId        = model.BrandId,
                    CurrencyToCode = model.Currency,
                    CurrentRate    = model.CurrentRate,
                    CreatedBy      = _actorInfoProvider.Actor.UserName,
                    DateCreated    = DateTimeOffset.UtcNow,
                };

                _paymentRepository.CurrencyExchanges.Add(currencyExchange);
                _paymentRepository.SaveChanges();

                scope.Complete();

                message = "app:currencies.created";
            }

            return(message);
        }
Пример #2
0
        public async Task UpdateExchangeRatesAsync()
        {
            if (await _currencyExchangeRepository.ExistsAsync(exchange => exchange.Created.Date == DateTime.Now.Date))
            {
                return;
            }

            var client = _clientFactory.CreateClient();

            var currencies = await _currencyRepository.GetAllAsync();

            var urlBuilder = new UriBuilder(_configuration.GetSection("openExchangeRates")["Url"]);
            var query      = HttpUtility.ParseQueryString(urlBuilder.Query);

            query["app_id"]  = _configuration.GetSection("openExchangeRates")["AppId"];
            query["base"]    = currencies.First().CurrencySymbol;
            query["symbols"] = string.Join(",", currencies.Select(currency => currency.CurrencySymbol));
            urlBuilder.Query = query.ToString();
            var url = urlBuilder.ToString();

            var response = await client.GetAsync(url);

            var responseObject = JsonConvert.DeserializeObject <Response>(await response.Content.ReadAsStringAsync());

            var systemUser = await _userRepository.GetFirstAsync(user => user.Username == "system");

            if (systemUser == null)
            {
                throw new ServerFailException("System user not exist");
            }


            var exchangeRates = new List <CurrencyRate>();

            foreach (var key in responseObject.Rates.Keys)
            {
                var currency = currencies.FirstOrDefault(c =>
                                                         c.CurrencySymbol.Equals(key, StringComparison.InvariantCultureIgnoreCase));

                if (currency == null)
                {
                    continue;
                }

                exchangeRates.Add(new CurrencyRate
                {
                    CreatedBy = systemUser.Id,
                    Currency  = currency,
                    Rate      = responseObject.Rates[key]
                });
            }

            var exchangeRate = new CurrencyExchange
            {
                CreatedBy     = systemUser.Id,
                CurrencyRates = exchangeRates
            };

            await _currencyExchangeRepository.InsertAsync(exchangeRate);
        }
Пример #3
0
        public ServiceEventArgs <CurrencyExchange> Invoke()
        {
            var newCurrencyExchange = new CurrencyExchange()
            {
                ContributedCurrency = ContributedCurrency,
                TargetCurrency      = TargetCurrency,
                DateId = _kernel.Get <UnitOfWork>().Dates.GetList().Last().DateId,
                Rate   = Rate
            };
            var newCurrencyExchangeReversed = new CurrencyExchange()
            {
                ContributedCurrency = TargetCurrency,
                TargetCurrency      = ContributedCurrency,
                DateId = _kernel.Get <UnitOfWork>().Dates.GetList().Last().DateId,
                Rate   = decimal.Round(1 / Rate, 4)
            };

            _kernel.Get <UnitOfWork>().CurrencyExchanges.Create(newCurrencyExchange);
            _kernel.Get <UnitOfWork>().CurrencyExchanges.Create(newCurrencyExchangeReversed);
            _kernel.Get <UnitOfWork>().Save();
            return(new ServiceEventArgs <CurrencyExchange>()
            {
                Status = true,
                Message = "Successful.",
                Result = new List <CurrencyExchange>()
                {
                    newCurrencyExchange, newCurrencyExchangeReversed
                }
            });
        }
Пример #4
0
        public async Task <IActionResult> Edit(int id, [Bind("id,currency_id,purchase_value,sale_value,assigned_time")] CurrencyExchange currencyExchange)
        {
            if (id != currencyExchange.id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    await _currenncyExchangeService.Update(currencyExchange);
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!CurrencyExchangeExists(currencyExchange.id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(currencyExchange));
        }
Пример #5
0
        public void ValidateDifferentFromAndTo()
        {
            var penCurrency = new Currency()
            {
                Code = "PEN", Name = ""
            };
            var usdCurrency = new Currency()
            {
                Code = "USD", Name = ""
            };
            var rate             = (decimal)2.62;
            var currencyExchange = new CurrencyExchange()
            {
                ToCurrency   = usdCurrency,
                FromCurrency = usdCurrency,
                Rate         = rate
            };


            var amount = 100;

            repoMock.Setup(x => x.Find("PEN", "USD")).Returns(currencyExchange);

            var result = service.CalculateChangeExchange("PEN", "USD", amount);

            Assert.AreEqual(0, currencyRepoMock.Invocations.Count);
            Assert.AreEqual(amount * rate, result.ConvertResult);
        }
        public override double CalculatePrice(int reductionCode, string policyName, int listPrice, int numberOfTickets, CurrencyExchange.Contract.Currencies? currency)
        {
            LoggingManager.Logger.Log(LoggingCategory.Info, "VIP Pricing");

            // Just call the base and give another 10% discount
            return 0.9 * base.CalculatePrice(reductionCode,policyName,listPrice,numberOfTickets,currency);
        }
Пример #7
0
        public ActionResult DeleteConfirmed(int id)
        {
            CurrencyExchange currencyexchange = db.CurrencyExchanges.Find(id);

            db.CurrencyExchanges.Remove(currencyexchange);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Пример #8
0
 public async Task <IActionResult> Create([Bind("id,currency_id,purchase_value,sale_value,assigned_time")] CurrencyExchange currencyExchange)
 {
     if (ModelState.IsValid)
     {
         await _currenncyExchangeService.AddAndSave(currencyExchange);
     }
     return(View(currencyExchange));
 }
Пример #9
0
        public void TestCurrencyExchange_Constructor_CurrenciesNull_Exception()
        {
            //arrange
            List <string> currencies = null;

            //act, assert
            Assert.ThrowsException <ArgumentException>(() => { CurrencyExchange exchange = new CurrencyExchange(currencies); });
        }
Пример #10
0
 public ActionResult Edit(CurrencyExchange currencyexchange)
 {
     if (ModelState.IsValid)
     {
         db.Entry(currencyexchange).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(currencyexchange));
 }
Пример #11
0
        //
        // GET: /CurrencyExchange/Delete/5

        public ActionResult Delete(int id = 0)
        {
            CurrencyExchange currencyexchange = db.CurrencyExchanges.Find(id);

            if (currencyexchange == null)
            {
                return(HttpNotFound());
            }
            return(View(currencyexchange));
        }
Пример #12
0
        public void TestCurrencyExchange_ExchangeRateCurrencyCrossDoesNotExist_Exception()
        {
            //arrange
            CurrencyExchange exchange = new CurrencyExchange(new List <string> {
                "AAA", "BBB", "CCC"
            });

            //act, assert
            Assert.ThrowsException <ArgumentException>(() => exchange.SpecifyExchangeRate("AAADDD", 3.45));
        }
Пример #13
0
        public void TestCurrencyExchange_ExchangeRateNegativeRate_Exception()
        {
            //arrange
            CurrencyExchange exchange = new CurrencyExchange(new List <string> {
                "AAA", "BBB", "CCC"
            });

            //act, assert
            Assert.ThrowsException <ArgumentException>(() => exchange.SpecifyExchangeRate("AAABBB", -5.50));
        }
Пример #14
0
        /// <summary>
        /// Obtem a cotação das principais moedas referidas no sistema.
        /// </summary>
        /// <returns></returns>
        public CurrencyExchange GetCurrencyExchange()
        {
            CurrencyExchange cotacao = new CurrencyExchange();

            using (var ctx = new CambioContext())
            {
                DateTime data = DateTime.Now.ToDateZerada();

                if (data.DayOfWeek == DayOfWeek.Saturday)
                {
                    data = data.AddDays(-1);
                }
                else if (data.DayOfWeek == DayOfWeek.Sunday)
                {
                    data = data.AddDays(-2);
                }

                //localize as cotações do dia
                var cotExist = ctx.CotacaoMonetariaDao
                               .Where(c => c.DataCotacao.ToDateZerada() == data)
                               .ToList();

                if (cotExist.Count >= 9)
                {
                    //localizei primeiro a cotação no banco
                    //isso aqui eh mais rapido q obter da internet
                    cotacao.Cotacoes.AddRange(cotExist);
                }
                else
                {
                    var moedas = ctx.MoedaDao.FindAll();

                    foreach (var m in moedas)
                    {
                        try
                        {
                            //obtem do webservice mesmo
                            //persiste a cotação
                            CotacaoMonetaria cotNew = getCotacao((TypeCodigoBacen)m.CodigoWSCompra,
                                                                 (TypeCodigoBacen)m.CodigoWSVenda);

                            //sempre add
                            cotacao.AddCurrencyExchange(cotNew);

                            SaveCotacaoMonetaria(ctx, cotNew);
                        }
                        catch (Exception ex)
                        {
                            LoggerUtilIts.GenerateLogs(ex, "Falha no WSBacenCambio", "Falha na cotação cambial.");
                        }
                    }
                }
            }
            return(cotacao);
        }
Пример #15
0
        public ActionResult Create(CurrencyExchange currencyexchange)
        {
            if (ModelState.IsValid)
            {
                db.CurrencyExchanges.Add(currencyexchange);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(currencyexchange));
        }
Пример #16
0
        public async Task CurerncyConverterTest()
        {
            const string filePathInput = @"C:\yuvalprojects\C#\CurrencyConverter\currency.txt";

            double[]          expected         = new double[] { 6.8169, 10.22535, 13.6338 };
            IUIService        UIService        = new ConsoleUI();
            ICurrencyExchange currencyExchange = new CurrencyExchange(UIService, filePathInput);

            double[] actual = await currencyExchange.CalculateCurrencyConvertionAsync();

            CollectionAssert.AreEqual(expected, actual);
        }
        private void SetDestinationCurrency()
        {
            SelectInputForm form = new SelectInputForm(Currency.Load());

            if (DialogResult.OK == form.ShowDialog())
            {
                Currency item = form.Selected as Currency;

                CurrencyExchange entity = Datos.Current as CurrencyExchange;
                entity.ToCurrencyIso = item.ISOCode;
            }
        }
Пример #18
0
        public static CurrencyExchange ToDomain(CurrencyExchangeDto currencyExchangeDto, List <Currency> currencies)
        {
            var currencyExchange = new CurrencyExchange()
            {
                Date         = currencyExchangeDto.Date,
                BaseCurrency = currencies.First(c => c.Code == currencyExchangeDto.BaseCurrencyCode),
                Currency     = currencies.First(c => c.Code == currencyExchangeDto.CurrencyCode),
                BuyRate      = currencyExchangeDto.BuyRate,
                SellRate     = currencyExchangeDto.SellRate
            };

            return(currencyExchange);
        }
Пример #19
0
        public void TestCurrencyExchange_Constructor_CurrenciesInvalidLength_Exception()
        {
            //arrange
            List <string> currencies = new List <string>();

            currencies.Add("AAA");
            currencies.Add("BBB");
            currencies.Add("CCCC");
            currencies.Add("DDD");

            //act, assert
            Assert.ThrowsException <ArgumentException>(() => { CurrencyExchange exchange = new CurrencyExchange(currencies); });
        }
Пример #20
0
        public void TestCurrencyExchange_CalculateExchangedRateAmountNotPositive_Exception()
        {
            //arrange
            CurrencyExchange exchange = new CurrencyExchange(new List <string> {
                "AAA", "BBB", "CCC"
            });

            //act
            exchange.SpecifyExchangeRate("AAABBB", 6.50);

            //assert
            Assert.ThrowsException <ArgumentException>(() => exchange.CalculateExchangedRate("AAABBB", "AAA", -200));
        }
Пример #21
0
        public void TestGetCurrencyExchange()
        {
            var bancoProvinciaProxyService = new Mock <IBancoProvinciaProxyService>();
            var exchange = new CurrencyExchange(1, 1, "");

            bancoProvinciaProxyService.Setup(x => x.GetDollarExchange()).Returns(Task.FromResult(exchange));

            var sut = new DollarCurrencyService(bancoProvinciaProxyService.Object);

            var result = sut.GetCurrencyExchange();

            Assert.AreSame(exchange, result);
        }
Пример #22
0
        public void SetUp()
        {
            _currencyExchange    = new CurrencyExchange();
            _currencyExchangeDto = new CurrencyExchangeDto();

            _currencyRepositoryMock = new Mock <IAsyncRepository <Currency> >();
            _currencyRepositoryMock.Setup(c => c.ListAllAsync()).Returns(Task.FromResult(CurrencyData.GetCurrencies()));

            _currencyExcahngeRepositoryMock = new Mock <IAsyncRepository <CurrencyExchange> >();
            _currencyExcahngeRepositoryMock.Setup(c => c.AddAsync(It.IsAny <CurrencyExchange>())).Returns(Task.FromResult(_currencyExchange));

            _currencyExchangeDto        = new CurrencyExchangeDto();
            _addCurrencyExchangeCommand = new AddCurrencyExchangeCommand(_currencyRepositoryMock.Object, _currencyExcahngeRepositoryMock.Object);
        }
Пример #23
0
        private async Task <string> GetExchange(string currencySymbol, int carPrice)
        {
            double?dblExRateValue = await CurrencyExchange.GetCurrencyRateAsync(currencySymbol);

            if (dblExRateValue == null)
            {
                return(string.Format("Your currency symbol cannot be found. Please give us a valid one, e.g USD, CAD, JPY, etc.")); // \"{0}\" CurrencySymbol
            }
            else
            {
                dblExRateValue *= carPrice;
                return(string.Format("We estimated that you need to pay ${0:0.##}{1} per day. Please contact a bank for more information.", dblExRateValue, currencySymbol.ToUpper()));
            }
        }
        public void TestGetExchange()
        {
            var serviceProvider = new Mock <IServiceProvider>();
            var exchangeService = new Mock <ICurrencyExchangeService>();
            var exchange        = new CurrencyExchange(1, 1, "");

            serviceProvider.Setup(x => x.GetService(It.IsAny <Type>())).Returns(exchangeService.Object);
            exchangeService.Setup(x => x.GetCurrencyExchange()).Returns(exchange);

            var sut = new CurrenciesExchangeService(serviceProvider.Object);

            var result = sut.GetExchange("USD");

            Assert.AreSame(exchange, result);
        }
Пример #25
0
        public async Task <IActionResult> DollarExchangeByCurrency(string iso)
        {
            if (iso == null)
            {
                return(BadRequest("No currency ISO specified"));
            }
            CurrencyExchange ce = new CurrencyExchange();
            var result          = await ce.calculateExchange(iso);

            if (result.success)
            {
                return(Ok(result.response));
            }
            return(BadRequest(result.errorMessage));
        }
Пример #26
0
        public void TestCurrencyExchange_ExchangeRateChange()
        {
            //arrange
            CurrencyExchange exchange = new CurrencyExchange(new List <string> {
                "AAA", "BBB", "CCC"
            });
            double expectedResult = 2.50;

            //act
            exchange.SpecifyExchangeRate("AAABBB", 6.50);
            exchange.SpecifyExchangeRate("AAABBB", 2.50);
            double actualResult = exchange.ExchangeRates["AAABBB"];

            //assert
            Assert.AreEqual(expectedResult, actualResult);
        }
Пример #27
0
        public void TestCurrencyExchange_CurrencyCrosses_GetOnce()
        {
            //arrange
            CurrencyExchange exchange = new CurrencyExchange(new List <string> {
                "AAA", "BBB", "CCC"
            });
            List <string> expectedResult = new List <string> {
                "AAABBB", "AAACCC", "BBBCCC"
            };

            //act
            List <string> actualResult = exchange.CurrencyCrosses;

            //assert
            CollectionAssert.AreEqual(expectedResult, actualResult);
        }
Пример #28
0
        public void TestCurrencyExchange_CalculateExchangedRate_CheckOne()
        {
            //arrange
            CurrencyExchange exchange = new CurrencyExchange(new List <string> {
                "AAA", "BBB", "CCC"
            });
            Dictionary <string, double> expectedResult = new Dictionary <string, double>();

            expectedResult.Add("AAABBB", 6.50);

            //act
            exchange.SpecifyExchangeRate("AAABBB", 6.50);
            Dictionary <string, double> actualResult = exchange.ExchangeRates;

            //assert
            CollectionAssert.AreEqual(expectedResult, actualResult);
        }
Пример #29
0
        public async Task InitializeAsync()
        {
            _cts?.Cancel();
            _cts = new CancellationTokenSource();
            var token = _cts.Token;

            try
            {
                var newsTask         = News.InitializeAsync(token);
                var currencyExchange = CurrencyExchange.InitializeAsync(token);

                await Tools.WhenAll(newsTask, currencyExchange);
            }
            catch (Exception e) when(!token.IsCancellationRequested)
            {
                Debug.WriteLine(e);
            }
        }
Пример #30
0
        private void AddADataRow(int AIndex,
                                 String AAccountCode,
                                 string ACurrencyValue,
                                 decimal AExchangeRate,
                                 DateTime AdateEffectiveFrom,
                                 Boolean ADoRevaluation)
        {
            CurrencyExchange ce = new CurrencyExchange(AAccountCode, ACurrencyValue, AExchangeRate, AdateEffectiveFrom, ADoRevaluation);

            FcurrencyExchangeList.Add(ce);
            FBoundList = new DevAge.ComponentModel.BoundList <CurrencyExchange>
                             (FcurrencyExchangeList);
            grdDetails.DataSource = FBoundList;

            FBoundList.AllowNew    = false;
            FBoundList.AllowDelete = false;

            FlinkController.SetDataList(FcurrencyExchangeList);
        }
        private void AddADataRow(int AIndex, string ACurrencyValue, decimal AExchangeRate)
        {
            CurrencyExchange ce = new CurrencyExchange(ACurrencyValue, AExchangeRate);

            FcurrencyExchangeList.Add(ce);
            FBoundList = new DevAge.ComponentModel.BoundList <CurrencyExchange>
                             (FcurrencyExchangeList);
            grdDetails.DataSource = FBoundList;

            FBoundList.AllowNew    = false;
            FBoundList.AllowDelete = false;

            for (Int32 column = 1; column <= 3; column++)
            {
                grdDetails.Columns[column].GetDataCell(AIndex).Editor.EnableEdit = false;
            }

            linkClickDelete.SetDataList(FcurrencyExchangeList);
        }
        private void AddADataRow(int AIndex,
            String AAccountCode,
            string ACurrencyValue,
            decimal AExchangeRate,
            DateTime AdateEffectiveFrom,
            Boolean ADoRevaluation)
        {
            CurrencyExchange ce = new CurrencyExchange(AAccountCode, ACurrencyValue, AExchangeRate, AdateEffectiveFrom, ADoRevaluation);

            FcurrencyExchangeList.Add(ce);
            FBoundList = new DevAge.ComponentModel.BoundList <CurrencyExchange>
                             (FcurrencyExchangeList);
            grdDetails.DataSource = FBoundList;

            FBoundList.AllowNew = false;
            FBoundList.AllowDelete = false;

            FlinkController.SetDataList(FcurrencyExchangeList);
        }
        private void AddADataRow(int AIndex, string ACurrencyValue, decimal AExchangeRate)
        {
            CurrencyExchange ce = new CurrencyExchange(ACurrencyValue, AExchangeRate);

            FcurrencyExchangeList.Add(ce);
            FBoundList = new DevAge.ComponentModel.BoundList <CurrencyExchange>
                             (FcurrencyExchangeList);
            grdDetails.DataSource = FBoundList;

            FBoundList.AllowNew = false;
            FBoundList.AllowDelete = false;

            for (Int32 column = 1; column <= 3; column++)
            {
                grdDetails.Columns[column].GetDataCell(AIndex).Editor.EnableEdit = false;
            }

            linkClickDelete.SetDataList(FcurrencyExchangeList);
        }