/// <summary>
        /// This method is to Fetch currency conversion data for historical dates
        /// </summary>
        /// <param name="currencyBase"></param>
        /// <param name="apiURL"></param>
        /// <param name="accessKey"></param>
        /// <returns></returns>
        public async Task <APIResponse> GetCurrencyConversionDataByDate(CurrencyBase currencyBase, string apiURL, string accessKey)
        {
            string uRl = apiURL + currencyBase.ExchangeRateDate.ToString("yyyy-MM-dd") + "?access_key=" + accessKey + "&base="
                         + currencyBase.BaseCurrency + "&symbols=" + currencyBase.ConvertCurrency;

            return(await GetAPIResponse(uRl));
        }
        /// <summary>
        /// This method is to execute historical date currency conversion
        /// </summary>
        /// <returns></returns>
        public async Task HistoricalCurrencyConversion()
        {
            CurrencyBase currencyBase = new CurrencyBase();

            Console.Clear();
            Console.BackgroundColor = ConsoleColor.DarkBlue;
            Console.WriteLine("-------------------------Fetch currency data by date-----------------");
            Console.ResetColor();
            string inputBaseCurrencyMessage = "Please enter base currency data in 3 character ISO format[Example:'EUR']";

            currencyBase.BaseCurrency = GetCurrencyCode(inputBaseCurrencyMessage);
            string baseCurrencyMessage = "Please enter amount in {0}:" + currencyBase.BaseCurrency;

            currencyBase.BaseAmount = ReadDouble(baseCurrencyMessage);
            string inputConvertedCurrencyMessage = "Please enter converted currency data in 3 character ISO format[Example:'EUR']";

            currencyBase.ConvertCurrency = GetCurrencyCode(inputConvertedCurrencyMessage);
            Console.WriteLine("Do you want to enter historical date?(Y/N)");
            if (Console.ReadKey().Key == ConsoleKey.Y)
            {
                string dateMessage = "Please enter date in YYYY-MM-DD format";
                currencyBase.ExchangeRateDate = ReadDatetime(dateMessage);
            }
            else
            {
                currencyBase.ExchangeRateDate = DateTime.Now;
            }
            APIResponse aPIResponse =
                await _aPIInteraction.GetCurrencyConversionDataByDate(currencyBase, _configuration.GetValue <string>("URL"),
                                                                      _configuration.GetValue <string>("AccessKey"));

            ProcessCurrencyCalculationResponse(aPIResponse, currencyBase);
        }
 /// <summary>
 /// Сохранить валюту.
 /// </summary>
 /// <param name="Currency">Сохраняемая валюта.</param>
 /// <returns>Сохраненная валюта с заполненным идентификатором</returns>
 public Guid Save(CurrencyBase currency)
 {
     using (var uow = CreateUnitOfWork())
     {
         return(uow.CurrencyRepository.Save(currency));
     }
 }
        /// <summary>
        /// Fetches the rates based on historical date
        /// </summary>
        /// <param name="baseCur"></param>
        /// <param name="toCur"></param>
        /// <param name="baseAmount"></param>
        /// <param name="date"></param>
        /// <returns></returns>
        public async Task <ExchangeAPIResponse> GetHistoricalRates(string baseCur, string toCur, string baseAmount, string date)
        {
            ExchangeAPIResponse exchangeResponse = new ExchangeAPIResponse();
            CurrencyBase        currencyBase     = new CurrencyBase();

            currencyBase.BaseAmount = _calculationHelper.CheckIfDouble(baseAmount);
            DateTime?checkDate = _calculationHelper.CheckIfDatetime(date);

            if (checkDate != null && !double.IsNaN(currencyBase.BaseAmount))
            {
                currencyBase.BaseCurrency     = baseCur;
                currencyBase.ConvertCurrency  = toCur;
                currencyBase.ExchangeRateDate = Convert.ToDateTime(checkDate);
                APIResponse aPIResponse =
                    await _aPIInteraction.GetCurrencyConversionDataByDate(currencyBase, _configuration.GetValue <string>("URL"),
                                                                          _configuration.GetValue <string>("AccessKey"));

                return(SendLatestRatesResponse(aPIResponse, currencyBase));
            }
            else
            {
                exchangeResponse.IsSuccess   = false;
                exchangeResponse.Description = "Parameters passed are not correct";
                exchangeResponse.StatusCode  = HttpStatusCode.BadRequest;
                return(exchangeResponse);
            }
        }
 /// <summary>
 /// This method is to show the final output
 /// </summary>
 /// <param name="aPIResponse">Response from the API</param>
 /// <param name="curBase">Input Output data</param>
 public void ProcessCurrencyCalculationResponse(APIResponse aPIResponse, CurrencyBase curBase)
 {
     if (aPIResponse.success)
     {
         curBase.ConvertedAmount = _calculationHelper.GetConvertedAmount(aPIResponse.rates, curBase);
         Console.WriteLine("The converted amount in {0} is " + curBase.ConvertedAmount, curBase.ConvertCurrency);
     }
     else if (aPIResponse.error != null)
     {
         Console.WriteLine("There was an error as:" + aPIResponse.error.info);
     }
     else
     {
         Console.WriteLine("There was an error processing the data");
     }
     Console.WriteLine("Press any key to exit");
     Console.ReadKey();
 }
        /// <summary>
        /// This method sends the response with the new calculation
        /// </summary>
        /// <param name="aPIResponse"></param>
        /// <param name="currencyBase"></param>
        /// <returns></returns>
        public ExchangeAPIResponse SendLatestRatesResponse(APIResponse aPIResponse, CurrencyBase currencyBase)
        {
            ExchangeAPIResponse exchangeAPIResponse = new ExchangeAPIResponse();

            if (aPIResponse.success)
            {
                exchangeAPIResponse.IsSuccess       = true;
                exchangeAPIResponse.StatusCode      = HttpStatusCode.OK;
                exchangeAPIResponse.ConvertedAmount = _calculationHelper.GetConvertedAmount(aPIResponse.rates, currencyBase);
                exchangeAPIResponse.Date            = (currencyBase.ExchangeRateDate == DateTime.MinValue) ? String.Empty
                    : currencyBase.ExchangeRateDate.ToString("yyyy-MM-dd");
                exchangeAPIResponse.Description = "Successfully found rates";
            }
            else
            {
                exchangeAPIResponse.IsSuccess   = false;
                exchangeAPIResponse.Description = (aPIResponse.error != null)? aPIResponse.error.info: "There was an error processing the data";
                exchangeAPIResponse.StatusCode  = HttpStatusCode.BadRequest;
            }
            return(exchangeAPIResponse);
        }
        /// <summary>
        /// This method is to execute current date currency conversion
        /// </summary>
        /// <returns></returns>
        public async Task CurrencyConversion()
        {
            CurrencyBase curBase = new CurrencyBase();

            Console.Clear();
            Console.BackgroundColor = ConsoleColor.DarkBlue;
            Console.WriteLine("-------------------------Fetch latest currency data-----------------");
            Console.ResetColor();
            string inputBaseCurrencyMessage = "Please enter base currency data in 3 character ISO format[Example:'EUR']";

            curBase.BaseCurrency = GetCurrencyCode(inputBaseCurrencyMessage);
            string baseCurrencyMessage = "Please enter amount in {0}:" + curBase.BaseCurrency;

            curBase.BaseAmount = ReadDouble(baseCurrencyMessage);
            string inputConvertedCurrencyMessage = "Please enter converted currency data in 3 character ISO format[Example:'EUR']";

            curBase.ConvertCurrency = GetCurrencyCode(inputConvertedCurrencyMessage);
            APIResponse aPIResponse =
                await _aPIInteraction.GetCurrencyConversionData(curBase, _configuration.GetValue <string>("URL"),
                                                                _configuration.GetValue <string>("AccessKey"));

            ProcessCurrencyCalculationResponse(aPIResponse, curBase);
        }
        /// <summary>
        /// This method is to fetch latest rates
        /// </summary>
        /// <param name="baseCur"></param>
        /// <param name="toCur"></param>
        /// <param name="baseAmount"></param>
        /// <returns></returns>
        public async Task <ExchangeAPIResponse> GetLatestConversion(string baseCur, string toCur, string baseAmount)
        {
            ExchangeAPIResponse exchangeResponse = new ExchangeAPIResponse();
            CurrencyBase        currencyBase     = new CurrencyBase();

            currencyBase.BaseAmount = _calculationHelper.CheckIfDouble(baseAmount);
            if (!double.IsNaN(currencyBase.BaseAmount))
            {
                currencyBase.BaseCurrency    = baseCur;
                currencyBase.ConvertCurrency = toCur;
                APIResponse aPIResponse =
                    await _aPIInteraction.GetCurrencyConversionData(currencyBase, _configuration.GetValue <string>("URL"),
                                                                    _configuration.GetValue <string>("AccessKey"));

                return(SendLatestRatesResponse(aPIResponse, currencyBase));
            }
            else
            {
                exchangeResponse.IsSuccess   = false;
                exchangeResponse.Description = "Base Amount is not a valid number";
                exchangeResponse.StatusCode  = HttpStatusCode.BadRequest;
                return(exchangeResponse);
            }
        }
 public Guid Save([FromBody] CurrencyBase currency)
 {
     return(CurrencyService.Save(currency));
 }
