Example #1
0
        public async Task <SkuDetails> GetTransactionsOf(string sku)
        {
            SkuDetails detalles = await CalculateTransactions(MoneyConverter.GetMissingRates(await GetRatesList()), sku);

            if (detalles != null)
            {
                return(detalles);
            }
            else
            {
                return(null);
            }
        }
Example #2
0
        private async Task <SkuDetails> CalculateTransactions(List <Rate> ratios, string sku)
        {
            try
            {
                List <Transaction> trans    = JsonConvert.DeserializeObject <List <Transaction> >(await GetTransactions());
                SkuDetails         detalles = new SkuDetails();
                if (trans.Count > 0)
                {
                    var querySkuTrans = from product in trans
                                        where product.sku == sku
                                        select product;
                    decimal suma = 0;
                    if (querySkuTrans.Count() > 0)
                    {
                        foreach (var item in querySkuTrans)
                        {
                            if (item.currency == Constants.currentCurrency)
                            {
                                detalles.transactions.Add(item);
                                decimal.TryParse(item.currency, out decimal sumaAux);
                                suma += sumaAux;
                            }
                            else
                            {
                                foreach (var r in ratios)
                                {
                                    if (r.from == item.currency && r.to == Constants.currentCurrency)
                                    {
                                        Transaction auxTrans = new Transaction();
                                        string      auxR     = r.rate.Replace(Constants.sepDecimalEntrada, Constants.sepDecimalTrabajo);
                                        string      auxA     = item.amount.Replace(Constants.sepDecimalEntrada, Constants.sepDecimalTrabajo);
                                        decimal.TryParse(auxR, out decimal auxRate);
                                        decimal.TryParse(auxA, out decimal auxAmount);
                                        auxTrans.sku      = item.sku;
                                        auxTrans.currency = Constants.currentCurrency;

                                        auxTrans.amount = Math.Round(auxRate * auxAmount, Constants.toRound, MidpointRounding.ToEven).ToString().Replace(Constants.sepDecimalTrabajo, Constants.sepDecimalEntrada);

                                        suma += auxRate * auxAmount;
                                        detalles.transactions.Add(auxTrans);
                                    }
                                }
                            }
                        }
                        detalles.total = Math.Round(suma, Constants.toRound, MidpointRounding.ToEven).ToString().Replace(Constants.sepDecimalTrabajo, Constants.sepDecimalEntrada);
                        return(detalles);
                    }
                    else
                    {
                        log.AlertMsg("No se ha encontrado el sku " + sku + ", se busca en el fichero de pruebas...");
                        try
                        {
                            // Se obtienen los rates del fichero de pruebas
                            StreamReader fileRates = new StreamReader(Constants.ratesPathPruebas);
                            string       lineRates = fileRates.ReadLine();
                            fileRates.Close();
                            var ratesJson = JsonConvert.DeserializeObject <List <Rate> >(lineRates);
                            ratesJson = MoneyConverter.GetMissingRates(ratesJson);

                            // Se busca el sku en el fichero de pruebas
                            StreamReader fileTrans = new StreamReader(Constants.transPathPruebas);
                            string       lineTrans = fileTrans.ReadLine();
                            fileTrans.Close();
                            var transJson = JsonConvert.DeserializeObject <List <Transaction> >(lineTrans);

                            if (transJson.Count > 0)
                            {
                                var querySkuTest = from item in transJson
                                                   where item.sku == sku
                                                   select item;

                                foreach (var item in querySkuTest)
                                {
                                    if (item.currency == Constants.currentCurrency)
                                    {
                                        detalles.transactions.Add(item);
                                        decimal.TryParse(item.currency, out decimal sumaAux);
                                        suma += sumaAux;
                                    }
                                    else
                                    {
                                        foreach (var r in ratesJson)
                                        {
                                            if (r.from == item.currency && r.to == Constants.currentCurrency)
                                            {
                                                Transaction auxTrans = new Transaction();
                                                string      auxR     = r.rate.Replace(Constants.sepDecimalEntrada, Constants.sepDecimalTrabajo);
                                                string      auxA     = item.amount.Replace(Constants.sepDecimalEntrada, Constants.sepDecimalTrabajo);
                                                decimal.TryParse(auxR, out decimal auxRate);
                                                decimal.TryParse(auxA, out decimal auxAmount);
                                                auxTrans.sku      = item.sku;
                                                auxTrans.currency = Constants.currentCurrency;

                                                auxTrans.amount = Math.Round(auxRate * auxAmount, Constants.toRound, MidpointRounding.ToEven).ToString().Replace(Constants.sepDecimalTrabajo, Constants.sepDecimalEntrada);

                                                suma += auxRate * auxAmount;
                                                detalles.transactions.Add(auxTrans);
                                            }
                                        }
                                        detalles.total = Math.Round(suma, Constants.toRound, MidpointRounding.ToEven).ToString().Replace(Constants.sepDecimalTrabajo, Constants.sepDecimalEntrada);
                                        return(detalles);
                                    }
                                }
                            }
                        }
                        catch (ArgumentNullException ex)
                        {
                            log.ErrorMsg("EXCEPTION ERROR");
                            log.ErrorMsg(ex.ToString());
                            return(null);
                        }
                        catch (FileNotFoundException ex)
                        {
                            log.ErrorMsg("EXCEPTION ERROR");
                            log.ErrorMsg(ex.ToString());
                            return(null);
                        }
                        catch (IOException ex)
                        {
                            log.ErrorMsg("EXCEPTION ERROR");
                            log.ErrorMsg(ex.ToString());
                            return(null);
                        }
                    }
                }
            }
            catch (ArgumentNullException ex)
            {
                log.ErrorMsg("EXCEPTION ERROR - El argumento pasado al método es nulo.");
                log.ErrorMsg(ex.ToString());
                return(null);
            }
            return(null);
        }