public void ExportResult(ExportFileContext context, IMarketFileExportResult result, IExportTransactionHandler handler) { var fileName = result.GenerateFileName(context.FileType, context.Extension); var marketFile = new MarketFileModel { DirectionFlag = false, FileName = fileName, FileType = context.FileType, ProcessError = string.Empty, ProcessStatus = "N", LdcId = result.LdcId, CspDunsId = result.CspDunsId, CspDunsTradingPartnerId = result.CspDunsTradingPartnerId, }; try { var filePath = Path.Combine(context.DirectoryOut, fileName); var fileInfo = new FileInfo(filePath); if (fileInfo.Exists) { throw new InvalidOperationException(); } var options = new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }; using (var scope = new TransactionScope(TransactionScopeOption.Required, options)) { marketFile.ProcessDate = DateTime.Now; marketFile.Status = MarketFileStatusOptions.Inserted; var marketFileId = marketFileDataAccess .InsertMarketFile(marketFile); using (var stream = fileInfo.Open(FileMode.Create, FileAccess.Write, FileShare.None)) using (var writer = new StreamWriter(stream)) { result.FinalizeDocument(marketFileId); writer.Write(result.Content); logger.DebugFormat("Wrote {0} \"{1}\" transaction(s) to file \"{2}\".", result.HeaderCount, context.FileType, fileName); } foreach (var headerKey in result.HeaderKeys) { handler.UpdateHeader(headerKey, marketFileId, fileName); } logger.InfoFormat("Exported {0} \"{1}\" transaction(s). File Name \"{2}\".", result.HeaderCount, context.FileType, fileName); scope.Complete(); } } catch (Exception ex) { logger.ErrorFormat(ex, "Unknown error occurred while exporting file \"{0}\".", context.FileType); } }
public void When_Exporting_Transactions_The_Trading_Partner_Substring_Is_Consider_For_Duplicate_Check() { // arrange var results = new IMarketFileExportResult[] { new Export814Model(false) { LdcShortName = "DUP", TradingPartnerId = "Partner_Diff", CspDunsId = 1 }, new Export814Model(false) { LdcShortName = "DUP", TradingPartnerId = "Partner_Fail", CspDunsId = 2 }, new Export814Model(false) { LdcShortName = "DUP", TradingPartnerId = "Partner_Term", CspDunsId = 3 }, new Export814Model(false) { LdcShortName = "DUP", TradingPartnerId = "Partner_Unique", CspDunsId = 4 }, new Export814Model(false) { LdcShortName = "UNIQUE", TradingPartnerId = "Partner_Unique", CspDunsId = 5 } }; var concern = new ExportMarketFileTask(null, null, null, 0); // act concern.HandleDuplicateLdcTradingPartners(results); // assert Assert.AreEqual(4, results.Count(x => x.DuplicateFileIdentifier.HasValue)); var firstDuplicate = results.First(x => x.CspDunsId.Equals(1)); var firstFileName = string.Format("814_Par_DUP_{0:yyyyMMddHHmmss}_1.txt", DateTime.Now); Assert.AreEqual(firstFileName, firstDuplicate.GenerateFileName("814", "txt")); var lastDuplicate = results.First(x => x.CspDunsId.Equals(4)); var lastFileName = string.Format("814_Par_DUP_{0:yyyyMMddHHmmss}_4.txt", DateTime.Now); Assert.AreEqual(lastFileName, lastDuplicate.GenerateFileName("814", "txt")); var uniqueModel = results.First(x => x.CspDunsId.Equals(5)); var uniqueFileName = string.Format("814_Par_UNIQUE_{0:yyyyMMddHHmmss}.txt", DateTime.Now); Assert.AreEqual(uniqueFileName, uniqueModel.GenerateFileName("814", "txt")); }