Exemplo n.º 10
0
 /// <summary>
 /// This method is to Get the amount in the converted currency based on fetched rates
 /// </summary>
 /// <param name="keyValueCurrencyData"></param>
 /// <param name="currencyBase"></param>
 /// <returns></returns>
 public double GetConvertedAmount(Dictionary <string, string> keyValueCurrencyData, CurrencyBase currencyBase)
 {
     if (keyValueCurrencyData.TryGetValue(currencyBase.ConvertCurrency, out string exchangeRate))
     {
         double checkedDouble = CheckIfDouble(exchangeRate);
         if (checkedDouble != double.NaN)
         {
             return(CheckIfDouble(exchangeRate) * currencyBase.BaseAmount);
         }
     }
     return(double.NaN);
 }
Exemplo n.º 11
0
        public double GetNumOfCoinMiningPerDay(string coinSymbol, PoolName poolName)
        {
            if (MyHashRate == -1)
            {
                throw new Exception("Invaid MyHashRate property. Please specify MyHashRate property before calling GetNumOfCoinMiningPerDay method.");
            }
            CurrencyBase coin = null;

            if (poolName == PoolName.Bsod)
            {
                coin = _bsodCurrencies[coinSymbol];
            }
            else if (poolName == PoolName.Gos)
            {
                coin = _gosCurrencies[coinSymbol];
            }
            else if (poolName == PoolName.IceMining)
            {
                coin = _iceCurrencies[coinSymbol];
            }
            else if (poolName == PoolName.Zerg || poolName == PoolName.PhiPhi)
            {
                throw new ArgumentException("Invalid argument zerg pool not implement.", "poolName");
            }

            if (coin != null)
            {
                long poolHashRate = coin.hashrate ?? 0;
                if (coin.hashrate_shared != null && coin.hashrate_shared != 0)
                {
                    poolHashRate = coin.hashrate_shared ?? 0;
                }
                if (poolHashRate == 0)
                {
                    Debug.WriteLine(string.Format("Can not calculate num of coin per day because nobody mining {0} coin.", coinSymbol));
                    return(0);
                }
                if (coin.hashRateDiscountPercent > 0)  // กรณีเหรียญที่แรงแกว่งมากๆ ให้ discount จำนวนที่ขุดได้ลง
                {
                    poolHashRate = poolHashRate + (poolHashRate * coin.hashRateDiscountPercent / 100);
                }
                double rewardPerBlock = PoolReward.GetPoolOverrideReward(poolName, coinSymbol);
                if (rewardPerBlock == -1)
                {
                    rewardPerBlock = double.Parse(coin.reward);
                }
                int blockAllDay = coin.h24_blocks;
                if (coin.h24_blocks_shared != -1)
                {
                    blockAllDay = coin.h24_blocks_shared;
                }
                double receiveCoinsPerDay = 0;
                if (MyHashRate > poolHashRate) // test กรณี แรงเรามากกว่าแรง pool
                {
                    receiveCoinsPerDay = (rewardPerBlock * blockAllDay) * (1 - (poolHashRate / MyHashRate));
                }
                else
                {
                    // receiveCoinsPerDay = (rewardPerBlock / poolHashRate) * MyHashRate * blockAllDay;
                    receiveCoinsPerDay = (MyHashRate / (double)poolHashRate) * (blockAllDay * rewardPerBlock);
                }
                return(receiveCoinsPerDay);
            }
            else
            {
                Debug.WriteLine(string.Format("Can not load {0} information from {1} pool.", coinSymbol, poolName));
                return(0);
            }
        }
Exemplo n.º 12
0
 public Decimal TotalBalance(CurrencyBase currency)
 {
     return(Exchanges.Sum(e => e.Balance.Items.Where(b => b.Currency.Key == currency.Key).Sum(x => x.Amount)));
 }
        /// <summary>
        /// This method is to interact with the currency api of fixer.io and retrieve latest conversion rates
        /// </summary>
        /// <param name="currencyBase">Currency Base data for base currency and converted data</param>
        /// <param name="uRl">URL to check</param>
        /// <returns></returns>
        public async Task <APIResponse> GetCurrencyConversionData(CurrencyBase currencyBase, string apiURL, string accessKey)
        {
            string uRl = apiURL + "latest?access_key=" + accessKey + "&base=" + currencyBase.BaseCurrency + "&symbols=" + currencyBase.ConvertCurrency;

            return(await GetAPIResponse(uRl));
        }
Exemplo n.º 14
0
 /// <summary>
 /// Create a new bill.
 /// </summary>
 /// <param name="currency">Currency for the new bill.</param>
 public BillBase(CurrencyBase currency)
 {
     Currency = currency;
 }