public RatesEO Get(string fromCurrency, string toCurrency) { RatesEO Rates = null; List <RatesEO> listRates; try { if (!string.IsNullOrEmpty(fromCurrency) && !string.IsNullOrEmpty(toCurrency)) { listRates = _dataAccess.ListConversion(); if (listRates != null) { Rates = Utilities.Instance.CalculateConversion(listRates, fromCurrency, toCurrency); if (Rates == null) { throw new Exception("Conversion no disponible"); } } else { throw new Exception("El acceso a la informacion no se encuentra disponible en estos momentos. Por favor intentelo mas tarde."); } } else { throw new Exception("Parametros obligatorios para la conversión de moneda"); } return(Rates); } catch (Exception ex) { _fileLog.WriteLog(string.Format("{0}. Origen de la excepcion:{1}.", ex.Message, ex.StackTrace)); return(Rates); } }
public RatesEO CalculateConversion(List <RatesEO> listRates, string fromData, string toData) { RatesEO rate = null; rate = listRates.Where(r => r.From.ToLower() == fromData.ToLower() && r.To.ToLower() == toData.ToLower()).FirstOrDefault(); if (rate == null) { List <RatesEO> listFrom = listRates.Where(r => r.From.ToLower() == fromData.ToLower()).ToList(); int index = 0; bool flag = true; do { List <RatesEO> listTo = listRates.Where(r => r.From.ToLower() == listFrom[index].To.ToLower() && r.To.ToLower() == toData.ToLower()).ToList(); if (!listTo.Count.Equals(0)) { rate = (from o in listFrom join d in listTo on o.To equals d.From select new RatesEO { From = o.From, To = d.To, rate = Math.Ceiling(o.rate * d.rate) } ).FirstOrDefault(); if (rate != null) { flag = false; } } else { flag = false; } index++; } while (flag); } return(rate); }
public TransactionsEO GetBySku(string sku) { TransactionsEO transaction = null; List <TransactionsEO> listTransactions = null; string currency = System.Configuration.ConfigurationManager.AppSettings["Currency"].ToUpper(); try { listTransactions = _dataAccess.ListTransaction(); if (listTransactions != null) { if (listTransactions.Any(t => t.Sku.ToUpper() == sku.ToUpper())) { decimal totalAmount = 0; RatesEO objRate = null; List <RatesEO> listRate = _conversionCurrency.List(); if (listRate == null) { throw new Exception("Informacion de conversion de moneda no disponible intente mas tarde."); } foreach (TransactionsEO itemTransaction in listTransactions.Where(t => t.Sku.ToUpper() == sku.ToUpper())) { if (itemTransaction.Currency.ToUpper() != currency) { objRate = Utilities.Instance.CalculateConversion(listRate, itemTransaction.Currency, currency); if (objRate != null) { totalAmount = totalAmount + (objRate.rate * itemTransaction.Amount); } else { throw new Exception("Conversion no disponible"); } } else { totalAmount = totalAmount + itemTransaction.Amount; } } transaction = new TransactionsEO() { Sku = sku.ToUpper(), Currency = currency, Amount = Math.Ceiling(totalAmount) }; return(transaction); } else { throw new Exception(string.Format("No existen productos asociados al proucto {0}", sku)); } } else { throw new Exception("El acceso a la informacion no se encuentra disponible en estos momentos. Por favor intentelo mas tarde."); } } catch (Exception ex) { _fileLog.WriteLog(string.Format("{0}. Origen de la excepcion:{1}.", ex.Message, ex.StackTrace)); return(transaction); } }