public ActionResult Import(string destinationAccountId, string filename, string unclassifiedAccountId, Dictionary<string, ImportRowOptions> importRowMapping) { filename = filename.Replace("@", "/"); string name = Path.GetFileName(filename); var directoryName = Path.GetDirectoryName(filename); if ( string.IsNullOrEmpty(directoryName) ) { _directoryExplorer.NavigateToRoot(); } else { string directory = directoryName.Replace('\\', '/'); if ( !_directoryExplorer.NavigateTo(directory) ) return new HttpNotFoundResult("A directory named " + directory + " could not be found"); } using ( var transaction = new TransactionScope() ) { var import = new Import(_importDetector); import.Open(_directoryExplorer.GetFilename(name)); var source = _transactionImportContext.General[destinationAccountId]; var unclassifiedAccount = (unclassifiedAccountId == null) ? null : _transactionImportContext.General[unclassifiedAccountId]; var transactionImport = _transactionImportContext.CreateImport(source, unclassifiedDestination: unclassifiedAccount); var transactions = transactionImport.Process(import, importRowMapping).ToList(); _transactionImportContext.Repository.Save(transactionImport.Result, transactions); transaction.Complete(); return PartialView(transactions); } }
public ActionResult Preview(string filename) { var actualFilename = filename.Replace("@", "/"); string name = Path.GetFileName(actualFilename); var directoryName = Path.GetDirectoryName(actualFilename); if (string.IsNullOrEmpty(directoryName)) { _directoryExplorer.NavigateToRoot(); } else { string directory = directoryName.Replace('\\', '/'); if ( !_directoryExplorer.NavigateTo(directory) ) return new HttpNotFoundResult("A directory named " + directory + " could not be found"); } var import = new Import(_importDetector); var importDetected = import.Open(_directoryExplorer.GetFilename(name)); if (!importDetected) { return View("CouldNotDetectFileType"); } var model = new ImportPreview { FileName = filename, Accounts = _transactionImportContext.General.OrderBy(x => x.Type).ThenBy(x => x.Name), Import = import, AccountIdentifiers = _transactionImportContext.Patterns }; return View(model); }
public void CanNotImportBadFile() { var wp = new WestpacCsvImportDetector(); var asb = new AsbOrbitFastTrackCsvImportDetector(); var wpVisa = new WestpacVisaCsvImportDetector(); var asbVisa = new AsbVisaCsvImportDetector(); var importDetector = new ImportDetector(new IImportDetector[] { wp, asb, wpVisa, asbVisa }); var import = new Import(importDetector); Assert.That(import.Open("bad.txt", Stream.Null), Is.False); }
public void CanImportArbitrary() { var wp = new WestpacCsvImportDetector(); var asb = new AsbOrbitFastTrackCsvImportDetector(); var wpVisa = new WestpacVisaCsvImportDetector(); var asbVisa = new AsbVisaCsvImportDetector(); var importDetector = new ImportDetector(new IImportDetector[] { wp, asb, wpVisa, asbVisa}); var import = new Import(importDetector); Assert.That(import.Open(_wpFilename), Is.True); Assert.That(import.ImportType, Is.EqualTo(wp.Name)); Assert.That(import.GetPropertyNames(), Is.EqualTo(wp.GetPropertyNames())); var data = import.GetData().ToArray(); Assert.That(data, Is.Not.Empty); Assert.That(data.Last().Id, Is.EqualTo("A00_0000_0000000_000-12Aug12/18")); import = new Import(importDetector); Assert.That(import.Open(_asbFilename), Is.True); Assert.That(import.ImportType, Is.EqualTo(asb.Name)); Assert.That(import.GetPropertyNames(), Is.EqualTo(asb.GetPropertyNames())); data = import.GetData().ToArray(); Assert.That(data, Is.Not.Empty); Assert.That(data.Last().Id, Is.EqualTo("asb/2012082501")); import = new Import(importDetector); Assert.That(import.Open(_asbVisaFilename), Is.True); Assert.That(import.ImportType, Is.EqualTo(asbVisa.Name)); Assert.That(import.GetPropertyNames(), Is.EqualTo(asbVisa.GetPropertyNames())); data = import.GetData().ToArray(); Assert.That(data, Is.Not.Empty); Assert.That(data.Last().Id, Is.EqualTo("visa/2012101505")); import = new Import(importDetector); Assert.That(import.Open(_wpVisaFilename), Is.True); Assert.That(import.ImportType, Is.EqualTo(wpVisa.Name)); Assert.That(import.GetPropertyNames(), Is.EqualTo(wpVisa.GetPropertyNames())); data = import.GetData().ToArray(); Assert.That(data, Is.Not.Empty); Assert.That(data.Last().Id, Is.EqualTo("AXXXX_XXXX_XXXX_9623-01Apr12/64")); }