Files
MileageTraker/Web/DAL/FuelmanCsvImporter.cs
T
2015-09-09 22:45:27 -04:00

77 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using CsvHelper;
using CsvHelper.Configuration;
using MileageTraker.Web.Models;
using MileageTraker.Web.Utility;
namespace MileageTraker.Web.DAL
{
public class FuelmanCsvImporter
{
private sealed class FuelmanCsvClassMap : CsvClassMap<FuelLog>
{
public FuelmanCsvClassMap()
{
Map(m => m.Date).ConvertUsing(row =>
{
var date = row.GetField("CEDATE");
var time = row.GetField<int>("CETIME");
var dttm = string.Format(@"{0} {1:00:00}", date, time);
return DateTime.ParseExact(dttm, @"M/d/yyyy HH:mm", CultureInfo.InvariantCulture);
});
Map(m => m.DriverFullName).ConvertUsing(row =>
{
var name = row.GetField("CEEMNAME");
return NameNormalizer.Normalize(name);
});
Map(m => m.TagNumber).Name("CEVEHNO");
Map(m => m.Odometer).Name("CEODOMETER");
Map(m => m.CityName).ConvertUsing(row =>
{
var city = row.GetField("CESITCTY");
return city.ToLower().ToTitleCase();
});
Map(m => m.MPG).Name("CEMPG");
Map(m => m.GasPurchased).Name("CEQTY");
Map(m => m.TotalPrice).Name("CECUSAMT");
}
}
public static IEnumerable<FuelLog> Import(string filename)
{
var fileInfo = new FileInfo(filename);
if (!fileInfo.Exists)
throw new ImportException("Cannot find file '" + filename + "'");
using (var tr = File.OpenText(fileInfo.FullName))
{
var csv = new CsvReader(tr);
csv.Configuration.RegisterClassMap<FuelmanCsvClassMap>();
var fuelLogs = new List<FuelLog>();
while (csv.Read())
{
try
{
// Skip non-FUEL entries
if (csv.GetField<string>("CEPRDTYPE") != "FUEL")
continue;
fuelLogs.Add(csv.GetRecord<FuelLog>());
}
catch (Exception ex)
{
throw new ImportException("Problem with document encountered on row " + csv.Row + ". " + ex.Message);
}
}
return fuelLogs;
}
}
}
}