public bool LoadUserDataFromCsv()
        {
            var result = false;

            try
            {
                if (!_context.Users.Any())
                {
                    string rootDirectoryPath   = AppDomain.CurrentDomain.BaseDirectory;
                    string pathFinalAccessFile = Path.Combine(rootDirectoryPath, "App_Data", ConfigurationReader.ReadAppConfig("CsvData.csv", "CsvData.csv"));

                    using (var textReader = new StreamReader(pathFinalAccessFile))
                    {
                        var users = CsvHelpers.ReadFileWithoutHeader <UserDto>(textReader, typeof(UserCsvMap));

                        if (users != null && users.Any())
                        {
                            _context.Users.AddRange(_mapper.Map <IEnumerable <User> >(users));

                            _context.SaveChanges();

                            result = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //Log error
            }

            return(result);
        }
示例#2
0
        public void Init()
        {
            var dir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

            address = dir + @"\assets\books.csv";
            helper  = new CsvHelpers <Book>();
        }
        public void ReadFileTest()
        {
            var baseDir  = AppDomain.CurrentDomain.BaseDirectory;
            var filePath = Path.Combine(baseDir, "TestFiles", "CSVTestData.csv");

            var csvTestDataTextReader = new StreamReader(filePath);

            var data = CsvHelpers.ReadFile <FinancialTransaction>(csvTestDataTextReader, typeof(FinancialTransactionMapper));

            Assert.IsTrue(data?.Count > 0 && data?[0].Id == 123);
        }
示例#4
0
        public void ReadFileTest()
        {
            var baseDir  = AppDomain.CurrentDomain.BaseDirectory;
            var filePath = Path.Combine(baseDir, "TestFiles", "CsvData.csv");

            var csvTestDataTextReader = new StreamReader(filePath, System.Text.Encoding.UTF8);

            var users = CsvHelpers.ReadFileWithoutHeader <UserDto>(csvTestDataTextReader, typeof(UserCsvMap));

            Assert.IsTrue(users?.Count() > 0);
        }
示例#5
0
        public void WriteWithMapping(bool useDictionaryMapping = false)
        {
            var csvHelper = new CsvHelpers(Context.FileSystem, Context.Environment);

            if (useDictionaryMapping)
            {
                csvHelper.WriteRecords(ResultPath, People, DictionaryMap, Settings);
            }
            else
            {
                csvHelper.WriteRecords(ResultPath, People, ClassMap, Settings);
            }
        }
示例#6
0
        public void WriteNoMapping()
        {
            var csvHelper = new CsvHelpers(Context.FileSystem, Context.Environment);

            csvHelper.WriteRecords(ResultPath, People, Settings);
        }
示例#7
0
        public void Read()
        {
            var csvHelper = new CsvHelpers(Context.FileSystem, Context.Environment);

            csvHelper.ReadRecords <Person>(CsvFilePath, null, Settings);
        }
        public List <FinancialTransaction> Calculate(Stream file, FileFormatEnum format)
        {
            List <FinancialTransaction> result = new List <FinancialTransaction>();

            try
            {
                using (var textReader = new StreamReader(file))
                {
                    switch (format)
                    {
                    case FileFormatEnum.XML:
                        result = XmlHelpers.ReadFile <Portfolio>(file)?.Trade;
                        break;

                    case FileFormatEnum.CSV:
                        result = CsvHelpers.ReadFile <FinancialTransaction>(textReader, typeof(FinancialTransactionMapper));
                        break;

                    default:
                        break;
                    }
                }

                using (var dbContext = new DatabaseContext())
                {
                    //Maybe save this list to cache is better solution - somthing like redis
                    var companies   = dbContext.Companies.Include(t => t.Currency).ToList();
                    var currentDate = Convert.ToDateTime(ConfigurationReader.ReadAppConfig("CurrentDate", "2016, 4, 1"));
                    Parallel.ForEach(result, (FinancialTransactionItem) =>
                    {
                        var company = companies.FirstOrDefault(t => t.Name == FinancialTransactionItem.Name.Trim());
                        if (company == null)
                        {
                            FinancialTransactionItem.Result = "Invalid Company Name";
                        }
                        else
                        {
                            var expireDate = Convert.ToDateTime(FinancialTransactionItem.ExpiryDate);

                            double yearOfExpiery = expireDate.YearsDiffrent(currentDate);
                            CallPutFlag callPutFlag;
                            if (!Enum.TryParse(FinancialTransactionItem.CallPutFlag, out callPutFlag))
                            {
                                FinancialTransactionItem.Result = "Invalid Data";
                            }
                            else
                            {
                                FinancialTransactionItem.Price  = _blackScholes.CalculateBlackScholes(callPutFlag, company.StockPrice, FinancialTransactionItem.StrikePrice, yearOfExpiery, company.Currency.RiskFreeRate, company.Volatility);
                                FinancialTransactionItem.Result = "Success";
                            }
                        }
                    });
                }
            }
            catch (Exception ex)
            {
                result = new List <FinancialTransaction>();
                log.Error($"Error occured in {this.GetType().FullName} - {MethodBase.GetCurrentMethod().Name}", ex);
            }

            return(result);
        }